有什么办法可以使Z3使用多核(多线程)解决大问题?

时间:2019-11-30 06:47:28

标签: optimization z3 smt

我正尝试从商用求解器转到Z3,以解决大整数可满足性问题。 “大”是指我要解决的模型具有大约300,000个整数和300,000个(assert (=...语句,每个语句可能包含8-16个变量。

我们的商业求解器花费了1353秒来解决这个大问题。我们的商业求解器实际上是一个优化器,这是作为混合整数优化问题解决的。该问题转化为具有5,093,121变量,9901约束,63,450,472零,5,093,120整数的整数问题,并在4690次迭代中得到了解决。但是,这是一个简单的SAT问题,所以我希望将其移至Z3并放弃商业优化器。

正如我所指出的,商业优化器花费了1353秒,但它也被允许使用32个内核,并且表明我使用了许多内核(我没有跟踪最终使用了多少个内核)。

我希望Z3能够使用多个内核。目前看来还没有。有没有办法做到这一点?如果失败,还有另一个SMT求解器吗?

1 个答案:

答案 0 :(得分:1)

Z3确实支持并行处理,请参阅:https://theory.stanford.edu/~nikolaj/programmingz3.html#sec-parallel-z3

可以在命令行上设置参数。因此,要使z3使用4个线程并处理文件solve.z3,请使用:

z3 parallel.enable=true parallel.threads.max=4 solve.z3

请注意,如果parallel.enable设置为true,则Z3将默认为处理器数量。

不幸的是,此功能的文档很少。如果您尝试一下,请报告您的发现!