負荷の需要と制限

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

負荷需要と上限は、容量の管理に使用できる制約の一種です。荷物の必要な容量と車両の最大容量を指定します。これにより、これらの制約に基づいてルート割り当てを最適化できます。

負荷の需要と上限は、次のような目的をサポートできます。

  • 車両の積みすぎを防ぐ。
  • 荷物の集荷と配達に伴う車両の積載量の変化をモニタリングします。
  • 車両が特定の場所を訪問できる回数を制限します。

負荷需要と上限は、次のプロパティで指定します。

  • loadDemands には、特定の配送に必要な容量を指定します。
  • loadLimits には、特定の車両の最大容量を指定します。

構造

図に示すように、負荷需要と上限は次のように構成されています。

プロパティ

このセクションでは、負荷需要と上限のプロパティについて説明します。

  • 負荷タイプ: 負荷需要と上限の間で共有されるプロパティ。
  • LoadLoadLimit: それぞれ負荷デマンドと負荷上限に存在する一意のプロパティ。

読み込みのタイプ

積載タイプは、荷物の積載量の種類と車両の積載量の上限を識別する文字列キーです。負荷タイプには次の重要な特性があります。

  • ユーザー定義: ユーザーが定義する負荷タイプです。負荷タイプの事前定義されたシステム変数はありません。
  • 共有: 荷物タイプは、配送と車両間で共有することを目的としています。つまり、積載タイプが一致する場合のみ、荷物は車両の容量の上限まで使用されます。車両に特定の種類の積載制限が指定されていない場合、その種類の積載量に制限はありません。

読み込みタイプを表す文字列キーには、プロトコル バッファのマップタイプ構文を使用します。問題を回避するため、これらの文字列キーはnull にできません。負荷タイプに名前を付けるときは、負荷のタイプと単位を記述する識別子を使用することをおすすめします。例: weightKgvolume_gallonspalletcountfrequencyDaily

LoadLoadLimit

Load オブジェクトと LoadLimit オブジェクトには、配送と車両の容量要件を定義する特定のプロパティが含まれています。次の表に、これらのプロパティを示します。

オブジェクト プロパティ プロパティのタイプ プロパティの説明
Load loadDemands amount 文字列(int64 形式) 指定されたタイプで配送の容量要件を定義します。
LoadLimit loadLimits maxLoad 文字列(int64 形式) 指定されたタイプの車両の最大積載量を定義します。

次の例は、loadDemands タイプを文字列として、amount プロパティを int64 形式の文字列として設定できる負荷需要の構造を示しています。

"loadDemands": {
  "MATCHING_LOAD_TYPE": {
    "amount": "YOUR_LOAD_AMOUNT"
  }
}

次の例は、負荷の上限の最も基本的な構造を示しています。ここでは、loadLimits 型を文字列として設定し、maxLoad プロパティを int64 形式の文字列として設定できます。

"loadLimits": {
  "MATCHING_LOAD_TYPE": {
    "maxLoad": "YOUR_MAX_LOAD"
  }
}

試してみる

上記のコードサンプルを使用して、架空のシナリオを作成します。このシナリオでは、重量が 10 kg の荷物と、100 kg を運ぶことができる車両があります。

  1. loadDemands の例では、読み込みタイプを weightKg として定義します。

    これを行うと、loadLimits の例の負荷タイプも入力され、負荷タイプが共有されます。車両の上限を使用するには、loadDemandsloadLimits のタイプが一致している必要があります。

  2. 同じ loadDemands の例で、amount プロパティを 10 に設定します。

    つまり、荷物の重量は 10 キログラムです。

  3. loadLimits の例では、maxLoad プロパティを 100 に設定します。

    つまり、車両は最大 100 キログラムを運ぶことができます。

事前定義されたタイプのセットはありません。この例では、キログラムをポイントに変更したり、体重ではなく長さの測定値に変更したりできます。この柔軟性により、負荷需要と上限を特定のニーズに合わせて調整できます。

リクエストの例

次の例は、shipment に loadDemands、vehicle に loadLimits を含む基本的な optimizeTours リクエストの構造を示しています。

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 00.000000,
              "longitude": 00.000000
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 00.000000,
              "longitude": 00.000000
            }
          }
        ],
        "loadDemands": {
          "MATCHING_LOAD_TYPE": {
            "amount": "YOUR_LOAD_AMOUNT"
          }
        }
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 00.000000,
          "longitude": 00.000000
        },
        "endLocation": {
          "latitude": 00.000000,
          "longitude": 00.000000
        },
        "costPerKilometer": 1.0,
        "loadLimits": {
          "MATCHING_LOAD_TYPE": {
            "maxLoad": "YOUR_MAX_LOAD"
          }
        }
      }
    ]
  }
}

配送には複数の積載量の要件があり、車両には複数の積載量の上限があるため、フリートのルートを最適化する際に考慮すべき複雑な制約を指定できます。