オペレーションズ リサーチが時々直面するシナリオの 1 つは、都市交通のネットワーク設計やチップの表面設計など、最短経路を見つけるという問題です。このような問題を解決するには、離散動的計画法 (DDP)手法が一般的に使用されます。今日はこのシナリオとそれを解決するアルゴリズムを学びます。
1
モデルとしての抽象
現実世界のシナリオによく似た 3 つの例を使用して、モデルと関連用語を紹介します。
リトルビル交通計画
あなたがリトルビル市の交通技師であるとします。次の図は、市の都市道路計画です。この図は、道路が一方通行であるか双方向道路であるかを示し、平均所要時間も示しています。車が各ブロックを通過するのにかかる時間(単位:秒)。
調査報告書などのデータから、旅行する住民の数、旅行の出発地と目的地は推定できますが、彼らがどのようなルートを選択するかは不明です。交通技術者の仕事の 1 つは、市の管理者が特定の道路が渋滞を引き起こすかどうかを推定できるように、住民が通過するルートを推定することです。
適切な初期推定値を得るには、まず旅行するすべての住民が合理的な決定を下している、つまり出発地と目的地を結ぶ最短経路を選択していると仮定できます。したがって、まずグラフ内の任意の 2 点間のすべての最短経路を見つける必要があります。
この問題を数学を使用して解決するには、まず、与えられたブロック システムをグラフまたはネットワークに抽象化します。機械学習の確率グラフにおけるグラフ モデルの予備的な定義を与えました。オペレーションズ リサーチでは、少し異なります。明確かつ正確に表現するために、次のように定義します。
ノードは、ネットワーク内のエンティティ、交差点、および遷移を表します。便宜上、Littleville の例のノードには 1 から 10 までの番号が付けられています。ノードは円弧またはエッジで接続できます(円弧は方向エッジを指します)。たとえば、ここでは円弧は一方通行の道路を表すために使用され、エッジは双方向の道路を表すために使用されます。
Littleville の例をグラフに変換すると、次のように表されます。
グラフを使用すると、パスを定義できます。
パスは、グラフ内の2 つの特定のノードを接続する一連の円弧またはエッジです。このシーケンスでは、各円弧またはエッジには、その前の円弧またはエッジとの共通点が 1 つだけあります。円弧を通過するときは、円弧にマークされた方向にのみ通過できます。同時に、道路が繰り返し通過するノードはありません。
たとえば、Littleville の例では、3-7-10-8 や 3-4-10-8 など、ノード 3 からノード 8 までのパスが多数あり、どちらもパスです。また、(5, 8) は 8-5 のみの円弧であるため、3-7-6-5-8 は道路ではありません。3-7-6-9-7-10-8 は道路ではありません。ノードは再利用されます 7.
実際の問題の抽象グラフの円弧とエッジにコストや長さが関係する場合、最適化問題に直面します。最短パス問題は、グラフ内の 2 つのノード間の合計長が最短のパスを見つけることです。
Littleville のケースは、次の基本的な仮定を持つ最短経路問題のクラスです。
図: 円弧とエッジ
コスト: 負ではない
出力: 最短パス
ペアリング方法:全ノードとその他のノード
さらに、最短経路の問題には 2 つの追加カテゴリが含まれており、それを例で説明します。
テキサスの運送会社
下の図はテキサス州のいくつかの主要都市の高速道路接続図を示しており、横にマークされている数字は標準走行距離(単位:マイル)を表しています。
テキサス交通会社は、フォートワースの中央倉庫からマップ内の他のすべての都市に商品を配送する必要があります。トラックは倉庫を出発し、途中で荷物の積み下ろしをすることなく目的地へ直行します。ドライバーはフォートワースから目的地までのルートを自分で選択できますが、ドライバーへの支払いは出発地から目的地までの最短ルートに基づいて行われます。この提案が会社に与える影響を明確にするために、倉庫からすべての都市までの最短経路の長さを計算する必要があります。
テキサス交通の基本的な前提は次のとおりです。
図: エッジのみ
コスト: 負ではない
出力: 最短パス
ペアリング方法: 他のノードへの開始点
「ダブルリング」サーカス
サーカス「ダブルリング」の公演も終わりに近づいている。彼らはタラハシーの本社に戻る予定だ。現在の取り決めによれば、最後の公演はリンカーン郡で終わることになっているが、帰りの都市で事前予約があれば、地元で公演することも可能だという。下の画像は、考えられる帰還ルートと推定コストを数千ドル単位でプロットしたものです。また、都市内で活動することで得られる期待収入(単位:千ドル)も示している。私たちは、収益を最大化するためにサーカスの最適な帰還ルートを見つけたいと考えています (ここでの収益はノードで生成されます)。
このオリジナルのサーカス旅行ネットワークは無向グラフです。まず、ノードの収入が処理され、同等の有向グラフに変換され、次にノードの収入がアークに「転送」されます。2 つの都市間の交通費は同じであるため、対応する有向グラフは次のようになります。
コストから始めて、ノードの収益をアークに転送します。つまり、アークの終わりの都市の利益からアークのコストを差し引きます。ノードの「収益」を結合して、ある都市から別の都市までのコストを取得します (現時点では往復コストが異なります)。
最短パスではノードは 1 回しか通過できないため、この方法で計算されたアーク コストは正確です。「ダブル リング」サーカスの基本的な前提は次のとおりです。
グラフ: 円弧のみ (有向グラフ)
コスト: プラスまたはマイナスの場合があります
出力: 最短パス
ペアリング方法: 1 つの開始点と 1 つの終了点
上記の最短経路モデルは、1 対多の最短経路問題と多対多の最短経路問題の 2 つのカテゴリに要約できます。
2
動的プログラミング
動的計画法(動的計画法)の手法は、上記の最短経路問題を解決するために使用できます。このためには、いくつかの数学記号を定義する必要があります。
理解しやすいように、例を挙げてみましょう。次のグラフの開始点 1 から他のすべてのノードまでの最短経路問題を考えてみましょう。
定義によれば、最短のパス長と各ノードのパスを取得できます。
以下のロジックについて考えてみましょう。テキサスの場合、3 から 10 への最短パスは 3-8-7-10 です。この道路はノード 8 と 7 を通過します。ここで 3 から 8 への最短パスを考えてみましょう。明らかに 3-7-8 しかありません。これより短い道は他にありません。もしあるなら、この道に沿って最初に 8 まで進み、次に 10 まで行くだけで済みます。そうすれば、3 から短い道があります。 10 10 まで。
したがって、最適なパスには最適なサブパス (サブパス) が含まれている必要があるという結論が得られます。
残念ながら、この結論には問題があります。次の図の例を考えてみましょう。ノード 1 から 3 への最短パスは 1-2-3 ですが、1 から 2 への最短パスは 1-3-4-2 です。
この現象が発生する理由は、負の二輪車が存在するためです。自転車とは、始点と終点が一致する道路を指し、負の重みサイクルは、全長が負の自転車を指します。
上の図の 3-4-2-3 は、全長が -10 の負の重みサイクルです。ただし、幸いなことに、負の重みサイクルは最短経路問題の唯一の困難なケースであるため、上記の結論はより正確です。は次のように定義されます:負の重みサイクルのないグラフでは、最適なパスには最適なサブパスが含まれている必要があります。
この結論により、動的計画法の関数方程式を使用して、最短経路問題の漸化式を整理することができます。このアイデアを 2 つの例で説明します。
1 つのノードから他のノードへの関数方程式(1 対多)
負の重みサイクルのないグラフでは、開始点 s から他のすべてのノードまでの最短経路関数方程式は次のようになります。
テキサス州の交通機関を例に挙げると、3 から 4 までを計算して比較すると、次の結果が得られます。
v[4] の最短パスがノード 5 を通過するのはなぜですか? ノード 2、5、および 6 のみが 4 に接続されているため、最短のサブパスがノード 2 を通過する場合、距離は 122+345 または 167+345 のみになり、どちらも 443 より長くなります。同様のことが当てはまります。ノード 6 は 5 のみです。
すべてのノードから他のすべてのノードへの関数方程式(多対多)
負の重みサイクルのないグラフでは、すべてのノードから他のノードへの最短パス問題の関数方程式は次のようになります。
この関数方程式は、k から l への最短パスには円弧/エッジ (k, l) が含まれるか、中間点 i が存在し、最適パスには k から i への最短パスと i から i へのパスが含まれることを示しています。 l 最短経路。
たとえば、次の図の任意の 2 点間の最短パスを見つけます。
観測を使用して、ノード i からノード j への最短パスとそのパスを取得します。
次に、原則を使用してノード 1 から 4 および 2 から 3 への最短パスを取得します。
上の 2 つの例は、動的関数方程式がどのように機能するかを示しています。しかし、ループの存在により、関数方程式によって引き起こされる循環依存の状況を解決することが不可能になることもわかります。これを行うには、動的プログラミングのこのアイデアを実装するための操作アルゴリズムを開発する必要があります。これらは次回紹介します。