Answers:
分辨率搜索(仅使用具有良好启发性的分辨率规则)是SAT求解器的另一种可能策略。从理论上讲,它比DPLL强大(即,存在证明其指数缩短的问题),DPLL只是做树分辨率,尽管您可以通过学习技巧来增强它的能力-是否使它像一般分辨率一样强大据我所知是开放的),但我不知道实际执行情况会更好。
如果您不限制自己完成搜索,那么WalkSat是本地搜索求解器,可用于查找可满足的解决方案,并在许多情况下优于基于DPLL的搜索。但是,除非有人缓存了所有失败的分配(这将意味着指数内存需求),否则不能用它来证明不满意。
编辑:忘记添加- 也可以使用切割平面(通过将SAT简化为整数程序)。尤其是Gomory足以解决任何整数程序的问题。同样在最坏的情况下,可能需要一个指数数。我认为Arora&Barak的Computational Complexity一书中有更多的证明系统示例,这些系统理论上可以用于诸如SAT求解之类的事情。再说一次,除了基于DPLL的方法或基于本地搜索的方法之外,我还没有真正实现任何快速实现。
蒙特卡洛树搜索(MCTS)最近在诸如Go之类的游戏上取得了令人印象深刻的结果。粗略的基本思想是将随机模拟与树搜索交织在一起。它轻巧且易于实现,我链接的研究中心页面包含许多示例,论文和一些代码。
Previti等。[1]对适用于SAT的MCTS进行了一些初步调查。他们将基于MCTS的搜索算法称为UCTSAT(如果愿意,则为“应用于树SAT的上置信界”)。他们比较了SATLIB存储库中实例上DPLL和UCTSAT的性能,目的是查看UCTSAT是否会产生比DPLL小得多的搜索树。
对于不同大小的统一随机3-SAT和平面图着色实例,没有显着差异。但是,UCTSAT在现实世界中的实例表现更好。对于DPLL,四个不同的SSA电路故障分析实例的平均树大小(以节点数为单位)为数千,而对于UCTSAT,平均树大小始终小于200。
DPLL并没有严格规定变量访问顺序,并且有很多有趣的研究都在探讨最佳的变量顺序攻击策略。其中一些被并入SAT算法的变量选择逻辑中。从某种意义上说,这项研究是初步的,它表明不同的攻击顺序导致了不同的顺序约束(与实例硬度高度相关),并且设计最有效的启发法或策略来利用这一显然是关键的见解。在研究的早期阶段。
用动态超图分离器分解指导实际的SAT解决方案 Li,van Beek
约束刀锋(1998)沃尔什