Временные окна определяют время событий на маршруте. Эти события могут включать начало и конец маршрута водителя, запланированное время забора и доставки, а также продолжительность всего маршрута.
Временные окна могут поддерживать такие цели, как:
- Отдавайте приоритет выполнению заказов по забору и доставке в указанные сроки.
- Планируйте маршруты так, чтобы они выполнялись в течение всего рабочего времени.
- Обеспечить, чтобы транспортные средства начинали и заканчивали маршруты в указанные временные рамки.
Структура
Как показано на диаграмме, временные окна структурированы следующим образом:
-
globalStartTime
иglobalEndTime
являются свойствамиShipmentModel
-
timeWindows
— это свойства:-
pickups
внутриShipment
. -
deliveries
внутриShipment
.
-
-
startTimeWindows
иendTimeWindows
являются свойствамиVehicle
.
Контрольный список основных вещей
Характеристики
В следующей таблице описаны глобальные свойства временного окна.
Свойство | Формат | Описание |
---|---|---|
globalStartTime | Timestamp | Самое раннее время для любого события. |
globalEndTime | Timestamp | Самое позднее время для любого события. |
В следующей таблице описываются свойства временного окна в поставках и транспортных средствах.
Родитель | Свойство | Формат | Описание |
---|---|---|---|
Shipment.pickups | timeWindows | Массив типов сообщений TimeWindow . | Указывает временные интервалы для забора груза. |
Shipment.deliveries | timeWindows | Указывает временные интервалы для доставки груза. | |
Vehicle | startTimeWindows | Указывает время начала рабочего графика транспортного средства. | |
endTimeWindows | Указывает время окончания рабочего графика транспортного средства. |
В следующей таблице описаны свойства типа сообщения TimeWindow
.
Свойство | Формат | Описание |
---|---|---|
startTime | Строка (формат RFC3339 UTC «Зулу») | Начало временного окна. |
endTime | Строка (формат RFC3339 UTC «Зулу») | Конец временного окна. |
Примеры
В этом разделе рассматриваются три типа примеров:
- Примеры кода , иллюстрирующие структуру временных окон.
- Пример сценария , демонстрирующий один из способов использования временных окон для достижения бизнес-цели.
- Пример запроса , включающий значения, заданные в примере сценария.
Примеры кода
В следующих разделах показаны примеры кода различных типов временных окон.
Глобальные временные окна
Следующий пример кода показывает структуру глобальных временных окон:
{ "model": { "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ", "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ", "shipments": [ ... ], "vehicles": [ ... ] } }
Временные окна для забора и доставки
В следующем примере кода показана структура временных окон при заборе и доставке груза:
{ "model": { "shipments": [ { "pickups": [ { "timeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ], "deliveries": [ { "timeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ] } ], "vehicles": [ ... ] } }
Временные окна транспортного средства
Следующий пример кода показывает структуру временных окон транспортного средства:
{ "model": { "shipments": [ ... ], "vehicles": [ { "startTimeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ], "endTimeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ] } }
Пример сценария
В этом разделе рассматривается сценарий бизнеса детсада для собак. В примере оптимизируются маршруты для забора и привоза собак из двух разных домов, при этом у владельцев одинаковые временные интервалы для забора и привоза собак. Оптимизатор должен учитывать часы работы детского сада, конкретные временные интервалы для забора и привоза собак для клиентов и рабочее время водителя.
Для этого примера значения свойств в запросе следующие:
Родитель | Свойство | Ценить | Сценарий |
---|---|---|---|
ShipmentModel | globalStartTime | 2023-01-13T07:00:00Z | Время работы вашего питомника для собак. До этого времени самовывоз и доставка невозможны. |
ShipmentModel | globalEndTime | 2023-01-13T19:00:00Z | Это время закрытия вашего собачьего детсада. Все заборы и доставки должны быть завершены к этому времени. |
Shipment.pickups | timeWindows | startTime :2023-01-13T07:30:00Z | Определяет приемлемое время для забора собаки из дома клиента. В этом примере вы указали обоим клиентам время, когда их можно забрать с 7:30 до 9:00. |
endTime :2023-01-13T09:00:00Z | |||
Shipment.deliveries | timeWindows | startTime :2023-01-13T17:00:00Z | Определяет приемлемое время для приведения собаки к дому клиента. В этом примере вы сообщили обоим клиентам, что их собаки будут привезены с 17:00 до 18:30. |
endTime :2023-01-13T18:30:00Z | |||
Vehicle | startTimeWindows | startTime :2023-01-13T07:00:00Z endTime :2023-01-13T07:15:00Z | Определяет приемлемое окно для начала работы транспортного средства (с 7:00 до 7:15) и окончания работы (с 17:00 до 17:15). |
endTimeWindows | startTime :2023-01-13T18:45:00Z endTime :2023-01-13T19:00:00Z |
На следующей диаграмме показаны временные окна, влияющие на этот маршрут.
В этом сценарии, как показано на диаграмме, временные окна работают следующим образом:
- Глобальное временное окно представляет собой часы работы собачьего детсада, и все остальные временные окна должны попадать в это временное окно.
- Для самовывоза и доставки действуют свои
timeWindows
в начале и конце дня соответственно. -
startTimeWindows
транспортного средства задает водителю транспортного средства временные рамки, в которые он должен начать работу, аendTimeWindows
задает временные рамки, в которые он должен закончить свой день. - Время начала первого
startTimeWindow
и время окончания последнегоendTimeWindow
определяют часы работы транспортного средства, которые в данном случае совпадают с глобальным временным окном.
Запросить пример
В следующем примере показана структура запроса optimizeTours
, включающая значения временных окон примера сценария.
{ "model": { "globalStartTime": "2023-01-13T07:00:00Z", "globalEndTime": "2023-01-13T19:00:00Z", "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 }, "timeWindows": [ { "startTime": "2023-01-13T07:30:00Z", "endTime": "2023-01-13T09:00:00Z" } ] } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "timeWindows": [ { "startTime": "2023-01-13T17:00:00Z", "endTime": "2023-01-13T18:30:00Z" } ] } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 }, "timeWindows": [ { "startTime": "2023-01-13T07:30:00Z", "endTime": "2023-01-13T09:00:00Z" } ] } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "timeWindows": [ { "startTime": "2023-01-13T17:00:00Z", "endTime": "2023-01-13T18:30:00Z" } ] } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27, "startTimeWindows": [ { "startTime": "2023-01-13T07:00:00Z", "endTime": "2023-01-13T07:15:00Z" } ], "endTimeWindows": [ { "startTime": "2023-01-13T18:45:00Z", "endTime": "2023-01-13T19:00:00Z" } ] } ] } }
Мягкие временные окна
Временные окна можно использовать в качестве мягких ограничений, определяя softStartTime
и softEndTime
в сообщении типа TimeWindow
. Это позволяет оптимизатору отклоняться от заданного временного окна с заданной стоимостью, отдавая приоритет общей оптимизации над строгим соблюдением временных рамок, когда это целесообразно.
Мягкие временные окна имеют следующие ограничения по использованию:
- Их нельзя применить к
globalStartTime
иglobalEndTime
поскольку они не используют тип сообщенийTimeWindow
. - Они применимы только в том случае, если в списке есть один
TimeWindow
.
Характеристики
В следующей таблице описываются свойства мягких ограничений для временных окон.
Имя объекта недвижимости | Формат | Описание недвижимости |
---|---|---|
softStartTime | Метка времени | Определяет начало «мягкого» временного окна. Если событие происходит до этого времени, взимается плата. |
softEndTime | Метка времени | Указывает окончание «мягкого» временного окна. Если событие происходит после этого времени, взимается плата. |
costPerHourBeforeSoftStartTime | число | Стоимость за час, возникающая при запуске события до softStartTime . Это свойство обязательно при использовании softStartTime . Подробнее о реализации затрат см. в разделе «Ключевое понятие модели затрат» . |
costPerHourAfterSoftEndTime | число | Стоимость за час, возникающая при завершении события после softEndTime . Это свойство обязательно при использовании softEndTime . Подробнее о реализации затрат см. в разделе «Ключевое понятие модели Cost» . |
Пример кода
В следующем примере показана структура свойств мягкого ограничения типа сообщения TimeWindow
:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }