我正在使用Z3Py
来生成一个相对较大的求解器,其中包含约90000个约束。就像我初始化了一个求解器s = solver()
,然后我使用s.add(constraint)
添加了许多约束一样。假设我添加了90000个约束,那么我需要使用s.check()
进行检查。但是程序似乎卡住了,我想它真的需要很长时间才能解决这些限制(至少超过1天)。
但是,我还尝试使用命令SMT2
将90000约束转换为file.write(s.sexpr())
文件。然后,我从命令行使用Z3来使用z3 -smt2 file.smt2
检查生成的smt2文件。在这种情况下,该程序在一个小时内由smt2文件中的(check-sat)
解决了。
我的问题是s.check()
中的Z3Py
和(check-sat)
中的z3 -smt2 file.smt2
之间有什么区别?
造成这种巨大时序差异的可能原因是什么?