動的計画法を用いた有向二値完全系統樹の 効率のよい列挙 森戸 一貴†,○斎藤 寿樹†† ,山口 一章†† ,増田 澄男†† († 西部建設 †† 神戸大学) コンピュテーション研究会-アルゴリズム研究会 連立開催(小樽) 2013年5月17-18日 種形質行列と有向二値完全系統樹 • 種形質行列 M • すべての形質は二値 (0か1). • msc = 1 ⇔ 種 s は形質 c を持つ • 有向二値完全系統樹 • 各葉が1つの種のラベルを持つ順序なし根付き木 • 各形質は一つの頂点にラベル付けされる • 種sが形質cを持つ ⇔ ラベルsを持つ葉はラベルcを持つ頂点の子孫である c1 c2 c3 c4 c5 c6 s1 0 0 1 1 1 0 s2 0 1 1 0 0 0 s3 1 0 0 0 0 1 s4 0 0 1 1 0 0 s5 1 0 0 0 0 0 c3 c1 c2 c4 s2 c5 s1 s4 c6 s3 s5 種形質行列と有向二値完全系統樹 Ci : 形質ciを持つ種の集合 補題 [Jannson, 2008] 種形質行列Mが有向二値完全系統樹を持つ ⇔ 任意の二つの形質ci, cj について,次の3つのいずれかが成立 (i) Ci ⊆ Cj, (ii) Cj ⊆ Ci, (iii) Ci ∩ Cj =φ {C1, …, Cm}がラミナー族 C3={s1, s2, s4} C4={s1, s4} C6={s3} c1 c2 c3 c4 c5 c6 s1 0 0 1 1 1 0 s2 0 1 1 0 0 0 s3 1 0 0 0 0 1 s4 0 0 1 1 0 0 s5 1 0 0 0 0 0 C4 ⊆ C3 C3 ∩C6 = ∅ c3 c1 c2 c4 s2 c5 s1 s4 c6 s3 s5 不完全データから有向二値完全系統樹の列挙 • 入力: 不完全な種形質行列 • いくつかの要素が未知 • 出力: すべての有向二値完全系統樹 • すべての未知の要素に 0 もしくは 1 を割り当てる C1 C2 C3 C4 C5 C6 C1 C2 C3 C4 C5 C6 S1 0 0 1 1 1 0 S2 0 1 1 0 0 0 S3 1 0 0 0 0 1 S4 0 0 1 1 0 0 S5 1 0 0 0 0 0 C1 C2 C3 C4 C5 C6 S1 0 0 1 ? 1 0 S2 0 1 1 0 0 0 S3 ? 0 ? 0 0 1 S1 0 0 1 1 1 0 S4 0 0 1 1 0 0 S2 0 1 1 0 0 0 S5 1 0 0 ? 0 0 S3 0 0 1 0 0 1 S4 0 0 1 1 0 0 S5 1 0 0 0 0 0 ・ ・ ・ C3 C1 C6 C2 C4 S2 S5 S3 C5 S1 S4 C1 C3 S3 C4 C2 C5 S1 S4 S2 C6 S5 既存の研究 • 有向二値完全系統樹を一つ求める • 多項式時間アルゴリズム[Pe’er et al., 2004] • 列挙アルゴリズム[Kiyomi et al., 2012] • 分枝限定法 ZDDを用いた手法が圧勝 • ZDDを用いた手法 • 有向二値完全系統樹の数え上げ問題 • #P完全 ZDD (Zero-suppressed Binary Decision Diagram): 組合せ集合をコンパクトに表現するデータ構造 • フロンティア法 • すべての解を保持するZDDを直接求める手法 ≒ 動的計画法を使った数え上げ 本研究成果 • 有向二値完全系統樹の列挙アルゴリズムの開発 • すべての有向二値完全系統樹を保持するZDDの構築 • フロンティア法を応用したZDD構築アルゴリズムの開発 = 動的計画法による有向二値完全系統樹の数え上げ 2+d • 指数時間アルゴリズム (nm2+m・D・2 O(m C1 C2 C3 C4 C5 C6 S1 0 0 1 ? 1 0 S2 0 1 1 0 0 0 S3 ? 0 ? 0 0 1 S4 0 0 1 1 0 0 S5 1 0 0 ? 0 0 max)時間) n:種の数 m:形質の数 D:未知の要素の数 dmax:未知の要素数が最も多い行の未知の要素数 例: D = 4, dmax = 2 アルゴリズムのアイディア • 未知の要素を順に場合分け 枝刈り 2. 部分問題の共有 :0 :1 1. x14 x31 C1 C2 C3 C4 C5 C6 S1 0 0 1 ? 1 0 S2 0 1 1 0 0 1 S3 ? 0 ? 0 0 0 S4 0 0 1 1 0 0 S5 1 0 0 ? 0 0 x31 x33 x54 1 0 1 x33 x54 x54 0 1 x33 x54 0 0 x54 0 x33 x54 x54 x54 1 0 1 0 1 0 0 0 部分問題の共有のアイディア C1 C2 C3 S1 1 1 0 S2 0 1 0 S3 0 0 1 S4 ? 0 ? S5 1 ? ? C1 C2 C3 C1⊆C2 C1∩C3=φ C2∩C3=φ C1⊆C2 C1∩C3=φ C2∩C3=φ S1 0 1 1 S2 1 1 0 S3 0 0 1 S4 ? 0 ? S5 1 ? ? • すべての2列の関係が一致していたら,共有させる • 2列の関係:包含 or 共通部分が空 • 2列の関係が決まっていないものがいくつもある ラミナー配列によって,すべての2列の関係を保持 ラミナー配列 • すべての2列の関係もしくは関係の候補を格納する 𝑆𝑢𝑏𝑠𝑒𝑡 𝑆𝑢𝑝𝑠𝑒𝑡 𝐸𝑚𝑝𝑡𝑦 𝑆𝑢𝑏𝑆𝑢𝑝 𝐿𝑎𝑚𝑖𝑛𝑎𝑟 𝐶𝑖 , 𝐶𝑗 = 𝑆𝑢𝑏𝐸𝑚𝑝 𝑆𝑢𝑝𝐸𝑚𝑝 𝑆𝑢𝑏𝑆𝑢𝑝𝐸𝑚𝑝 C1 C2 C3 C4 C5 C6 S1 0 0 1 ? 1 0 S2 0 1 1 0 0 0 S3 ? 0 ? 0 0 1 S4 0 0 1 1 0 0 S5 1 0 0 ? 0 0 C1 C1 C2 C3 C4 C5 C6 Ci ⊆ Cj Cj ⊆ Ci Ci ∩ Cj Ci ⊆ Cj Ci ⊆ Cj Cj ⊆ Ci Ci ⊆ Cj のとき のとき = φ のとき or Cj ⊆ Ci のとき or Ci ∩ Cj = φ のとき or Ci ∩ Cj = φ のとき or Cj ⊆ Ci or Ci ∩ Cj = φ のとき C2 C3 C4 C5 C6 Empty Empty Empty Empty SupEmp Subset Empty Empty Empty Supset Supset SupEmp SupEmp Empty Empty 各部分問題で保持すべき情報 • ラミナー配列 • “割り当て中の行”のすべての要素 C1 C2 C3 C4 C5 C1 C2 C3 C4 C5 C6 S1 0 0 1 0 1 0 S2 0 1 1 0 0 S3 0 0 ? 0 S4 0 0 1 S5 1 0 0 C1 C2 C3 C4 C5 C6 S1 0 0 1 0 1 0 1 S2 0 1 1 0 0 1 0 0 S3 1 0 ? 0 0 0 1 0 0 S4 0 0 1 1 0 0 ? 0 0 S5 1 0 0 ? 0 0 C2 C3 C4 C5 C6 Empty Empty Empty Empty Empty C1 Subset Empty Empty SubSup C2 Supset Supset Supset C3 Empty Empty C4 Empty C5 C2 C3 C4 C5 C6 Empty Empty Empty Empty Empty Subset Empty Empty SubSup Supset Supset Supset Empty Empty Empty 計算時間 n:種の数 m:形質の数 D:未知の要素の数 dmax:未知の要素数が最も多い行の未知の要素数 • ラミナー配列の初期化:O(nm2)時間 • ラミナー配列の更新:O(m)時間 • 一つの未知の要素に 0 もしくは 1 を割り当てたとき, 配列の高々m箇所が変わる 各レベルでの部分問題の数は 高々7½ m(m-1)・2dmax個 各部分問題が持つ情報 • ラミナー配列 • 探索中の行の未知の要素の値 全体の計算時間: nm2+mD7 ½ m(m-1) ・2dmax 高さD 計算機実験 • 実験データ • msプログラム[Hudson 2002]でランダムな種形質行列を生成 • 未知の要素を持たない,有向二値完全系統樹を持つデータ • 各要素を確率pで未知の要素に書き換え • 確率 p:0.1, 0.2, 0.3, 0.4, 0.5 • 種の数:50, 100, 150, 200 • 形質の数:50, 100 • それぞれ100個生成 • 実験環境 • CPU : Intel Core i3 - 2120. clock freq : 3.30GHz • Memory : 16GB • プログラム言語:C++ • ZDDライブラリ:SAPPOROBDD • タイムアウト2分 R TM 実験結果(1) 実験結果(2) ZDDによる手法 提案手法 まとめと今後の課題 • まとめ • 有向二値完全系統樹の数え上げアルゴリズムを開発 • 動的計画法を用いた方法 • ZDDを用いた手法よりも,形質の数が少ないときは高速 • 今後の課題 • 新たな共有化の提案 • 要素順序の問題 • 並列化による高速化 • 実データを使った実験
© Copyright 2024 ExpyDoc