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
: 交通機関の利用時間、待機時間、訪問時間、休憩時間を含む、車両の 1 時間あたりの運用費用を表します。Vehicle.cost_per_kilometer
: 車両の走行距離 1 キロあたりの費用を表します。Vehicle.cost_per_traveled_hour
: 移動中の車両の運行費用のみを表します。待機時間、訪問時間、休憩時間は含まれません。
これらの費用パラメータを使用すると、オプティマイザーは時間と移動距離のトレードオフを行うことができます。最適化されたルートで発生した費用は、レスポンス メッセージに metrics.costs
として表示されます。
costPerHour
が大きくなると、オプティマイザーは最短ルートではない可能性がある高速ルートを見つけようとします。この例では、最短ルートが最速ルートでもあるため、費用パラメータの変更はほとんど影響しません。
Shipment
の費用プロパティ
Shipment
メッセージ(REST、gRPC)には、いくつかの費用パラメータもあります。
Shipment.penalty_cost
は、配送をスキップした場合に発生する費用を表します。配送のpenalty_cost
パラメータを設定しないと、配送は必須になります。つまり、指定された制約を満たせない場合にのみ、配送はスキップされます。Shipment.VisitRequest.cost
は特定の集荷または配送の費用を表します。主に、1 つの配送に対して複数の集荷または配送オプション間の費用トレードオフを可能にするために使用されます。
Shipment
費用パラメータは、Vehicle
費用パラメータと同じ無次元単位を使用します。Shipment
の完了にかかる費用がペナルティ費用を超えると、Shipment
は Vehicle
のルートに含まれず、レスポンス メッセージの skipped_shipments
リストに表示されます。
ShipmentModel
の費用プロパティ
ShipmentModel
メッセージ(REST、gRPC)には、単一の費用プロパティ globalDurationCostPerHour
が含まれています。この費用は、すべての車両が ShipmentRoute
を完了するのに必要な合計時間に基づいて発生します。globalDurationCostPerHour
を大きくすると、すべての配送を早く完了することが優先されます。
Route Optimization のレスポンスの費用プロパティ
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
プロパティがあり、TimeWindow
を基準として制約付きイベントの発生が早いか遅いかに応じて cost_per_hour_before_soft_start_time
と cost_per_hour_after_soft_end_time
が発生します。
すべての費用モデル パラメータと同様に、ソフト制約の費用は他の費用パラメータと同じ無次元単位で表されます。
LoadLimit
制約については、負荷の需要と上限で詳しく説明しています。TimeWindow
制約については、集荷と配達の時間枠の制約で詳しく説明しています。