メインコンテンツまでスキップ

ドライバー休憩 (Driver breaks)

SWAT Optimization API と Integration API はどちらもドライバー休憩をサポートしており、運用上のニーズや法的要件に合わせて動的な割り当てを可能にします。たとえば、ルート最適化では、設定された他の制約を尊重しながら、特定の運転期間後の必要な休憩の長さを実行計画に組み込むことができます。2つの主要なユースケースが適用され、最適化へのドライバー休憩の追加をシミュレートするときに相互排他的な方法で使用できます。

  • 車両トリップの 単一 ドライバー休憩
  • 車両トリップの 複数 ドライバー休憩

以下で説明するパラメータは、車両 api に適用される Optimization (Stateless) API ペイロードの一部です。

{
"agent_id": "78e07d0f-abbc-4c7d-921e-54ba7bab1041",
"capacity": {
"goods": 13
},
"characteristics": {},
"lat": 1.3309909478620003,
"lon": 103.86845911685897,
// Single and multi break case
"dynamic_break_duration": 3600,

// Single break case
"dynamic_break_min_path_duration": 120,
"dynamic_break_start_time": "2019-08-24T14:15:22Z",
"dynamic_break_end_time": "2019-08-24T14:15:22Z",

// Multi break case
"dynamic_break_avg_time_between_breaks": 360,
"dynamic_break_max_latency": 0,
"max_pickup_locations": 10
}
ヒント

計画されたドライバー休憩は最終的にノードのスラックに追加され、ルート最適化の目的でノードでの標準スラック(待機時間)と見なされます。

dynamic_break_avg_time_between_breaks を特定の値に設定すると、単一または複数のドライバー休憩モードを使用するかどうかが決まります。この値が設定されていない場合、単一ドライバー休憩が適用されます。それ以外の場合は、複数休憩モードが適用されます。ドライバー休憩は、予約レベルではなくノードレベルで適用されます。

ドライバー休憩は、車両に割り当てられた ノード

でのみ許可されます。ドライバー休憩に割り当てられた時間は、ノードのスラック時間に追加されます。休憩ノードは、最大のスラックを持つパス内のノードの1つから選択されます。休憩ノードは、パスの最初または最後にすることはできません。スラックが同一の場合、休憩ノードは、prebook_cvrptw モードではパスの中央にできるだけ近くなるように、prebook モードでは可能な限り最小の需要を持つように選択されます。

警告

ドライバー休憩はハード制約です。割り当てられたドライバー休憩を持つという要件が有効な場合、ドライバー休憩によって想定される追加の時間制約を満たさなくなった場合、一部の予約が拒否される可能性があります。

単一休憩 (Single break)

単一休憩シナリオは、車両の単一トリップ(最適化実行)に対して 1回 の休憩のみが許可されるか、休憩なし であることを前提としています。ドライバー休憩は4つのパラメータによって管理されます。

  • dynamic_break_duration (秒単位)
  • dynamic_break_min_path_duration (秒単位)
  • dynamic_break_start_time (日時スタンプ)
  • dynamic_break_end_time (日時スタンプ)

dynamic_break_duration パラメータは、スケジュールする休憩の期間を指定します。dynamic_break_min_path_duration パラメータは、ドライバー休憩をいつ、またはスケジュールするかどうかを制御します。休憩は、車両が dynamic_break_min_path_duration よりも長く移動した場合にのみスケジュールされます。

予想される車両パス期間が dynamic_break_min_path_duration 未満の場合、ドライバー休憩は追加されません。ただし、パラメータがゼロの場合、車両パス期間はゼロより大きいため、常にドライバー休憩がスケジュールされます。dynamic_break_min_path_duration は、計算中に、結合された車両移動時間、ノードのスラック時間、およびノードのサービス時間を考慮に入れます。

車両パスにノードが1つしかない場合、ドライバー休憩は追加されません。

dynamic_break_start_time および dynamic_break_end_time パラメータは、ドライバー休憩をスケジュールできる時間枠を定義します。最大または最小の時間境界のみを指定することが可能であり、その場合、その制約のみが強制されます。

複数休憩 (Multiple breaks)

複数休憩シナリオは、単一のトリップ(最適化実行)に対して車両に 複数1回、または 休憩なし が割り当てられる可能性があることを前提としています。この場合、ドライバー休憩は3つのパラメータによって管理されます。

  • dynamic_break_avg_time_between_breaks (秒単位)
  • dynamic_break_duration (秒単位)
  • dynamic_break_max_latency (秒単位)

dynamic_break_duration パラメータは、スケジュールする休憩の期間を指定します。計画された各休憩は同じ期間になります。

dynamic_break_avg_time_between_breaks パラメータは、車両が休憩なしで運転できる最大平均時間を制御します。計算には、累積車両移動時間、ノードスラック時間、およびノードサービス時間が含まれます。休憩間の規定の最小間隔はないため、同じノードで複数の連続した休憩が可能です。

dynamic_break_max_latency を使用すると、ドライバーの休憩制約を、遅刻を許容するより柔軟な制約に変換できます。この値は、休憩の最大許容遅延を指定します。

車両割り当てからの結果の解釈 (Interpreting results from the vehicle assignments)

Optimization (Stateless) API では、ドライバーの休憩スケジュールは、車両 api に割り当てられたすべてのノードを列挙する車両割り当てリスト内にあります。

警告

予約には2つのノード(ピックアップとドロップオフ)との関連付けが必要です。ルート最適化により、車両は複数のピックアップとドロップオフを実行する場合があります。その結果、車両ルートの割り当てはノードレベルで処理されます。Optimization (Stateless) API は、予約ではなく、車両に割り当てられたノードの順次リストを提供します。

次の例は、ノードに割り当てられた2つの休憩を示しています。slack で示される値は、その特定のノードでの合計待機時間を意味し、この例では 2*<dynamic_break_duration>+node_slack 値が組み込まれています。

{
"booking_uid": "some_booking", // Booking UID this node belongs to
"dynamic_break": 2,
"lat": 30.0,
"location_code": null,
"location_name": null,
"lon": 130.0,
"matrix_timestamp": null,
"node_type": "pickup",
"scheduled_cumulative_distance": 0,
"scheduled_ts": "2022-08-01T14:34:18.600504+00:00",
"service_time": 0,
"slack": 18349.5,
"stop_id": "warehouse",
"uid": "some_uid" // This node's UID
}

dynamic_break 休憩が null に設定されている場合、そのノードで休憩はスケジュールされません。

FAQ

一般的なユースケースのいくつかを以下に説明します

Q: 現在のトリップ中にドライバー休憩が1回だけであると仮定して、トリップが4時間を超えたときにドライバーが30分の休憩を取らなければならない状況をどのようにモデル化しますか? A: ドライバーに割り当てられた車両には、次のパラメータが構成されている必要があります。計画された車両パスが4時間未満の場合、休憩はスケジュールされません。さらに、開始時間と終了時間の制約が設定されていないため、休憩はパスに沿った任意のポイント(ノードに接続)で割り当てることができます。

{
// ...
"dynamic_break_duration": 1800,
"dynamic_break_min_path_duration": 14400
// ...
}

Q: 休憩期間 (dynamic_break_duration) が30分に設定され、休憩間の時間 (dynamic_break_avg_time_between_breaks) が4時間に設定されている場合、さまざまなスラックとサービス時間を持つ複数のドライバー休憩を含むシナリオの例を提供できますか? A: 以下の時間図をご覧ください

シナリオ 1: 移動 5時間

シナリオ 2: スラック 5時間 + 移動 5時間

シナリオ 3: スラック 2時間 + 移動 3時間

シナリオ 4: サービス 1時間 + スラック 1時間 + 移動 3時間

シナリオ 5: マルチストップ

プレイグラウンド (Playground)

以下のプレイグラウンドを使用して、ドライバー休憩 の概念を試すことができます。 この例では、3600秒(1時間)の dynamic_break_duration を持つ車両を定義します。

Loading...