基本構造(ShipmentModel、Shipment、Vehicle)

ShipmentModel には、`Shipment` メッセージ タイプの `shipments` オブジェクトと、`Vehicle` メッセージ タイプの `vehicles` オブジェクトが 1 つずつあります。

Route Optimization API の目的は、フリートの車両が複数の場所に立ち寄るルートを計画することです。OptimizeToursRequest オブジェクトは、これらの車両と位置のプロパティを表し、すべてのエンドポイントのリクエスト本文の主要な構造です。

OptimizeToursRequest オブジェクトの基本構造は次のとおりです。

  • model フィールドには、次の 2 つのキーフィールドを含む ShipmentModel メッセージが保持されます。
    • 1 つの shipments フィールド。1 つまたは複数の Shipment メッセージが含まれます。
    • 1 つの vehicles フィールド。1 つまたは複数の Vehicle メッセージが含まれます。

このドキュメントでは、次のメッセージ タイプについて説明します。

  • ShipmentModel: 配送、利用可能な車両、それらの関係を表すその他のオブジェクトのリストを保持します。
  • Shipment: 車両が訪問する場所を記述します。実際の集荷と配達の荷物や、車両の運転手がサービスを行う場所を表すことができます。
  • Vehicle: 配送場所間の交通手段を説明します。各車両は、実際の車両または徒歩で移動する人物に対応します。

ShipmentModel

ShipmentModel には、ルート最適化問題の要素が格納されます。制約を考慮し、全体的な費用を最小限に抑えながら、一連の車両で実行できる一連の配送が含まれています。

次の表に、ShipmentModel の関連するプロパティを示します。

プロパティ 説明
shipmentsvehicles 1 つまたは複数の配送と車両の詳細を含む必須オブジェクト。
globalStartTimeglobalEndTime すべての車両がすべての配送を完了する必要がある時間枠の開始と終了を示します。これらのプロパティは必須ではありませんが、時間制約に準拠している場合にオプティマイザーのパフォーマンスが最大になるため、含めることをおすすめします

ShipmentModel のプロパティの完全なリストについては、リファレンス ドキュメントをご覧ください。

ShipmentModel の例

この例では、犬の保育サービスがあり、リクエストの作成を開始します。後で配送と車両を定義するが、まず営業時間と 1 時間あたりの運用コストを設定する。

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

プロパティ 説明
globalStartTime 2024-02-13T00:00:00.000Z 営業時間の開始日時。
globalEndTime 2024-02-14T06:00:00.000Z 営業時間の終了日時。

次に、シナリオの例の値を組み込んだ ShipmentModel メッセージのコードサンプルを示します。

{
  "model": {
    "shipments": [
      ...
    ],
    "vehicles": [
      ...
    ],
   "globalStartTime": "2024-02-13T00:00:00.000Z",
   "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}

Shipment

Shipment メッセージ タイプは、ルートで配送できる荷物または実行できるサービスのプロパティ構造を定義します。

実際の配送は 1 つの `Shipment` メッセージに相当し、`shipments` オブジェクト内に含まれます。

図に示すように:

  • Shipment メッセージには、実際の配送やサービスに関するすべての情報が含まれています。
  • すべての Shipment メッセージは shipments フィールドで指定されます。
  • shipments フィールドには 1 つ以上の Shipment メッセージが含まれています。

Shipment メッセージには、少なくとも 1 つの pickups オブジェクトまたは deliveries オブジェクトが必要です。これらのオブジェクトの定義は次のとおりです。

  • pickups は、配送の集荷場所を定義します。
  • deliveries は、配送の配送先を定義します。
  • pickupsdeliveries の両方に、場所などの詳細を定義する VisitRequest メッセージ タイプが含まれています。

次の表に、Shipment メッセージ内の pickupsdeliveries の構成に基づくさまざまなシナリオを示します。

シナリオ 説明
pickups のみ 荷物の集荷のみを行うことを前提としています。
deliveries のみ 配送物を事前に読み込んでいるか、サービスを提供していることを前提としています。
pickupsdeliveries の両方 割り当てられた車両は、まず集荷を完了してから配達する必要があります。配達を行えるのは、集荷を行った車両のみです。
複数の pickups または deliveries 配送に pickups または deliveries の候補が複数ある場合、オプティマイザーは、費用を最小限に抑え、制約を満たすように、1 つの集荷オプションと 1 つの配送オプションを選択します。

Shipment のプロパティの完全なリストについては、リファレンス ドキュメントをご覧ください。

Shipment の例

この例では、犬の保育サービスを提供しており、犬を自宅まで迎えに行って保育園に連れて行きます。2 匹の犬の受け取り場所を設定し、配達場所をビジネスに設定します。

  • 最初の犬の家はサンフランシスコのコイトタワーにあります。この場所の座標は、緯度 37.8024、経度 -122.4058 です。
  • 2 匹目の犬の家は、サンフランシスコのサウス サンセット プレイグラウンド パークにあります。この場所の座標は、緯度 37.7359、経度 -122.5011 です。
  • 犬の保育園はサンフランシスコのミッション ドロレス パークにあります。この場所の座標は、緯度 37.759773、経度 -122.427063 です。

以下は、Shipment メッセージのコードサンプルです。shipments オブジェクトには、座標の例を含む 2 つの Shipment メッセージ タイプが含まれています。

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      }
    ],
    "vehicles": [
    ...
    ]
  }
}

Vehicle

Vehicle メッセージ タイプは、ルートで配送を実行できる車両のプロパティ構造を定義します。

実際の車両は 1 つの `Vehicle` メッセージに相当し、`vehicles` オブジェクト内に含まれます。

図に示すように:

  • Vehicle メッセージには、実際の車両のすべての情報が含まれています。
  • すべての Vehicle メッセージは vehicles フィールドで指定されます。
  • vehicles フィールドには複数の Vehicle メッセージが含まれています。

次の表に、Vehicle の関連プロパティを示します。

プロパティ 説明
startLocationendLocation 最終的な最適化されたルートの一部である車両の出発地と目的地。定義されていない場合、デフォルトで最初の配送の集荷場所と最後の配送の配達場所になります。
costPerHourcostPerKilometercostPerTraveledHour 車両固有の費用パラメータ。API が最適化されたルートを返すには、リクエストに少なくとも 1 つの費用パラメータを設定することをおすすめします。費用の詳細については、費用モデルの基本的なコンセプトをご覧ください。
startTimeWindowsendTimeWindows 車両がルートを走行できる期間を定義します。これらは、ShipmentModel で設定された globalStartTimeglobalEndTime の時間枠内に収まる必要があります。このプロパティは必須ではありませんが、時間制約に準拠している場合にオプティマイザーが最適に動作するため、含めることをおすすめします

Vehicle の例

この例では、犬の託児サービスを提供しており、1 日の始まりと終わりの車両の位置と、ガソリンの消費量を定義したいと考えています。ShipmentModel オブジェクト内の globalStartTime プロパティと globalEndTime プロパティで定義した時間と一致するため、車両の稼働時間を指定する必要はありません。

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

プロパティ 説明
startLocation latitude: 37.759773、longitude: -122.427063 車両のルートの開始座標。これは、サンフランシスコのミッション ドロレス パークにある犬のデイケアの所在地と一致します。
endLocation latitude: 37.759773、longitude: -122.427063 車両のルートの終了座標。これは、サンフランシスコのミッション ドロレス パークにある犬のデイケアの所在地と一致します。
costPerHour 27 犬のデイケアの車両を運転するドライバーに支払う金額。運転手には 1 時間あたり 27 ドルを支払います。

次に、シナリオの例の値を組み込んだ Vehicle メッセージのコードサンプルを示します。

{
  "model": {
    "shipments": [
    ...
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27
      }
    ]
  }
}

Vehicle のプロパティの完全なリストについては、リファレンス ドキュメントをご覧ください。

完全なリクエストの例

次のコードサンプルは、このドキュメントで説明した ShipmentModelShipmentVehicle の例を組み合わせた完全なリクエストの例を示しています。

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27
      }
    ],
    "globalStartTime": "2024-02-13T00:00:00.000Z",
    "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}