1 / 49

ZDD を用いたパスの列挙と索引生成

ZDD を用いたパスの列挙と索引生成. (JST ERATO 研究員 ) (JST ERATO 研究員 ) (JST ERATO 研究員 ). 川原 純 斎藤 寿樹 湊 真一 吉仲 亮. ○. ( 北海道大学・ JST ERATO 総括 ). (50 音順 ). 他、関わっている人. 井上 武 (ERATO) 、 岩下 洋哲 (ERATO ) 、 鈴木 拡(北海道大学)、 鶴間 浩二 (ERATO). パスの列挙. 入力:グラフ G =( V , E ) , 2 頂点 s , t 出力: s から t へ の 全て のパス. s.

edan-fuller
Download Presentation

ZDD を用いたパスの列挙と索引生成

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ZDDを用いたパスの列挙と索引生成 (JST ERATO 研究員) (JST ERATO研究員) (JST ERATO 研究員) 川原 純 斎藤 寿樹 湊 真一 吉仲 亮 ○ (北海道大学・JST ERATO総括) (50音順) 他、関わっている人 井上 武(ERATO)、岩下 洋哲(ERATO)、鈴木 拡(北海道大学)、 鶴間 浩二(ERATO)

  2. パスの列挙 • 入力:グラフG=(V, E),2頂点 s,t • 出力:sからt への全てのパス s t 3×3のグリッドグラフ

  3. 応用 • 地理情報処理 • ネットワークや論理回路の信頼性評価 • ソフトウェアのフローチャートを網羅する テストケース作成 • Fisher’s Exact Test (統計の分野) (故障検査) 他にもたくさん

  4. 既存研究と関連研究 • 既存研究 • バックトラックを用いたアルゴリズム • 一つあたり O(|V|+|E|)時間 [Read and Tarjan, 75] • 関連研究 • パスの数え上げ • #P完全問題 • Baxのアルゴリズム[Bax, 94] • BDDを用いたパスのカウンティング[Sekineand Imai, 97] (以下、Read の アルゴリズムと呼ぶ)

  5. これまでの研究の流れ(1) • 2010年10月 • The Art of Computer Programming 4-1 を読む輪講で ZDD を用いたパスの列挙アルゴリズムが紹介される • 次の週、川原がC#で実装 • 2010年11月 • ZDD の代数演算のみで列挙するシンプルな 手法を考える(遅い) • ERATO合宿で発表 • 2011年1月 • 改良手法を考える 2月に冬のLAシンポジウムで発表 3月にアルゴリズム研究会

  6. これまでの研究の流れ(2) • 2010年10月 輪講で紹介 • 2010年11月 ZDDの代数演算のみの手法 • 2011年1月  ↑の改良 • 2011年3月 パス列挙技法をパズルに応用 • ゲーム・パズル研究集会で発表 • 2011年4月 ネットワークの信頼性評価への応用を検討 • 既存手法で Knuth の Alg. に似た手法が見つかる

  7. 発表の内容 • Knuth のアルゴリズム Simpathの紹介 • ZDDの代数演算のみを用いた手法(Mate-ZDD)の紹介 • 両者の中間の手法(Hybrid)の紹介 • 実験 • ネットワーク信頼性評価への応用

  8. Knuth によるアルゴリズムSimpath e1 e4 e1= 1 e1= 0 s t e3 e2= 0 e2= 1 e2= 1 e2= 0 e2 e5 1 0 1. 枝に順番を付ける (例えば、s から幅優先) e4 e2 e2 e3 e3 e3 e3 e1 e5 (もっと良い方法もあり) 2. 2分木を構築 s-t パスになっている 枝 e1,e2,… の順に処理 e1 e4 各枝変数ei に対し、 ei = 0 or 1 を決めていく 1 s t e3 e2 e5 ei = 1 である枝が s-t パスになっているか?

  9. Knuth によるアルゴリズムSimpath e1 e4 e1= 1 e1= 0 s t e3 e2= 0 e2= 1 e2= 1 e2= 0 e2 e5 1 0 1. 枝に順番を付ける (例えば、s から幅優先) e4 e2 e2 e3 e1 e3 e3 e3 e5 (もっと良い方法もあり) 2. 2分木を構築 s-t パスに なっていない s-t パス + 余分な枝 枝 e1,e2,… の順に処理 e1 e1 e4 e4 各枝変数ei に対し、 ei = 0 or 1 を決めていく 0 0 s s t t e3 e3 e2 e2 e5 e5 ei = 1 である枝が s-t パスになっているか?

  10. Knuth によるアルゴリズムSimpath e1 e4 e1= 1 e1= 0 s t e3 e2= 0 e2= 1 e2= 1 e2= 0 e2 e5 1 0 1. 枝に順番を付ける (例えば、s から幅優先) e4 e2 e3 e3 e2 e3 e1 e3 e5 (もっと良い方法もあり) 2. 2分木を構築 1 他は0 枝 e1,e2,… の順に処理 各枝変数ei に対し、 ei = 0 or 1 を決めていく が1つのパスに対応 2分木は全パスを保持している 1 1 1 1

  11. Knuth によるアルゴリズムSimpath e1 e4 s t e3 e2 e5 木の枝刈り e1 = 0 かつ e2 = 0 なら s-t パスができることはない e1 e2 e2 e1= 1 e1= 0 e2= 0 0

  12. Knuth によるアルゴリズムSimpath e1 e4 s t e3 e2 e5 木の枝刈り e1 = 0 かつ e2 = 0 なら s-t パスができることはない e1 e4 e2 e3 e2 e1= 1 e1= 0 e1 = 1 かつ e3 = 1 かつ e4= 1 ならs-t パスができることはない 1 e2= 1 e2= 0 e2= 0 0 0 … … (分岐が生じる) 0 1 … 1 0 木の枝刈りを行っても 場合の数は指数爆発 …

  13. Knuth によるアルゴリズムSimpath e4 e8 e1 e6 s t e3 e10 e7 以下の2つからは同じ木が生成される e2 e11 e5 e9 e11 e11 e10 e10 e9 e9 e8 e8 e8 e8 t t s s 1 0 0 0 0 0 0 1 0 0 e10 e10 e8 e11 e11 t s e9 e9 e10 e11 e9

  14. Knuth によるアルゴリズムSimpath e4 e8 e1 e6 s t e3 e10 e7 e2 e11 … … e5 e9 … … … e11 e11 e9 e9 e8 e10 e10 e7 e7 e8 … … 0 0 0 0 1 1 0 0 0 0 e8 t s e10 e11 e9

  15. Knuth によるアルゴリズムSimpath e4 e8 e1 e6 s t e3 e10 e7 e2 e11 … … e5 e9 … … … e11 e11 e10 e9 e8 e8 e10 e7 e7 e9 … … … 1 0 0 0 1 0 0 0 0 e8 t s e10 同じ形をもつ子は共有したい e11 e9

  16. Knuth によるアルゴリズムSimpath e4 e8 5 5 e1 e6 s t e3 e10 e7 e7 e7 e2 7 7 e11 … … 6 6 e5 e9 … … … e7 e7 e8 e8 e7 = 1 e7 = 0 … e8 e8 e8 t t t s s s … 共有する e10 e10 e10 e11 e11 e11 e9 e9 e9 5 6は sとつながっている 5 は 7とつながっている 7 6

  17. Knuth によるアルゴリズムSimpath 接続情報の記憶法 mate 配列 5 8 1 2 3 4 5 6 7 8 9 i 2 4 1 7 mate[i] 6 0 0 0 7 1 5 8 9 9 6 3 逆端の番号 頂点がパスの端 t s 0 頂点がパスの途中 頂点がいずれの パスにも含まれない 自身の番号

  18. Knuth によるアルゴリズムSimpath 接続情報の記憶法 mate 配列 この部分のみ記憶 5 1 2 3 4 5 6 7 8 9 i 8 2 4 1 mate[i] 6 0 0 0 7 1 5 8 9 7 9 6 3 頂点がパスの端 逆端の番号 frontier 頂点がパスの途中 0 頂点がいずれの パスにも含まれない 自身の番号 t s どの頂点の接続情報を覚えればよいか? ei 枝 i を処理するとき、 枝 i に接続している頂点を「訪れた」と表現する F := {訪れたことのある頂点} {二度と訪れない頂点} F を frontierという。 frontier 頂点の接続情報を覚える

  19. Knuth によるアルゴリズムSimpath e4 e8 5 5 e1 e6 s t e3 e10 e7 e7 e7 e2 7 7 e11 … … 6 6 e5 e9 … … … e8 e7 e7 e8 e7 = 1 e7 = 0 … e8 e8 e8 t t t s s s … e10 e10 e10 5 6 7 i 5 6 7 i e11 e11 e11 mate[i] mate[i] 7 1 5 7 1 5 e9 e9 e9 5 frontier の部分の mate が同じなら共有する 7 6

  20. Knuth によるアルゴリズムSimpath 1 mate の更新 1 1 2 5 1 2 e4 e8 2 4 2 1 e1 e6 1 2 s t e3 e10 1 7 e7 1 2 3 3 1 2 3 e2 e11 2 1 3 6 3 2 1 e5 e9 ex e4 e2 e2 e3 e1 e3 ex+1 1 2 3 4 忘れてよい 一般に … 4 0 3 1 a c a b c d 0 0 c d a b ex d b a b c d 0 0 d c 最大4か所書きかえれば更新できる

  21. Knuth によるアルゴリズムSimpath

  22. Simpathでは、(既約とは限らない)ZDDを構築しているSimpathでは、(既約とは限らない)ZDDを構築している → 既約化アルゴリズムによって、 節点サイズに比例する時間で既約化できる 節点の共有 節点の削除 e1= 0 … e2= 1 e2= 0 e10 e10 e9 e8 e7 e8 e6 e9 e1 e2 e7 e6 … … … したがって、パスの列挙だけでなく、 ・ 列挙した結果を圧縮して保持 ・ 列挙したパスの索引生成 ・ 列挙した結果から条件を満たすパスを得る もできたことになる 0 0 0 0 0 0 0 0 1 0 1

  23. Mate-ZDD 法(提案手法) ZDD の代数演算のみを用いて、ZDD を構築できないか? e1 s 7 4 1 t e3 5 2 3 8 e6 e4 6 各頂点のペア (i, j) ごとに変数 mi, jを用意する i, j が1本のパスの両端なら mi, j= 1 そうでないなら mi, j= 0 m14 = 1, m56 = 1, m77 = 1,… m11 = 0, m12 = 0,…

  24. Mate-ZDD 法(提案手法) i, j が1本のパスの両端なら mi, j= 1 e1 s 7 4 1 t e3 5 2 3 8 e6 e4 6 選ばれた枝+mate を集合として表す {e1, e3, e4, m14, m56, m33,…}

  25. Mate-ZDD 法(提案手法) e7 e7 e1 e1 s 7 s 4 7 4 e7 = 1 1 t 1 t e3 5 e3 5 2 3 8 2 3 8 e6 e4 e6 e4 6 6 {e1, e3, e4, m14, m56, m33,…} {e1, e3, e4, e7, m17, m56, m33,…} e6まで処理済み、次は e7 e7 = 0 なら mate は変化なし e7 = 1 なら m14→m17

  26. Mate-ZDD 法(提案手法) e6の処理が終わった時点での全状態を集めたものを考える e1 e1 e1 s s s 7 7 7 4 4 4 1 1 1 t t t … e3 e3 e3 5 5 5 2 2 2 3 3 3 8 8 8 e6 e6 e6 e4 e4 e4 6 6 6 {e1, e3, e4, m14, m56, m33,…} {e1, e3, m14, m25, m33,…} {e2, e3, m15, m44,…} … これらの全状態に対して、先ほどの操作を行いたい

  27. ZDD と集合族 集合の集合(集合族)は ZDD で効率よく保持できる 1 0 b c d c c b a d {{a, b, c, d}, {a, c}, {b, c}, {b, d}} 1 1 0 1 1 は省略

  28. ZDD と集合族 集合族への操作例: a を含む集合だけを取り出し、a を消去する {{b, c, d}, {c}} {{a, b, c, d}, {a, c}, {b, c}, {b, d}} a を含まない集合だけ 取り出すなら、LO 枝側を もってこればよい 1 0 a b c d c b c d b c d c 1 1 1 1 1 1 トップの要素なら簡単にできる

  29. ZDD と集合族 集合族への操作例: c を含む集合だけを取り出し、c を消去する {{a, b, d}, {a}, {b}} {{a, b, c, d}, {a, c}, {b, c}, {b, d}} 1 0 1 0 b c d c b a c a b d b d c c c 1 1 1 1 1 1 1 d 1 トップでなければ、その変数の深さまで潜って、 枝の付け替えを行う

  30. ZDD と集合族 集合族への操作例: c を含む集合だけを取り出し、c を消去する {{a, b, d}, {a}, {b}} {{a, b, c, d}, {a, c}, {b, c}, {b, d}} c を含まない集合だけ 取り出すなら、LO 枝の 方に付け替えればよい 1 0 1 0 d c c b a c a d b b d b c c c 0 1 1 0 1 1 1 d 1 1 1 トップでなければ、その変数の深さまで潜って、 枝の付け替えを行う

  31. ZDD と集合族 集合族への操作例: eを各要素に追加する {{a, b, c, d, e}, {a, c, e}, {b, c, e}, {b, d, e}} {{a, b, c, d}, {a, c}, {b, c}, {b, d}} b d a b c c c b d e d c a b c d c 1 0 1 1 1 1 1 1 1 1 トップに加える場合

  32. ZDD と集合族 集合族への操作例: eを各要素に追加する {{a, b, c, d, e}, {a, c, e}, {b, c, e}, {b, d, e}} {{a, b, c, d}, {a, c}, {b, c}, {b, d}} d b a b c d e c e c d e c a b c d e c b 1 0 1 1 1 1 1 1 1 1 間に加える場合

  33. ZDD と集合族 集合族を積と和で表現すると見やすい {{a, b, c, d}, {a, c}, {b, c}, {b, d}} abcd + ac + bc + bd (abcd + ac + bc + bd) ×e = abcde + ace + bce + bde eを各要素に追加する (abcd + ac + bc + bd) = a(bcd + c) + bc + bd なので、 a を含む集合だけを取り出し、 a を消去する (abcd + ac + bc + bd) / a = bcd + c a を含まない集合だけを取り出し、 a を消去する (abcd + ac + bc + bd) % a = bc + bd (多項式の除算、剰余算)

  34. Mate-ZDD 法(提案手法) e6の処理が終わった時点での全状態を集めたものを考える e1 e1 e1 s s s 7 7 7 4 4 4 1 1 1 t t t … e3 e3 e3 5 5 5 2 2 2 3 3 3 8 8 8 e6 e6 e6 e4 e4 e4 6 6 6 f = e1e3e4m14m56m33 + … e2e3m15m44 + e1e3m14m25m33 + これらの全状態に対して、先ほどの操作を行いたい 集合族を ZDD で表したものを f とする

  35. Mate-ZDD 法(提案手法) e6の処理が終わった時点での全状態を集めたものを考える f = e1e3e4m14m56m33 + … e2e3m15m44 + e1e3m14m25m33 + これらの全状態に対して、先ほどの操作を行いたい m14 → m17 の付け替え演算 f = f + f / m14 ×e7 ×m17 m14 を含むものを取り出し、 m14 を削除 e7 を追加 m17 を追加

  36. Mate-ZDD 法(提案手法) i i k k アルゴリズム 初期値 f = m11 × m22 × m33 × ... e e 各枝 e = {i, j} について j j l l frontier を計算 frontier の中の各頂点k,lについて f = f + f × e /mik/ mjl × mkl k 頂点 p を二度と訪れないならば   各 k = p についてf = f % mpk(頂点p の次数が1の項は削除) f = f / mpp + f % mpp(mpp変数の除去) p 最後にf = f / mst

  37. Mate-ZDD 法の変数順 変数は ZDD のトップに追加する方が計算が早いので、 Mate-ZDD 法では、先に処理した枝変数を ZDD の下にするのがよい (ボトムアップ的) (Simpathはトップダウン的) e1 e2 e2 e1 e1 e1 m11 m12 m11 m11 m11 m12 m22 m11 m 変数は頻繁に操作されるので、e 変数の上に するのがよい … … … e2処理 e1処理

  38. Mate-ZDD 法の変数順 {e1, e3, e4, m14, m56, m33} m 変数 e1 e3 e4 m33 m56 m14 e 変数 … … e2 e1 1 … 上段で m 変数の集合、すなわち mate を表している。 ある mate 値をもつ e 変数の集合がぶら下がっている

  39. Mate-ZDD 法の変数順 フロンティアの2乗の段数 m 変数 e 変数 … e2 e1 … フロンティアの2乗の個数の m 変数が存在し、 それらを更新しなければならない

  40. Hybrid 法 {e1, e3, e4, m14, m56, m33} 4 0 3 1 6 5 7 8 9 10 11 12 e4 e3 e1 e 変数 … e2 e1 1 … mate の管理に、m 変数ではなく、 (Simpathで使われている)配列を用いる 速度は Simpathと Mate-ZDD 法の中間くらいになる(と期待される)

  41. Hybrid法のメリット 4 0 3 1 6 5 7 8 9 10 11 12 {e1, e3, e4, m14, m56, m33} e 変数 … e2 e1 e4 e3 e1 … 1 0 枝に制約条件を加えて、列挙を行うことが容易になる。 例えば、e3 と e4の少なくとも一方の枝を使うという条件なら F = F / e3 ×e3 + F / e4 ×e4 の演算を e4の処理時に全体に施せばよい。 mate 配列に所属する e 変数がなくなれば、mate 配列を削除できる

  42. CyPath: Read ‘75 のalg. Simpath: Knuth のalg. Mate-ZDD: 提案手法 Hybrid: 提案手法 実験結果 日本地図グラフ 北海道から鹿児島までの全パス 日本地図グラフの頂点を 2倍に増やしたグラフ (単位:秒) 14797272518 本 5039760385115189594214594926092397238616064 本 (= 503正9760澗3851溝1518穣9594杼2145垓9492京6092兆3972億3861万6064)

  43. 実験結果 CyPath: Read ‘75 のalg. Simpath: Knuth のalg. Mate-ZDD: 提案手法 Hybrid: 提案手法 L × Lグリッド L ・・・ ・・・ L ・・・ ・・・ ・・・ ・・・ ・・・ (単位:秒) s t

  44. 実験結果 CyPath: Read ‘75 のalg. Simpath: Knuth のalg. Mate-ZDD: 提案手法 Hybrid: 提案手法 n 頂点ランダムグラフ、枝の生成確率 0.5 (単位:秒)

  45. マルチパスの列挙 s2 s1 - t1パス s1 の組を全列挙 交差しない s2 - t2パス s3 - t3パス t3 ms1t1と ms2t2 と ms3t3を含む集合を 残せばよい t2 s3 t1

  46. 条件付きパス(サイクル)の列挙

  47. 条件付きパス(サイクル)の列挙 e2 e1 e3 1 e4 f = f + f / e4 % e3 % e2 % e1) * e4 + (f % e4 / e3 % e2 % e1) * e3 + (f % e4 % e3 / e2 % e1) * e2 + (f % e4 % e3 % e2 / e1) * e1

  48. 連結部分グラフの列挙 e7 e1 s s と t が連結になるような 部分グラフを列挙 → ネットワーク信頼性評価への応用 e8 t e9 e3 e2 e5 e10 e6 e4 e7 4 は 1 と同じ連結成分 5 は 6 と同じ連結成分 e1 s 7 4 1 t e3 5 2 3 8 e6 e4 6

  49. まとめ • s-t-パスを列挙するアルゴリズム • Simpath(Knuth) • Mate-ZDD (提案手法) • Hybrid 法 (提案手法) • 今後の課題 • 計算時間の解析 • 頂点の順序付け • 様々な条件下での列挙

More Related