私はZ3とYicesといくつかの研究上の問題を解決するために1年未満で作業しています。これらのソルバを使用して、私は常に性能、特にモデリング/チェック(満足度)に必要な時間と空間(メモリ)の2つを評価する必要があります。 Z3の場合、私はそれらを直接見つける手がかりは見つけられませんでした。私は "統計"(Z3 NET APIで提供されている "DisplayStatistics"機能を使用)を試して、次のような出力を見つけました:Z3(NET API)の充足可能性のモデリング/チェックに必要なメモリと時間を確認するには
num。競合:122
num。決定:2245
num。伝播:27884(バイナリ:21129)
num。再起動:1
num。最終チェック:1
num。分。リット:52
num。追加された数:3766
num。 mk bool var:2782
num。デルブールvar:658
num。 mk enode:1723
num。 del enode:78
num。 mk句:3622
num。 del句:1517
num。 mk bin句:3067
num。 mk lits:18935
num。競合:28
num。行を追加:5091
num。ピボット:328
num。アサート下限:2597
num。上位アサート:3416
num。 diseertをアサート:1353
num。バインドされた小道具:787
num。固定式:697
num。オフセットeqs:866
num。擬似番号:34
num。 eq。アダプタ:820
私は、使用されたメモリ/時間を理解するためにこれらの値をどのように解釈するのか分かりません。実行時間を見つける方法はいくつかあります(Stopwatchのようなタイマークラスを使用します)。しかし、スペースが必要な場合には、私は何も見つかりませんでした。モデリングに必要なブール変数(低レベル、SATソルバ)の数を得ることができれば、私にとってはうまくいくでしょう。
誰でも私に解決策を見せることができれば嬉しいです。
ありがとうございます。私は別の問題があります。私はZ3(特にZ3 NET API)のMAXSAT機能について疑問に思っています。私はそのような機能を実装する必要があることを発見しました(C APIの例に示されています)。 Yiceの場合、yices_max_satなどの組み込み関数があり、yices_assert_weightedを使用して重み付けされたアサーションに従って動作します。 Z3は、NET APIを使用してMAXSATを使用する簡単な方法を提供できますか? – Ashiq
'仮定'を使って 'yices_max_sat'コマンドを実装しました。コマンド 'yices_assert_weighted'は' hidden'ブール変数(すなわち仮説変数)を作成し、それに重みを関連付けるだけです。したがって、これらの2つのコマンドは、「仮定」を使用してZ3 APIの上でシミュレートすることができます。 Z3 APIの上にMAXSATを実装する方法はたくさんあります。 'maxsat.c'の例では、その2つについて説明しています。公式のAPIでMAXSATをサポートする予定はありません。つまり、将来のリリースでは、.NETバージョンの 'maxsat.c'を含めることができます。 –
ありがとうございます。 maxsat.cの.NETバージョンは大きな助けになります。私はすぐにそれを得ることを望む。しかし、maxsat.cの例では、重みをどのように設定できるかはわかりません。 – Ashiq