我正在使用z3py API使用Z3求解器对调度问题进行编码。除了在每次运行中求解器的运行时间在时间上有所不同(有时相差10/100)之外,它的效果都很好。 如果求解器花费的时间太长,我通常会执行该操作,只是终止查询并重新启动它。
在我看来,求解器(每次运行)采用某种方式找到解决方案的路径不同,从而导致运行时间不同。
所以我的问题是,对于相同的一组约束(问题),我是否可以强制求解器每次都采用相同(相似)的路径?
经过一些研究,我偶然发现了手动设置随机种子的概念。那对我有帮助吗?有更多信息如何使用python API做到这一点吗?
最好
珍妮
答案 0 :(得分:1)
除非您提前知道哪种随机种子效果最好,否则不要。但是,您确实可以在回归方案中设置种子,以获得可重复的行为。
检查z3 -p
的输出,发现很多可能性:
fixedpoint.spacer.random_seed (unsigned int) (default: 0)
sat.random_seed (unsigned int) (default: 0)
nlsat.seed (unsigned int) (default: 0)
fp.spacer.random_seed (unsigned int) (default: 0)
smt.random_seed (unsigned int) (default: 0)
sls.random_seed (unsigned int) (default: 0)
(注:0告诉您自己将其“拾取”给求解器。)您想要的那个很可能是smt.
或sat.
一个;也许两者都有。
您可以使用set_param
函数通过Python API设置此选项,请参见:https://z3prover.github.io/api/html/namespacez3py.html#a54767807c828563030b9400332f81d48