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,则为 false 。当值为 false 时,REST 响应会忽略此属性。 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
之间的关系如
取货和递送停止订单优化,以及
ShipmentRoute
参考文档(REST、gRPC)。
指标属性
Metrics
消息(REST、gRPC)总结了整个解决方案。
一些重要的 Metrics
属性包括:
totalCost
是完成路线所产生的总费用。了解详情 费用模型参数中的费用。usedVehicleCount
是该解决方案中使用的车辆总数。 如果优化器确定车辆的使用,路线可能为空 没有必要。skippedMandatoryShipmentCount
是系统跳过的 “必需”强制发货未指定penaltyCost
, 所产生的费用。强制邮寄商品 如果其性能在指定限制条件下不可行,则会跳过。 如需详细了解费用,请参阅费用模型参数。
其他指标会以 AggregatedMetrics
消息 (REST、
gRPC)。AggregatedMetrics
消息类型用于
Metrics.aggregatedRouteMetrics
属性,以及用于 ShipmentRoute.metrics
的属性
媒体资源“Metrics.aggregatedRouteMetrics
”包含针对所有媒体资源的汇总指标
OptimizeToursResponse
中的 ShipmentRoute
。每ShipmentRoute.metrics
属性包含该特定 ShipmentRoute
的指标。
重要的 AggregatedMetrics
属性包括:
performedShipmentCount
是车辆完成的装运次数 全程覆盖整条航线travelDuration
是车辆在这段时间内行驶的总时间 完成路线waitDuration
是车辆等待任务的总时间 和路线。delayDuration
是车辆的总延迟时间。这通常是 零,除非在请求中使用TransitionAttributes
。breakDuration
:车辆在休息期间花费的总时间 完成路线visitDuration
是以下时段的车辆在上门服务期间的 完成路线这实际上是 与Visit
对应的VisitRequest
的VisitRequest.duration
值 分配给相应车辆。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
}
}
}
完整示例
构建请求中请求的完整响应示例如下所示: 例如:
{
"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
}
}
}