SlideShare a Scribd company logo
1 of 10
Download to read offline
数独ソルバーについて
1
okmt
なぜ制約プログラミングを面白いと思ったか。
◼ 賢く問題を解く
• コーディングスピードや実行性能を競う競技が流行っているが、
アルゴリズムをどれだけ頑張って記述しても限界がある
• 問題によるが、制約プログラミングにはアルゴリズムを記述する
言語の限界を優に超える性能が期待できる
◼ まだ応用されている分野が少ない
• 例えば、経路問題など、既存のサービスでも制約プログラミングを
フルに用いれば最適経路を返せる状況を増やせると考えている
• (応用の成功例)Jリーグ・マッチスケジューラー など
2
発信
◼ このプレゼンの内容(数独を解く)について
• Qiitaの記事として公開
https://qiita.com/okmt1230z/items/63f49e021c94077c343e
• 自作した数独ソルバーについてはGitHubに公開
https://github.com/okayu1230z/NumberPlaceSolver
• ウェブサービスとして公開
http://okmt1230z.com/sudoku/sudoku.html
3
制約プログラミング、特にSATとは
◼ 制約プログラミングとは?
• 変数間の関係を制約という形で記述するプログラミング
◼ SAT (Boolean satisfiability testing) とは?
• 命題論理式の充足可能性判定のこと。
• CNF (Conjunctive Normal Form、連言標準形) 式を
扱うことが一般
• CNF式の例(変数 𝑥 は 0 か 1 を取ります。)
• 以上のように、CNF式を満たす変数の値割り当てを探すことこそが
SATで、SATソルバーとはこれを解くソルバーのこと
4
式を満たす変数の値
割り当てを探す
◼ 求解フロー
◼ CNF式の作り方について
• 問題ごとの条件や数独のルールを全て0か1をとる変数に置き換
え、ゴリゴリとCNF式に起こしていきます。(次のページより)
SATソルバーの活用例|数独(ナンプレ)
5
SolvingEncoding
問題
Decoding
答え
SATソルバーCNF
実装|パズル・数独を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ファイルに書き込む情報
実装|パズル・数独を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ファイルに書き込む情報
実装|パズル・数独をCNF式に落とし込む(3)
◼ 数独の制約モデル(数式で表現したもの)
• 𝑥𝑖𝑗 のマスにヒントとして数字𝑎がかかれていることは、 𝑥𝑖𝑗 = 𝑎
8
𝑥11 = 5
CNFファイルに書き込む情報
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秒
おわりに
◼ まとめ
• 数独のようなパズルは制約プログラミングを用いるとアルゴリズムを
書いていくよりも早く求解できる
• パズルに限らずこの技術が活躍できる場所はもっとあるはずだと
考えている
◼ スケジューリング、運搬経路問題など
10

More Related Content

Similar to Solving Sudoku by SAT Solver 01

Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
KaggleのテクニックYasunori Ozaki
 
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance TypesAmazon Web Services Japan
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~normalian
 
Odstudy 20120225 エンジニアのための提案力向上セミナー
Odstudy 20120225 エンジニアのための提案力向上セミナーOdstudy 20120225 エンジニアのための提案力向上セミナー
Odstudy 20120225 エンジニアのための提案力向上セミナーkumi_shiki
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 
Hazop and triz by/of/for the children(3/3)
Hazop and triz by/of/for the children(3/3)Hazop and triz by/of/for the children(3/3)
Hazop and triz by/of/for the children(3/3)Kiyoshi Ogawa
 
AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AzareaCluster
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
Toxic comment classification
Toxic comment classificationToxic comment classification
Toxic comment classificationNasuka Sumino
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
携帯SoCでの画像処理とHalide
携帯SoCでの画像処理とHalide携帯SoCでの画像処理とHalide
携帯SoCでの画像処理とHalideMorpho, Inc.
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & AppsGoogle Cloud Platform - Japan
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由gree_tech
 
アジャイルソフトウェア開発における テスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチアジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発における テスティングの課題およびその解決アプローチTetsuya Kouno
 
アクセシビリティ対応をプロジェクトに取り入れるには?
アクセシビリティ対応をプロジェクトに取り入れるには?アクセシビリティ対応をプロジェクトに取り入れるには?
アクセシビリティ対応をプロジェクトに取り入れるには?力也 伊原
 
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreadingDataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreadingYahoo!デベロッパーネットワーク
 
GCP本格採用で遭遇した課題とマイクロサービス的解決
GCP本格採用で遭遇した課題とマイクロサービス的解決GCP本格採用で遭遇した課題とマイクロサービス的解決
GCP本格採用で遭遇した課題とマイクロサービス的解決Google Cloud Platform - Japan
 

Similar to Solving Sudoku by SAT Solver 01 (20)

Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
 
Google Product
Google ProductGoogle Product
Google Product
 
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
 
Odstudy 20120225 エンジニアのための提案力向上セミナー
Odstudy 20120225 エンジニアのための提案力向上セミナーOdstudy 20120225 エンジニアのための提案力向上セミナー
Odstudy 20120225 エンジニアのための提案力向上セミナー
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
Hazop and triz by/of/for the children(3/3)
Hazop and triz by/of/for the children(3/3)Hazop and triz by/of/for the children(3/3)
Hazop and triz by/of/for the children(3/3)
 
AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
Toxic comment classification
Toxic comment classificationToxic comment classification
Toxic comment classification
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
携帯SoCでの画像処理とHalide
携帯SoCでの画像処理とHalide携帯SoCでの画像処理とHalide
携帯SoCでの画像処理とHalide
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
アジャイルソフトウェア開発における テスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチアジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発における テスティングの課題およびその解決アプローチ
 
アクセシビリティ対応をプロジェクトに取り入れるには?
アクセシビリティ対応をプロジェクトに取り入れるには?アクセシビリティ対応をプロジェクトに取り入れるには?
アクセシビリティ対応をプロジェクトに取り入れるには?
 
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreadingDataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
 
GCP本格採用で遭遇した課題とマイクロサービス的解決
GCP本格採用で遭遇した課題とマイクロサービス的解決GCP本格採用で遭遇した課題とマイクロサービス的解決
GCP本格採用で遭遇した課題とマイクロサービス的解決
 
Google cloudinside3
Google cloudinside3Google cloudinside3
Google cloudinside3
 

Solving Sudoku by SAT Solver 01