最短経路探索 - Behavior in Networksbin.t.u-tokyo.ac.jp/startup19/file/slide5_1.pdf ·...
Transcript of 最短経路探索 - Behavior in Networksbin.t.u-tokyo.ac.jp/startup19/file/slide5_1.pdf ·...
最短経路探索B4 渡邉 葵
2019/5/14 1
スタートアップゼミ課題発表 #1
目次
2019/5/14 2
1. 結果の可視化
2. アルゴリズムの比較
3. 言語の比較
1. 結果の可視化
2019/5/14 3
1. 結果の可視化
2019/5/14 4
• 最短経路探索によって得られた結果をGIS上で可視化した
マーク下(Node 1148)
駒場裏門(Node 80)
1. 結果の可視化
2019/5/14 5
• 最短経路探索によって得られた結果をGIS上で可視化した
表参道ヒルズ(Node 672)
マーク下(Node 1148)
1. 結果の可視化
2019/5/14 6
• 最短経路探索によって得られた結果をGIS上で可視化した
酒彩蕎麦 初代(Node 1481)
マーク下(Node 1148)
2. アルゴリズムの比較
2019/5/14 7
2. アルゴリズムの比較
2019/5/15 8
• Bellman-Ford法について
概要 1点から他のすべての点への最短距離を計算長所 リンクコストが負でも計算できる短所 計算が遅い O(𝑉 × 𝐸)
初期化 始点から各ノードへの暫定最短距離 𝑑 = 0,∞,⋯ ,∞始点から各ノードへ至るときの直前ノード 𝑝 = 𝑁𝑜𝑛𝑒,⋯ ,𝑁𝑜𝑛𝑒
ループ
グラフ 𝐺 = (𝑉, 𝐸)
𝑢と隣接するノードの集合
ノード𝑢に着目し,𝑢 → 𝑣 と見ていく
𝑢 → 𝑣のコスト高々 𝑉 − 1 回
計算量 O(𝑉 × 𝐸)
2. アルゴリズムの比較
2019/5/15 9
• A*法について
概要 1点からある点(𝑆 → G)への最短距離を計算長所 計算が速い短所 負のリンクコストは計算できない
S
G
n
𝑔(𝑛)
ℎ 𝑛
➢ 𝑓 𝑛 = 𝑔 𝑛 + ℎ(𝑛) が最小となる点を探していくことでGに到達
S → n の最小コスト推定値
n → G の最小コスト推定値
ヒューリスティック関数を用いるEx. マンハッタン距離,直線距離
2. アルゴリズムの比較
2019/5/15 10
• A*法について
具体例:始点ノード 𝑆 → 終点ノード 𝐺 ,上下移動のみ計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
G
S
ℎ 𝑛𝑓 = ℎ + 𝑔𝑔(𝑛)
𝑂𝑃𝐸𝑁 𝐶𝐿𝑂𝑆𝐸𝐷
2. アルゴリズムの比較
2019/5/15 11
• A*法について
具体例:始点ノード 𝑆 → 終点ノード 𝐺 ,上下移動のみ計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
G
330
ℎ 𝑛𝑓 = ℎ + 𝑔𝑔(𝑛)
𝑂𝑃𝐸𝑁 𝐶𝐿𝑂𝑆𝐸𝐷
始点ノードを𝑂𝑃𝐸𝑁にうつす
2. アルゴリズムの比較
2019/5/15 12
• A*法について
具体例:始点ノード 𝑆 → 終点ノード 𝐺 ,上下移動のみ計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
231
G
451
330
231
451
ℎ 𝑛𝑓 = ℎ + 𝑔𝑔(𝑛)
𝑂𝑃𝐸𝑁 𝐶𝐿𝑂𝑆𝐸𝐷
𝑂𝑃𝐸𝑁内で最小の𝑓(𝑛)をもつノード𝑛を𝐶𝐿𝑂𝑆𝐸𝐷にうつし,隣接ノードの 𝑓(𝑛)を計算
2. アルゴリズムの比較
2019/5/15 13
• A*法について
具体例:始点ノード 𝑆 → 終点ノード 𝐺 ,上下移動のみ計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
231
G
451
330
231
451
ℎ 𝑛𝑓 = ℎ + 𝑔𝑔(𝑛)
𝑂𝑃𝐸𝑁 𝐶𝐿𝑂𝑆𝐸𝐷
隣接ノード内で, 𝑓(𝑛)が最小のノードを探し,𝐶𝐿𝑂𝑆𝐸𝐷にうつして移動
2. アルゴリズムの比較
2019/5/15 14
• A*法について
具体例:始点ノード 𝑆 → 終点ノード 𝐺 ,上下移動のみ計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
231
132
G
451
330
231
132
451
352
ℎ 𝑛𝑓 = ℎ + 𝑔𝑔(𝑛)
𝑂𝑃𝐸𝑁 𝐶𝐿𝑂𝑆𝐸𝐷
移動先のノードの隣接ノードの 𝑓(𝑛)を計算
2. アルゴリズムの比較
2019/5/15 15
• A*法について
具体例:始点ノード 𝑆 → 終点ノード 𝐺 ,上下移動のみ計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
231
132
G
451
330
231
132
451
352
ℎ 𝑛𝑓 = ℎ + 𝑔𝑔(𝑛)
𝑂𝑃𝐸𝑁 𝐶𝐿𝑂𝑆𝐸𝐷
𝑂𝑃𝐸𝑁内で,𝑓(𝑛)が最小のノードを探し,𝐶𝐿𝑂𝑆𝐸𝐷にうつして移動
2. アルゴリズムの比較
2019/5/15 16
• A*法について
具体例:始点ノード 𝑆 → 終点ノード 𝐺 ,上下移動のみ計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
231
132
033
451
330
231
132
451
352
253
ℎ 𝑛𝑓 = ℎ + 𝑔𝑔(𝑛)
𝑂𝑃𝐸𝑁 𝐶𝐿𝑂𝑆𝐸𝐷
移動先のノードの隣接ノードの 𝑓(𝑛)を計算
2. アルゴリズムの比較
2019/5/15 17
• A*法について
具体例:始点ノード 𝑆 → 終点ノード 𝐺 ,上下移動のみ計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
231
132
033
451
330
231
132
451
352
253
ℎ 𝑛𝑓 = ℎ + 𝑔𝑔(𝑛)
𝑂𝑃𝐸𝑁 𝐶𝐿𝑂𝑆𝐸𝐷
𝑂𝑃𝐸𝑁内で,𝑓(𝑛)が最小のノードを探し,𝐶𝐿𝑂𝑆𝐸𝐷にうつして移動.これでゴール.
2. アルゴリズムの比較
2019/5/15 18
• A*法について
初期化 𝑂𝑃𝐸𝑁 = 𝑆 , 𝐶𝐿𝑂𝑆𝐸𝐷 = 𝜙𝑔 𝑆 = 0より, 𝑓 𝑆 = ℎ(𝑆)
ループ
始点ノード 𝑆 → 終点ノード 𝐺計算中ノード𝑂𝑃𝐸𝑁,計算済みノード𝐶𝐿𝑂𝑆𝐸𝐷
1. 𝑂𝑃𝐸𝑁内で最小の𝑓(𝑛)をもつノード𝑛を取り出す → 𝑛 = 𝐷なら終了
→ 𝑛を𝐶𝐿𝑂𝑆𝐸𝐷にうつす
2. 𝑛に隣接するすべてのノード𝑚に対して, 𝑓′ 𝑚 = 𝑔 𝑛 + 𝑐𝑜𝑠𝑡 𝑛,𝑚 + ℎ(𝑚)を計算
・𝑚 ∉ (𝑂𝑃𝐸𝑁 ∪ 𝐶𝐿𝑂𝑆𝐸𝐷)
・𝑚 ∈ 𝑂𝑃𝐸𝑁
・𝑚 ∈ 𝐶𝐿𝑂𝑆𝐸𝐷
𝑓(𝑚)を代入し,𝑚を𝑂𝑃𝐸𝑁に追加して,𝑚の親を𝑛に
𝑓(𝑚)が小さくなっていたら更新し,𝑚の親を𝑛に
𝑓(𝑚)が小さくなっていたら更新し, 𝑚 を𝑂𝑃𝐸𝑁に移し,𝑚の親を𝑛に
2. アルゴリズムの比較
2019/5/14 19
• 各アルゴリズムの比較
Dijkstra法 Bellman-Ford法 A*法
計算速度
負のリンクコスト
その他特定のOD組に対しての
最短経路を出す
〇△ ×
〇× ×
2. アルゴリズムの比較
2019/5/15 20
• アルゴリズムによる計算時間の比較
0.78
2.44
0.54
0
0.5
1
1.5
2
2.5
3
計算
時間
[s]
アルゴリズムよる計算時間の比較
Dijkstra法
ここでの計算時間は,ODノードや隣接行列の取り込みなどは済ませた以降の,実際のアルゴリズムの部分の計算時間を指している.
Bellman-Ford法
A*法
Node 80 → Node 1148 への最短経路探索
2. アルゴリズムの比較
2019/5/15 21
• A*法におけるヒューリスティック関数の設定
0.61
0.54
0.5
0.52
0.54
0.56
0.58
0.6
0.62
計算
時間
[s]
ヒューリスティック関数よる計算時間の比較
直線距離
ここでの計算時間は,ODノードや隣接行列の取り込みなどは済ませた以降の,実際のアルゴリズムの部分の計算時間を指している.
マンハッタン距離
Node 80 → Node 1148 への最短経路探索
2. アルゴリズムの比較
2019/5/14 22
• 負のリンクコスト
駒場裏門
渋谷駅
• 災害が発生し,駒場からひとまず渋谷駅まで歩くことに(通常の最短経路は赤色)
2. アルゴリズムの比較
2019/5/14 23
• 負のリンクコスト
駒場裏門
渋谷駅
• 災害が発生し,駒場からひとまず渋谷駅まで歩くことに(通常の最短経路は赤色)• 途中で,松濤中学校で配給をやっているという情報を目にする
松濤中学校
2. アルゴリズムの比較
2019/5/14 24
• 負のリンクコスト
駒場裏門
渋谷駅
• 災害が発生し,駒場からひとまず渋谷駅まで歩くことに(通常の最短経路は赤色)• 途中で,松濤中学校で配給をやっているという情報を目にする• 松濤中学校へのリンクコストが負の値に
リンクコスト負
2. アルゴリズムの比較
2019/5/14 25
• 負のリンクコスト
駒場裏門
渋谷駅
• 災害が発生し,駒場からひとまず渋谷駅まで歩くことに(通常の最短経路は赤色)• 途中で,松濤中学校で配給をやっているという情報を目にする• 松濤中学校へのリンクコストが負の値に• このような負のリンクコストを含むネットワークにおいて,Dijkstra法では最短
経路は変わらないが
リンクコスト負
2. アルゴリズムの比較
2019/5/15 26
• 負のリンクコスト
駒場裏門
渋谷駅
• 災害が発生し,駒場からひとまず渋谷駅まで歩くことに(通常の最短経路は赤色)• 途中で,松濤中学校で配給をやっているという情報を目にする• 松濤中学校へのリンクコストが負の値に• このような負のリンクコストを含むネットワークにおいて,Dijkstra法では最短
経路は変わらないが• Bellman-Ford法であれば真の最短経路を発見できる
配給のために迂回するのがコスト最小(コスト 1399.9 → 1348.9)
3. 言語の比較
2019/5/14 27
3. 言語の比較
2019/5/14 28
• Dijkstra法で,Node 931 から他のすべてのノードへの最短経路を列挙するのに要する時間
1176.4
6.30
200
400
600
800
1000
1200
1400
計算
時間
[s]
言語による計算時間の比較
Python C
約190倍
ここでの計算時間は,プログラム全体の計算時間を指している.