Временные интервалы определяют время событий на маршруте. К таким событиям могут относиться начало и конец маршрута водителя, запланированное время погрузки и разгрузки, а также продолжительность всего маршрута.
Временные рамки могут способствовать достижению таких целей, как:
- Приоритетной задачей является завершение погрузки и разгрузки в установленные сроки.
- Планируйте маршруты таким образом, чтобы они соответствовали общему рабочему времени.
- Обеспечьте начало и окончание маршрутов транспортными средствами в установленные сроки.
Структура
Как показано на диаграмме, временные окна структурированы следующим образом:
-
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 | endTimeWindows | Указывает время окончания работы транспортного средства по установленному графику. |
В таблице ниже описаны свойства типа сообщения TimeWindow .
| Свойство | Формат | Описание |
|---|---|---|
startTime | Строка (формат RFC3339 UTC "Zulu") | Начало временного окна. |
endTime | Строка (формат RFC3339 UTC "Zulu") | Конец временного окна. |
Примеры
В этом разделе рассматриваются три типа примеров:
- Примеры кода , иллюстрирующие структуру временных окон.
- Пример сценария , демонстрирующий один из способов использования временных окон для достижения бизнес-цели.
- Пример запроса , включающий значения, установленные в примере сценария.
Примеры кода
В следующих разделах представлены примеры кода для различных типов временных окон.
Глобальные временные окна
Приведенный ниже пример кода демонстрирует структуру глобальных временных окон:
{ "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:00ZendTime :2023-01-13T07:15:00Z | Определяет допустимый временной интервал для начала работы транспортного средства (с 7:00 до 7:15) и окончания работы (с 17:00 до 17:15). |
endTimeWindows | startTime :2023-01-13T18:45:00ZendTime :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 . Подробнее о реализации стоимости см. в разделе «Ключевая концепция модели стоимости» . |
Пример кода
В следующем примере показана структура свойств мягких ограничений типа сообщения TimeWindow :
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }