Route Optimization API レスポンスを解釈する... 犬を例に

欧州経済領域(EEA)のデベロッパー

本番環境に関する注意事項

このガイドでは、わかりやすくするために REST と JSON を使用します。ただし、本番環境では、パフォーマンスを向上させるために、gRPC とクライアント ライブラリを使用することをおすすめします。詳細については、Route Optimization API クライアント ライブラリをご覧ください。

最初のリクエストを行うでリクエストを送信すると、オプティマイザーは OptimizeToursResponse を返します。このレスポンスは、ドライバーが従うルートプランです。このガイドでは、その読み方について説明します。

ルートプランの概要

犬のデイケアのシナリオでは、オプティマイザーはバーニーズ マウンテン ドッグとチワワをバンに割り当て、ジャーマン シェパードをスキップします。ドライバーのルートプランは次のとおりです。

  • 午前 7 時 55 分に保育園でシフトを開始します。
  • 午前 8 時 20 分にコイトタワーの近くでバーニーズ マウンテン ドッグをピックアップします。
  • 午前 8 時 58 分にサウス サンセット プレイグラウンド パークでチワワをピックアップします。
  • 午前 9 時 24 分に保育園に戻り、午前 9 時 30 分に降車可能時間になるまで待ちます。
  • バーニーズ マウンテン ドッグを午前 9 時 30 分に預ける。
  • 午前 9 時 35 分にチワワを降ろします。
  • 午前 9 時 40 分にシフトを終了します。

ルートプランの費用は $147.22 です。これには、ジャーマン シェパードをスキップしたことによる $100 のペナルティが含まれます。

結果を確認するには、レスポンスを完全なレスポンス例と比較します。移動時間と距離は現在の道路データに依存するため、結果が若干異なる場合があります。

レスポンスの例

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "detour": "0s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "detour": "2600s",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "startTime": "2024-02-13T17:30:00Z",
          "detour": "2297s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "startTime": "2024-02-13T17:35:00Z",
          "detour": "656s",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ],
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        {
          "travelDuration": "1252s",
          "travelDistanceMeters": 7860,
          "waitDuration": "356s",
          "totalDuration": "1608s",
          "startTime": "2024-02-13T17:03:12Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:35:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:40:00Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "4740s",
        "waitDuration": "356s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "6296s",
        "travelDistanceMeters": 31531,
        "performedShipmentPenaltyCostSum": 2000
      },
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22,
      "vehicleFullness": {
        "maxFullness": 0.3497777777777778,
        "activeSpan": 0.3497777777777778
      }
    }
  ],
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "4740s",
      "waitDuration": "356s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "6296s",
      "travelDistanceMeters": 31531,
      "performedShipmentPenaltyCostSum": 2000
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T15:55:04Z",
    "latestVehicleEndTime": "2024-02-13T17:40:00Z",
    "totalCost": 147.22,
    "costs": {
      "model.vehicles.cost_per_hour": 47.22,
      "model.shipments.penalty_cost": 100
    }
  }
}
    

レスポンスの構造

OptimizeToursResponse には、visits メッセージ タイプを含む ShipmentRoute オブジェクトと、aggregatedRouteMetrics と totalCost を含む Metrics オブジェクトがあります。

OptimizeToursResponse には、次の 2 つの主要コンポーネントが含まれています。

  • routes: フリート内の各車両のルートプラン。各集荷と配達の順序と時間が含まれます。バンが 1 台あるため、ルートプランは 1 つです。
  • metrics: ルートプラン全体の概要(合計費用、所要時間、距離など)。

オプティマイザーがジャーマン シェパードをスキップするため、レスポンスには skippedShipments も含まれます。

以降のセクションでは、レスポンスでルートプランの概要の各詳細を確認する方法について説明します。

どの車両がどのルートを走行するか

オプティマイザーは、リクエスト内の vehicles の順序に対応するルートプラン(routes 配列)を生成します。

vehicleIndex フィールドは、0 から始まる位置に基づいて各車両を識別します。このバンの場合は 0 です。vehicleStartTime フィールドと vehicleEndTime フィールドは、シフトの開始と終了のタイミングをドライバーに指示します。

Route Optimization API は、リクエストのオフセットに関係なく、Z 接尾辞が付いた UTC のタイムスタンプを返します。サンフランシスコの時刻を取得するには、8 時間を引きます。次のコードサンプルに示すように、バンのシフトは午前 7 時 55 分から午前 9 時 40 分までです。

{
"routes": [
    {
    // "vehicleIndex": 0, // Omitted in actual JSON response because it's 0
    "vehicleStartTime": "2024-02-13T15:55:04Z",
    "vehicleEndTime": "2024-02-13T17:40:00Z",
    ...
    }
  ]
  ...
}

集荷と配送の順序はどうなっていますか?

各ルート内で、visits 配列には、割り当てられた車両のすべての集荷と配達が時系列で含まれます。

各訪問の shipmentIndex は、リクエスト内の配送のゼロベースの位置です。0 はバーニーズ マウンテン ドッグ、1 はチワワです。shipmentLabel フィールドには、各配送に設定したラベルが表示されます。

集荷と配達を区別するには、visitType フィールドまたは isPickup フィールドを確認します。

  • visitType: 訪問アクションを明示的に定義します。
    • 受け取り: visitType = "PICKUP_SHIPMENT"
    • 配達: visitType = "DELIVER_SHIPMENT"
  • isPickup: ブール値のヘルパー フィールド。
    • 受け取り: isPickup = true
    • Delivery: isPickup = false(JSON では省略)

イベントの正確な順序と各場所への到着予定時刻を特定するには、visits 配列を順番に読み取ります。次の表に、shipmentIndex、isPickup または visitType、startTime フィールドの順序と値に基づくルートプラン アクションを示します。

シーケンス shipmentIndex 値 isPickup または visitType の値 startTime 値(UTC) アクション
最初の訪問 0(JSON では省略) True または PICKUP_SHIPMENT 2024-02-13T16:20:00Z 午前 8 時 20 分にバーニーズ マウンテン ドッグを迎えに行く。
2 回目の訪問 1 True または PICKUP_SHIPMENT 2024-02-13T16:58:12Z 午前 8 時 58 分にチワワをピックアップします。
3 回目の訪問 0(JSON では省略) False(省略)または DELIVER_SHIPMENT 2024-02-13T17:30:00Z 午前 9 時 30 分にバーニーズ マウンテン ドッグを犬のデイケア センターに預ける。
4 回目の訪問 1 False(省略)または DELIVER_SHIPMENT 2024-02-13T17:35:00Z 午前 9 時 35 分にチワワを犬のデイケア センターに預ける。

次のコードサンプルは、レスポンスがこのシーケンスをどのように提供するかを示しています。

{
  "routes": [
    {
      "visits": [
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:30:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:35:00Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ]
    }
  ]
}

各訪問には visitRequestIndex もあります。これは、オプティマイザーが配送に選択した集荷または配達オプションのゼロベースの位置です。このシナリオでは、各犬に集荷オプションと配達オプションが 1 つずつしかないため、visitRequestIndex は常に 0 になり、レスポンスでは省略されます。

訪問と訪問の間に何が起こるか

各ルート内で、transitions 配列には訪問間の移動の詳細が一覧表示されます。visits と transitions は別々のリストですが、次のように時間的にインターリーブされます。

  1. transitions[0](開始から最初の訪問までの運転)
  2. visits[0](初回訪問)
  3. transitions[1](初回訪問から 2 回目の訪問を促進)
  4. visits[1](2 回目の訪問)
  5. ...
  6. visits[N-1](最後の訪問。N は合計訪問数)
  7. transitions[N](最後の訪問先から終了地点までの運転)

両方の配列の startTime フィールドを確認することで、ルートのタイムラインを追跡できます。移行の startTime は、ドライバーが移動を開始したときです。訪問の startTime は、ドライバーが集荷または配達を開始したときです。

各遷移には、ロケーション間の予想運転時間と距離が表示されます。次の表に、transitions フィールドと visits フィールドの両方を、犬のデイケア シナリオの時系列ルート アクションにマッピングします。

シーケンス フィールド名 startTime 値(UTC) 詳細 アクション
最初の移行 transitions[0] 2024-02-13T15:55:04Z travelDuration: 1496s
travelDistanceMeters: 7082
デイケア センターから 7 km、25 分運転して、バーニーズ マウンテン ドッグを迎えに行きます。シフトは午前 7 時 55 分に開始します。
初回訪問 visits[0] 2024-02-13T16:20:00Z shipmentIndex: 0(JSON では省略)
isPickup: True
午前 8 時 20 分からバーニーズ マウンテン ドッグを迎えに行きます。訪問時間は 5 分です。
2 回目の移行 transitions[1] 2024-02-13T16:25:00Z travelDuration: 1992s
travelDistanceMeters: 16589
コイトタワーから 17 km、33 分運転して、午前 8 時 25 分からチワワをピックアップします。
2 回目の訪問 visits[1] 2024-02-13T16:58:12Z shipmentIndex: 1
isPickup: True
午前 8 時 58 分からチワワを迎えに行きます。所要時間は 5 分です。
3 つ目の移行 transitions[2] 2024-02-13T17:03:12Z travelDuration: 1252 秒
travelDistanceMeters: 7860
waitDuration: 356 秒
午前 9 時 3 分にサウス サンセット プレイグラウンドを出発し、8 km を 21 分間走行して保育園に戻ります。午前 9 時 24 分に到着し、降車可能時間になるまで 6 分間待機します。
3 回目の訪問 visits[2] 2024-02-13T17:30:00Z shipmentIndex: 0(JSON では省略)
isPickup: False(JSON では省略)
午前 9 時 30 分から、バーニーズ マウンテン ドッグを犬のデイケア センターに預けます。所要時間は 5 分です。
4 回目の移行 transitions[3] 2024-02-13T17:35:00Z travelDuration: 0s
travelDistanceMeters: 0(JSON では省略)
運転は不要です。午前 9 時 35 分にチワワをデイケア センターに預ける準備ができました。
4 回目の訪問 visits[3] 2024-02-13T17:35:00Z shipmentIndex: 1
isPickup: False(JSON では省略)
午前 9 時 35 分からチワワを犬のデイケア センターに預けます。所要時間は 5 分です。
5 回目の移行 transitions[4] 2024-02-13T17:40:00Z travelDuration: 0s
travelDistanceMeters: 0(JSON では省略)
運転は不要です。ドライバーは午前 9 時 40 分にシフトを終了します。

次のコードサンプルは、レスポンスで transitions[0] と transitions[1] のシーケンスがどのように提供されるかを示しています。

{
  "routes": [
    {
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        ...
      ]
    }
  ]
}

ルートの料金はいくらですか?

特定の車両の費用が必要か、フリート全体の合計費用が必要かに応じて、レスポンスのいくつかのフィールドを確認できます。

次の表に、レスポンスで費用情報を確認するすべての方法を示します。

親 パラメータ スコープ 説明
ShipmentRoute routeCosts ルートごと その特定のルートの特定の費用コンポーネント(1 時間あたりの費用など)の内訳。
routeTotalCost ルートごと 特定のルートに対して計算された合計費用。
Metrics totalCost 合計(すべてのルート) ソリューション内のすべてのルートの合計費用。
costs 合計(すべてのルート) ソリューション内のすべてのルートにわたる集計された費用コンポーネントの内訳。

routeCosts と costs で指定された費用は、リクエストで指定した費用制約を反映しています。詳細については、コストモデルの重要なコンセプトのドキュメントをご覧ください。

この犬のデイケアのシナリオでは、スキップされた配送があるため、ルートあたりの費用と集計された合計費用は異なります。ルート費用には、その特定のルートに関連する費用(ドライバーの賃金)のみが含まれます。一方、集計された合計費用には、スキップされた配送のペナルティも含まれます。次のコードサンプルは、レスポンスでこれらの値を確認する場所を示しています。

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      ...
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22
    }
  ],
  "metrics": {
    "totalCost": 147.22,
    "costs": {
      "model.shipments.penalty_cost": 100,
      "model.vehicles.cost_per_hour": 47.22
    },
    ...
  }
}

ルートプランによると、ドライバーは午前 7 時 55 分から午前 9 時 40 分までバンを運転します。これは約 1 時間 45 分(6,296 秒)です。定義した 1 時間あたり $27 のレートに基づくと、ルートの費用は $47.22 になります。オプティマイザーはジャーマン シェパードの配送をスキップしたため、ペナルティ費用として $100 が追加され、合計費用は $147.22 になります。

配送がスキップされた理由

オプティマイザーは、実行しない配送を skippedShipments 配列にリストします。配送がスキップされる理由は、penaltyCost を設定しているかどうかによって異なります。

  • 必須の配送(penaltyCost なし): オプティマイザーは、実行に費用がかかるという理由だけで、これらの配送をスキップすることはありません。スキップされるのは、時間枠が他の配送と競合しているなどの理由で、配送をどのルートにも適合できない場合のみです。
  • オプションの配送(penaltyCost を含む): オプティマイザーは、配送の実施費用がペナルティを上回る場合、配送をスキップすることもできます。ペナルティ費用を異なる値に設定して、一部の配送を他の配送よりも優先できます。

このシナリオでは、ジャーマン シェパードの集荷時間枠がバーニーズ マウンテン ドッグの時間枠と競合しています。コイトタワーとランズエンドは 25 分離れているため、ドライバーは 20 分以内に両方の乗車場所に行くことはできません。オプティマイザーは、そのうちの 1 つをスキップする必要があります。ジャーマン シェパードのペナルティ費用($100)は、通常のクライアントのペナルティ費用($1,000)よりも低いため、オプティマイザーはジャーマン シェパードをスキップし、$100 のペナルティが発生します。

次のコードサンプルは、レスポンスの skippedShipments オブジェクトを示しています。

{
  ...
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  ...
}

レスポンスの skippedShipments オブジェクトには、次のフィールドが含まれています。

  • index: リクエスト内の配送のゼロベースのインデックス(3 番目の配送の場合は 2)。
  • label: リクエストで指定したラベル(「ジャーマン シェパード」)。
  • penaltyCost: リクエストで指定したペナルティ費用。API によって合計費用に追加されます。

オプティマイザーが配送をスキップしないようにするには、競合の原因となっている制約を緩和します。たとえば、ジャーマン シェパードの飼い主に、より柔軟な集荷時間を依頼し、リクエスト内のその集荷の timeWindows を更新します。

例のレスポンス フィールド

次の表に、サンプル シナリオの OptimizeToursResponse で返されるすべてのレスポンス フィールドを示します。ルートプランを理解するためにすべてのフィールドを使用する必要はありませんが、これらのフィールドを分析して、ビジネスニーズに合わせて OptimizeToursRequest を調整する方法を決定できます。詳細については、ルートプランのライフサイクルをご覧ください。

親またはテキスト検索でコンテンツをフィルタできます。

親 パラメータ プロパティ タイプ 説明
OptimizeToursResponse routes オブジェクトの配列(ShipmentRoute) これには、各車両に対して計算されたルートのリストが含まれます(車両ごとに 1 つ)。この犬のデイケアのシナリオでは、1 台のバンの詳細なルートプランが含まれています。
metrics オブジェクト(Metrics) これには、すべてのルートで集計されたソリューションの全体的な指標が含まれます。この犬のデイケアのシナリオでは、これが 1 日の費用と運用期間の概要です。
skippedShipments オブジェクトの配列(SkippedShipment) これには、ソリューションでスキップされた配送のリストが含まれます。このシナリオでは、3 番目の犬(ジャーマン シェパード)はスキップされます。
ShipmentRoute vehicleStartTime タイムスタンプ これは、車両がルートを開始する時刻です。この犬のデイケアのシナリオでは、ドライバーは午前 7 時 55 分にバンの運転を開始します。
vehicleEndTime タイムスタンプ これは、車両がルートを完了する時刻です。この犬のデイケアのシナリオでは、ドライバーは午前 9 時 40 分にバンの運転を終了します。
visits オブジェクトの配列(Visit) これは、ルート上の集荷と配達の順序付きリストです。この犬のデイケアのシナリオでは、2 匹の犬をピックアップしてドロップオフするシーケンスです。
transitions オブジェクトの配列(Transition) これは、訪問間の距離、移動時間、待機時間の順序付きリストです。この犬のデイケアのシナリオでは、コイトタワー、サウス サンセット プレイグラウンド パーク、デイケア間の運転距離と時間が詳しく表示されます。
metrics オブジェクト(AggregatedMetrics) これらは、この単一のルートに固有の指標です。この犬のデイケアのシナリオでは、これらはこの特定のバンの統計情報です。これらの指標は、リクエストで指定した費用に基づいています。詳細については、コストモデルの重要なコンセプトのドキュメントをご覧ください。
routeCosts オブジェクト(マップ) このルートの具体的な費用の内訳です。この犬のデイケアのシナリオでは、ドライバーの賃金(1 時間あたり $27)から計算された費用が表示されます。
routeTotalCost 数値 これは、この特定のルートの合計費用です。この犬のデイケアのシナリオでは、このバンのルートの合計費用は 47.22 です。
vehicleFullness オブジェクト(VehicleFullness) これは、車両が運用限界(時間、距離、負荷など)にどの程度近づいているかを示す内訳です。この犬のデイケアのシナリオでは、シフトの開始時間と終了時間のみがドライバーを制約するため、オプティマイザーは、実際のルートの所要時間とドライバーのシフトで使用可能な最大時間の割合として vehicleFullness を計算します。
Visit shipmentIndex 整数 これは、元のリクエストのゼロから始まる配送のインデックスです。この犬のデイケアのシナリオでは、0 はバーニーズ マウンテン ドッグ、1 はチワワを表します。
isPickup ブール値 この訪問が集荷の場合は、このフィールドは true になります。この犬のデイケアのシナリオでは、犬を迎えに来た場合は true、犬をデイケアに預けた場合は false(または欠落)になります。
startTime タイムスタンプ これは、訪問の推定開始時間です。この犬のデイケアのシナリオでは、ドライバーがドアをノックしたときです。
detour 期間 これは、オプティマイザーがこの特定の配送の移動に追加する追加時間です。迂回とは、実際のルートプランと、ドライバーが他に完了すべき配送やタスクがない場合の理想的な直接ルートとの差です。

この犬のデイケアのシナリオでは、バーニーズ マウンテン ドッグをピックアップする最初の訪問は、ドライバーがデイケア センターからこのピックアップに直接移動するため、迂回は 0 です。チワワの集荷の場合、ドライバーが最初にバーニーズ マウンテン ドッグを集荷し(積み込みに 5 分かかる)、迂回時間は 43 分になります。
shipmentLabel 文字列 これは、各配送のリクエストのラベルです。この犬の保育園のシナリオでは、ラベルは「チワワ」または「バーニーズ マウンテン ドッグ」です。
visitType 文字列(列挙型) これは、訪問の種類を示します。集荷の場合は PICKUP_SHIPMENT、配達の場合は DELIVER_SHIPMENT になります。このシナリオでは、PICKUP_SHIPMENT または DELIVER_SHIPMENT のいずれかです。
Transition travelDuration 期間 これは、訪問間の移動に費やした時間です。たとえば、この犬のデイケアのシナリオでは、ドライバーはデイケアからコイトタワーまで約 25 分かけてバーニーズ マウンテン ドッグを迎えに行きます。
travelDistanceMeters 整数 この遷移中に移動した距離(メートル単位)です。たとえば、この犬のデイケアのシナリオでは、ドライバーはデイケアからコイトタワーまで 7 km 移動して、バーニーズ マウンテン ドッグをピックアップします。
waitDuration 期間 これは、次の集荷または配達までの待機時間です。この犬のデイケアのシナリオでは、3 番目の移行は 6 分(356 秒)です。これは、ドライバーが午前 9 時 30 分にドロップオフ ウィンドウが開く前にデイケア センターに到着するためです。他の移行では、この値は 0 です。
totalDuration 期間 これは、運転と待機を含む移行の合計時間です。たとえば、ドライバーは最初の移動に 25 分(運転 25 分、待機 0 分)を費やし、3 回目の移動で保育園に戻るのに 27 分(運転 21 分、待機 6 分)を費やします。
startTime タイムスタンプ これは移動が開始される時刻です。前の訪問の完了時間(最初の移行の場合は車両の開始時間)と一致します。犬のデイケアのシナリオでは、最初の移動はドライバーがデイケアを出発する午前 7 時 55 分に開始され、2 番目の移動はドライバーがコイトタワーを出発する午前 8 時 25 分に開始されます。
Metrics aggregatedRouteMetrics オブジェクト(AggregatedMetrics) これは、すべてのルートの指標の合計です。この犬のデイケアのシナリオでは、これらは 1 台のバンの合計指標です。
usedVehicleCount 整数 これは、ソリューションで使用される車両の数です。この犬のデイケアのシナリオでは、1 台のバンのみを使用します。
earliestVehicleStartTime タイムスタンプ これは、すべての車両の中で最も早い開始時間です。この犬のデイケアのシナリオでは、バンのルートは午前 7 時 55 分に始まります。
latestVehicleEndTime タイムスタンプ これは、すべての車両の中で最も遅い終了時刻です。この犬のデイケアのシナリオでは、バンのルートは午前 9 時 40 分に終了します。
totalCost 数値 これはソリューションの合計費用です。この犬のデイケアのシナリオでは、ルートプラン全体の費用は 1 日あたり 147.22 です(47.22 のドライバーの賃金と 100 のスキップされた配送ペナルティを含む)。
costs オブジェクト(マップ) これは、カテゴリ別の合計費用の内訳です。この犬のデイケアのシナリオでは、オプティマイザーは、1 時間あたりの費用と、スキップされたジャーマン シェパードのペナルティ費用に基づいてルートの費用を計算しました。
AggregatedMetrics performedShipmentCount 整数 これは、正常にルート設定された配送の数です。この犬のデイケアのシナリオでは、ドライバーは 2 匹の犬を搬送します。
travelDuration 期間 これは、移動に費やされた合計時間です。この犬のデイケアのシナリオでは、ドライバーは 79 分間移動します。
waitDuration 期間 これは、待機時間の合計です。この犬のデイケアのシナリオでは、ドライバーはデイケア センターで 6 分間(356 秒)アイドリングし、ドロップオフ ウィンドウが開くのを待ちます。
delayDuration 期間 これは、駐車用に予約された時間など、移行属性を使用して定義する追加の期間です。この犬のデイケアのシナリオでは、リクエストで移行属性を定義していないため、この値は 0 です。
breakDuration 期間 これは、休憩に費やした合計時間です。この犬のデイケアのシナリオでは、休憩はありません。
visitDuration 期間 これは、訪問時にサービスを提供した時間の合計です。この犬のデイケアのシナリオでは、20 分(1 回の訪問につき 5 分、4 回の訪問)です。
totalDuration 期間 これは、すべての期間コンポーネントの合計です。この犬のデイケアのシナリオでは、合計時間は 105 分(6, 296 秒)です。
travelDistanceMeters 整数 これは、合計移動距離(メートル単位)です。この犬のデイケアのシナリオでは、ドライバーは合計 31.5 km 移動します。
performedShipmentPenaltyCostSum ダブル これは、実行されたすべての配送のペナルティ費用の合計です。このシナリオでは、ドライバーがバーニーズ マウンテン ドッグとチワワ(それぞれペナルティ費用が 1000)を乗せたため、2000 になります。
VehicleFullness maxFullness 数値 これは、すべての VehicleFullness フィールドの中で最も高い利用率です。この犬のデイケアのシナリオでは、ドライバーが午前中のシフト全体(リクエストで 5 時間と定義)のうち 105 分しかバンを運転しないため、この値は 0.35 になります。
activeSpan 数値 これは、ルートプランの営業時間に対するドライバーの合計シフト時間の比率です。数値が低いほど、ドライバーが営業日のうち車両を運転する時間が短いことを意味します。この犬のデイケアのシナリオでは、ドライバーが 5 時間のシフト中に 105 分間バンを運転するため、この値は 0.35 になります。
SkippedShipment index 整数 これは、元のリクエストのゼロから始まる配送のインデックスです。 このシナリオでは、2 はジャーマン シェパードを表します。
label 文字列 これは、リクエストで配送に指定したラベルです。
penaltyCost 数値 これは、オプティマイザーがこの配送をスキップしたときに発生するペナルティ費用です。これは、リクエストで指定した penaltyCost と一致します。