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
限制條件,請參閱取貨和送達時間限制一文。