時間ウィンドウ

時間枠は、`ShipmentModel`、集荷と配達のオブジェクトの `Shipment`、`Vehicle` に存在します。

時間枠は、ルート上のイベントのタイミングを指定します。これらのイベントには、ドライバーのルートの開始と終了、予定された集荷と配達の時間、ルート全体の所要時間などが含まれます。

時間枠は、次のような目標をサポートできます。

  • 指定された期間内に集荷と配達を完了することを優先します。
  • ルートを計画して、営業時間全体で運用できるようにします。
  • 指定された時間枠内で車両がルートを開始して終了するようにします。

構造

図に示すように、時間枠は次のように構成されています。

Essentials のチェックリスト

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

プロパティ

次の表に、グローバル タイム ウィンドウのプロパティを示します。

プロパティ 形式 説明
globalStartTime Timestamp イベントの最も早い時刻。
globalEndTime Timestamp イベントの最新の時刻。

次の表に、配送と車両の時間枠プロパティを示します。

親 プロパティ 形式 説明
Shipment.pickups timeWindows TimeWindow メッセージ タイプの配列。 荷物の集荷の時間間隔を指定します。
Shipment.deliveries timeWindows 配送の時間間隔を指定します。
Vehicle startTimeWindows 車両の運行スケジュールの開始時刻を指定します。
endTimeWindows 車両の運行スケジュールの終了時間を指定します。

次の表に、TimeWindow メッセージ タイプのプロパティを示します。

プロパティ 形式 説明
startTime 文字列(RFC3339 UTC「Zulu」形式) 期間の開始。
endTime 文字列(RFC3339 UTC「Zulu」形式) 時間枠の終了。

例

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

コードサンプル

以降のセクションでは、さまざまなタイプの時間枠のコードサンプルを示します。

グローバル時間ウィンドウ

次のコードサンプルは、グローバル タイム ウィンドウの構造を示しています。

{
  "model": {
    "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ",
    "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ",
    "shipments": [ ... ],
    "vehicles": [ ... ]
  }
}

集荷と配達の時間枠

次のコードサンプルは、集荷と配送の時間枠の構造を示しています。

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [ ... ]
  }
}

車両の時間枠

次のコードサンプルは、車両の時間枠の構造を示しています。

{
  "model": {
    "shipments": [ ... ],
    "vehicles": [
      {
        "startTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ]
      }
    ]
  }
}

シナリオ例

このセクションでは、犬のデイケア ビジネスのシナリオを使用します。この例では、2 つの異なる家から犬を集荷して配達するルートを最適化します。所有者は同じ集荷と配達の時間枠を設定しています。オプティマイザーは、保育所の営業時間、お客様の特定の送迎時間、ドライバーの勤務時間を考慮する必要があります。

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

親 プロパティ 値 シナリオ
ShipmentModel globalStartTime 2023-01-13T07:00:00Z 犬のデイケアの営業開始時間を表します。この時刻より前に集荷や配達を行うことはできません。
ShipmentModel globalEndTime 2023-01-13T19:00:00Z 犬のデイケアの閉店時間を表します。すべての集荷と配達は、この時間までに完了する必要があります。
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
お客様の家から犬をピックアップするのに許容される時間枠を定義します。この例では、両方のお客様に午前 7 時 30 分から午前 9 時の間に集荷に立ち会うよう伝えています。
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
お客様の自宅に犬を送り届ける際の許容時間枠を定義します。この例では、両方のお客様に、午後 5 時から午後 6 時 30 分の間に犬を送り届けると伝えています。
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
車両の出発(午前 7 時~午前 7 時 15 分)と終了(午後 5 時~午後 5 時 15 分)の許容時間枠を定義します。
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

次の図は、このルートに影響する時間枠を示しています。

複数のタイムラインは、グローバル時間枠、集荷と配達のお届け日数、車両の開始と終了の時間枠、車両の稼働時間を表します。

このシナリオでは、図に示すように、時間枠は次のように機能します。

  • グローバル タイム ウィンドウは、犬のデイケアの営業時間を表します。他のすべてのタイム ウィンドウは、このタイム ウィンドウ内に収まる必要があります。
  • 集荷と配達には、それぞれ 1 日の開始時と終了時に独自の timeWindows があります。
  • 車両の startTimeWindows は、車両オペレーターが作業を開始する必要がある時間枠を示し、endTimeWindows は、1 日の作業を終了する必要がある別の時間枠を示します。
  • 最初の startTimeWindow の開始時刻と最後の endTimeWindow の終了時刻は、車両の営業時間を定義します。この場合、グローバル タイム ウィンドウと同じです。

リクエストの例

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

{
  "model": {
    "globalStartTime": "2023-01-13T07:00:00Z",
    "globalEndTime": "2023-01-13T19:00:00Z",
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27,
        "startTimeWindows": [
          {
            "startTime": "2023-01-13T07:00:00Z",
            "endTime": "2023-01-13T07:15:00Z"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "2023-01-13T18:45:00Z",
            "endTime": "2023-01-13T19:00:00Z"
          }
        ]
      }
    ]
  }
}

ソフト タイム ウィンドウ

時間枠は、TimeWindow メッセージ タイプで softStartTime と softEndTime を定義することで、ソフト制約として使用できます。これにより、オプティマイザーは指定されたコストで指定された時間枠から逸脱し、有益な場合は時間枠の厳守よりも全体的な最適化を優先できます。

ソフト タイム ウィンドウには、次の使用制限があります。

プロパティ

次の表に、時間枠のソフト制約プロパティを示します。

プロパティ名 形式 プロパティの説明
softStartTime タイムスタンプ ソフト タイム ウィンドウの開始を指定します。この時刻より前にイベントが発生すると、費用が発生します。
softEndTime タイムスタンプ ソフト タイム ウィンドウの終了を指定します。この時間を過ぎてイベントが発生すると、費用が発生します。
costPerHourBeforeSoftStartTime 数値 softStartTime より前にイベントが開始された場合に発生する 1 時間あたりの費用。このプロパティは、softStartTime を使用する場合に必須です。費用の実装方法の詳細については、費用モデルの主なコンセプトをご覧ください。
costPerHourAfterSoftEndTime 数値 softEndTime の後にイベントが終了した場合に発生する 1 時間あたりの費用。このプロパティは、softEndTime を使用する場合に必須です。費用の実装方法の詳細については、費用モデルの主なコンセプトをご覧ください。

コードサンプル

次の例は、TimeWindow メッセージ タイプのソフト制約プロパティの構造を示しています。

    {
      "softStartTime": "SOFT_START_TIME",
      "softEndTime": "SOFT_END_TIME",
      "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME,
      "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME
    }