使用Z3Py对于相同约束集的不同运行时间

时间:2018-09-05 00:33:50

标签: python z3 z3py

我正在使用z3py API使用Z3求解器对调度问题进行编码。除了在每次运行中求解器的运行时间在时间​​上有所不同(有时相差10/100)之外,它的效果都很好。 如果求解器花费的时间太长,我通常会执行该操作,只是终止查询并重新启动它。

在我看来,求解器(每次运行)采用某种方式找到解决方案的路径不同,从而导致运行时间不同。

所以我的问题是,对于相同的一组约束(问题),我是否可以强制求解器每次都采用相同(相似)的路径?

经过一些研究,我偶然发现了手动设置随机种子的概念。那对我有帮助吗?有更多信息如何使用python API做到这一点吗?

最好

珍妮

1 个答案:

答案 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