310 likes | 457 Views
Self-Stabilizing Minimum Spanning Tree. 斎藤 大. 発表の流れ. Self-Stabilizing Minimum Spanning Tree (MST)の概要 モデル MSTアルゴリズム GHSアルゴリズム Antonoiu and Srimani アルゴリズム Self-Stabilizing MSTアルゴリズム. 1. Self-Stabilizing MST の 概要. 1. Spanning Tree とは?. 頂点 V と辺 E の集合( V,E )から同じ頂点集合を持つ( V,E’ )を生成する
E N D
発表の流れ • Self-Stabilizing Minimum Spanning Tree(MST)の概要 • モデル • MSTアルゴリズム • GHSアルゴリズム • Antonoiu and Srimaniアルゴリズム • Self-Stabilizing MSTアルゴリズム
1.Spanning Treeとは? • 頂点Vと辺Eの集合(V,E)から同じ頂点集合を持つ(V,E’)を生成する • 循環構造を持たない • 孤立した部分集合を持たない→木構造 和訳:生成木
1.MSTとは? • 各辺に重み(コスト)をつける • 木の辺の重みの和を最小にする • 一般にMSTは一意に定まらない→重みは全て異なる(単射)と仮定すると一意に定まる 和訳:最小生成木
1.MSTの具体例 8 a b a b 5 4 5 4 3 c 9 3 c 1 1 d e d e 10 f 2 f 2 6 7 6 7 g h g h 11 ∑cost = 28(最小)
1.Self-Stabilizing MSTとは • 頂点の増減や辺の切断を考慮→現実のネットワークに適用 • 状況の変化に合わせて自動で木の再構築を行う 8 a b 3 5 4 c 1 d e f 2 6 7 g h
1.現実への適用 • グラフ → ネットワーク • 辺の重み → 通信コスト • 生成木 → あるプロセスの情報を全プロセスに放送 • 最小生成木 → 通信コストが最小の放送
1.モデル • Message-Passing Networkを想定 • 重み付き無向グラフ(重みは単射) • 各ノード(頂点)は固有のIDを持つ • 各ノードは、隣接するノードのID、及びそれらの間の枝(辺)の重みを保持する
2. MSTアルゴリズム GHSアルゴリズム Antonoiu and Srimaniアルゴリズム
2.1.MINTREE • Gallager-Humblet-Spiraのアルゴリズム→MINTREEと呼ぶ • グラフ理論のKRUSKALアルゴリズムを基にしている • ノード全体の情報を知る必要がない • フラグメント(後述)をまとめて統率するプロセッサを仮定
2.1.KRUSKAL G=(V, E, c)からT=(V, ET)を求める をコストの小さい順に並べる(m:枝 n:ノード) [KRUSKAL] ∪
2.1.用語の定義 a b フラグメント 4 3 c 外向枝 (outgoing edge) d e レベル:合併(後述)回数 f 6 7 特に最小外向枝 (Minimum Outgoing Edge) が重要! g h 内枝 (inside edge)
2.1.MINTREEの流れ(1) • 各フラグメントのプロセスが最小外向枝(MOE)を探す • レベルが等しくMOEも共通な場合→合併[merge]・レベルが1増加 • MOEの相手のレベルが高い場合→吸収[absorb]・レベル変化無し • absorbはレベルが低い方のみ出せる
2.1.MINTREEの流れ(2) F2:L1 F1:L1 a b 4 3 c F3:L0 d e 1 merge 2 absorb f 6 7 g h F4:L1 (c, f):L2
2.2. Basic_MST • Antonoiu and Srimaniアルゴリズム→Basic_MSTと呼ぶ • 各枝がプロセッサを持っていると仮定 • 既になんらかの生成木が存在する時のアルゴリズム→初期設定が必要 • 一般にはあまり用いられないが、Self-Stabilizationを適用する上で便利
2.2.Basic_MSTの流れ(1) • 既に生成木が構築されているとする • 適当なnon-tree edgeを選ぶ→循環構造が出来る • 循環構造内で最も重い枝を切る • 2~3の繰り返しによって、MSTを構築
2.2.Basic_MSTの流れ(2) a b コスト最大の枝 5 4 3 c 9 1 d e コスト最大の枝 10 f 2 6 7 g h
2.2.簡単な証明 • ある関数を定義する(e:non-treeedge) • minimize_cycleは生成木を返す • E’がMSTだったら、どんなeに対してもE’=minimize_cycle(E’,e)逆も成り立つ • 一度minimize_cycleによって除かれた枝は二度と選ばれることはない • よって全てのeについてminimize_cycleを実行し求まる生成木はMSTとなる ∪
2.2.Basic_MSTの実装(1) • 枝に{chosen, unchosen}のstatus追加 • 待ち時間safetime(e)を追加→n個のノードを通る最大の時間徐々に減少し、自分の命令受信でreset • search、remove、insert命令を追加 • unchosen edgeはtime-outするとsearch命令を送信する • 循環した自分のsearchを受信し、重みが自分より大きかったらremove送信
2.2.Basic_MSTの実装(2) [g,f],6 [g,f],6 b a 4 5 c [g,f],9 [g,f],6 9 3 [g,f],6 1 e d Insert ([g, f]) search ([g, f],6) [g,f],9 [g,f],10 10 f 2 6 remove ([g,f],10) [g,f],10 h g
3.Self-Stabilizeのために • Basic_MSTに以下の機能を追加 • search_sent :search到着待ちstatus • search命令に通ってきたpathを追加pathは重みも保持する • find_cycle :chosen edgeが発する命令→3*Safetime間メッセージを受信しないと送信(Safetime:max{safetime(e)})
3.Self-Stabilizingの実装(1) • 各枝プロセッサが3つの変数を持つ • boolean chosen_status • unsigned int timer • boolean search_sent • 3種類のメッセージ • (“search”, eid, path) • (“remove”, path) • (“find_cycle”, path)
3.Self-Stabilizingの実装(2) • 2種類の通信プロトコル • send(mess, e) (e:隣接する枝) • propagate(mess, v) (v:ノード) • タイムアウトの機構 • chosen edgeは3*Safetimeでtime-out • unchosen edgeはSafetimeでtime-out [配布資料参照]
3.Self-Stabilizingの実装(3) [g, f], path [g, f], path b a 4 5 [g, f], path c 9 3 [g, f], path 1 e d search ([g, f], φ) 10 f 2 6 h g
3.Self-Stabilizingの実装(4) [g, f], [fhebc] b a 4 5 c remove ([fhebc]) cycle 9 3 [g, f], path 1 e d search ([g, f], φ) 10 2 [g, f], [fhe] f 6 7 [g, f], [fh] h g
3.正当性の直観的な証明 • MSTとなるべき枝が一度chosen edgeになったらそれは二度とremoveされない • 時間を重ねれば重ねるほど、生成木全体のコストは小さくなっていく • MSTとなるべき枝がまだchosen edgeでなかったら、必ずchosen edgeになる • 一度MSTが構築されたら、エラーが無い限りMSTは不変
3.現実に適用するために • 各枝がプロセッサを持っていると仮定→各ノードがそれぞれの枝を担当→枝を挟む相手の情報が欲しい • 大規模ネットワークでのSafetimeの設定 • ネットワーク全体を知ることは不可能 • Safetime大:ネットワークトラフィック減 • Safetime小:エラーに即座に対応
まとめ • MSTとは • コスト最小の生成木を構成 • Self-Stabilizing MST • エラーを自動的に修復 • ノードの増減が激しいインターネットにも適用可能