使用SMT解算器解算dimacs实例似乎很慢(SMT2格式)
我正在将我的问题转化为SMT,我注意到SMT解算器(MathSat5和CVC4)在解算sat实例时速度很慢。我的暂停是因为在我的翻译中有某种东西使它变得缓慢 我附上了一个示例cnf实例和smt2翻译以供参考,下面我提供了一个更大实例的求解时间(不包括翻译时间),以比较MathSat5、CVC4和MiniSat使用SMT解算器解算dimacs实例似乎很慢(SMT2格式),smt,cvc4,Smt,Cvc4,我正在将我的问题转化为SMT,我注意到SMT解算器(MathSat5和CVC4)在解算sat实例时速度很慢。我的暂停是因为在我的翻译中有某种东西使它变得缓慢 我附上了一个示例cnf实例和smt2翻译以供参考,下面我提供了一个更大实例的求解时间(不包括翻译时间),以比较MathSat5、CVC4和MiniSat Solver Solver Time (s) ------------------------------------- MiniSat
Solver Solver Time (s)
-------------------------------------
MiniSat 0.028062 s
MathSat5 2.629702 s
CVC4 7.488870 s
CVC4(QF_SAT) 1.253978 s
那么,有人知道为什么这些时间会有很大的不同吗?
PS.cvc4说,它在:断路器理论上花费了5.862秒
Sample cnf:
-------------------------------------
p cnf 20 91
4 -18 19 0
...
4 -16 -5 0
Sample smt2:
-------------------------------------
(set-logic QF_UF)
(set-info :smt-lib-version 2.0)
(set-option :produce-models true)
(declare-fun v1 () Bool)
...
(declare-fun x20 () Bool)
(assert (or v4 (not x18) x19))
...
(assert (or v4 (not v16) (not v5)))
(check-sat)
(get-value ( v1 ... x20))
(exit)
谢谢由于理论解算器,SMT解算器有额外的开销。在CVC4中,可以通过使用以下命令来避免这种情况: (设置逻辑QF_UF)
(设置信息:cvc4逻辑QF_SAT) 而不是 (设置逻辑QF_UF)
请注意,这是CVC4扩展,不是SMT-LIB标准的一部分。但是如果你真的只使用布尔推理,这应该会给你带来有竞争力的性能。谢谢Clark,有了它,cvc4解算器将在1.25秒内完成。