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