SlideShare a Scribd company logo
1 of 30
ZDDでSATを解く
お姉さんよりも恐ろしい問題
そもそもSATとは?
• SATとは、論理式が与えられたとき、その式をtrue
にすることができるかという問題
• NP完全
• 今回は答えが複数あるときは、それをすべて列挙
することにする
連言標準形
• 今回は入力データは連言標準形という形式で与
えた。
• これは論理変数をいくつか論理和でつないだ節
が論理積でつながった形になっている。
フロンティア法
• 今回はこのSATを解くプログラムをフロンティア法
を用いて作った。
• 今回はフロンティアとして、今までに処理した論理
変数のみを考えたときのそれぞれの節の状態を保
持した。
実装
• 今回は、フロンティアに含まれる節の数が数百から
数千になるので、long longの配列にビットとして情
報を保持した。
• 追加していく論理変数の順序はとりあえず1から順
番に追加していくことにした。
高速化①
• このままでは各状態のデータが多すぎるので、い
らない情報を捨てる
• この場合、すでにすべての論理変数を処理した節
や、まだ1つも論理変数を処理していない節の情
報を捨てる
動かしてみた
• ランダムなケースを作って動かしてみた。
動かしてみた
• ランダムなケースを作って動かしてみた
フロンティアの状態の数
枝刈りされたもの
一致したフロンティアの数
動かしてみた
• 一応動く
• でも遅い
• メモリも食う
高速化②
• このままだとまずいので違うところを工夫してみる。
• フロンティア法ではフロンティア状態の数が増える
と計算が遅くなる。
• まずい
• 減らさなければ・・・
高速化②
• 今まで論理変数の追加順序は適当
• これをちゃんとした順番でやれば状態数が減りそう
• 今回はまだ使っていない論理変数に対してスコア
をつけ、それが最も大きいものを使った。
高速化②
スコアのつけ方
• その論理変数を使うとフロンティアとして持つ節の
数が減る→スコアを増やす
• 逆にフロンティアの節が増える→その節の論理変
数が多いほどスコアを減らす
• すでにフロンティアに含まれている節に存在する
→その節の残っている論理変数が多いほどスコア
を増やす
動かしてみた②
• こうなる
動かしてみた②
• こうなる
フロンティアの状態の数
枝刈りされたもの 一致したフロンティアの数
追加する論理変数の番号
応用してみた
• これをSATソルバーとして使って数独を解いてみ
た
• パズルをSATに落とすのはsnukeさんが作ってくれ
たものを使わせていただきました。
応用してみた
• 動かしてみる
応用してみた
• 動かしてみる
応用してみた
• 動かしてみる
フロンティアの状態の数
枝刈りされたもの 一致したフロンティアの数
応用してみた
• ZDDは、この例のようにフロンティア同士が一致す
るものが少ない場合は単なる枝刈り探索となってし
まう。
• そうなると実行時間がたくさんかかってしまってつ
らい
結論
• このようにフロンティア同士が同じ状態にならないよ
うなものはZDDに向いていない
• ZDDは用法用量を守って正しく使いましょう
おまけ
数え上げお姉さん
• 一応自分もやってみた。
• こっちはSATソルバーと違ってフロンティアの情報
がlong longに収まるので楽
数え上げお姉さん
• この問題で扱うのは平面グラフなので、フロンティ
アに含まれる各頂点は次の4種類のうちどれか1つ
の状態になる。
数え上げお姉さん
• 接続している辺が0本
• 接続している辺が1本で、自分より前の頂点とつな
がっている
• 接続している辺が1本で、自分より後の頂点とつな
がっている
• 接続している辺が2本
数え上げお姉さん
• このようにするとフロンティアに含まれる各頂点に
ついて2ビットの情報を持つだけでよい
• すると1辺の辺の数が31、頂点の数が32のときま
でフロンティアのデータを1つのlong long型の中に
収めることができる
実行すると
• こんな感じ
個数
実行時間
実行すると
• こんな感じ
フロンティアの状態の数
枝刈りされたもの 一致したフロンティアの数
実演
結果
• このようにこの問題ではフロンティアの状態が一致
しているものがとても多いことが分かる
• 自分のパソコンでは14*14まで実行することができ
た。
• お姉さん救出成功!
ご清聴ありがとうございました

More Related Content

More from gotoloop

J - 次の仕事
J - 次の仕事J - 次の仕事
J - 次の仕事gotoloop
 
F - NPCの家
F - NPCの家F - NPCの家
F - NPCの家gotoloop
 
仕事をしよう!
仕事をしよう!仕事をしよう!
仕事をしよう!gotoloop
 
私、木になります
私、木になります私、木になります
私、木になりますgotoloop
 
不可視境界線
不可視境界線不可視境界線
不可視境界線gotoloop
 
b木ノススメ
b木ノススメb木ノススメ
b木ノススメgotoloop
 
平衡二分探索木の並行化
平衡二分探索木の並行化平衡二分探索木の並行化
平衡二分探索木の並行化gotoloop
 

More from gotoloop (8)

反転
反転反転
反転
 
J - 次の仕事
J - 次の仕事J - 次の仕事
J - 次の仕事
 
F - NPCの家
F - NPCの家F - NPCの家
F - NPCの家
 
仕事をしよう!
仕事をしよう!仕事をしよう!
仕事をしよう!
 
私、木になります
私、木になります私、木になります
私、木になります
 
不可視境界線
不可視境界線不可視境界線
不可視境界線
 
b木ノススメ
b木ノススメb木ノススメ
b木ノススメ
 
平衡二分探索木の並行化
平衡二分探索木の並行化平衡二分探索木の並行化
平衡二分探索木の並行化
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

ZDDでSATを解く