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

積載費用を指定してリクエストを送信すると、オプティマイザーは訪問間の車両の積載量を考慮に入れます。発生する費用は、転送される 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

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

(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

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