Submit Search
Upload
Solving Sudoku by SAT Solver 01
•
0 likes
•
490 views
O
OkamotoYuki2
Follow
SATソルバーを使って数独を解くウェブサービスを作ったので、その方法を説明します。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 10
Download now
Download to read offline
Recommended
Lob slide 20200218_j
Lob slide 20200218_j
Koichi Hosono
JSX Design Overview (日本語)
JSX Design Overview (日本語)
Kazuho Oku
今なぜサーバーレスなのか
今なぜサーバーレスなのか
真吾 吉田
DataEngConf NYC’18 セッションサマリー #2
DataEngConf NYC’18 セッションサマリー #2
gree_tech
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費
Tatsumi Akinori
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
Miniascape
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karate
Takanori Suzuki
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計
MicroAd, Inc.(Engineer)
Recommended
Lob slide 20200218_j
Lob slide 20200218_j
Koichi Hosono
JSX Design Overview (日本語)
JSX Design Overview (日本語)
Kazuho Oku
今なぜサーバーレスなのか
今なぜサーバーレスなのか
真吾 吉田
DataEngConf NYC’18 セッションサマリー #2
DataEngConf NYC’18 セッションサマリー #2
gree_tech
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費
Tatsumi Akinori
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
Miniascape
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karate
Takanori Suzuki
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計
MicroAd, Inc.(Engineer)
Kaggleのテクニック
Kaggleのテクニック
Yasunori Ozaki
Google Product
Google Product
Daisuke Sugai
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
Amazon Web Services Japan
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
normalian
Odstudy 20120225 エンジニアのための提案力向上セミナー
Odstudy 20120225 エンジニアのための提案力向上セミナー
kumi_shiki
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
Koichi Sakata
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春)
AzareaCluster
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
Toxic comment classification
Toxic comment classification
Nasuka Sumino
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
Yosuke Mizutani
携帯SoCでの画像処理とHalide
携帯SoCでの画像処理とHalide
Morpho, Inc.
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
Google Cloud Platform - Japan
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
gree_tech
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
エピック・ゲームズ・ジャパン Epic Games Japan
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
Tetsuya Kouno
アクセシビリティ対応をプロジェクトに取り入れるには?
アクセシビリティ対応をプロジェクトに取り入れるには?
力也 伊原
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
GCP本格採用で遭遇した課題とマイクロサービス的解決
GCP本格採用で遭遇した課題とマイクロサービス的解決
Google Cloud Platform - Japan
Google cloudinside3
Google cloudinside3
Masaki Toyoshima
More Related Content
Similar to Solving Sudoku by SAT Solver 01
Kaggleのテクニック
Kaggleのテクニック
Yasunori Ozaki
Google Product
Google Product
Daisuke Sugai
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
Amazon Web Services Japan
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
normalian
Odstudy 20120225 エンジニアのための提案力向上セミナー
Odstudy 20120225 エンジニアのための提案力向上セミナー
kumi_shiki
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
Koichi Sakata
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春)
AzareaCluster
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
Toxic comment classification
Toxic comment classification
Nasuka Sumino
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
Yosuke Mizutani
携帯SoCでの画像処理とHalide
携帯SoCでの画像処理とHalide
Morpho, Inc.
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
Google Cloud Platform - Japan
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
gree_tech
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
エピック・ゲームズ・ジャパン Epic Games Japan
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
Tetsuya Kouno
アクセシビリティ対応をプロジェクトに取り入れるには?
アクセシビリティ対応をプロジェクトに取り入れるには?
力也 伊原
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
GCP本格採用で遭遇した課題とマイクロサービス的解決
GCP本格採用で遭遇した課題とマイクロサービス的解決
Google Cloud Platform - Japan
Google cloudinside3
Google cloudinside3
Masaki Toyoshima
Similar to Solving Sudoku by SAT Solver 01
(20)
Kaggleのテクニック
Kaggleのテクニック
Google Product
Google Product
[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~
Odstudy 20120225 エンジニアのための提案力向上セミナー
Odstudy 20120225 エンジニアのための提案力向上セミナー
Introduction 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)
AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Toxic comment classification
Toxic comment classification
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
携帯SoCでの画像処理とHalide
携帯SoCでの画像処理とHalide
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
[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 #hadoopreading
GCP本格採用で遭遇した課題とマイクロサービス的解決
GCP本格採用で遭遇した課題とマイクロサービス的解決
Google cloudinside3
Google cloudinside3
Solving Sudoku by SAT Solver 01
1.
数独ソルバーについて 1 okmt
2.
なぜ制約プログラミングを面白いと思ったか。 ◼ 賢く問題を解く • コーディングスピードや実行性能を競う競技が流行っているが、 アルゴリズムをどれだけ頑張って記述しても限界がある •
問題によるが、制約プログラミングにはアルゴリズムを記述する 言語の限界を優に超える性能が期待できる ◼ まだ応用されている分野が少ない • 例えば、経路問題など、既存のサービスでも制約プログラミングを フルに用いれば最適経路を返せる状況を増やせると考えている • (応用の成功例)Jリーグ・マッチスケジューラー など 2
3.
発信 ◼ このプレゼンの内容(数独を解く)について • Qiitaの記事として公開 https://qiita.com/okmt1230z/items/63f49e021c94077c343e •
自作した数独ソルバーについてはGitHubに公開 https://github.com/okayu1230z/NumberPlaceSolver • ウェブサービスとして公開 http://okmt1230z.com/sudoku/sudoku.html 3
4.
制約プログラミング、特にSATとは ◼ 制約プログラミングとは? • 変数間の関係を制約という形で記述するプログラミング ◼
SAT (Boolean satisfiability testing) とは? • 命題論理式の充足可能性判定のこと。 • CNF (Conjunctive Normal Form、連言標準形) 式を 扱うことが一般 • CNF式の例(変数 𝑥 は 0 か 1 を取ります。) • 以上のように、CNF式を満たす変数の値割り当てを探すことこそが SATで、SATソルバーとはこれを解くソルバーのこと 4 式を満たす変数の値 割り当てを探す
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ファイルに書き込む情報
8.
実装|パズル・数独をCNF式に落とし込む(3) ◼ 数独の制約モデル(数式で表現したもの) • 𝑥𝑖𝑗
のマスにヒントとして数字𝑎がかかれていることは、 𝑥𝑖𝑗 = 𝑎 8 𝑥11 = 5 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秒
10.
おわりに ◼ まとめ • 数独のようなパズルは制約プログラミングを用いるとアルゴリズムを 書いていくよりも早く求解できる •
パズルに限らずこの技術が活躍できる場所はもっとあるはずだと 考えている ◼ スケジューリング、運搬経路問題など 10
Download now