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

複合ゾーン: 進入および退出時間のペナルティ設定 (Compound Zones: Setting Entry and Exit Time Penalties)

大規模な工業団地、ゲート付きコミュニティ、または制限された市内中心部などの特定の配達または集荷エリアでは、そのエリア内の特定の停留所の場所に関係なく、単にエリアに出入りするために追加の時間が必要です。これらの「複合ゾーン (compound zones)」には、セキュリティゲート、内部道路網、または特定の交通パターンのナビゲーションが含まれる場合があります。このモデルは、これらの時間ペナルティを追加するための compound_zones パラメータを使用して、SWAT API によってサポートされています。

複合ゾーンは、指定された地理的エリア内のすべての注文に対して固定の集約サービス時間を組み込むことにより、車両ルーティング問題のモデル化を大幅に強化します。各個別の注文の個別のサービス時間に追加して適用されるこの集約サービス時間は、個々のピックアップまたはドロップオフの数に関係なく、車両が場所でかなりの時間を必要とする現実世界のシナリオを正確に反映しています。これの代表的な例は、倉庫または配送センターで必要なドッキング時間です。ピックアップまたはドロップオフされる各パッケージの個々のサービス時間を単に合計するのではなく、複合ゾーンモデルは、ゾーンへの進入、ゾーン内での操作、およびゾーンからの退出に関連するオーバーヘッドを考慮します。このオーバーヘッドには、個々の注文処理の前後に、施設内を移動したり、担当者とやり取りしたり、必要なロジスティクスタスクを実行したりする時間が含まれる場合があります。複合ゾーンに関連付けられた固定サービス時間は、その場所で必要な合計時間コミットメントのより現実的で包括的な表現を提供し、より正確で効率的なルート最適化につながります。この機能は、ドックの可用性や義務付けられたセキュリティ手順などの固定された運用制約が全体的な車両ルーティング効率に大きく影響する複雑なロジスティクスネットワークを扱う場合に特に価値があります。

複合ゾーンペナルティ:

複合ゾーンペナルティは、車両のルートが指定されたゾーンに出入りするときに発生する固定時間コストを定義します。複合ゾーンに必要な進入時間と退出時間は、ドロップオフまたはピックアップ場所に到達するために必要な移動時間に適用されます。

  • 進入時間 (Entry Time): 車両がゾーン外から来て、特定のゾーンシーケンス内の 最初の 停留所(または注文)に到着したときに追加される時間ペナルティ。
  • 退出時間 (Exit Time): 車両がその特定のゾーンシーケンス内の 最後の (または注文)でサービスを完了した後、ゾーン外の目的地に進む前に追加される時間ペナルティ。

これらのペナルティは、ゾーン内の停留所の 連続したシーケンスごとに1回 適用されます。車両がゾーンに入り、内部の複数の停留所を訪問してから離れる場合、そのシーケンスに対して1回の進入ペナルティと1回の退出ペナルティが発生します。

:

  • ゲート付きコミュニティ: ドライバーは、入り口でセキュリティを待機/クリアするのに5分(進入時間)、出発時に幹線道路に戻るのに3分(退出時間)かかる場合があります。
  • 大規模な工業団地: 最初の配達ポイントに到達するために内部道路網をナビゲートするのに10分(進入時間)かかり、最終ピックアップポイントから公園を出るのにさらに8分(退出時間)かかる場合があります。
  • 制限されたダウンタウンエリア: 歩行者優先または低排出ゾーンへの進入には、5分かかる特定のアクセス手順(進入時間)が必要になる場合があり、退出にも同様の時間が必要です。
  • 車両のドッキング時間: 積載操作が行われる前または後に車両をドッキングまたはドッキング解除するために必要な時間。

概念的な例:

配達会社には、大規模なキャンパス(ゾーン A)内とその外に停留所があります。

  • 停留所 1: ゾーン A の外
  • 停留所 2: ゾーン A の中
  • 停留所 3: ゾーン A の中
  • 停留所 4: ゾーン A の外

可能なルートシーケンス: デポ -> 停留所 1 -> ゾーン A に入る (進入時間ペナルティを追加) -> 停留所 2 -> 停留所 3 -> ゾーン A を出る (退出時間ペナルティを追加) -> 停留所 4 -> デポ。

進入ペナルティは停留所 2 に到着する に追加され、退出ペナルティは停留所 3 から出発した に追加されます。

実装 (Implementation)

複合ゾーンおよびそれに関連する進入/退出時間は、API リクエストの model_parameters.compound_zones セクション内で構成されます。ノード(停留所)は、特定の group を割り当てることでゾーンに関連付けられます。

compound_zones は、各オブジェクトが以下を定義する配列です。

  • group: ノードをこの特定の複合ゾーンにリンクする識別子。
  • entry_time: ゾーンに入るときに追加される時間ペナルティ(秒単位)。
  • exit_time: ゾーンを出るときに追加される時間ペナルティ(秒単位)。

複合ゾーンの一部となるノードは、groups リストに対応する group 識別子を含める必要があります。

groups を使用する代わりに、groups が他の設定に使用される場合など、より詳細な制御のために、複合ゾーンに割り当てる node_uids を明示的に設定することもできます。

"model_parameters": {
"compound_zones": [
{
"groups": ["IndustrialParkA","IndustrialParkB"],
"enter_time": 600, // 10 minutes
"exit_time": 480 // 8 minutes
},
{
"node_uids": ["45188b13-e91d-4d41-95fa-9cde22767231"],
"enter_time": 300, // 5 minutes
"exit_time": 180 // 3 minutes
}
]
},
"nodes": [
{
"uid": "stop1_park",
"groups": ["IndustrialParkA", "priority_deliveries"],
"lat": ..., "lon": ..., "service_time": 300, ...
},
{
"uid": "stop2_park",
"groups": ["IndustrialParkA"],
"lat": ..., "lon": ..., "service_time": 450, ...
},
{
"uid": "stop3_gated",
"groups": ["GatedCommunityX"],
"lat": ..., "lon": ..., "service_time": 200, ...
},
{
"uid": "45188b13-e91d-4d41-95fa-9cde22767231",
"groups": ["priority_deliveries"],
"lat": ..., "lon": ..., "service_time": 150, ...
}
]

ルーティングエンジンは、車両のルート内で同じ複合ゾーングループに属するノードのシーケンスを自動的に識別します。車両がグループ X にないノードからグループ X のノードに移動すると、そのグループ X シーケンスの最初のノードに到着する前の移動時間にグループ X の entry_time が追加されます。車両がグループ X のノードからグループ X にないノードに移動すると、そのグループ X シーケンスの最後のノードを出発した後の移動時間にグループ X の exit_time が追加されます。

Integration API による構成 (Configuration via Integration API)

Integration API を使用する場合、operations_location オブジェクトで calculation_params を構成することで、複合ゾーンを暗黙的に定義できます。システムはこれらの設定をルーティングエンジンの複合ゾーンに自動的に変換し、その場所に関連付けられたすべてのノード(注文)をグループ化します。

calculation_params JSON:

{
"exit_time": {
"fixed": 300
},
"enter_time": {
"fixed": 300
},
"coefficients": {},
"service_time": {
"fixed": null
},
"cumulative_limitation": null
}

この構成では:

  • enter_time.fixed: 固定進入時間を設定します(秒単位)。
  • exit_time.fixed: 固定退出時間を設定します(秒単位)。

これらのパラメータが設定されると、システムはその operations_location_id に割り当てられたすべてのノードを含む複合ゾーンを作成します。

エッジケース: 重複する場所

同じ物理座標(緯度/経度)を共有するが ID が異なる複数の operations_location エントリを定義すると、システムはそれらを 別々の 複合ゾーンとして扱います。

シナリオ:

  • 場所 A (座標: X, Y) は exit_time = 300秒。
  • 場所 B (座標: X, Y) は enter_time = 300秒。
  • ルート: 場所 A で停止 -> 場所 B で停止。

移動距離は事実上ゼロですが、ソルバーは2つの異なる複合ゾーン間の移行と見なします。

  1. 車両が 場所 A のゾーン を出る (退出ペナルティを適用)。
  2. 車両が 場所 B のゾーン に入る (進入ペナルティを適用)。

合計ペナルティ: 退出時間 (A) + 進入時間 (B)。

これにより、二重のペナルティが適用されます。これを回避するには、同じ物理的な場所にある注文が同じ operations_location_id を共有していることを確認するか、時間設定でこの累積効果を考慮してください。

特別なケースと考慮事項 (Special Cases and Considerations)

移動時間には、進入および退出ペナルティが含まれます。進入ペナルティを含むゾーンの最初の停留所への車両の到着が停留所の時間枠外になる場合、これは実現可能性に影響を与える可能性があります。ペナルティは最適化結果に個別に表示されません。それらは停留所間の移動時間に暗黙的に追加されます。

場所での固定サービス時間のモデリング (Modeling Fixed Service Time at a Location)

複合ゾーンの強力なユースケースは、ピックアップまたはドロップオフされる注文の数に関係なく、場所全体(倉庫や配送センターなど)の固定サービス時間をモデル化することです。これは、扱われるパッケージの数に関係なく一定の時間がかかる、車両のドッキング、セキュリティチェック、または管理手順などのシナリオに役立ちます。

  • exit_time の使用: exit_time は、車両がゾーン内の最後のノードでのサービスを完了して出発した の移動時間に追加されます。つまり、ゾーン内のノードの scheduled_ts には影響しません。これは、次の目的地に向けて出発する前に発生する固定期間のアクティビティ(ドッキング解除や事務処理など)を正しくモデル化します。

  • enter_time の使用: enter_time は、車両がゾーン内の最初のノードに到着する の移動時間に追加されます。これは、そのノードの scheduled_ts に直接影響し、ルート内の後続のすべてのノードに連鎖的な遅延を引き起こす可能性があります。これにより、時間枠を満たすことが難しくなり、到着時であるがサービス開始前に発生するアクティビティを正確に反映しない場合があります。

ヒント

これには enter_timeexit_time の両方を使用できますが、後続のノードへの予定到着時間の計算に影響を与えないため、exit_time が推奨されるアプローチです。

例: 倉庫ドッキング時間 (Example: Warehouse Docking Time)

倉庫で荷降ろしを開始する前に、トラックがドッキングするために固定の15分間が必要であると想像してください。これは、単一のノード(倉庫)を持つ複合ゾーンとしてモデル化できます。

exit_time: 900(15分)を設定することにより、オプティマイザーは、車両が倉庫でのサービスを終了した後、出発する直前にこの固定時間を考慮します。これにより、到着時間を人為的にシフトすることなく、車両のスケジュールが正確なままになります。

以下の図は、enter_timeexit_time がスケジュールにどのように影響するかを示しています。exit_time はノードのサービスが完了した後に追加され、予定到着時間が維持されることに注意してください。