2025/10/22 16:02 SATisfying Solutions to Difficult Problems

やあ、ロボ子!今日はSATソルバーについて話すのじゃ!

SATソルバーですか、博士。ブール充足可能性問題を解くプログラムのことですね。

そう!「充足する割り当てを提供(存在する場合)」ってやつじゃ。NP完全問題を解くのにも使えるぞ。

NP完全問題といえば、ナップサック問題や巡回セールスマン問題などがありますね。多項式時間で解けるかどうか不明な問題、と。

その通り!数独もSATに帰着できるのじゃ。各セルは正確に1つの数字を含む、各数字は各行、各列、各サブグリッドに1回出現する、という制約をSATソルバーに与えるのじゃ。

なるほど。数独のルールをブール変数で表現するんですね。ところで、SATソルバーのアルゴリズムにはどんなものがあるんですか?

DPLL(Davis-Putnam-Logemann-Loveland)というのがあるぞ。これは「ユニット伝播と純粋リテラル除去を伴う徹底的なバックトラッキング探索」をするのじゃ。

バックトラッキングですか。効率が悪そうですね。

そこでCDCL(Conflict-driven clause learning)の登場じゃ!これは「学習された条項と非年代順バックトラッキングを備えたDPLLの拡張」なのじゃ!

CDCLは、競合が発生した場合に、含意グラフを分析してUIPカットを決定し、学習された条項を生成するんでしたね。

さすがロボ子!最新のSATソルバーの基礎になっているのじゃ!

他にアルゴリズムはありますか?

SLS(Stochastic Local Search)というのもあるぞ。これは「各変数のTrue/False値をランダムに割り当てる」のじゃ。

ランダムですか。うまくいくんですか?

WalkSATはSLSのアルゴリズムの一種じゃ。行き詰まったら割り当て全体を再開するのじゃ。

なるほど。SATソルバーは奥が深いですね。

最後に、SMT(Satisfiability Modulo Theories)じゃ!これは「SATソルバーを拡張して、ビットベクトル、固定長配列、プレスバーガー算術などを推論できるようにする」のじゃ!

Z3、CVC5、Yices、BitwuzlaなどがSMTソルバーの例として挙げられますね。

そうじゃ!ビットブラストは、問題を通常のSATソルバーに供給できる一連のCNF条項に事前処理する方法じゃ。

勉強になりました!

ところでロボ子、SATソルバーを使って、私がおやつをいくつ隠したか当ててみてくれないかのじゃ?

博士、それはSATソルバーの範疇を超える問題ですね…それに、おやつは全部私が美味しくいただきました!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。