負荷の需要と制限

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

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

積載量と上限は、次のような目標をサポートできます。

  • 車両の過積載を防ぐ。
  • 配送物の集荷と配達に伴う車両の積載量の変化をモニタリングする。
  • 大型車両と重量物の配送物の組み合わせを優先する。

積載量と上限は、次のプロパティで指定します。

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

構造

図に示すように、積載量と上限は次のように構成されています。

基本チェックリスト

次のチェックリストは、積載量に関連するミスを防ぐために不可欠な知識について説明しています。このリストは、リクエストを検証し、レスポンスのトラブルシューティングを行う際に役立ちます。

プロパティ

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

  • 積載量のタイプ: 積載量と上限の間で共有されるプロパティ。
  • LoadLoadLimit: 積載量 と上限にそれぞれ存在する固有のプロパティ。

積載量のタイプ

積載量のタイプは、配送と車両に均等に適用される文字列キーです。1 つの積載量のタイプは、配送の積載量と車両の積載量の上限の両方に適用されます。

積載量のタイプでは、Protocol Buffers の map 型の構文を使用します。積載量のタイプに名前を付ける場合は、積載量のタイプとその単位を表す識別子を使用します。例: weightKgvolume_gallonspalletcount、または frequencyDaily

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
      }
    ]
  }
}

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

積載量の上限の緩和

車両の loadLimitssoftMaxLoadcostPerUnitAboveSoftMax を追加すると、積載量の上限を緩和した制約として設定できます。これにより、オプティマイザは、積載量の上限を厳守するよりもルートの完了を優先して、コストをかけて車両の最大積載量を超えることができます。

maxLoadsoftMaxLoad を組み合わせて使用すると、積載量の上限を厳格 と緩和の両方で設定できます。この場合、softMaxLoad は超過できる積載量を設定し、maxLoad は超過できない厳格な上限を設定します。両方を使用する場合、maxLoadsoftMaxLoad より大きくする必要があります。

プロパティ

次の表に、積載量と上限の緩和した制約のプロパティを示します。

プロパティ名 プロパティのタイプ プロパティの説明
loadLimits softMaxLoad 文字列(int64 形式) 車両の推奨最大積載量。車両の積載量がこの値を超えると、費用が発生します。
loadLimits costPerUnitAboveSoftMax 数値 softMaxLoad を超える積載量の単位あたりの費用。softMaxLoad を使用する場合は、このフィールドが必須です。費用の詳細については、費用モデルの基本コンセプトをご覧ください。

コードサンプル

次の例は、loadLimits の緩和した制約のプロパティの構造を示しています。

{
   "loadLimits": {
        "LOAD_TYPE": {
          "softMaxLoad": "LOAD_AMOUNT",
          "costPerUnitAboveSoftMax": COST_PER_UNIT
        }
      }
}