Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンピュータで問題をサッと解きたい!

 コンピュータで問題をサッと解きたい!

2015年に作ったスライドです。

SATソルバー, CSPソルバー

prime number

June 04, 2015
Tweet

More Decks by prime number

Other Decks in Technology

Transcript

  1. 2 自己紹介 KMC-ID: prime (KMC-3 回生 ) 理学部 3 回生数学系

    Twitter: @_primenumber Github: primenumber KMC での最近の活動 : 競技プログラミング練習会 部誌 /C88 計算機・電子錠の管理
  2. 4 例 : パズルゲーム ( 数独 ) 同じ行・列・ 3x3 マス内に

    1 〜 9 の数字が一度ずつ出る ようにマスを埋める
  3. 7 コンピュータに問題を解かせるとき コンピュータは計算が速いが、計算速度には限度がある 解の候補を全部調べていると現実的な時間で終わらない n マス開いた数独で 1 〜 9 の埋め方は 通り

    さっきの例だと 39 マス開いているので約     通り 1 秒間に 10 億通り調べても約 5 垓年かかる なんとかして計算時間を減らさないといけない 9n 1.6×1037
  4. 8 コンピュータに問題を解かせるとき 枝刈り 解にならないとわかった解の候補を調べずに切り捨てる 例 ) 数独 途中まで埋めた時点で、ある列に同じ数字が 2 回出ていたら、

    このあとどう埋めても解にはならない→調べなくて良い 問題の還元 適切な変換によって問題をより小さい別の問題に帰着する 例 ) 最大独立集合 隣合う頂点が一つ以下の頂点は必ず使うとして、隣合う頂点を 取り除いた問題を考える
  5. 15 なぜ充足可能性問題? 実際、例で挙げた問題は充足可能性問題に帰着できる 「〇〇を最大 / 最小化する〜〜を求める」 → 「〇〇は n 以上

    / 以下になる」に変形し、 n で二分探索 あとはルールを論理式で表し、充足可能性問題を解くだけ 充足可能性問題は理論上も実用上も重要な問題 長年の研究によって高速なソルバが作られている 問題をそのまま解くより充足可能性問題に変換したほうが 高速に解ける場合が少なくない 変数 10 万、論理式のサイズ 100 万以上でも解けたりする
  6. 16 乗法標準形 多くの SAT ソルバでは論理式を乗法標準形にして渡す 乗法標準形 : 節 1∧ 節

    2∧…∧ 節 n 節 : リテラル 1∨ リテラル 2∨…∨ リテラル n リテラル : 変数 もしくは ¬ 変数 例 ) Fact. 任意の命題論理式は乗法標準形に変換できる ((¬x 1 ∨x 2 )∧(¬x 2 ∨x 3 ))
  7. 18 例 ) 数独 「  が真⇔ i 行 j 列の数字は k

    」とすると i 行 j 列には 1 〜 9 のどれかの数字が入る ⇔ 行 i に同じ数字 k が二度出てきてはいけない ⇔ のように変換し、すべてを∧で繋ぐ 既に割り当ての決まっているマスも論理式に付け加える x ijk x ij 1 ∨x ij2 ∨⋯∨x ij 9 (¬x i 0k ∨¬x i1k )∧(¬x i 0k ∨¬x i2k )∧⋯∧(¬x i 8k ∨¬x i9k )
  8. 19 例 ) 最大独立集合 「大きさ n 以上の独立集合 S が存在」を論理式で表す と定義すると、各辺      の条件は

    さらに「  が真⇔          」と定義する   の条件は     と表せる 乗法標準形に直すと 最後に単項   、      を加えれば解ける x i ⇔v i ∈S e i =(v i 1 ,v i 2 ) ¬x i 1 ∨¬x i 2 n i , j |S∩{v 1, v 2, ⋯,v i } |≥ j n i+1, j+1 ⇒((n i , j ∧x i+1 )∨n i, j+1 ) n i , j (¬n i+1, j+1 ∨n i, j ∨n i , j+1 )∧(¬n i+1, j+1 ∨x i ∨n i, j+1 ) n |V|,n ¬n 1, j (∀ j≥2)
  9. 20 例 ) 地図の塗り分け 地図を n 色で塗り分けるとする 「  が真⇔地域 i を色

    j で塗る」 各辺      の条件は 各頂点はどれかの色で塗るので 「 n 色以下で〜〜」は最大独立集合のときのようにする x i , j e i =(v i 1 ,v i 2 ) ¬x i 1 , j ∨¬x i 2 , j (∀1≤ j≤n) x i ,1 ∨x i ,2 ∨⋯∨x i,n
  10. 23 解決策 CSP ソルバを使う 制約充足問題 (CSP) のソルバ Sugar というソルバが有名 1.人間にとってよりわかりやすい形で問題を記述

    2.充足可能性問題に変換して解く 3.人間のわかりやすい形にして表示する 整数に関する条件、一意性に関する条件等を上手に扱う
  11. 24 問題を解く流れ 問題 論理式 問題の解 SAT の解 変換 SAT ソルバ

    制約式 CSP の解 変換 変換 変換 Sugar 制約ソルバ
  12. 25 数独を CSP ソルバで解く i 行 j 列の数字を x_i_j とする

    i 行 j 列は 1 〜 9 の整数のいずれかである (int x_i_j 1 9) i 行目にある数はすべて異なる (alldifferent x_i_1 x_i_2 … x_i_9) 列、 3x3 ブロックも同様 (乗法標準形に比べて)とてもわかりやすい
  13. 27 参考文献 / リンク MiniSat Page: http://minisat.se/ MiniSat 入門 :

    http://www.kl.i.is.nagoya-u.ac.jp/person/yasuhiro/minisat/minisat12.pdf 高速 SAT ソルバーの原理と応用 : http://www-erato.ist.hokudai.ac.jp/docs/seminar/nabeshima.pdf Sugar: a SAT-based Constraint Solver: http://bach.istc.kobe-u.ac.jp/sugar/ パズルを Sugar 制約ソルバーで解く : http://bach.istc.kobe-u.ac.jp/sugar/puzzles/