負荷の需要と制限

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

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

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

  • 車両の過積載を防ぎます。
  • 配送物の集荷と配達に伴う車両の積載量の変化をモニタリングします。
  • 大型車両と重量物の配送のペアリングを優先します。

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

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

構造

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

Essentials のチェックリスト

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

プロパティ

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

  • 負荷タイプ: 負荷需要と制限の間で共有されるプロパティ。
  • LoadLoadLimit: それぞれ負荷需要と負荷制限に存在する固有のプロパティ。

読み込みのタイプ

荷物の種類は、荷物と車両に等しく適用される文字列キーです。1 つの積載タイプは、配送の積載需要と車両の積載制限の両方に適用されます。

読み込みタイプでは、プロトコル バッファのマップ型構文が使用されます。ロードタイプに名前を付ける場合は、ロードのタイプとその単位を説明する識別子を使用します。たとえば、weightKgvolume_gallonspalletcountfrequencyDaily などです。

LoadLoadLimit

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

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

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

コードサンプル

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

{
  "model": {
    "shipments": [ ...
      {
        "loadDemands": {
          "MATCHING_LOAD_TYPE": {
            "amount": "YOUR_LOAD_AMOUNT"
          }
        }
      }
    ],
    "vehicles": [ ...
    ]
  }
}

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

{
  "model": {
    "shipments": [ ...
    ],
    "vehicles": [ ...
      {
        "loadLimits": {
          "MATCHING_LOAD_TYPE": {
            "maxLoad": "YOUR_MAX_LOAD"
          }
        }
      }
    ]
  }
}

シナリオの例

このセクションでは、犬の保育園を経営しており、クレートの数が限られている車両で数匹の犬を輸送するためのルートを最適化するシナリオについて説明します。

各配送は、特定の数の犬をピックアップする 1 つの停車場所を表します。この例では、各配送の集荷場所は、世話をしている犬の家という異なる場所ですが、すべての配送の配達場所は、犬のデイケアの建物という同じ場所です。

この例では、リクエストのプロパティ値は次のとおりです。

プロパティ タイプ シナリオ
loadDemands 読み込みタイプ 文字列 dogUnit 配送の荷物の種類を定義します。この例では dogUnit を使用します。各 dogUnit は 1 匹の犬を表します。
loadDemands amount 数値 1 回目の配送: 1
2 回目の配送: 3
定義された負荷タイプの数量を指定します。この例では、2 つの配送を定義しています。1 つ目は犬 1 匹の集荷、2 つ目は犬 3 匹の集荷です。
loadLimits 読み込みタイプ 文字列 dogUnit 車両に適用される積載制限の種類を定義します。この制限を適用するには、この値が配送の積載タイプと一致している必要があります
loadLimits maxLoad 数値 6 車両が運搬できる荷物の種類の最大量を指定します。この例では、最大容量が 6 個の dogUnit の車両が 1 台のみあります。各 dogUnit は犬用ケージ 1 個を表します。

次の図は、車両の積載制限、各配送の積載需要、各配送が車両の積載制限をどのように消費するかを示しています。

車両は、車両の積載制限を表す 6 つの空きスペースでルートを開始します。1 回目の配送では犬 1 匹分のスペースが必要で、2 回目の配送では犬 3 匹分のスペースが必要です。車両の最終状態は、6 つのスペースのうち 4 つが占有され、2 つの空きスペースが残っている状態です。

この例では、各配送の積載量と車両の積載量の上限は次のようになります。

  • 車両は最大 6 匹の犬を運ぶことができ、4 匹の犬を迎えに行くため、最適化ツールは犬を運ぶ車両のルートを生成する際に問題が発生することはありません

  • 車両の積載制限が 6 dogUnit の場合、この特定の車両で運べる犬はあと 2 匹のみとなります。

  • 犬の数が積載量の上限を超えている場合、オプティマイザーはいずれかの集荷をスキップするか、適切な車両に割り当てます。

事前定義された型のセットはないことに注意してください。この例では、犬の体重を制限するために、荷重タイプを犬の単位から重量の単位に変更したり、幅や高さを制限するために、線形測定に変更したりできます。この柔軟性により、特定のニーズに合わせて負荷の需要と上限を調整できます。

リクエストの例

次の例は、サンプル シナリオの値を組み込んだ基本的な optimizeTours リクエストの構造を示しています。

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ],
        "label": "One bernese mountain dog",
        "loadDemands": {
          "dogUnit": {
            "amount": "1"
          }
        }
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ],
        "label": "Three chihuahuas",
        "loadDemands": {
          "dogUnit": {
            "amount": "3"
          }
        }
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "loadLimits": {
          "dogUnit": {
            "maxLoad": "6"
          }
        },
        "costPerKilometer": 1.0
      }
    ]
  }
}

この例とは異なり、配送には複数の積載需要があり、車両には複数の積載制限を設定できます。これにより、フリートのルートを最適化する際に考慮する複雑な制約を指定できます。