DPLL SAT solvers通常应用Phase Saving启发式。这样做的目的是记住每个变量的最后赋值,并在分支中首先使用 first 。
为了试验分支极性和相位节省的效果,我尝试了几种SAT求解器并修改了相位设置。所有都是 Windows 64位端口,以单线程模式运行。我总是使用同样的示例输入来进行中等复杂度的输入(5619个变量,11261个子句,在解决方案中,所有变量的4%是true,96%false)。
结果运行时在下面列出:
这可能只是(不幸的)运气,但差异非常大。令我惊讶的是,对于我的示例, MiniSat 的性能优于所有现代求解器。
我的问题:
有什么区别的解释吗?
保存极性和相位的最佳做法?
答案 0 :(得分:2)
从测试中无法得出任何结论。已知DPLL和基于它的求解器会根据初始搜索条件显示出重尾行为。这意味着同一个求解器可以在同一实例上同时具有短时运行时间和长时运行时间,具体取决于诸如随机重启发生时的因素。即使不增加相位保存和随机重启的复杂性,跨不同求解器的搜索时间也可能因(例如)选择决策变量的方式而异。