Z3を使用して12000+ブール変数でSAT問題を解決しようとしています。 私は、ほとんどの変数が解決策ではfalseと評価されると考えています。 SATソルバとしてZ3をガイドしたり、ヒントしたりする方法がありますか? 私はcryptominisat 2でそれを試して、良い結果を得ました。Z3 Z3をSATソルバーとして使用する極性
答えて
Z3は、ソルバーとプリプロセッサの集合です。いくつかのソルバにヒントを提供することができます。 コマンド(check-sat)
を使用すると、Z3は自動的にソルバーを選択します。 ソルバーを自分で選択したい場合は(check-sat-using <strategy>)
にする必要があります。 たとえば、次のコマンドはZ3にブールSATソルバを使用するよう指示します。
(check-sat-using sat)
我々は常に使用して最初の「偽の極性」を試すためにそれを強制することができます。
(check-sat-using (with sat :phase always-false))
我々はまた、前処理ステップを制御することができます。我々はsat
を呼び出す前に、CNF式を入れたい場合は、我々は使用する必要があります。
(check-sat-using (then tseitin-cnf (with sat :phase always-false)))
EDIT:あなたはDIMACS入力フォーマットとZ3のv4.3.1を使用している場合は、そのためのパラメータを設定することはできませんがすべての利用可能なソルバをコマンドラインを使用して実行します。次のリリースではこの制限に対処します。その間に、進行中のブランチをダウンロードするには、
をダウンロードし、Z3をコンパイルします。その後、極性偽を強制するために、我々は、このモジュールで使用可能なすべてのオプションを表示するコマンドラインオプション
sat.phase=always_false
コマンドz3 -pm:sat
を使用します。
のEND EDITここ
は(onlineも利用可能)SMT 2.0の完全な例です:
(declare-const p Bool)
(declare-const q Bool)
(declare-const r Bool)
(declare-const s Bool)
(assert (or (not p) (not q) (not r)))
(assert (or r s))
(assert (or r (not s)))
(assert (or r (and p q)))
(echo "With always false")
(check-sat-using (then tseitin-cnf (with sat :phase always-false)))
(get-model)
(echo "With always true")
(check-sat-using (then tseitin-cnf (with sat :phase always-true)))
(get-model)
すぐにお返事ありがとうございます! –
現在、私はZ3の入力フォーマットとしてDIMACSを使用しています。ヒントを活用するために、DIMACS/CNF句をSMT形式に翻訳する必要がありますか?私はZ3にブール式のSMTセットとして公式化された私の元の問題を解決させようとしました。しかし私は、SATソルバーが私の場合にはるかに高速であることを発見しました。 –
私はDIMACS入力フォーマットに関連する情報で答えを更新しました。 –
- 1. Z3ソルバーZ3_parse_smtlib2_file - Z3 C APIプッシュポップ
- 2. Z3から外部SATソルバーを呼び出す
- 3. ソルバーオブジェクトのインターフェイスを作成して使用する方法(Z3ソルバー)
- 4. Z3ソルバー差ロジックのpython API
- 5. SWテストにZ3 SMTソルバーを使用できますか
- 6. Z3ローCPU使用
- 7. 問題Z3 CC_NUM_THREADSを使用して並列Z3を設定しながら、= 3
- 8. SMT/SATソルバーとモデルチェッカー
- 9. z3 :: tacticとz3 :: goalの目的
- 10. z3ソルバーに直接節を追加する
- 11. Z3とνz(z3opt):
- 12. マルチコアサーバーでZ3を使用する
- 13. ASP.NETコアでZ3を使用する
- 14. 私はZ3(目的関数)を経由してMaxSMT Z3
- 15. が部分的にZ3でZ3
- 16. Z3セグメンテーションフォールト
- 17. Z3パワーモジュロステートメント
- 18. z3バイナリとz3 apiの結果が異なります
- 19. z3 C++ API&ite
- 20. z3のプライムインプリカント
- 21. Q:[Z3] java.lang.NoClassDefFoundErrorが:
- 22. Z3のセグメンテーションフォルトSMT
- 23. Z3不変チェック
- 24. z3をインクリメンタルに使用すると時間が増えます
- 25. z3 apiを使用してLRAを実行すると、ターミナルでz3を使用するより遅くなります
- 26. z3pyのZ3-LIBの使用方法
- 27. 使用MaxSAT問合せは、Z3
- 28. Z3ファイルを読む
- 29. は、私がZ3と次のような問題を解決しようとしていますZ3
- 30. Z3とcoqの相違
は、スタックオーバーフローへようこそ!何を試しましたか? – IronMan84
私はいくつかのCNF/DIMACSファイルを生成しています。 Z3/DIMACSですぐに解決できるものもあります。他の人は時間がかかったり、まったく終わらない。私はファイルにCryptominisat 2を使用し、 "--polarity-mode = false"を追加して解決しました。 Z3のINIパラメータでは、私は極性関連のパラメータを見つけることができませんでした。したがって、私はここでいくつかの賢明なヒントを見つけることを望んでいるstackoverflow。 –