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

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

我正尝试从商用求解器转到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求解器吗?

optimization z3 smt
1个回答
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将默认为处理器数量。

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

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