LBAP (線形ボトルネック割り当て) は、ケースに関連する割り当ておよびパス ルーティングの問題のファミリ全体の 1 つの特定のサブクラスにすぎません。
n 個のロボットに実装するMinMaxルーティング アルゴリズムを決定する際には、さまざまな選択肢があります。これが私がすることです: Dijkstra の最短パス アルゴリズムの最も単純な実装から始めます。
Dijkstraのウィキペディア ページには素晴らしい視覚的な例がありますが、その疑似コードは必要以上に難解に見えます。あなたの質問からは、実装するパスアルゴリズムを探しているように見えますが、ロボットの動作計画にもリンクしています。
[OP の明確化 re に基づいて更新。最小最大]
Dijkstra は引き続き機能しますが、いくつかの追加手順が必要です。基本的な戦略は次のとおりです。
For each robot r = 1 to n
calculate the shortest time-path for r from source of r to sink of r - (suggest starting with Dijkstra's) [if you are assuming constant speeds, then distance and length become equivalent]
Next r
MinMax スキーマ:
- すべてのパス (時間) を所要時間でソートし、最も長いパスを取得します。(これはあなたの理論的な最小最大時間です。) - それを呼びましょう
t_max
- 他のロボット r には時間があります
"slack"
-t_max
マイナス time_r
- ロボットの各ペアを取り、パスが競合するかどうかを確認します。
- 競合がなければ完了です。
- 競合する場合は、ルートを変更する必要があります (競合するノード/エッジの回避) が、スラック タイムの範囲内です。(最も簡単なルート変更は、競合するロボットがエッジまたは交差点を通過するまで待つことです。)
- 内でルーティングできれば
slack
完了です。それ以外の場合は、t_max を更新して、最長の (再ルーティングされた) パスにします。
使用できるダイクストラ コードの例を次に示します。(ウェブ検索でさらに多くの情報が得られます。)
- http://cs.fit.edu/~ryan/java/programs/graph/Dijkstra-java.html (Java)
- ここにRubyの要点があります
その他の注意事項:
- ダイクストラの方法にとらわれる必要はありません。他のルーティング アルゴリズムが見つかったら、交換して試すことができます。いくつかのルーティング アルゴリズムを試してください。
- 競合をチェックすることを忘れないでください。(つまり、2 つのロボットが同時に同じノードにいる場合) コンフリクトフリー ルーティングの最も基本的な実装には、ノードがクリアされるまで 1 つのロボットが先に進む前に待機する優先ルールが含まれます。
それが役立つことを願っています。