費用モデル

費用プロパティは、ShipmentModel.shipments.Shipment と ShipmentModel.vehicles.Vehicle で定義されます。

Route Optimization API の主な目的は、最もコストの低いルートを見つけることです。そのため、コストモデルはルート最適化の主な推進要因です。

コストモデルは、グローバル、車両、配送のコストを指定する一連のプロパティです。

コストモデルのプロパティは、次の種類の最適化目標をサポートしています。

  • 効率的な車両割り当てとルート
  • 費用対効果の高い集荷と配達の時間
  • 重要な荷物の優先順位付け

構造

図に示すように、費用モデルのプロパティは次のように構成されています。

このドキュメントでは、重要なコストモデル パラメータのみを説明します。費用パラメータの完全なセットについては、リファレンス ドキュメントをご覧ください。

Essentials のチェックリスト

次のチェックリストでは、費用に関連する潜在的なミスを防ぐための重要な知識について説明します。このリストは、リクエストの検証とレスポンスのトラブルシューティングに役立ちます。

プロパティ

次の表に、コストモデルのプロパティを示します。

親 プロパティ名 プロパティのタイプ 費用/ プロパティの説明
Shipment penaltyCost 数値 お届けをスキップしました 配送をスキップすることで発生する費用。
API は、配送を完了するための費用がペナルティ費用を上回る場合、その配送をスキップします。
  • penaltyCost を設定すると、費用の高い配送の配達が優先されます。
  • 出荷の penaltyCost を設定しない場合、出荷は必須になります。
  • 配送の penaltyCost を明示的に 0 に設定すると、他の制約で必要とされない限り、API は常に配送をスキップします。
Vehicle fixedCost 数値 配送 この車両が配送に使用される場合に適用される固定費用。
costPerHour 数値 時間 移動、待機、訪問、休憩時間を含む、車両の 1 時間あたりの運用費用。
この費用が増加すると、オプティマイザーは最短ルートではない可能性のある、より高速なルートを見つけようとします。
このプロパティは、シンプルさと完全性により、車両あたりのコストを単独で効果的に表すことができます。
costPerKilometer 数値 km 車両の走行距離 1 km あたりの費用。燃料費や車両のメンテナンス費用の償却額などを表すことができます。
costPerTraveledHour 数値 時間 移動中のみの車両の 1 時間あたりの運用費用。待機時間、訪問時間、休憩時間は含まれません。これにより、短いルートよりも移動時間の短いルートが優先されます。

例

このセクションでは、次の 3 種類の例について説明します。

コードサンプル

次のコードサンプルは、Shipment の費用モデル プロパティの構造を示しています。

{
  "model": {
    "shipments": [ ...
      {
        "penaltyCost": PENALTY_COST
      }
    ],
    "vehicles": [ ...
    ]
  }
}

次のコードサンプルは、Vehicle の費用モデル プロパティの構造を示しています。

{
  "model": {
    "shipments": [ ...
    ],
    "vehicles": [ ...
      {
        "fixedCost": FIXED_COST,
        "costPerKilometer": KILOMETER_COST,
        "costPerHour": HOUR_COST,
        "costPerTraveledHour": TRAVELED_HOUR_COST
      }
    ]
  }
}

シナリオ例

このセクションでは、犬のデイケア ビジネスを運営しているシナリオについて説明します。自宅から犬をピックアップするために使用するトラックのルートを最適化します。このシナリオでは、ルートを提供する際に、犬の引き取りと車両の運行に関連する費用をオプティマイザーに考慮させます。

この例では、1 費用単位は 1 ドルを表します。つまり、リクエストの費用モデルのプロパティ値は次のようになります。

プロパティ 値 シナリオ
penaltyCost 10 予定日に犬を引き取らなかった場合に、お客様に課すペナルティを表します。予定日に犬を引き取らなかった場合、お客様はサービス合計額から 40 ドルの割引を受けられます。
fixedCost 30 車両ローンの 1 日あたりの支払い額(30 ドル)を表します。
costPerKilometer 0.08 車両が 1 km あたりに消費するガソリンの量を表します。車両の移動には 1 km あたり 0.04 ガロンが必要で、お住まいの地域の 1 ガロンあたりの費用は 2 ドルです。
costPerHour 27 車両の運転に対してドライバーに支払う金額を表します。ドライバーには 1 時間あたり 27 ドルを支払います。
costPerTraveledHour 2.5 移動中に犬のために車両のエアコンを使用する際に、1 時間あたりに支払う必要がある金額を表します。車両が動いていないときは、ドライバーは後部のドアを開けてエアコンをオフにすることができます。

費用パラメータに基づいて、オプティマイザーはユーザーには明らかではないトレードオフを行うことができますが、最適化によって見つけることができます。

次の図は、オプティマイザーが赤色の点線のトラフィックを回避するために、緑色の点線を通る、より長いがより速いルートを選択する例を示しています。

車両には 2 つの経路が考えられます。1 つは緑色の破線で表される経路で、距離は長いものの、事故はありません。もう 1 つは赤色の点線で表される経路で、距離は短いものの、途中で自動車事故が発生しています。

このシナリオでは、2 つのルートのコストバランスは次のようになります。

オプティマイザーは、費用対効果の高いルートを提供するだけでなく、レスポンス プロパティで配送ルートの合計費用も提供します。

リクエストの例

次の例は、サンプル シナリオで設定された値を含む基本的な optimizeTours リクエストの構造を示しています。

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
        "penaltyCost": 40
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "fixedCost": 30,
        "costPerKilometer": 0.08,
        "costPerHour": 27,
        "costPerTraveledHour": 2.5
      }
    ]
  }
}

レスポンスのプロパティ

OptimizeToursResponse メッセージには、ルートの完了プロセスで発生した費用を記述する費用プロパティがあります。

  • metrics.costs: すべてのルートの合計費用。費用関連のリクエスト フィールドごとに分類されます。
  • metrics.totalCost: すべてのルートの合計費用。