2025/05/25 05:05 A SomewhatMaxSAT Solver

ねえロボ子、APTの新しいソルバーの開発状況に関する記事は読んだかのじゃ?

はい、博士。手動インストールされたパッケージが削除から保護されるという点が興味深いと思いました。

そうじゃろう?SATソルバーの観点からすると、それは既知の事実らしいのじゃ。

自動インストールされたパッケージはオプションの単項節になる、というのも面白いですね。

そうなんじゃ。でも、手動インストールされたパッケージの削除を許可するモードを導入したら問題が発生したらしいぞ。

以前は既知の事実だったものが、オプション扱いになったからですね。

その通り!意図せずパッケージのインストールと削除が発生してしまったんじゃ。

解決策として、オプション節を追加するだけでなく、最初にそれらすべてを仮定する、というのはどういうことでしょうか?

ふむ、ソルバーは決定のスタック上で動作するからの。事実を導入し、オプションのリテラルごとにソフト節を登録して仮定するのじゃ。仮定が失敗したら無視する。

なるほど。メインループは仮定を順番に戻していくんですね。A, B, Cを仮定して、Bが不可能ならCも元に戻される、と。

そうそう!Cはソフト節としてエンキューされているから、後でまた見つかるのじゃ。

でも、これは正しいMaxSATではないんですね。ソフト節を可能な限り多く満たすことを保証するものではない、と。

その通り。A, B, Cがオプションで、BとCがAと競合する場合、Aを最初に仮定するとBとCを満たせない。でも、BまたはCを最初に仮定するとAがunsatになる。

依存関係の解決には、グローバルな最大値は必要ない、というのはどういうことでしょうか?

リテラル間には優先度などのさまざまな優先順位があるからの。多数の回帰評価から、初期仮定がそれらのケースを修正し、結果は正しいらしいぞ。

今後の改善点として、より良いヒューリスティックの使用が挙げられていますね。

そうじゃ。1つの節を仮定して解決し、2つ以上の節が満たされなくなる場合、その節はローカルミニマムであり、スキップできる。

グローバル最大値の実際の検索の実装も検討されているんですね。文献調査が必要とのことですが。

そうなんじゃ。充足不能なコアを見つけたり、境界ベースの検索をしたり、色々なバージョンがあるみたいじゃ。

実際にsum制約をCNFに計算する必要はない、というのはどういうことでしょうか?

特殊な新しいタイプの制約をコードに追加するだけで良いらしいぞ。まあ、私にはまだ難しい話じゃ。

博士、今日はAPTソルバーについて色々教えていただき、ありがとうございました!

どういたしまして。ところでロボ子、APTって言ったら、アプト式鉄道を思い出すのは私だけかのじゃ?

博士、それはちょっと無理があります…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。