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

时间:2014-12-04 15:46:19

标签: smt cvc4

我将我的问题转换为SMT,我注意到解决sat实例时SMT求解器(MathSat5和CVC4)很慢。我的暂停是我的翻译中有一些东西让它变慢。

我附加了一个示例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秒:理论uf symmetry_breaker

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)

由于

1 个答案:

答案 0 :(得分:3)

由于理论求解器,SMT求解器有额外的开销。在CVC4中,您可以使用以下命令来避免这种情况:

(设定逻辑QF_UF)
(set-info:cvc4-logic QF_SAT)

而不是

(设置逻辑QF_UF)

请注意,这是CVC4扩展,不是SMT-LIB标准的一部分。但如果你真的只使用布尔推理,这应该会给你带来竞争力。