输入(布尔和算术方程)的顺序对约束求解器(如Gecode)和SMT求解器(如microsoft Z3)是否重要?如果是的话,如果我可以利用Gecode中的分支函数来利用一些已知的启发式方法,那么这两个软件中哪一个的性能会更好?
(注:我不知道在Gecode中是否有类似于分支()的功能,在Z3中是否存在)
理论上讲,不,顺序应该不重要。断言的顺序不应该有区别。但在实践中,它们可能会有影响,因为启发式方法可能最终会在死胡同里花费大量时间。SMT求解器通常以黑盒的形式工作,也就是说,除非你知道它们的确切内部结构,否则很难看到它们的进展情况。然而,你可以把verbosity调高(使用z3的 -v
标志),并可以查看输出结果,看看是否发现任何分歧行为。
与任何一般的 "SMT求解器的性能 "问题一样,它不可能抽象地回答。每一个问题实例都有特定的特点,可能有不同的编码方式来使求解器更容易。如果你发布具体问题,你可以得到更好的建议。