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 релаксации.

Использует RFC 3339, согласно которому сгенерированный вывод всегда будет нормализован по оси Z и содержать 0, 3, 6 или 9 знаков после запятой. Также допускаются смещения, отличные от «Z». Примеры: "2014-10-02T15:01:23Z" , "2014-10-02T15:01:23.045123456Z" или "2014-10-02T15:01:23+05:30" .

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 , но транспортное средство также расслаблено: посещения полностью бесплатны в или после порогового времени и потенциально могут стать невыполненными.