RelSat、C2Dなど、私が知っているすべての#SATソルバーは、充足可能なインスタンスの数のみを返します。しかし、私はそれらのインスタンスのそれぞれを知りたいですか?
このような#SATソルバーはありますか、またはこれを行うために利用可能な#SATソルバーをどのように変更する必要がありますか?
ありがとうございました。
RelSat、C2Dなど、私が知っているすべての#SATソルバーは、充足可能なインスタンスの数のみを返します。しかし、私はそれらのインスタンスのそれぞれを知りたいですか?
このような#SATソルバーはありますか、またはこれを行うために利用可能な#SATソルバーをどのように変更する必要がありますか?
ありがとうございました。
回答:
ALL-SATまたはすべてのソリューションのSATソルバーを探しています。これは、#SATとは異なる問題です。それらをカウントするためにすべてのソリューションを列挙する必要はありません。
人々が既存のSATソルバーの上にこれらのアルゴリズムを追加するが、これらの拡張機能をリリースすることはめったにないので、私はあなたの問題を解決するツールを知りません。ALL-SATを実装するためにCDCLソルバーを変更する際に役立つ2つのペーパーを以下に示します。
Memory Efficient All-Solutions SATソルバーとその到達可能性への応用、O。Grumberg、A。Schuster、A。Yadgar、FMCAD 2004
これは、arXivに投稿された最近の記事です。
すべてのモデルを列挙するための現代SATソルバーの拡張、Said Jabbour、Lakhdar Sais、Yakoub Salhi、2013
これらの作成者に実装を問い合わせてみてください。
私はVLSIカンファレンスでAll-SATに関するより最近の(2014年の)論文を見つけたので、それは間違いなく実用的な側面に向けられています(一般的にcstheory.SEにはそれほどではありませんが、ここでのOPの質問に合っているようです):
IEEEサブスクリプションをお持ちでない場合は、SubramanyanのプリンストンWebページに無料のコピーがあります。(彼は論文のコピーを保存/配布するためにファイル共有サービスを使用しており、これらのURLがどの程度安定しているかはわかりません。したがって、このラウンドアバウトリンクです。)
この論文の要点は次のようです:
私たちの貢献であるNon-Disjoint-Decアルゴリズムは、ソルバー内の暗黙の変数を一切含まない非常に短いブロック節を生成します。通常、満足できるmintermの変数の大部分が暗示されていることに注意してください。評価で示されているように、短いブロック節はソルバーのパフォーマンスにとって非常に有益です。
それらの実装はMiniSatに基づいています。ただし、拡張機能のソースコードは公開されていないようです。残念ながら、これはAll-SATの分野の習慣のようです。そのため、実験結果を含むこの分野の論文は、多少なりとも単純なアルゴリズムを打ち負かし、直接比較することはほとんどできません(実験の観点から)結果)All-SAT用の他の公開アルゴリズムを使用します。Jabbourらによる論文。Vijay Dが言及したものもこの種のものです。
私はそれが他の回答で言及されていないので(アンドラス・サラモンのコメントでのみ)、[かなり人気のある]ブロッキング句のテクニックが導入されました: