在Microsoft Z3中,当我们试图解决一个公式时,当存在两个或更多可满足的解决方案时,Z3总是以相同的顺序返回结果。如何从Microsoft Z3获得随机结果?
是否可以从Z3中获得随机结果,以便对于相同的输入,它将在不同的执行过程中生成不同的输出序列。
请注意,我使用C或C#API。我没有使用smt2lib使用Z3。所以如果你能给我一个可以添加随机化的C或C#API函数的例子,它会更有用。
在Microsoft Z3中,当我们试图解决一个公式时,当存在两个或更多可满足的解决方案时,Z3总是以相同的顺序返回结果。如何从Microsoft Z3获得随机结果?
是否可以从Z3中获得随机结果,以便对于相同的输入,它将在不同的执行过程中生成不同的输出序列。
请注意,我使用C或C#API。我没有使用smt2lib使用Z3。所以如果你能给我一个可以添加随机化的C或C#API函数的例子,它会更有用。
(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。
这是什么语言?看起来计划-y – Carcigenicate
它是smt2,没有任何API的Z3的正常输入。 请查看rise4fun.com/Z3。 – mmpourhashem
我尝试了以上参数,使用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”); solver = Z3_mk_context(cfg); ... 不幸的是我无法让它工作。当我运行代码,我得到这样的警告... 警告:未知参数'smt.arith.random_initial_value'警告:未知参数'random_seed' 任何想法,我做错了? –
听起来像你需要设置种子。 – Carcigenicate