東京 - 地理空間的思考の教育研究プロジェクト

第4章 空間解析
2.ネットワーク分析
(1) 最短経路検索
久保田光一
[email protected]
地理情報科学教育用スライド ©久保田李光一
最短経路探索
池袋
御茶ノ水
秋葉原
新宿
東京
地理情報科学教育用スライド ©久保田李光一
最短経路探索
• 出発地の駅から,目的地の駅まで移動する.
– 所要時間が一番短い経路
– 料金が一番安い経路
• 自動車で目的地まで移動する.
– 距離が一番短い経路
– 所要時間が一番短い経路
– 高速料金などの料金が一番安い経路
地理情報科学教育用スライド ©久保田李光一
最短経路探索
19分
出発地:池袋
11分
6分
御茶ノ水
2分
15分
秋葉原
新宿
5分
2分
目的地:東京
29分
地理情報科学教育用スライド ©久保田李光一
グラフ
• グラフは道路網や鉄道網などのネットワーク
を表すための基本的な構造.
• 頂点: 駅,地点,建物などを表す.
• 枝(辺ともいう): 鉄道,道路などを表す.
– 有向枝 (u,v) : 始点u, 終点v
– 無向枝 {u,v} : 端点u, 端点v
– 枝の長さ L(u,v), L{u,v}
– 枝の重み w(u,v), w{u,v}
地理情報科学教育用スライド ©久保田李光一
グラフ
池袋
秋葉原
19
御茶ノ水
11
6
2
15
2
5
新宿
29
東京
地理情報科学教育用スライド ©久保田李光一
単純グラフ
• セルフループ loop, self loop
• 頂点から出て同じ頂点に戻る枝
• 平行枝 parallel edge
• 同じ頂点を結ぶ枝
• 有向なら向きも同じ
• グラフが単純
– セルフループも平行枝も無いグラフのこと
地理情報科学教育用スライド ©久保田李光一
ダイクストラ法
• 枝の重みが0以上(非負)であることが大事!
– 実際の多くのネットワークは非負の重み.
• 考え方
– 出発地からの経路が短い順に,各頂点までの最
短経路を定める.目的地までの最短経路が見つ
かれば終了.あるいは,すべての点までの最短
経路を計算して終了.
地理情報科学教育用スライド ©久保田李光一
グラフ
出発地:池袋
秋葉原
19
11
御茶ノ水
6
2
15
2
5
新宿
29
目的地:東京
地理情報科学教育用スライド ©久保田李光一
グラフ
出発地:池袋
0
秋葉原
19
11
∞
6
∞
∞
御茶ノ水
2
15
2
5
新宿
29
∞
地理情報科学教育用スライド ©久保田李光一
目的地:東京
グラフ
池袋
0
19
御茶ノ水
11
11
6
6
秋葉原
19
2
15
2
5
新宿
29
∞
地理情報科学教育用スライド ©久保田李光一
東京
グラフ
池袋
0
19
御茶ノ水
11
11
6
6
秋葉原
19
2
15
2
5
新宿
29
35
地理情報科学教育用スライド ©久保田李光一
東京
グラフ
池袋
0
19
→13
御茶ノ水
11
11
6
6
秋葉原
19
2
15
2
5
新宿
29
35→16
地理情報科学教育用スライド ©久保田李光一
東京
グラフ
池袋
0
19
→13
御茶ノ水
11
11
6
6
秋葉原
19
2
15
2
5
新宿
29
35→16→15
地理情報科学教育用スライド ©久保田李光一
東京
グラフ
池袋
0
19
→13
御茶ノ水
11
11
6
6
秋葉原
19
2
15
2
5
新宿
29
35→16→15
地理情報科学教育用スライド ©久保田李光一
東京
ダイクストラ(Dijkstra)法
• 記号:
–
–
–
–
–
–
s: 出発頂点(始点)
u, v:頂点
(u,v):頂点uから頂点v への有向枝
w(u,v): 枝(u,v)の重み
d(v): 頂点vにおける作業場所(仮の距離distanceを格納)
p(v): 頂点v における最短経路上でuの直前(親 parent)
の頂点(太い枝を表現)
地理情報科学教育用スライド ©久保田李光一
ダイクストラ法(アルゴリズム)
•
•
•
•
•
出発点を s と記す.
s から各頂点 v までの距離を d(v) に計算する.
d(s)=0, s 以外のすべての頂点 v について d(v)=∞.
Q をすべての頂点からなる集合とする.
Qが空集合になるまで以下を繰り返す.
– 集合 Q に含まれる頂点vの中で d(v) が最小となるvを u と記す.
– ここで d(u) に計算された値が sからu に至る最短経路長として確定.
– u を Q から取り除く.
– uを端点に持つ全ての枝 (u,v) を考える.
– その枝のu以外のもう一方の端点をv とする.
– もし d(v)>d(u)+w(u,v)なら d(v)=d(u)+w(u,v) とする.
– そうでないなら何もしない.
地理情報科学教育用スライド ©久保田李光一
ダイクストラ法に関する性質
• 計算量: 頂点の数をn, 枝の数をmとする.
– 単純な実装では O(n^2) .
– 集合Qを効率よく扱うと,O(n log n + m) .
– グラフが大規模で,出発地から目的地までの最短経路に限る場合,A*アル
ゴリズムと組み合わせてもっと効率よく計算する方法がある.
• 出発地 s からの最短経路は木構造となる.
– 単一頂点sから他のすべての頂点への最短経路を計算する.
• 木構造の計算
– 出発点 s から v に至る経路上で,v の直前の頂点を p(v) として示すように,
p(v) の値を更新していけばよい.
– そのためにはd(v)の値を更新するときに,頂点vの親頂点を表すp(v)という作
業場所を用意し,その値をuに更新すればよい.
– 目的地vからp(v)を辿って,出発地に戻る経路が最短経路を与える.
地理情報科学教育用スライド ©久保田李光一
ワーシャル・フロイド法
• Warshall-Floyd 法,ウォーシャル・フロイド法,フロイド・ウォー
シャル法ともいう
• 全ての2頂点間の最短経路を同時に計算.
– n + 1 個の 2次元配列 c0, c1, c2, … , cn を用意する.
– 頂点 v_i から頂点 v_j に至る経路のうち,最短のものの経路長を
cn[i][j] という配列要素に最終的に計算する.
• 考え方:頂点v_i と頂点 v_j を結ぶ経路について,経由しても
よい頂点(経由可能頂点)を指定する.
– c1[i][j] : 経由可能頂点の集合が {v_1} の経路の最短経路長
– c2[i][j] : 経由可能頂点の集合が {v_1,v_2} である経路の最短経路長
– (以下経由可能頂点の集合を一つずつ大きくする)
– cn[i][j] : 任意の点を経由可能な経路の最短経路長
地理情報科学教育用スライド ©久保田李光一
ワーシャル・フロイド法
• 経由してもよい頂点を直接指定することに注意!
v_2
c1[i][j]=min(c0[i][j], c0[i][1]+c[1][j])
c0[i][j]=w(i,j)
v_1
v_i
v_j
経由頂点なし
v_i
v_1
v_j
v_1だけを経由可能
v_i
v_j
v_1 と v_2 を経由可能
c2[i][j]=min(c1[i][j], c1[i][2]+c1[2][j])
地理情報科学教育用スライド ©久保田李光一
ワーシャル・フロイド法
v_k
v_1, v_2, …, v_(k-1)
v_j
v_i
ck[i][j]=min( c(k-1)[i][j], c(k-1)[i][k]+c(k-1)[k][j] )
v_1, v_2, …, v_(k-1), v_k
v_j
v_i
地理情報科学教育用スライド ©久保田李光一
グラフ
池袋
秋葉原
19
御茶ノ水
11
6
2
15
2
5
新宿
29
東京
地理情報科学教育用スライド ©久保田李光一
ウォーシャルフロイド法
• 枝の重み(距離)を行列(2次元配列)の形にする.
– 枝1本で接続する2点間の距離w(I,j) : c0[i][j]=w(i,j)
– 枝の無い頂点間の距離は∞(無限大)
池
新
御
秋
東
池袋
0
6
11
19
∞
新宿
6
0
15
∞
29
御茶ノ水
11
15
0
2
5
秋葉原
19
∞
2
0
2
東京
∞
29
5
2
0
 0 6 11 19  


 6 0 15  29 
C   11 15 0 2 5 


19  2 0 2 
  29 5 2 0 


c0[i][j]
地理情報科学教育用スライド ©久保田李光一
ウォーシャルフロイド法
• 池袋駅を経由してもよい
池 新 御 秋 東
池
池袋
0
6 11 19 ∞
新宿
6
0 15 ∞ 29
御茶ノ水
11 15
0
2
5
秋葉原
19 ∞
2
0
2
東京
∞ 29
5
2
0
新
御
秋
東
池袋
0
6
11
19
∞
新宿
6
0
15
25
29
御茶ノ水
11
15
0
2
5
秋葉原
19
25
2
0
2
東京
∞
29
5
2
0
c0[i][j]
c1[i][j]
地理情報科学教育用スライド ©久保田李光一
ウォーシャルフロイド法
• 池袋駅と新宿を経由してもよい
池 新 御 秋 東
池
池袋
0
6 11 19 ∞
新宿
6
0 15 25 29
新
御
秋
東
池袋
0
6
11
19
35
新宿
6
0
15
25
29
御茶ノ水
11 15
0
2
5
秋葉原
19 25
2
0
2
御茶ノ水
11
15
0
2
5
東京
∞ 29
5
2
0
秋葉原
19
25
2
0
2
東京
35
29
5
2
0
c1[i][j]
c2[i][j]
地理情報科学教育用スライド ©久保田李光一
ウォーシャルフロイド法
• 池袋駅と新宿と御茶ノ水を経由してもよい
池 新 御 秋 東
池
池袋
0
6 11 19 35
新宿
6
0 15 25 29
新
御
秋
東
池袋
0
6
11
13
16
新宿
6
0
15
17
20
御茶ノ水
11 15
0
2
5
秋葉原
19 25
2
0
2
御茶ノ水
11
15
0
2
5
東京
35 29
5
2
0
秋葉原
13
17
2
0
2
東京
16
20
5
2
0
c2[i][j]
c3[i][j]
地理情報科学教育用スライド ©久保田李光一
ウォーシャルフロイド法
• 池袋駅と新宿と御茶ノ水と秋葉原を経由して
もよい
池袋
新宿
御茶ノ水
秋葉原
東京
池 新 御 秋 東
0 6 11 13 16
6 0 15 17 20
11 15 0 2 5
13 17 2 0 2
16 20 5 2 0
c3[i][j]
池
新
御
秋
東
池袋
0
6
11
13
15
新宿
6
0
15
17
19
御茶ノ水
11
15
0
2
4
秋葉原
13
17
2
0
2
東京
15
19
4
2
0
c4[i][j]
地理情報科学教育用スライド ©久保田李光一
ウォーシャルフロイド法
• 全駅(池袋駅と新宿と御茶ノ水と秋葉原と東
京)を経由してもよい
池 新 御 秋 東
池
新
御
秋
東
池袋
0
6 11 13 15
池袋
0
6
11
13
15
新宿
6
0 15 17 19
新宿
6
0
15
17
19
御茶ノ水
11
15
0
2
4
秋葉原
13
17
2
0
2
東京
15
19
4
2
0
御茶ノ水
11 15
0
2
4
秋葉原
13 17
2
0
2
東京
15 19
4
2
0
c4[i][j]
c5[i][j]
地理情報科学教育用スライド ©久保田李光一
ウォーシャルフロイド法
• n個の頂点をv1,v2,…,vnとする.
• 2個の2次元配列 c[i][j] と d[i][j] を用意する.
– c[i][j]= 頂点viと頂点vjを結ぶ枝の距離
–
枝が無い場合には, 無限大(∞)
–
c[i][i]はゼロ
• for k=1 to n do begin
– for i=1 to n do for j=1 to n do
–
d[i][j]=min( c[i][j], c[i][k]+c[k][j] )
– for i=1 to n do for j=1 to n do c[i][j]=d[i][j]
– End (* c と d は同じ配列を用いて一行上を削除可能 *)
地理情報科学教育用スライド ©久保田李光一
2番目に短い最短経路
• 乗り換え案内など,最短経路だけでなく,2番目,
3番目に短い経路に興味がある場合もある.
– 探索経路の条件:simple な経路(パス)
• Simpleでない経路の例:同じ頂点を2度通るもの
• 考え方:最短経路を構成する枝がp本あるとする.
– その p本の枝のそれぞれ1本だけを除いたグラフにお
ける最短経路を調べる
– その p個の最短経路のうち,経路長が最短のものが
元のグラフでの2番目に短い経路
– これを「頂点数-1」本まで繰り返す.
– 実は,元のグラフを二つ用意して適宜それらを接続すると,
1回ダイクストラ法を用いて計算するだけで済む
地理情報科学教育用スライド ©久保田李光一