主要介绍了SAT求解器发展现状和DPLL/CDCL等算先进搜索算法,作为关于SAT问题的入门介绍,如有错误,请不吝指出。
持续更新中!!!!
目录
1. Boolean Satisfiability(SAT)综述
1. Satisfiability(SAT)综述
Satisfiability problem (SAT)是第一个被解决的NP-hard问题,是命题逻辑的决策问题,其中元素包括合适的命题公式、变量、逻辑运算符和括号。
SAT问题是指,给定一个命题公式查看其是否是可满足的,也就是说,我们是否可以将公式的变量设置为1(True,真)或0(False,假),确定命题公式是否具有可满足的赋值(SAT,1)或没有任何可满足的赋值(UNSAT,0)。
假设存在一个公式,其本质是一个CNF(conjunctive normal form,合取范式),其中
是命题变量,
分别表示逻辑运算符“或”(disjunction,析取),“与”(conjunction,合取),“非”(negation,否定)。变量
或其反变量
是一个文字(literal),文字的析取是一个子句(clause)。因此,上面的公式
是四个子句的合取。我们可以通过将
和
置为1,
置为0来满足公式:
满足了第一、第三和第四个子句。第二个子句由
满足。因此,所有子句均被满足。
因此,当且仅当存在一组赋值,使每个子句中至少有一个文字为1时,公式是可满足的。
存在Tseytin变换[1]能有效地将任何命题公式转化为CNF而不影响其满足性,如表1所示。

SAT问题已经成为有效解决各种计算问题的重要工具,从硬件和软件验证到规划、组合设计和软件依赖等。SAT广泛应用于知识表示、推理、和人工智能(AI)等领域,值得注意的是,通过使用SAT,数学组合学中存在已久的开放性问题得到了解决——例如,毕达哥拉斯三组问题。
一个可以有效地将原始问题转化为SAT问题,并用SAT原理解决的计算机程序被称为SAT求解器(SAT solver)。今天,SAT求解器是如此强大和健壮,以至于它们已经成为解决复杂计算问题的主要工具。求解器已经嵌入到复杂的过程中,以解决更复杂的问题,如优化问题(MaxSAT,伪布尔优化)或量化可满足性(QSAT)。图1是基于CDCL(conflict-driven clause learning,基于冲突的子句学习) SAT求解器的性能分析,我们可以看出解决问题的规模是很大的,在百万变量级别。它针对CNF输入进行优化,可用于很多应用,如图形优化问题、基于模型的诊断、协作路径查找以及机器学习模型的验证和解释等。

CDCL算法可以分为以下几个部分:
1)DPLL算法(Davis-Putnam-Logemann-Loveland)
2)子句学习
3)非时序回溯
4)搜索重启
5)数据结构(lazy)
2. CDCL
2.1 DPLL
2.2 子句学习
2.3 非时序回溯
2.4 搜索重启
2.5 数据结构(lazy)
3. 总结
[1]Tseitin G S. On the complexity of derivation in propositional calculus[J]. Automation of reasoning: 2: Classical papers on computational logic 1967–1970, 1983: 466-483.