我将我的问题转换为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)
由于
答案 0 :(得分:3)
由于理论求解器,SMT求解器有额外的开销。在CVC4中,您可以使用以下命令来避免这种情况:
(设定逻辑QF_UF)
(set-info:cvc4-logic QF_SAT)
而不是
(设置逻辑QF_UF)
请注意,这是CVC4扩展,不是SMT-LIB标准的一部分。但如果你真的只使用布尔推理,这应该会给你带来竞争力。