Python 使用Z3Py对同一约束集执行不同的运行时间

Python 使用Z3Py对同一约束集执行不同的运行时间,python,z3,z3py,Python,Z3,Z3py,我正在使用Z3PyaPI用Z3解算器编码一个调度问题。除了解算器的运行时在每次运行中的时间不同(有时是10/100倍)这一事实之外,它工作得非常好。 如果解算器花费的时间太长,我通常会停止查询并重新启动它 在我看来,解算器(每次运行)采用不同的路径来找到解决方案,这会导致不同的运行时间 所以我的问题是,对于同一组约束(问题),我是否可以强制解算器每次都采用相同(类似)的路径 在做了一些研究之后,我偶然发现了手动设置随机种子的概念。这对我有帮助吗?还有更多关于如何使用python api实现这一点

我正在使用Z3PyaPI用Z3解算器编码一个调度问题。除了解算器的运行时在每次运行中的时间不同(有时是10/100倍)这一事实之外,它工作得非常好。 如果解算器花费的时间太长,我通常会停止查询并重新启动它

在我看来,解算器(每次运行)采用不同的路径来找到解决方案,这会导致不同的运行时间

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

在做了一些研究之后,我偶然发现了手动设置随机种子的概念。这对我有帮助吗?还有更多关于如何使用python api实现这一点的信息吗

最好的


Jenny除非你提前知道哪种随机种子效果最好,否则你不会这么做。然而,您确实可以在回归场景中设置种子,以获得可重复的行为

检查
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.
one;也许两者都有

您可以使用
set_param
函数从Python API设置此选项,请参见: