OptimizeToursRequest
訊息 (REST、gRPC) 包含多個與費用相關的屬性。這些費用參數總計代表要求的費用模式。費用模型會擷取要求的許多高階最佳化目標,例如:
- 優先採用速度更快的
Vehicle
路線,而非短路線或其他路線 - 判斷交付
Shipment
的費用是否值得Shipment
的完成價值 - 只在這段時間內執行取貨和配送作業時,才符合成本效益
查看費用範例
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
Vehicle
項費用屬性
Vehicle
訊息 (REST、gRPC) 有多個費用屬性:
Vehicle.cost_per_hour
:代表車輛每小時的營運費用,包括大眾運輸、等待時間、造訪和休息時間。Vehicle.cost_per_kilometer
:代表車輛行經的每公里費用,Vehicle.cost_per_traveled_hour
:代表僅限在運輸途期間營運的車輛費用,但不包括等候時間、拜訪和休息時間。
這些成本參數可讓最佳化器進行時間與旅行距離的取捨。最佳化路徑產生的費用會在回應訊息中顯示為 metrics.costs
:
隨著 costPerHour
增加,最佳化工具會嘗試尋找「更快」路徑可能不是「最短」路徑。在本例中,最快路線的行駛時間最短,因此變更費用參數的效果微乎其微。
Shipment
項費用屬性
Shipment
訊息 (REST、gRPC) 也有多個費用參數:
Shipment.penalty_cost
代表「略過」運送作業產生的費用。Shipment.VisitRequest.cost
代表特定自取或外送服務的費用,主要用來讓單件出貨或運送方式之間的成本取捨。
Shipment
費用參數使用的無維度單位與 Vehicle
費用參數相同。完成 Shipment
所產生的費用超過罰款,Shipment
不會納入任何 Vehicle
的路徑中,而是顯示於回應訊息的 skipped_shipments
清單中。
ShipmentModel
項費用屬性
ShipmentModel
訊息 (REST、gRPC) 包含單一費用屬性 globalDurationCostPerHour
。這筆費用是根據所有車輛完成 ShipmentRoute
所需的總時間計算而得。增加 globalDurationCostPerHour
會優先處理所有出貨作業。
路線最佳化回應成本屬性
OptimizeToursResponse
訊息 (REST、gRPC) 具有費用屬性,代表完成 ShipmentRoute
的過程中產生的費用。metrics.costs
和 metrics.totalCost
屬性代表回應中所有路徑產生的費用單位數。每個 routes
項目都有 routeCosts
和 routeTotalCosts
屬性,代表特定路線的費用。
查看費用和費用範例的回應
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
在回應範例中,頂層 metrics.costs
為:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
model.shipments.penalty_cost
值代表因為出貨而產生的費用。skippedShipments
屬性會列出遭到略過的運送資訊。
在本例中,系統只會略過範例要求中的 model.shipments[1]
。model.shipments[1]
的罰金為 5 個單位,與範例回應中的 model.shipments.penalty_cost
總鍵相符。與 Vehicle
的 40.0 costPerHour
和 10.0 costPerKilometer
相比,貨物的 penaltyCost
低廉,因此跳過運送會比完成送貨更符合成本效益。
進階主題:費用與軟限制
多個 OptimizeToursRequest
訊息 (REST、gRPC) 屬性代表軟性限制,也就是在無法滿足這類限制時就會產生費用的限制。
舉例來說,車輛 LoadLimit
(REST、gRPC) 限制具有 softMaxLoad
和 costPerUnitAboveSoftMax
屬性。而這些項目產生的費用,則與超過 softMaxLoad
的負載單位成正比。只有在費用的角度合理的情況下,才不會超出限制。
同樣地,TimeWindow
限制 (REST、gRPC) 具有 soft_start_time
和 soft_end_time
屬性,其對應的 cost_per_hour_before_soft_start_time
和 cost_per_hour_after_soft_end_time
是根據受限制事件發生 TimeWindow
的早期或延遲而產生。
如同所有費用模式參數,軟體限制費用會以與其他費用參數相同的無維度單位表示。
請參閱載入需求和限制一文,詳細瞭解 LoadLimit
限制條件。請參閱「取貨和運送時間視窗限制」一文,詳細瞭解 TimeWindow
限制。