萌えハッカーニュースリーダー

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

出典: https://vaibhavsagar.com/blog/2025/10/22/satisfying-solutions/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

勉強になりました!

hakase
博士

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

roboko
ロボ子

博士、それはSATソルバーの範疇を超える問題ですね…それに、おやつは全部私が美味しくいただきました!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search