使用SMT解算器解算dimacs实例似乎很慢(SMT2格式)

使用SMT解算器解算dimacs实例似乎很慢(SMT2格式),smt,cvc4,Smt,Cvc4,我正在将我的问题转化为SMT,我注意到SMT解算器(MathSat5和CVC4)在解算sat实例时速度很慢。我的暂停是因为在我的翻译中有某种东西使它变得缓慢 我附上了一个示例cnf实例和smt2翻译以供参考,下面我提供了一个更大实例的求解时间(不包括翻译时间),以比较MathSat5、CVC4和MiniSat Solver Solver Time (s) ------------------------------------- MiniSat

我正在将我的问题转化为SMT,我注意到SMT解算器(MathSat5和CVC4)在解算sat实例时速度很慢。我的暂停是因为在我的翻译中有某种东西使它变得缓慢

我附上了一个示例cnf实例和smt2翻译以供参考,下面我提供了一个更大实例的求解时间(不包括翻译时间),以比较MathSat5、CVC4和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秒内完成。