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
是相应请求中此访问所属的运输的编号(从 0 开始)。- 如果访问为上车点,
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
}
}
}