負荷費用を指定してリクエストを送信する

積載費用を指定してリクエストすると、オプティマイザーは訪問間の車両の積載量を考慮します。発生する費用は、転送される ShipmentRoute.VehicleLoad の量と、移行の距離または期間(それぞれ cost_per_kilometer または cost_per_traveled_hour を使用)の両方によって異なります。

読み込みコストを含む最小限のリクエストの例

読み込みコストを含むリクエストの例を次に示します。この例では、1 台の車両で運べる weightKg の合計積載量は 1,000 kg までです。運ぶ weightKg の積載量が 500 kg を超えると、1 km あたり 1 単位の費用が発生します。

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightKg": {
            "maxLoad": "1000",
            "costPerKilometer": {
              "loadThreshold": "500",
              "costPerUnitAboveThreshold": 1
            }
          }
        }
      }]
    }
  }
  

この例のロード費用の計算は次のとおりです。

cost = max(carried load - load threshold, 0) * distance * cost per unit above threshold

たとえば、車両が weightKg の荷物を 10 km 運んだ場合、計算は次のようになります。

(600 - 500) * 10 * 1 = 1000 cost units

負荷コストは、重い荷物を運ぶ際の車両のエネルギー使用量の増加や、車両の過積載による車両の摩耗など、さまざまな概念をモデル化するために使用できます。

読み込みコストを含むリクエストの別の例

しきい値の上下両方で移動時間あたりの費用を課す読み込み費用の別の例を次に示します。

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightLbs": {
            "maxLoad": "1000",
            "costPerTraveledHour": {
              "loadThreshold": "900",
              "costPerUnitAboveThreshold": 10,
              "costPerUnitBelowThreshold": 1
            },
          },
        }
      }]
    }
  }
  

この例のロード費用の計算は次のとおりです。

cost = max(carried load - load threshold, 0) * time * cost per unit above threshold
  + min(carried load, load threshold) * time * cost per unit below threshold

たとえば、車両が 5 時間にわたって 950 の weightLbs 負荷を運ぶ場合、計算は次のようになります。

max(950 - 900, 0) * 5 * 10 + min(950, 900) * 5 * 1 = 7000

この例では、weightLbs ロードコストの load_thresholdmax_load に近い値です。cost_per_unit_above_threshold は、車両が特に重い荷物を積んで走行する場合に、走行時間あたりのコストを高く設定し、車両の摩耗を増やしたり、燃料を過剰に消費したりする可能性のあるルートにペナルティを科します。cost_per_unit_below_threshold は、車両が運ぶ単位重量あたりのコストを上限まで加算します。これは、車両がより多くの荷物を運ぶにつれて燃料消費量が増加することを表します。

よくある質問

以下に、読み込み費用に関するよくある質問を示します。

質問 回答
積載費用はどこで指定できますか? Vehicle.LoadLimit で読み込み費用を指定します。
荷物の費用はどのように配送と照合されますか? 積載コストは、積載需要のタイプが車両の積載制限のタイプ(重量や容量など)と一致する配送に適用されます。読み込みタイプは、読み込みの需要と上限で説明されているように、任意の文字列です。
ロードコストはどのように表されますか? 読み込み費用は、移行の距離または期間で表されます。距離で費用を指定するには cost_per_kilometer を使用し、時間で費用を指定するには cost_per_traveled_hour を使用します。
読み込み費用はいつ適用されますか? 車両の積載量は、積載コストの load_threshold と比較されます。cost_per_unit_above_threshold が指定されている場合、max(0, load - load_threshold) の式を使用して、車両の積載量が load_threshold超える割合に応じて費用が追加されます。cost_per_unit_below_threshold が指定されている場合、load_threshold 未満の車両の積載量に比例して費用が追加されます。このとき、min(load, load_threshold) の式が使用されます。
負荷コスト パラメータのデフォルト値は何ですか? load_thresholdcost_per_unit_above_thresholdcost_per_unit_below_threshold はデフォルトでゼロです。
読み込み費用はどのような単位で表されますか? 読み込み費用は、global_duration_cost_per_hourShipment.penalty_cost などの他のすべての費用パラメータと同じ無次元単位で表されます。
レスポンスのどこで読み込み費用を確認できますか? 発生したロード費用は、レスポンス メッセージの metrics プロパティと route_metrics プロパティに表示されます。たとえば、発生した cost_per_kilometermodel.vehicles.load_limits.cost_per_kilometer として表示されます。

読み込み費用の詳細については、リファレンス ドキュメント(RESTgRPC)をご覧ください。

例: OptimizeTours リクエストを作成する

OptimizeTours リクエストは、REST または gRPC のいずれかを使用して行うこともできます。

リクエストを行う前に、次のパラメータを環境に適した値に置き換えます。

  • OAuth を使用するの説明に沿って、アプリケーションのデフォルト認証情報が構成されていることを確認します。
  • PROJECT_NUMBER_OR_ID に Cloud プロジェクト番号または ID を設定します。

    次のコマンドは、Route Optimization API に OptimizeTours リクエストを送信し、レスポンスを同期的に受信します。

    curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    --data @- << EOM
    {
      "model": {
        "shipments": [
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.789456,
                  "longitude": -122.390192
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 100.0,
            "loadDemands": {
              "weightKg": {
                "amount": 50
              }
            }
          },
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.789116,
                  "longitude": -122.395080
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 30.0,
            "loadDemands": {
              "weightKg": {
                "amount": 10
              }
            }
          },
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.795242,
                  "longitude": -122.399347
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 50.0,
            "loadDemands": {
              "weightKg": {
                "amount": 80
              }
            }
          }
        ],
        "vehicles": [
          {
            "endLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "startLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "costPerHour": 40.0,
            "costPerKilometer": 10.0,
            "loadLimits": {
              "weightKg": {
                "maxLoad": "100",
                "costPerKilometer": {
                  "loadThreshold": "15",
                  "costPerUnitAboveThreshold": 1
                }
              }
            }
          }
        ]
      }
    }
    EOM

リクエストが完了すると、レスポンス メッセージが届きます。