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 :: tacticとz3 :: goalの目的
- 2. Z3パワーモジュロステートメント
- 3. Z3セグメンテーションフォールト
- 4. z3バイナリとz3 apiの結果が異なります
- 5. z3 C++ API&ite
- 6. Z3のセグメンテーションフォルトSMT
- 7. Z3ファイルを読む
- 8. Z3とcoqの相違
- 9. Z3コンテキストのシリアライズ/デシリアライズ?
- 10. Z3 QBVFの質問
- 11. Z3/Pythonの実数
- 12. z3 timeout on linux/mac
- 13. z3実数累乗
- 14. z3にリスケートを表示
- 15. 32ビットWindowsでZ3を使用する方法
- 16. z3 api C++を使用してsmt2コマンドを解析する方法は?
- 17. SATソルバーを使用してすべてのソリューションを見つけることはできますか?
- 18. Z3はCraig補間をサポートします
- 19. z3モデルの配列用語の値
- 20. Z3 Python API - いつ利用可能か
- 21. WindowsでScala^Z3をコンパイルする
- 22. SMT Z3ユースケース(DbCなど)とZ3のオープンソースの代替案の実例をお探しですか?
- 23. 奇妙なZ3モデル値
- 24. z3の関数宣言
- 25. Z3定量器のサポート
- 26. Z3のソフト/ハード制約
- 27. Z3の反例出力例
- 28. 現在のバージョンよりz3
- 29. Z3を使用して部分文字列を推論できますか?
- 30. Z3での除外と組み込み
は、スタックオーバーフローへようこそ!何を試しましたか? – IronMan84
私はいくつかのCNF/DIMACSファイルを生成しています。 Z3/DIMACSですぐに解決できるものもあります。他の人は時間がかかったり、まったく終わらない。私はファイルにCryptominisat 2を使用し、 "--polarity-mode = false"を追加して解決しました。 Z3のINIパラメータでは、私は極性関連のパラメータを見つけることができませんでした。したがって、私はここでいくつかの賢明なヒントを見つけることを望んでいるstackoverflow。 –