Route Optimization API возвращает маршруты для транспортных средств в соответствующем запросе. Отправления назначаются транспортным средствам или могут быть пропущены в зависимости от свойств запроса.
Сообщение OptimizeToursResponse ( REST , gRPC ) имеет два основных свойства верхнего уровня:
-
routes[]— это маршруты для каждого транспортного средства с назначенными ему грузами. КаждыйRouteсодержит метрики, отражающие свойства этого индивидуального маршрута. -
metrics— это агрегированные метрики для всего ответа, по всем транспортным средствам и планам маршрутов. Метрики верхнего уровня содержат те же свойства, что и метрики по маршруту, со значениями, агрегированными по всем маршрутам.
Некоторые свойства не всегда могут быть заполнены в зависимости от результатов оптимизации:
-
skippedShipments[]перечисляет перевозки, которые не выполняются ни одним транспортным средством. Перевозка может быть пропущена, если она не может быть выполнена в рамках указанных ограничений или если стоимость выполнения перевозки превышает стоимость штрафа. Например, если забор или доставка груза имеет очень узкийtimeWindowто транспортному средству может быть невыгодно или невыгодно совершить визит в течение требуемого временного интервала. -
validationErrors[]указывает ошибки, которые делают запрос недействительным или невозможным для решения, когдаsolvingModeзапроса установлен наVALIDATE_ONLY. В обычном режимеDEFAULT_SOLVEошибки проверки будут отображаться в сообщении об ошибке вместо тела ответа. Обратите внимание, что режим решенияVALIDATE_ONLYможет сообщать о нескольких ошибках одновременно, что полезно для быстрой отладки запросов.
Свойства маршрута
Каждая запись routes[] представляет собой сообщение ShipmentRoute ( REST , gRPC ). Каждый ShipmentRoute представляет собой назначение маршрута для конкретного транспортного средства из запроса. Важные свойства ShipmentRoute , связанные с соответствующим ему Vehicle включают:
-
vehicleIndex— это индексVehicleв соответствующем запросе, начинающийся с нуля. Ответы REST пропускают это свойство, если значение равно нулю. -
vehicleStartTime— время, когда транспортное средство должно начать свой маршрут. -
vehicleEndTime— ожидаемое время завершения маршрута транспортного средства.
В ответе routes будут выглядеть так:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Каждый ShipmentRoute включает упорядоченный список visits , которые совершит транспортное средство. Каждый Visit ( REST , gRPC ) представляет собой VisitRequest ( REST , gRPC ) из соответствующего запроса. Важные свойства Visit включают:
-
shipmentIndex— это индекс отправления, отсчитываемый от нуля, к которому относится данное посещение в соответствующем запросе. -
isPickupимеет значение true, когда посещение представляет собой самовывоз, и false, когда посещение представляет собой доставку. Ответы REST пропускают это свойство, когда значение равно false. -
visitRequestIndex— это индексVisitRequestот нуля изShipment.pickupsилиShipment.deliveriesв соответствующем запросе, который представляетVisit. Ответы REST пропускают это свойство, если значение равно нулю. -
startTime— ожидаемое время начала визита. -
loadDemandsсопоставляет тип загрузки с объемом загрузки, требуемым для завершенияVisit. Объемы загрузки отрицательны для визитов доставки, что означает, что груз снимается с транспортного средства.
Пример Visit выглядит так:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Каждый ShipmentRoute включает упорядоченный список transitions , которые представляют собой поездки между visits для данного транспортного средства. Важные свойства сообщения Transition ( REST , gRPC ) включают:
-
startTime— это время, в которое транспортное средство начнет выполнять переход. -
travelDuration— это время, в течение которого транспортное средство должно проехать, чтобы завершить переход. -
travelDistanceMeters— расстояние в метрах, которое транспортному средству необходимо проехать, чтобы завершить переход. -
trafficInfoUnavailableуказывает, доступны ли данные о трафике для перехода. -
waitDurationпредставляет собой время простоя, которое транспортное средство проводит в ожидании, прежде чем сможет начать свой следующийVisit. Это может быть вызваноstart_timeследующегоVisit. -
totalDuration— общая продолжительность перехода, включая время в пути, ожидания, перерыва и задержки. -
vehicleLoadsсопоставляет тип груза с объемом груза, перевозимого транспортным средством во время этого перехода.
Пример Transition выглядит так:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Для получения дополнительной информации о связи между vists и transitions см. разделы Pickup and Delivery Stop Order Optimization и ShipmentRoute reference documentation ( REST , gRPC ). Для получения дополнительной информации о свойствах routePolyline и routeToken сообщения Transition см. разделы Transition Polylines и Route Tokens .
Свойства метрик
Сообщение Metrics ( REST , gRPC ) суммирует все решение. Некоторые важные свойства Metrics включают:
-
totalCost— это общая стоимость, понесенная при завершении маршрутов. Подробнее о стоимости читайте в разделе Параметры модели стоимости . -
usedVehicleCount— общее количество транспортных средств, используемых в решении. Транспортные средства могут иметь пустые маршруты, когда оптимизатор определяет, что их использование не нужно. -
skippedMandatoryShipmentCount— это количество пропущенных поставок, которые являются «обязательными». Обязательная поставка не определяетpenaltyCost, которая взимается, если поставка пропущена. Обязательные поставки все равно можно пропустить, если их выполнение нецелесообразно при указанных ограничениях. Подробнее о расходах читайте в разделе Параметры модели затрат .
Дополнительные метрики сообщаются как сообщения AggregatedMetrics ( REST , gRPC ). Тип сообщения AggregatedMetrics используется для свойства Metrics.aggregatedRouteMetrics и для свойства ShipmentRoute.metrics Metrics.aggregatedRouteMetrics содержит метрики, агрегированные по всем ShipmentRoute в OptimizeToursResponse . Каждое свойство ShipmentRoute.metrics содержит метрики для этого конкретного ShipmentRoute .
Важные свойства AggregatedMetrics включают в себя:
-
performedShipmentCount— количество перевозок, выполненных транспортными средствами по всему маршруту. -
travelDuration— это общее время, которое транспортные средства проводят в пути, выполняя свои маршруты. -
waitDuration— это общее время ожидания транспортных средств при завершении своих маршрутов. -
delayDuration— общее время задержки для транспортных средств. Обычно равно нулю, если в запросе не используютсяTransitionAttributes. -
breakDuration— общее время, которое транспортные средства проводят в перерывах при выполнении своих маршрутов. -
visitDuration— это общее время, которое транспортные средства тратят на выполнение визитов при завершении своих маршрутов. Это фактически сумма всех значенийVisitRequest.durationдляVisitRequests, соответствующихVisits, назначенным соответствующему транспортному средству. -
totalDuration— общая продолжительность, необходимая для завершения маршрутов транспортных средств. -
travelDistanceMeters— общее расстояние, пройденное транспортными средствами по маршрутам. -
maxLoadsсопоставляет типы нагрузки с максимальным объемом груза, перевозимого транспортными средствами в любой точке маршрута.
Пример сообщения Metrics выглядит так:
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
Полный пример
Полный пример ответа на запрос от Construct a Request выглядит так:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}