Примечание для рабочей версии
Для простоты в этом руководстве используются 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, указанному в запросе. |