z3py不同解算器运行之间的依赖性。

问题描述 投票:0回答:1

我正在用Z3求解器(z3py API)运行几个实验,根据我设置的超时时间来衡量结果的质量。我从同一个vitualenv运行不同的实验,但从不同的类。在每个实验之后,我都会创建一个新的求解器对象,像这样。

self.solver = z3.Solver()

我感觉在第二次运行时,结果会更快地被发现,等等。所以我想知道,z3py API是否以某种方式保存了一些以前运行的初步结果,以加快下一次的速度。如果是的话,有没有办法在运行后完全重置解算器。

python z3py
1个回答
0
投票

这是极不可能的,特别是考虑到你从头开始重新创建求解器。但这是不可能的,因为你还没有真正展示任何代码来查看是否有可能出现故障。

我猜测,如果你总是观察到第一个解比下面的解慢,请确保你正确地考虑到Python解释器的启动、加载程序、加载它所需要的所有z3基础结构,以及最后调用求解器。请注意,这些都不会便宜,尤其是当你要基准测试的问题相当小的时候。

一个好的方法是把前几次运行的时序结果扔掉,以确保内存中所有的缓存线都被预热了,所有的东西都被分页了。然后比较一下第3到第15次运行的结果... ... 你还能看到区别吗?这说明有其他因素存在,尽管我对此表示怀疑。

但是,这又取决于你是如何编码的,以及你要测试的是什么样的问题。解算器选择的随机种子可以起到一定的作用,但其影响应该是随机分布的,如果有的话。

© www.soinside.com 2019 - 2024. All rights reserved.