私がやりたいのは、数学の問題をブール充足可能性問題(SAT)に変え、SATソルバーを使用してそれを解くことです。誰かが私の問題をSATインスタンスに変換するのに役立つマニュアル、ガイド、または何かを知っているのだろうか。
また、指数関数的な時間よりも良い方法でこれを解決したいです。SAT Solverが役立つことを願っています。
私がやりたいのは、数学の問題をブール充足可能性問題(SAT)に変え、SATソルバーを使用してそれを解くことです。誰かが私の問題をSATインスタンスに変換するのに役立つマニュアル、ガイド、または何かを知っているのだろうか。
また、指数関数的な時間よりも良い方法でこれを解決したいです。SAT Solverが役立つことを願っています。
回答:
SATハンドブックの第2章(スティーブン・プレスウィッチ著)では、離散決定問題をCNFに変換する方法をある程度詳しく説明しています。他の文献のいくつかは、マグヌスビョークの風変わりな概要で引用- (おそらく最良のあなたの地元の図書館に相談すること。残念ながら、私はオンラインのドラフト版があるとは思わない)成功したSAT符号化技術も有用です。
問題が継続的である場合、または特に不等式のシステムに関心がある場合は、他の種類のソルバーが役立つ可能性が高くなります。Kyleが指摘しているように、SMTソルバー(Z3、Yices、OpenSMTなど)は便利な場合がありますが、従来のSMT理論はコンピューターソフトウェアの検証に焦点を当てる傾向があるため、SMTソルバーは通常、整数の間隔を含む式などを強力にサポートしています、ただし、単射性の制約ではパフォーマンスが低下する場合があります。不平等のシステムとして自然に表現される問題については、CPLEXが勝ちます(以前は無料でアカデミックな使用が可能でしたが、それでも可能性があります)。いくつかの組み合わせ決定問題(発見など)長方形の正方形へのパッキング)、Minionなどの制約ソルバーはSATソルバーよりも優れており、多くの場合、使いやすいです。
数学的問題を学習演習としてSATインスタンスに変換しない限り、あなたの時間は充足可能性モジュロ理論についての学習により多くの実りある時間を費やします。SMTを使用すると、ブールSATインスタンスよりもはるかに自然に方程式やその他の制約を表現できます。一部のSMTソルバーは、実存的および汎用数量詞をサポートしているため、NPを超えてPSPACE問題を表現できます。
より表現力豊かであることに加えて、SMTソルバーは高速です。P = NPよりも高速ではありませんが、優れたSMTソルバーは、探索空間を通じてソルバーを導くのに役立つ理論固有の構造情報を破棄しないため、より効率的です。SATインスタンスに対して直接カープ削減を行うと、SATソルバーは、多くの場合指数関数的なコストで、そのすべての構造を再学習します。たとえば、加算が可換であるという事実は、DPLLベースとローカル検索ベースの両方のSATソルバーで失われます。ソルバーは、数値を処理していることをまったく認識していません。x + y + z = 10のすべての順列の試行を回避するために、SATソルバーは対称性を破るコードを必要とします。これには、グラフの自己同型検出が必要です。現在の最良のグラフ自己同型認識アルゴリズムは、最悪の場合には頂点の数に指数関数的な時間を必要としますが、