負荷の需要と制限

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

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

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

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

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

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

構造

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

基本チェックリスト

次のチェックリストは、積載量に関連する潜在的なミスを防ぐための基本的な知識を示しています。このリストは、リクエストの検証とレスポンスのトラブルシューティングに役立ちます。

プロパティ

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

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

積載量のタイプ

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

積載量のタイプでは、プロトコル バッファのマップタイプの構文を使用します。積載量のタイプに名前を付ける場合は、積載量のタイプとその単位を表す識別子を使用します。例: weightKg、volume_gallons、palletcount、または frequencyDaily。

Load と LoadLimit

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 匹の犬のスペースが必要で、2 番目の出荷では 3 匹の犬のスペースが必要です。車両の最終状態は、6 つのスペースのうち 4 つが占有され、2 つの空きスペースが残っている状態です。

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

  • 車両は最大 6 匹の犬を運ぶことができ、迎えに行く犬は 4 匹だけなので、オプティマイザは問題なく 犬を輸送する車両のルートを生成できます。

  • 車両の積載量の上限が 6 dogUnit の場合、この特定の車両で運べる犬はあと 2 匹 だけです。

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

事前定義されたタイプのセットはありません。この例では、積載量のタイプを犬の単位から重量の単位に変更して犬の重量を制限したり、線形測定に変更して幅や高さを制限したりできます。この柔軟性により、特定のニーズに合わせて積載量と上限を調整できます。

リクエストの例

次の例は、シナリオ例の値を組み込んだ基本的な 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 台の車両に複数の上限を設定できます。これにより、フリートのルートを最適化する際に考慮すべき複雑な制約を指定できます。

積載量のソフトリミット

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

maxLoad と softMaxLoad を組み合わせて使用すると、ハードリミット とソフトリミットの両方を設定できます。この場合、softMaxLoad は超過できる積載量を設定し、maxLoad は超過できないハードリミットを設定します。両方を使用する場合は、maxLoad は softMaxLoad より大きくする必要があります。

プロパティ

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

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

コードサンプル

次の例は、loadLimits のソフト制約プロパティの構造を示しています。

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