Successfully reported this slideshow.
Your SlideShare is downloading. ×

ZDD入門-お姉さんを救う方法

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 22 Ad

More Related Content

More from nishio (20)

Recently uploaded (20)

Advertisement

ZDD入門-お姉さんを救う方法

  1. 1. ZDD入門 (副題:お姉さんを救う方法) 西尾 泰和 1
  2. 2. お姉さん? • 副題の元ネタがわからない人は Youtubeで「フカシギの数え方」を見てください http://www.youtube.com/watch?v=Q4gTV4r0zRs 2
  3. 3. 前回のあらすじ • 前回のランダムフォレスト(竹迫さん)は 決定木を「特徴をランダムに選んで、決 定しきらなくても適当に打ち切って、と にかくたくさん作って多数決!」だった • 今回も決定木だが「特徴を全部使って、 巨大な決定木をつくるぞ!」という話 3
  4. 4. 決定木が表現するもの • 0/1の特徴がたくさん与えられて0/1を返す関数 • 具体例: • 論理式(項が特徴、式の値が返り値) • 部分集合の族(各頂点が部分集合xに含まれる かどうかが特徴、その部分集合が族に含まれ るかどうかが返り値) 4
  5. 5. もっと具体例 の族 この情報を どうやって コンピュータの中に 表現する? 5
  6. 6. vector<bool> • ←赤枠の中身を持つ • 特徴の個数をNとして2^N bitのメモリ 3×3 は辺が12本 → 4096通り → 512バイト → 余裕! 6
  7. 7. 5×5だと? • 辺の本数は4×5×2=40本 • 局面数は2^40 = 1テラ通り • 必要なメモリは128ギガバイト… 7
  8. 8. もう一声!6×6! • 辺の本数は5×6×2=60本 • 局面数は2^60 = 1ゼタ通り • 必要なメモリは128エクサバイト… 一億テラバイト以上?! お姉さん死んじゃう!やめて! 8
  9. 9. 解のvectorで持つ xyzr 0000 • 「全部1bit使うよりf(x)=1が成立するx 0010 だけリストアップすればいいのでは」 0100 0111 • 6×6だと一局面を60bitで表現できる 1000 1011 • 解の個数は126万2816通り 1101 1111 • 60bit × 1262816 ≒ 9メガバイト • これならメモリに収まる! 9
  10. 10. もう二声!8×8! • 辺の本数は 7×8×2=112本 • 一局面に 112bit • 解の個数:789ギガ通り • 112bit × 789ギガ通り ≒ 11テラバイト お姉さん死んじゃう!やめて! 10
  11. 11. どうすればいい?? 11
  12. 12. 共通部分をまとめる • 「?」の部分がなんであれ結果は同一 →じゃあ別個に持つ必要ないじゃん! →共通部分をまとめて圧縮しよう! 12
  13. 13. BDD: Binary Decision Diagram 二分木、ただし 共通部分を共有して 消費メモリ量を節約 頂点削除: 記法:点線がlo, 実線がhi 13
  14. 14. さらに • スタートから横に進む辺を選んだら、 下に進む辺を選んではいけない。 選んだらその後どうあがいても全部NG → 「?」の中身がどうでも 全部NGになる 14
  15. 15. ZDD: Zero-supress BDD • BDDとちょっと頂点削除のルールが違う • ZDD:「ここが1だったらどうやっても 結果が0になる」な頂点を削除 • BDD:「ここが0でも1でも結果が変わら ない」な頂点を削除 ←違いはわずか 15
  16. 16. ZDDで8×8! • ZDDで表現した場合の頂点数:33580個 • 112辺のどの辺についての頂点かを識別す るために8bit使おう (7bitでも足りるけど) • 33580個の頂点を識別するには16bit必要 • (8bit + 16bit × 2) × 33580 ≒ 168キロバイト 11テラ→168キロ!! TAOCP-ja 7.1 P121 16
  17. 17. BDD/ZDDで何が出来る? • 168KBで 789ギガ通りの解の集合を保持できる • 解を辞書順に列挙できる • 全ての解が等確率なサンプリングが出来る • ある局面がOKかNGか、 最大112ステップで判定できる • BDDのまま和・積などの集合演算ができる 17
  18. 18. 何が出来る? 続き(2/4) • f(x)→0/1 のBDDがあると、 与えられた重みベクトルwについて、 f(x) = 1の条件下で内積wxを最大化する解xを O(n+B)ステップで求められる(Boole計画法) • 例えば各辺のコストが与えられたら、 コスト最小のパスを探せる n: xのビット数、B: BDDの頂点数 18
  19. 19. 何が出来る? 続き(3/4) * 独立に • 各x_iが確率p_iで1になる時*に、 f(x) = 1である確率をO(B)ステップで 求められる(信頼性多項式) 0.1 * 0.2 * (1-0.3) * (1-0.4) + (1-0.1) * (1-0.2) * 0.3 * 0.4 B: BDDの頂点数 19
  20. 20. 何が出来る? 続き(4/4) • f(x) = 1の解の個数を最悪実行時間O(nB)で 求めることが出来る • 例えばお姉さんが救える! n: fのビット数、B: BDDの頂点数 20
  21. 21. そんな便利なBDDを どうすれば作れるか? 21
  22. 22. to be continued... 22

×