More Related Content
Similar to Solving Sudoku by SAT Solver 01 (20)
Solving Sudoku by SAT Solver 01
- 5. ◼ 求解フロー
◼ CNF式の作り方について
• 問題ごとの条件や数独のルールを全て0か1をとる変数に置き換
え、ゴリゴリとCNF式に起こしていきます。(次のページより)
SATソルバーの活用例|数独(ナンプレ)
5
SolvingEncoding
問題
Decoding
答え
SATソルバーCNF
- 6. 実装|パズル・数独をCNF式に落とし込む(1)
◼ 数独の制約モデル(数式で表現したもの)
• 𝑖 行目 𝑗 列目のマスの値を 𝑥𝑖𝑗 で表すことにする。
• 各 𝑥𝑖𝑗 は1から9の値をとるから 𝑥𝑖𝑗 ∈ 1, 2, 3, 4, 5, 6, 7, 8, 9
と書くことができ、この条件は全体で 9*9 = 81 個ある
6
𝑥11 ∈ 1, 2, 3, 4, 5, 6, 7, 8, 9
CNFファイルに書き込む情報
- 7. 実装|パズル・数独をCNF式に落とし込む(2)
◼ 数独の制約モデル(数式で表現したもの)
• 𝑥𝑖𝑗 と 𝑥 𝑘𝑙 が同一行(あるいは同一列、同一ブロック)にある場
合、異なる値をとらなければならない条件 𝑥𝑖𝑗 ≠ 𝑥 𝑘𝑙
7
𝑥11 ≠ 𝑥21 , 𝑥11 ≠ 𝑥31 ,
𝑥11 ≠ 𝑥41 , 𝑥11 ≠ 𝑥51 ,
𝑥11 ≠ 𝑥61 , 𝑥11 ≠ 𝑥71 ,
𝑥11 ≠ 𝑥81 , 𝑥11 ≠ 𝑥91 ,
𝑥21 ≠ 𝑥31 , 𝑥21 ≠ 𝑥41 ,
… 𝑥81 ≠ 𝑥91
CNFファイルに書き込む情報
- 9. SATソルバーの活用例|数独(ナンプレ)
◼ 自作数独ソルバーの性能
• 数独問題集の問題 800問
◼ 平均求解時間は 0.002秒
• アルゴリズムを記述する方法での比較
• 自作数独ソルバーは 16マス x 16マス の数独にも対応
◼ 求解時間は 0.064秒
9
URL 言語 求解時間(サイト準拠)
https://qiita.com/wsldenli/items
/78596c8775a0673f255e
Python 23秒
https://qiita.com/Anishishi/item
s/00fa13fcf0850144cae1
C++ 0.28秒
https://www.codeflow.site/ja/art
icle/java-sudoku
Java 0.25秒
http://www.aoky.net/articles/pet
er_norvig/sudoku.htm
Python 0.20秒