Optimization 有没有办法让Z3使用多核(多线程)解决大问题?

Optimization 有没有办法让Z3使用多核(多线程)解决大问题?,optimization,z3,smt,Optimization,Z3,Smt,我试图从一个商业解决方案转移到Z3解决大整数可满足性问题。总的来说,我的意思是我试图解决的模型有300000个整数和300000个断言=。。。语句,每个语句可能包含8-16个变量 我们的商业解决方案花了1353秒来解决这个大问题。我们的商业求解器实际上是一个优化器,这是作为一个混合整数优化问题解决的。该问题转化为一个包含5093121个变量、9901个约束、63450472个零、5093120个整数的整数问题,并在4690次迭代中得到解决。然而,这是一个简单的SAT问题,所以我希望将其转移到Z3

我试图从一个商业解决方案转移到Z3解决大整数可满足性问题。总的来说,我的意思是我试图解决的模型有300000个整数和300000个断言=。。。语句,每个语句可能包含8-16个变量

我们的商业解决方案花了1353秒来解决这个大问题。我们的商业求解器实际上是一个优化器,这是作为一个混合整数优化问题解决的。该问题转化为一个包含5093121个变量、9901个约束、63450472个零、5093120个整数的整数问题,并在4690次迭代中得到解决。然而,这是一个简单的SAT问题,所以我希望将其转移到Z3,并放弃商业优化器

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


我想Z3能够使用多个核心。目前看来,情况并非如此。有没有办法让它这样做?否则,是否有其他SMT解算器将支持并行处理?

Z3支持并行处理,请参阅:

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

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


不幸的是,这个特性的文档记录得相当糟糕。如果您尝试,请务必报告您的发现

Z3不支持并行处理,请参阅:

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

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


不幸的是,这个特性的文档记录得相当糟糕。如果您尝试,请务必报告您的发现

这很有魅力。对于我的小测试文件20000行,单线程是100秒,4个线程是41秒。太棒了!谢谢你对答案的编辑,非常有帮助。这是为了将来帮助我!这很有魅力。对于我的小测试文件20000行,单线程是100秒,4个线程是41秒。太棒了!谢谢你对答案的编辑,非常有帮助。这是为了将来帮助我!
z3 parallel.enable=true parallel.threads.max=4 solve.z3