Решение, внедренное в запрос, включает информацию о том, какие посещения должны быть ограничены и как именно это должно быть сделано.
| JSON-представление |
|---|
{ "routes": [ { object ( |
| Поля | |
|---|---|
routes[] | Маршруты решения для инъекции. Некоторые маршруты могут быть исключены из исходного решения. Маршруты и пропущенные поставки должны соответствовать основным предположениям о валидности, перечисленным для |
skippedShipments[] | Пропущенные поставки раствора для инъекций. Некоторые партии могли быть исключены из исходного раствора. См. поле |
constraintRelaxations[] | Для нуля или более групп транспортных средств определяет, когда и насколько ослаблять ограничения. Если это поле пусто, все непустые маршруты транспортных средств полностью ограничены. |
ОграничениеРелаксация
Для группы транспортных средств указывает, при каких пороговых значениях будут смягчены ограничения на посещения и до какого уровня. Перевозки, указанные в поле skipped_shipment , могут быть пропущены, т.е. не могут быть выполнены.
| JSON-представление |
|---|
{
"relaxations": [
{
object ( |
| Поля | |
|---|---|
relaxations[] | Все смягчения ограничений посещений, которые будут применяться к посещениям по маршрутам с транспортными средствами, указанными в |
vehicleIndices[] | Указывает индексы транспортных средств, к которым применяются Индекс транспортного средства сопоставляется так же, как |
Релаксация
Если 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 | Время, в течение которого или после которого может быть применен Использует RFC 3339, согласно которому сгенерированный вывод всегда будет нормализован по оси Z и содержать 0, 3, 6 или 9 знаков после запятой. Также допускаются смещения, отличные от «Z». Примеры: |
thresholdVisitCount | Количество посещений, во время или после которых может быть применен Если значение равно |
Уровень
Выражает различные уровни релаксации ограничений, которые применяются для посещения и те, которые следуют за ним, когда оно удовлетворяет пороговым условиям.
Нижеприведенный перечень дан в порядке возрастания релаксации.
| Перечисления | |
|---|---|
LEVEL_UNSPECIFIED | Неявный уровень релаксации по умолчанию: никакие ограничения не ослаблены, т. е. все посещения полностью ограничены. Это значение не должно явно использоваться на |
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 , но транспортное средство также расслаблено: посещения полностью бесплатны в или после порогового времени и потенциально могут стать невыполненными. |