InjectedSolutionConstraint

Решение, добавленное в запрос, включая информацию о том, какие посещения следует ограничить и как их следует ограничить.

JSON-представление
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Поля
routes[]

object ( ShipmentRoute )

Пути введения раствора. Некоторые маршруты могут быть исключены из исходного решения. Маршруты и пропущенные поставки должны удовлетворять основным предположениям достоверности, перечисленным для injectedFirstSolutionRoutes .

skippedShipments[]

object ( SkippedShipment )

Пропущенные поставки раствора для инъекций. Некоторые из них могут быть исключены из исходного решения. См. поле routes .

constraintRelaxations[]

object ( ConstraintRelaxation )

Для нуля или более групп транспортных средств указывает, когда и насколько ослаблять ограничения. Если это поле пусто, все непустые маршруты транспортных средств полностью ограничены.

ОграничениеРелаксация

Для группы транспортных средств указывается, при каком пороге(ах) ограничения на посещение будут смягчены и до какого уровня. Отгрузки, перечисленные в поле skipped_shipment , могут быть пропущены; т. е. они не могут быть выполнены.

JSON-представление
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Поля
relaxations[]

object ( Relaxation )

Все ослабления ограничений на посещение, которые будут применяться к посещениям маршрутов с транспортными средствами в vehicleIndices .

vehicleIndices[]

integer

Указывает индексы транспортных средств, к которым применяются relaxations ограничений на посещение. Если оно пустое, оно считается значением по умолчанию, и relaxations применяются ко всем транспортным средствам, которые не указаны в других constraintRelaxations . Может быть не более одного значения по умолчанию, т. е. не более одного поля ослабления ограничений может быть пустым vehicleIndices . Индекс транспортного средства может быть указан только один раз, даже в пределах нескольких constraintRelaxations .

Индекс транспортного средства сопоставляется так же, как ShipmentRoute.vehicle_index , если interpretInjectedSolutionsUsingLabels имеет значение true (см. комментарий fields ).

Релаксация

Если relaxations пусто, время начала и последовательность всех посещений routes полностью ограничиваются, и никакие новые посещения не могут быть вставлены или добавлены к этим маршрутам. Кроме того, время начала и окончания routes транспортного средства полностью ограничено, если только транспортное средство не пусто (т. е. не имеет посещений и для usedIfRouteIsEmpty в модели установлено значение false).

relaxations(i).level определяет уровень ослабления ограничений, применяемый к посещению #j, который удовлетворяет:

  • route.visits(j).start_time >= relaxations(i).threshold_time И
  • j + 1 >= relaxations(i).threshold_visit_count

Аналогично, запуск транспортного средства расслабляется до relaxations(i).level если он удовлетворяет:

  • vehicleStartTime >= relaxations(i).threshold_time И
  • relaxations(i).threshold_visit_count == 0 , и конец транспортного средства расслабляется до relaxations(i).level если он удовлетворяет:
  • vehicleEndTime >= relaxations(i).threshold_time И
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Чтобы применить уровень релаксации, если посещение соответствует thresholdVisitCount ИЛИ thresholdTime добавьте два relaxations с одинаковым level : одно с установленным только thresholdVisitCount , а другое с установленным только thresholdTime . Если посещение удовлетворяет условиям многократного relaxations , применяется наиболее расслабленный уровень. В результате от начала транспортного средства до посещения маршрута до конца транспортного средства уровень релаксации становится более расслабленным: т.е. уровень релаксации не снижается по мере прохождения маршрута.

Время и последовательность посещений маршрута, которые не удовлетворяют пороговым условиям каких-либо relaxations , полностью ограничены, и никакие посещения не могут быть включены в эти последовательности. Также, если начало или конец транспортного средства не удовлетворяет условиям какого-либо расслабления, время фиксируется, если только транспортное средство не пустое.

JSON-представление
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Поля
level

enum ( Level )

Уровень ослабления ограничений, который применяется, когда выполняются условия в thresholdTime или после него И хотя бы thresholdVisitCount .

thresholdTime

string ( Timestamp format)

Время, в течение которого или после которого может быть применен level релаксации.

Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: "2014-10-02T15:01:23Z" и "2014-10-02T15:01:23.045123456Z" .

thresholdVisitCount

integer

Количество посещений, во время или после которого может быть применен level релаксации. Если thresholdVisitCount равен 0 (или не установлен), level можно применять непосредственно при запуске транспортного средства.

Если это route.visits_size() + 1 , level можно применить только к концу транспортного средства. Если оно больше, чем route.visits_size() + 1 , level вообще не применяется к этому маршруту.

Уровень

Выражает различные уровни ослабления ограничений, которые применяются к посещению и после него, когда оно удовлетворяет пороговым условиям.

Ниже перечислено в порядке возрастания релаксации.

Перечисления
LEVEL_UNSPECIFIED

Неявный уровень ослабления по умолчанию: никакие ограничения не ослабляются, т. е. все посещения полностью ограничены.

Это значение не должно быть явно использовано в level .

RELAX_VISIT_TIMES_AFTER_THRESHOLD Время начала посещений и время начала/окончания посещения транспортных средств будут смягчены, но каждое посещение остается привязанным к одному и тому же транспортному средству, и необходимо соблюдать последовательность посещений: ни одно посещение не может быть вставлено между ними или перед ними.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD То же, что и RELAX_VISIT_TIMES_AFTER_THRESHOLD , но последовательность посещений также смягчена: посетители остаются просто привязанными к своему автомобилю.
RELAX_ALL_AFTER_THRESHOLD То же, что RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , но транспортное средство также расслаблено: посещения полностью бесплатны в пороговое время или после него и потенциально могут стать невыполненными.