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
是此次造訪所屬貨運的索引 (從零開始計算) 傳入要求中 的 Cookie。- 如果造訪為上車地點,則
isPickup
為 true,如果造訪為 false,則傳回 false 廣告放送。當值為 false 時,REST 回應會省略這個屬性。 visitRequestIndex
是Visit
所代表的對應要求中,Shipment.pickups
或Shipment.deliveries
的VisitRequest
的零基索引。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
}
}
}