我试图影响 Z3 生成的模型值结果的随机性。据我了解,对此的选择非常有限:在线性算术的情况下,单纯形求解器不允许仍然满足给定约束的随机结果。但是,有一个选项 smt.arith.random_initial_value (“在基于单纯形的过程中使用随机初始值进行线性算术(默认值:false)”)我似乎无法正常工作:
from z3 import *
set_option('smt.arith.random_initial_value',True)
x = Int('x')
y = Int('y')
s = Solver()
s.add( x+y > 0)
s.check()
s.model()
结果,这似乎总是产生 [y = 0, x = 1]。即使是在给定约束中未使用的变量的模型完成似乎总是会产生确定性的结果。
关于此选项如何工作的任何想法或提示?