Примечание для рабочей версии
Для простоты в этом руководстве используются REST и JSON. Однако для рабочей среды рекомендуется использовать gRPC и клиентские библиотеки, чтобы повысить производительность. Подробнее о клиентских библиотеках Route Optimization API…
После того как вы отправите запрос, как описано в разделе Как отправить первый запрос, оптимизатор вернет объект OptimizeToursResponse. Этот ответ представляет собой план маршрута, которому должен следовать ваш водитель. В этом руководстве рассказывается, как его читать.
Сводка по плану маршрута
В сценарии с детским садом для собак оптимизатор назначает бернского зенненхунда и чихуахуа в ваш фургон и пропускает немецкую овчарку. Маршрут водителя:
- Начать смену в 7:55 в детском саду.
- Забрать бернского зенненхунда у башни Койт в 8:20.
- Забрать чихуахуа в парке Саут-Сансет-Плейграунд в 8:58.
- Вернитесь в детский сад в 9:24 и подождите до 9:30, когда откроется окно приема.
- Привезите бернского зенненхунда в 9:30.
- Отвезти чихуахуа в 9:35.
- Завершение смены в 9:40.
Стоимость маршрута составляет 147,22 доллара США, включая штраф в размере 100 долларов США за пропуск немецкой овчарки.
Чтобы проверить результаты, сравните свой ответ с полным примером ответа. Результаты могут немного отличаться, поскольку время в пути и расстояние зависят от текущих данных о дорогах.
Полный пример ответа
{ "routes": [ { "vehicleStartTime": "2024-02-13T15:55:04Z", "vehicleEndTime": "2024-02-13T17:40:00Z", "visits": [ { "isPickup": true, "startTime": "2024-02-13T16:20:00Z", "detour": "0s", "shipmentLabel": "Bernese mountain dog", "visitType": "PICKUP_SHIPMENT" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2024-02-13T16:58:12Z", "detour": "2600s", "shipmentLabel": "Chihuahua", "visitType": "PICKUP_SHIPMENT" }, { "startTime": "2024-02-13T17:30:00Z", "detour": "2297s", "shipmentLabel": "Bernese mountain dog", "visitType": "DELIVER_SHIPMENT" }, { "shipmentIndex": 1, "startTime": "2024-02-13T17:35:00Z", "detour": "656s", "shipmentLabel": "Chihuahua", "visitType": "DELIVER_SHIPMENT" } ], "transitions": [ { "travelDuration": "1496s", "travelDistanceMeters": 7082, "waitDuration": "0s", "totalDuration": "1496s", "startTime": "2024-02-13T15:55:04Z" }, { "travelDuration": "1992s", "travelDistanceMeters": 16589, "waitDuration": "0s", "totalDuration": "1992s", "startTime": "2024-02-13T16:25:00Z" }, { "travelDuration": "1252s", "travelDistanceMeters": 7860, "waitDuration": "356s", "totalDuration": "1608s", "startTime": "2024-02-13T17:03:12Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2024-02-13T17:35:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2024-02-13T17:40:00Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "4740s", "waitDuration": "356s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "6296s", "travelDistanceMeters": 31531, "performedShipmentPenaltyCostSum": 2000 }, "routeCosts": { "model.vehicles.cost_per_hour": 47.22 }, "routeTotalCost": 47.22, "vehicleFullness": { "maxFullness": 0.3497777777777778, "activeSpan": 0.3497777777777778 } } ], "skippedShipments": [ { "index": 2, "label": "German shepherd", "penaltyCost": 100 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "4740s", "waitDuration": "356s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "6296s", "travelDistanceMeters": 31531, "performedShipmentPenaltyCostSum": 2000 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2024-02-13T15:55:04Z", "latestVehicleEndTime": "2024-02-13T17:40:00Z", "totalCost": 147.22, "costs": { "model.vehicles.cost_per_hour": 47.22, "model.shipments.penalty_cost": 100 } } }
Структура ответа
OptimizeToursResponse состоит из двух основных компонентов:
routes– план маршрута для каждого транспортного средства в вашем автопарке, включая порядок и время для каждого получения и доставки. У вас один фургон, поэтому у вас один план маршрута.metrics– сводка по всему маршруту, включая общую стоимость, продолжительность и расстояние.
Поскольку оптимизатор пропускает немецкую овчарку, ответ также включает skippedShipments.
В следующих разделах показано, где в ответе найти каждую деталь сводки плана маршрута.
Какое транспортное средство следует по какому маршруту?
Оптимизатор генерирует план маршрута (массив routes), который соответствует порядку vehicles в вашем запросе.
Поле vehicleIndex идентифицирует каждое транспортное средство на основе его позиции, отсчитываемой от нуля. Для вашего фургона это 0. Поля vehicleStartTime и vehicleEndTime указывают водителю, когда начинать и заканчивать смену.
Route Optimization API возвращает временные метки в формате UTC, отмеченные суффиксом Z, независимо от смещения в запросе. Чтобы узнать время в Сан-Франциско, вычтите 8 часов. Для вашего фургона смена длится с 7:55 до 9:40, как показано в следующем примере кода.
{
"routes": [
{
// "vehicleIndex": 0, // Omitted in actual JSON response because it's 0
"vehicleStartTime": "2024-02-13T15:55:04Z",
"vehicleEndTime": "2024-02-13T17:40:00Z",
...
}
]
...
}
В каком порядке нужно забирать и высаживать пассажиров?
Внутри каждого маршрута массив visits содержит все пункты получения и доставки для назначенного транспортного средства в хронологическом порядке.
Значение shipmentIndex каждого посещения – это позиция доставки в запросе, начиная с нуля: 0 – бернский зенненхунд, а 1 – чихуахуа. В поле shipmentLabel указывается ярлык, который вы задали для каждой доставки.
Чтобы отличить посадку от высадки (или доставку от получения), проверьте поля visitType или isPickup:
visitType– явным образом определяет действие посещения.- Самовывоз:
visitType="PICKUP_SHIPMENT" - Доставка:
visitType="DELIVER_SHIPMENT"
- Самовывоз:
isPickup– вспомогательное логическое поле.- Самовывоз:
isPickup=true - Доставка:
isPickup=false(пропущено в JSON)
- Самовывоз:
Чтобы определить точную последовательность событий и ожидаемое время прибытия в каждое место, прочитайте массив visits по порядку. В таблице ниже показано, как действия в плане маршрута зависят от порядка и значений полей shipmentIndex, isPickup или visitType и startTime.
| Серия | На сумму shipmentIndex |
Значение isPickup или visitType |
startTime значение (UTC) |
Действие |
|---|---|---|---|---|
| Первое посещение | 0 (в JSON не указывается) | True или PICKUP_SHIPMENT. |
2024-02-13T16:20:00Z | Забрать бернского зенненхунда в 8:20. |
| Второе посещение | 1 | True или PICKUP_SHIPMENT. |
2024-02-13T16:58:12Z | Забрать чихуахуа в 8:58. |
| Третье посещение | 0 (в JSON не указывается) | False (опущено) или DELIVER_SHIPMENT |
2024-02-13T17:30:00Z | Отвези бернского зенненхунда в детский сад для собак к 9:30. |
| Четвертое посещение | 1 | False (опущено) или DELIVER_SHIPMENT |
2024-02-13T17:35:00Z | Отвезти чихуахуа в детский сад для собак в 9:35. |
В приведенном ниже фрагменте кода показано, как ответ обеспечивает эту последовательность:
{
"routes": [
{
"visits": [
{
// "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
"isPickup": true,
"startTime": "2024-02-13T16:20:00Z",
"shipmentLabel": "Bernese mountain dog",
"visitType": "PICKUP_SHIPMENT"
},
{
"shipmentIndex": 1,
"isPickup": true,
"startTime": "2024-02-13T16:58:12Z",
"shipmentLabel": "Chihuahua",
"visitType": "PICKUP_SHIPMENT"
},
{
// "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
// "isPickup": false, // Omitted in actual JSON response because it's false
"startTime": "2024-02-13T17:30:00Z",
"shipmentLabel": "Bernese mountain dog",
"visitType": "DELIVER_SHIPMENT"
},
{
"shipmentIndex": 1,
// "isPickup": false, // Omitted in actual JSON response because it's false
"startTime": "2024-02-13T17:35:00Z",
"shipmentLabel": "Chihuahua",
"visitType": "DELIVER_SHIPMENT"
}
]
}
]
}
Каждое посещение также имеет visitRequestIndex, который представляет собой позицию с отсчетом от нуля для варианта получения или доставки, выбранного оптимизатором для отправления. У каждой собаки в этом сценарии есть только один вариант посадки и один вариант высадки, поэтому visitRequestIndex всегда равен 0 и в ответе опускается.
Что происходит между посещениями?
Внутри каждого маршрута массив transitions содержит сведения о поездках между посещениями. Хотя visits и transitions – это разные списки, они чередуются во времени следующим образом:
transitions[0](поездка от начала до первого посещения)visits[0](первое посещение)transitions[1](стимулирование повторных посещений)visits[1](второе посещение)...visits[N-1](последнее посещение, где N – общее количество посещений)transitions[N](поездка от последнего посещения до конца)
Вы можете отслеживать хронологию маршрута, просматривая поле startTime в обоих массивах. startTime перехода – это время, когда водитель начинает движение, а startTime посещения – время, когда водитель начинает забирать или высаживать пассажира.
Для каждого перехода указывается ожидаемое время в пути и расстояние между местоположениями.
В таблице ниже показано, как поля transitions и visits сопоставляются с хронологическими действиями на маршруте для сценария с детским садом для собак.
| Серия | Название поля | startTime значение (UTC) |
Сведения | Действие |
|---|---|---|---|---|
| Первый переход | transitions[0] |
2024-02-13T15:55:04Z |
travelDuration: 1496stravelDistanceMeters: 7082 |
Проехать 7 км за 25 минут от детского сада, чтобы забрать бернского зенненхунда. Смена начинается в 7:55. |
| Первое посещение | visits[0] |
2024-02-13T16:20:00Z |
shipmentIndex: 0 (опущено в JSON)isPickup: True |
Забрать бернского зенненхунда. Время: 8:20. Продолжительность: 5 минут. |
| Второй переход | transitions[1] |
2024-02-13T16:25:00Z |
travelDuration: 1992stravelDistanceMeters: 16589 |
Проехать 17 км за 33 минуты от башни Койт, чтобы забрать чихуахуа, начиная с 8:25. |
| Второе посещение | visits[1] |
2024-02-13T16:58:12Z |
shipmentIndex: 1isPickup: True |
Забрать чихуахуа. Начало в 8:58. Продолжительность – 5 минут. |
| Третий переход | transitions[2] |
2024-02-13T17:03:12Z |
travelDuration: 1252 сtravelDistanceMeters: 7860waitDuration: 356 с |
В 9:03 отправляется обратно в детский сад от South Sunset Playground. Проезжает 8 км за 21 минуту. Прибывает в 9:24 и ждет 6 минут, пока не откроется окно высадки. |
| Третье посещение | visits[2] |
2024-02-13T17:30:00Z |
shipmentIndex: 0 (опущено в JSON)isPickup: False (опущено в JSON) |
Отвезите бернского зенненхунда в центр дневного ухода за собаками. Время начала: 9:30. Продолжительность: 5 минут. |
| Четвертый переход | transitions[3] |
2024-02-13T17:35:00Z |
travelDuration: 0stravelDistanceMeters: 0 (опущено в JSON) |
Не садитесь за руль. Готово. Напоминание "Отвезти чихуахуа в детский сад в 9:35" установлено. |
| Четвертое посещение | visits[3] |
2024-02-13T17:35:00Z |
shipmentIndex: 1isPickup: False (опущено в JSON) |
Оставить чихуахуа в центре дневного ухода за собаками. Время начала: 9:35. Продолжительность: 5 минут. |
| Пятый переход | transitions[4] |
2024-02-13T17:40:00Z |
travelDuration: 0stravelDistanceMeters: 0 (опущено в JSON) |
Не садитесь за руль. Водитель заканчивает смену в 9:40. |
В приведенном ниже примере кода показано, как ответ предоставляет эту последовательность для transitions[0] и transitions[1]:
{
"routes": [
{
"transitions": [
{
"travelDuration": "1496s",
"travelDistanceMeters": 7082,
"waitDuration": "0s",
"totalDuration": "1496s",
"startTime": "2024-02-13T15:55:04Z"
},
{
"travelDuration": "1992s",
"travelDistanceMeters": 16589,
"waitDuration": "0s",
"totalDuration": "1992s",
"startTime": "2024-02-13T16:25:00Z"
},
...
]
}
]
}
Сколько стоит проезд по маршруту?
В ответе можно посмотреть несколько полей в зависимости от того, нужна ли вам стоимость для конкретного транспортного средства или общая стоимость для всего автопарка.
В таблице ниже перечислены все способы получения информации о стоимости в ответе.
| Родитель | Параметр | Область действия | Описание |
|---|---|---|---|
ShipmentRoute |
routeCosts |
Для каждого маршрута | Разбивка конкретных компонентов стоимости (например, стоимости за час) для этого конкретного маршрута. |
routeTotalCost |
Для каждого маршрута | Общая стоимость, рассчитанная для этого маршрута. | |
Metrics |
totalCost |
Всего (все маршруты) | Общая стоимость всех маршрутов в решении. |
costs |
Всего (все маршруты) | Разбивка агрегированных компонентов стоимости по всем маршрутам в решении. |
Стоимость, указанная в полях routeCosts и costs, отражает ограничения стоимости, которые вы задали в запросе. Дополнительную информацию можно найти в статье Основные понятия: модель затрат.
В сценарии с передержкой собак, поскольку одна доставка пропущена, стоимость маршрута и общая стоимость различаются. Стоимость маршрута включает только расходы, связанные с этим конкретным маршрутом (заработная плата водителя), а общая стоимость также включает штраф за пропущенную доставку. В приведенном ниже примере кода показано, где найти эти значения в ответе.
{
"routes": [
{
"vehicleStartTime": "2024-02-13T15:55:04Z",
"vehicleEndTime": "2024-02-13T17:40:00Z",
...
"routeCosts": {
"model.vehicles.cost_per_hour": 47.22
},
"routeTotalCost": 47.22
}
],
"metrics": {
"totalCost": 147.22,
"costs": {
"model.shipments.penalty_cost": 100,
"model.vehicles.cost_per_hour": 47.22
},
...
}
}
Согласно плану маршрута, водитель управляет фургоном с 7:55 до 9:40, то есть примерно 1 час 45 минут (6296 секунд). При заданной вами ставке 27 долларов США в час стоимость маршрута составляет 47, 22 доллара США. Поскольку оптимизатор пропустил доставку немецкой овчарки, он добавляет штрафную стоимость в размере 100 долларов США, в результате чего общая совокупная стоимость составляет 147,22 доллара США.
Почему отправка была пропущена?
Оптимизатор перечисляет все невыполненные доставки в массиве skippedShipments. Причина пропуска зависит от того, задали ли вы penaltyCost:
- Обязательные перевозки (без
penaltyCost). Оптимизатор никогда не пропускает их, даже если они дорогостоящие. Пропуск возможен, только если отправление не удается включить ни в один маршрут, например из-за того, что его временное окно конфликтует с другими отправлениями. - Необязательные перевозки (с
penaltyCost). Оптимизатор может пропускать их, если стоимость перевозки превышает штраф. Вы можете задать разные штрафы, чтобы приоритет одних поставок был выше, чем других.
В этом сценарии время, когда нужно забрать немецкую овчарку, конфликтует со временем, когда нужно забрать бернского зенненхунда. Башня Койт и Лэндс-Энд находятся в 25 минутах езды друг от друга, поэтому водитель не сможет забрать обоих пассажиров в течение 20-минутного окна. Оптимизатор должен пропустить один из них. Поскольку у немецкой овчарки штраф меньше (100 долларов США против 1000 долларов США для обычного клиента), оптимизатор пропускает ее и налагает штраф в размере 100 долларов США.
В приведенном ниже фрагменте кода показан объект skippedShipments в ответе:
{
...
"skippedShipments": [
{
"index": 2,
"label": "German shepherd",
"penaltyCost": 100
}
],
...
}
Объект skippedShipments в ответе содержит следующие поля:
index– индекс отправления в запросе, начиная с нуля (2 для третьего отправления).label– ярлык, указанный в запросе ("немецкая овчарка").penaltyCost– штраф, указанный в запросе, который API добавляет к общей стоимости.
Чтобы оптимизатор не пропускал отправку, ослабьте ограничение, вызывающее конфликт. Например, попросите владельца немецкой овчарки расширить временной интервал для передачи собаки, а затем обновите timeWindows для этой передачи в своем запросе.
Поля ответа в примере
В таблице ниже описаны все поля ответа, возвращаемые в OptimizeToursResponse в примере сценария. Для понимания плана маршрута не обязательно использовать все поля, но вы можете проанализировать их, чтобы определить, как настроить OptimizeToursRequest в соответствии с потребностями вашего бизнеса. Дополнительную информацию можно найти в разделе Жизненный цикл плана маршрута.
Вы можете отфильтровать содержимое по родительскому элементу или с помощью текстового поиска.
| Родитель | Параметр | Тип ресурса | Описание |
|---|---|---|---|
OptimizeToursResponse |
routes |
Массив объектов (ShipmentRoute) |
Он содержит список маршрутов, рассчитанных для каждого транспортного средства (по одному на транспортное средство). Для этого сценария детского сада для собак он содержит подробный план маршрута для вашего единственного фургона. |
metrics |
Объект (Metrics) |
Здесь содержатся общие показатели для решения, агрегированные по всем маршрутам. Для этого сценария детского сада для собак это сводка затрат и продолжительности работы за день. | |
skippedShipments |
Массив объектов (SkippedShipment) |
Содержит список отправлений, которые были пропущены в решении. В этом случае третья собака (немецкая овчарка) пропускается. | |
ShipmentRoute |
vehicleStartTime |
Временная метка | Это время, когда транспортное средство начинает движение по маршруту. В нашем сценарии с детским садом для собак водитель начинает движение в 7:55. |
vehicleEndTime |
Временная метка | Время, когда транспортное средство завершает маршрут. В нашем примере с детским садом для собак водитель заканчивает поездку в 9:40. | |
visits |
Массив объектов (Visit) |
Это упорядоченный список пунктов получения и доставки на маршруте. Для этого сценария с передержкой собак это последовательность забора и высадки двух собак. | |
transitions |
Массив объектов (Transition) |
Это упорядоченный список расстояний, времени в пути и времени ожидания между посещениями. Для этого сценария с детским садом для собак здесь подробно описаны расстояние и время в пути между башней Койт, парком South Sunset Playground и детским садом. | |
metrics |
Объект (AggregatedMetrics) |
Это показатели, относящиеся к этому единственному маршруту. Для этого сценария с детским садом для собак это статистика для этого конкретного фургона. Эти показатели рассчитываются на основе расходов, указанных в запросе. Подробную информацию вы найдете в статье Основные понятия, связанные с моделями затрат. | |
routeCosts |
Объект (карта) | Это разбивка конкретных расходов по этому маршруту. Для этого сценария с детским садом для собак это показывает стоимость, рассчитанную на основе заработной платы водителя в размере 27 долларов в час. | |
routeTotalCost |
Число | Это общая стоимость для конкретного маршрута. В этом сценарии общая стоимость маршрута фургона составляет 47.22. |
|
vehicleFullness |
Объект (VehicleFullness) |
Это разбивка того, насколько близко транспортное средство подходит к своим эксплуатационным ограничениям, таким как время, расстояние и нагрузка. В сценарии с детским садом для собак водителя ограничивает только время начала и окончания смены, поэтому оптимизатор вычисляет vehicleFullness как долю фактической продолжительности маршрута и максимального времени, доступного для смены водителя. |
|
Visit |
shipmentIndex |
Целое число | Это индекс отправления в исходном запросе, отсчитываемый от нуля. В нашем примере с детским садом для собак 0 соответствует бернскому зенненхунду, а 1 – чихуахуа. |
isPickup |
Логическое значение | Это поле имеет значение true, если посещение является самовывозом. В нашем примере с передержкой собак это значение будет true, когда собаку забирают, и false (или отсутствует), когда собаку оставляют. | |
startTime |
Временная метка | Это расчетное время начала посещения. Для этого сценария с детским садом для собак это когда водитель стучит в дверь. | |
detour |
длительность; | Это дополнительное время, которое оптимизатор добавляет к времени доставки конкретного груза. Отклонение – это разница между фактическим планом маршрута и идеальной прямой поездкой, если у водителя нет других поставок или задач. В нашем примере с передержкой собак первый визит – забрать бернского зенненхунда – имеет отклонение 0, потому что водитель едет прямо из центра передержки к этому месту. Для чихуахуа отклонение от маршрута составляет 43 минуты, потому что водитель сначала забирает бернского зенненхунда (и тратит 5 минут на погрузку). |
|
shipmentLabel |
Строка | Это ярлык из запроса для каждого отправления. Для этого сценария с детским садом для собак ярлыками являются «чихуахуа» или «бернский зенненхунд». | |
visitType |
Строка (перечисление) | Указывает тип посещения: PICKUP_SHIPMENT для самовывоза или DELIVER_SHIPMENT для доставки. В данном случае это PICKUP_SHIPMENT или DELIVER_SHIPMENT. |
|
Transition |
travelDuration |
длительность; | Это время, потраченное на перемещение между посещениями. Например, в этом сценарии с детским садом для собак водитель тратит примерно 25 минут на поездку от детского сада до башни Койт, чтобы забрать бернского зенненхунда. |
travelDistanceMeters |
Целое число | Расстояние в метрах, пройденное во время этого перехода. Например, в этом сценарии с детским садом для собак водитель проезжает 7 километров от детского сада до башни Койт, чтобы забрать бернского зенненхунда. | |
waitDuration |
длительность; | Это время ожидания перед следующим получением или доставкой. В нашем примере для третьего перехода это значение равно 6 минутам (356 секундам), поскольку водитель прибывает в детский сад до открытия окна высадки в 9:30. Для других переходов это значение равно 0. | |
totalDuration |
длительность; | Это общая продолжительность перехода, включая вождение и ожидание. Например, водитель тратит 25 минут (25 минут за рулем и 0 минут ожидания) на первый переход и 27 минут (21 минута за рулем и 6 минут ожидания) на третий переход обратно в детский сад. | |
startTime |
Временная метка | Время начала поездки. Оно совпадает со временем завершения предыдущего посещения (или, для первого перехода, со временем начала работы транспортного средства). В сценарии с детским садом для собак первый переход начинается в 7:55, когда водитель уезжает из детского сада, а второй переход начинается в 8:25, когда водитель уезжает из башни Койт. | |
Metrics |
aggregatedRouteMetrics |
Объект (AggregatedMetrics) |
Это сумма показателей по всем маршрутам. Для этого сценария с детским садом для собак это общие показатели для вашего фургона. |
usedVehicleCount |
Целое число | Это количество транспортных средств, используемых в решении. Для этого сценария с детским садом для собак вы используете только один фургон. | |
earliestVehicleStartTime |
Временная метка | Это самое раннее время начала среди всех транспортных средств. В нашем сценарии с детским садом для собак маршрут фургона начинается в 7:55. | |
latestVehicleEndTime |
Временная метка | Это самое позднее время окончания среди всех транспортных средств. В нашем примере с детским садом для собак маршрут фургона заканчивается в 9:40. | |
totalCost |
Число | Это общая стоимость решения. Для этого сценария с детским садом для собак весь план маршрута стоит 147.22 за день (включая заработную плату водителя 47.22 и штраф за пропущенную доставку 100). |
|
costs |
Объект (карта) | Это разбивка общей стоимости по категориям. Для этого сценария с детским садом для собак оптимизатор рассчитал стоимость маршрута на основе стоимости часа и штрафа за пропущенную немецкую овчарку. | |
AggregatedMetrics |
performedShipmentCount |
Целое число | Количество отправлений, для которых успешно построен маршрут. В этом сценарии с детским садом для собак водитель перевозит двух собак. |
travelDuration |
длительность; | Это общее время, проведенное в пути. В этом сценарии с детским садом для собак водитель едет 79 минут. | |
waitDuration |
длительность; | Это общее время ожидания. В нашем примере водитель ждет открытия центра 6 минут (356 секунд). | |
delayDuration |
длительность; | Это дополнительное время, которое вы определяете с помощью атрибутов перехода, например время, зарезервированное для парковки. В сценарии с передержкой собак вы не определили атрибуты перехода в запросе, поэтому это значение равно нулю. | |
breakDuration |
длительность; | Это общее время, потраченное на перерывы. В этом сценарии с передержкой собак перерывов нет. | |
visitDuration |
длительность; | Это общее время, потраченное на оказание услуг во время посещений. В нашем примере с передержкой собак это 20 минут (5 минут на посещение, умноженные на 4 посещения). | |
totalDuration |
длительность; | Это сумма всех компонентов продолжительности. Для этого сценария с передержкой собак общая продолжительность составляет 105 минут (6296 секунд). | |
travelDistanceMeters |
Целое число | Это общее расстояние в метрах. В этом сценарии водитель проезжает в общей сложности 31, 5 км. | |
performedShipmentPenaltyCostSum |
Двойной трекер | Это сумма штрафов за все выполненные перевозки. В нашем случае это 2000, потому что водитель забрал бернского зенненхунда и чихуахуа (штраф за каждую собаку – 1000). |
|
VehicleFullness |
maxFullness |
Число | Это самый высокий коэффициент использования среди всех полей VehicleFullness. Для этого сценария детского сада для собак это значение равно 0,35, поскольку водитель управляет фургоном только 105 минут за всю утреннюю смену, которую вы определили в запросе как 5 часов. |
activeSpan |
Число | Это отношение общей продолжительности смены водителя к часам работы плана маршрута. Чем меньше число, тем меньше времени водитель проводит за рулем в течение рабочего дня. Для нашего сценария с детским садом для собак это значение равно 0,35, поскольку водитель управляет фургоном в течение 105 минут во время 5-часовой смены. | |
SkippedShipment |
index |
Целое число | Это индекс отправления в исходном запросе, отсчитываемый от нуля. В этом сценарии 2 представляет немецкую овчарку. |
label |
Строка | Это ярлык, который вы указали для отправления в запросе. | |
penaltyCost |
Число | Это штраф, который вы платите, когда оптимизатор пропускает эту отправку. Оно соответствует значению penaltyCost, указанному в запросе. |