時間枠は、ルート上のイベントのタイミングを指定します。これらのイベントには、ドライバーのルートの開始と終了、予定されている集荷と配達の時間、ルート全体の所要時間などがあります。
期間は、次のような目標をサポートできます。
- 指定された時間枠内で集荷と配達の完了を優先します。
- ルートを計画して、営業時間内に運行します。
- 指定された時間枠内で車両がルートを開始して終了するようにします。
構造
図に示すように、時間枠は次のように構成されています。
globalStartTime
とglobalEndTime
はShipmentModel
のプロパティです。timeWindows
は次のプロパティです。Shipment
内のpickups
。Shipment
内のdeliveries
。
startTimeWindows
とendTimeWindows
は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
は、その日の作業を終了しなければならない時間枠を示します。 - 最初の
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
を定義することで、ソフト制約として使用できます。これにより、オプティマイザーは指定された費用で指定された時間枠から逸脱し、有益な場合は時間枠の厳守よりも全体的な最適化を優先できます。
ソフト タイム ウィンドウには次の使用制限があります。
TimeWindow
メッセージ タイプを使用しないため、globalStartTime
とglobalEndTime
には適用できません。- これらは、リストに 1 つの
TimeWindow
がある場合にのみ適用されます。
プロパティ
次の表に、時間枠のソフト制約プロパティを示します。
プロパティ名 | 形式 | プロパティの説明 |
---|---|---|
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 }