Route Optimization API は、対応するリクエスト内の車両のルートを返します。配送は車両に割り当てられますが、リクエストのプロパティによってはスキップされることもあります。
OptimizeToursResponse
メッセージ(REST、gRPC)には、2 つの主要なトップレベル プロパティがあります。
routes[]
は、割り当てられた配送がある各車両のルートです。各Route
には、その個々のルートのプロパティを反映した指標が含まれています。metrics
は、すべての車両とルートプランにわたるレスポンス全体の集計指標です。トップレベルの指標には、ルートごとの指標と同じプロパティが含まれ、値はすべてのルートで集計されます。
一部のプロパティは、最適化結果によっては入力されないことがあります。
skippedShipments[]
には、どの車両でも行われていない配送が表示されます。配送をスキップできるのは、指定された制約内で実行できない場合、または配送の費用がペナルティ費用を超える場合です。たとえば、荷物の集荷または配達のtimeWindow
が非常に狭い場合、車両が必要な時間枠内に訪問することは不可能または費用対効果が低い可能性があります。validationErrors[]
には、リクエストのsolvingMode
がVALIDATE_ONLY
に設定されている場合に、リクエストを無効にするか解決できないエラーを指定します。通常のDEFAULT_SOLVE
モードでは、検証エラーはレスポンスの本文ではなくエラー メッセージに表示されます。VALIDATE_ONLY
解決モードでは複数のエラーを一度に報告できます。これは、リクエストをすばやくデバッグする場合に便利です。
ルートのプロパティ
各 routes[]
エントリは ShipmentRoute
メッセージ(REST、gRPC)です。各 ShipmentRoute
は、リクエストの特定の車両のルート割り当てを表します。対応する Vehicle
に関連する重要な ShipmentRoute
プロパティには、次のようなものがあります。
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 です。REST レスポンスでは、値が false の場合、このプロパティは省略されます。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
には、特定の車両の visits
間の移動を表す transitions
の順序付きリストが含まれています。重要な Transition
メッセージ(REST、gRPC)のプロパティには次のものがあります。
startTime
は、車両が遷移を開始する時刻です。travelDuration
は、移行を完了するために車両が移動する必要がある時間です。travelDistanceMeters
は、遷移を完了するために車両が移動する必要がある距離(メートル単位)です。trafficInfoUnavailable
は、遷移にトラフィック データが使用可能かどうかを示します。waitDuration
は、次のVisit
を開始する前に車両が待機しているアイドル時間を表します。これは、次のVisit
のstart_time
が原因で発生する可能性があります。totalDuration
は、移動時間、待機時間、ブレーク時間、遅延時間を含む、遷移の合計時間です。vehicleLoads
は、この遷移中に車両が運ぶ荷物の種類と荷物の量をマッピングします。
Transition
の例を次に示します。
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
vists
と transitions
の関係について詳しくは、集荷と配達の停留所の注文の最適化と ShipmentRoute
リファレンス ドキュメント(REST、gRPC)をご覧ください。Transition
メッセージの routePolyline
プロパティと routeToken
プロパティの詳細については、遷移ポリラインとルートトークンをご覧ください。
指標プロパティ
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
}
}
}