#SAT Solverのダウンロード


21

誰でも、#SATソルバーの実用的な実装をダウンロードできる1つ以上のWebサイトを指し示すことができますか?近似値ではなく、正確な解カウントを返すものに興味があります。


2
こんにちはウォルター、あなたの質問は、このサイトの公式に「話題になっている」ものの境界に近いです。ただし、この質問をする場所が他になく、回答できる場合は、それほど悪くないかもしれません...(このサイトはまだ開発中であるため、他のサイトよりもオープンになっていると思います。)このコメントの要点は「scる」または「警告する」ことではなく、単なる親しみのある通知です。
ライアンウィリアムズ

こんにちはライアン、ご連絡ありがとうございます。この質問が国境に近い場合は申し訳ありません。Webで検索したところ、何も見つかりませんでした。SATソルバーは一部しかありませんが、#SATソルバーはありません。それが私がここで尋ねた理由です。もちろん、SATソルバーをエンジンとして使用してソリューションをカウントする独自のコードを作成できることは知っていますが、既に作成されて使用できるものを探していました。
ジョルジオカメラニ

12
私は反対したいです。そのような質問は範囲内であり、そうあるべきだと思います!
スレシュヴェンカト

その範囲に同意します。fyi / imhoは、ソースコードがない限り、SATソルバーから#SATソルバーを構築するのは実用的ではありません。SATが必要とされるであろう#SATに固有ではなく、通常は特別なテクニック...
vzn

回答:




11

1つのオプションは、JavaBDDなどのBDDライブラリを使用することです。そのようなライブラリはすべて、ソリューションを高速にカウントする関数を持っているか、少なくともそのような関数を簡単に記述できるようにします。ただし、多くの場合、BDDの構築に時間がかかり、多くのメモリが必要になる可能性があるという欠点があります。

入力がCNFの場合、BDDの構築を高速化する単純な発見的方法は次のとおりです。最初に、各句の小さなBDDを構築し、ルートが最小のBDDである優先度キューに入れます。次に、2つのBDDをポップし、それらの間のANDを計算して、結果を優先度キューにプッシュします。コンピューティングので、サイズの二分決定グラフの間:ここでの考え方だnはかかるO M nは理論ではなく、M + N実際には、ランタイムを最小限に抑えることがハフマン符号を見つけることと同じです。mnOmnm+n


7

関連トピック:最高のSATソルバー


1
ありがとう、Sadeq。あなたが示したトピックは理論指向のようです。上限の減少に関するいくつかの論文を掲載しています。非常に興味深いのですが、すぐに使える実用的な実装を探していました。
ジョルジオカメラニ

2
どういたしまして。そこで引用されたリンクの中には、純粋に実用的なものがありました:satcompetition.org。そこで非常に優れた実装を見つけることができると思います。
MS Dousti

7

私が見つけた最高のものは「c2dコンパイラ」です。http://reasoning.cs.ucla.edu/c2d/

d-DNNFを使用し、-countオプションが必要です。


c2dはsharpsatよりもはるかに多くのCNFを解決します。以下のためにおもちゃの目的「relsatは、」あまりにも行いますソルバー座っていました。
レオンレオン


5

私は小さなモデル/プライム暗黙の列挙子を書きました。これは、既にモデル列挙を使用したモデルカウントに使用できますが、あまり実用的ではありません。誰かが興味を持っている場合は、それを拡張して、プライムインプリカントからのモデルをカウントできます。


2

WebサイトBeyondNPには、#SAT(およびCNF式に関するその他の関連する難しい問題)を解決するための既存のツールの優れた目録が含まれています。また、おおよそのモデルカウント知識のコンパイル(CNFを、多項式時間モデルカウントをサポートすることが望ましいと思われる簡潔なデータ構造に変換するタスク)のツールのリストを見つけることもできます。

また、モデルカウンターとさまざまなベンチマークのパフォーマンスを向上させるのに役立つCNF数式を前処理するためのツールのリストがあります



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.