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
のゼロから始まるインデックスです。値が 0 の場合、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 です。値が false の場合、REST レスポンスではこのプロパティは省略されます。visitRequestIndex
は、Visit
が表す対応するリクエストのShipment.pickups
またはShipment.deliveries
からのVisitRequest
のゼロベースのインデックスです。値が 0 の場合、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
が使用されていない限り、この値は 0 です。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
}
}
}