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
дляVisitRequest
s, соответствующихVisit
s, назначенным соответствующему транспортному средству. -
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
}
}
}