2016-02-12 15 views
5

Microsoft Z3では、数式を解こうとするとき、Z3は満足できる解が2つ以上ある場合、常に同じシーケンスで結果を返します。Microsoft Z3からランダムな結果を得るには?

Z3からランダムな結果を得ることができるので、同じ入力に対して異なる実行で異なる出力シーケンスが生成されます。

私はCまたはC#APIを使用しています。私はsmt2libを使ってZ3を使っていません。したがって、ランダム化を追加できるCまたはC#API関数の例を私に与えることができれば、より有用になります。

+1

シードを設定する必要があると思われます。 – Carcigenicate

答えて

1
(set-option :smt.arith.random_initial_value true) 
(declare-const x Int) 
(declare-const y Int) 
(assert (> (+ x y) 0)) 
(check-sat-using (using-params qflra :random_seed 1)) 
(get-model) 
(check-sat-using (using-params qflra :random_seed 2)) 
(get-model) 
(check-sat-using (using-params qflra :random_seed 3)) 
(get-model) 

出所:here

+0

これはどの言語ですか? Looks Scheme-y – Carcigenicate

+0

これはsmt2で、APIなしでZ3の通常の入力です。 これをチェックするrise4fun.com/Z3。 – mmpourhashem

+0

C APIコードを使用して上記のパラメータを試しました。 ... cfg = Z3_mk_config(); Z3_set_param_value(cfg、 "MODEL"、 "true"); Z3_set_param_value(cfg、 "TIMEOUT"、TIME_OUT); Z3_set_param_value(cfg、 "SMT.ARITH.RANDOM_INITIAL_VALUE"、 "true"); Z3_set_param_value(cfg、 "RANDOM_SEED"、 "1"); ソルバー= Z3_mk_context(cfg); ... 残念ながら、私はそれを動作させることができませんでした。コードを実行すると、次のような警告が表示されます... 警告:未知パラメータ 'smt.arith.random_initial_value'警告:未知パラメータ 'random_seed' 私は間違っていますか? –

関連する問題