《布尔可满足性问题SAT入门指南》

主要介绍了SAT求解器发展现状和DPLL/CDCL等算先进搜索算法,作为关于SAT问题的入门介绍,如有错误,请不吝指出。

持续更新中!!!!


目录

1. Boolean Satisfiability(SAT)综述

2. CDCL

2.1 DPLL

2.2 子句学习

2.3 非时序回溯

2.4 搜索重启

2.5 数据结构(lazy)

3. 总结


1. Satisfiability(SAT)综述

Satisfiability problem (SAT)是第一个被解决的NP-hard问题,是命题逻辑的决策问题,其中元素包括合适的命题公式、变量、逻辑运算符和括号。

SAT问题是指,给定一个命题公式查看其是否是可满足的,也就是说,我们是否可以将公式的变量设置为1(True,真)或0(False,假),确定命题公式是否具有可满足的赋值(SAT,1)或没有任何可满足的赋值(UNSAT,0)。

假设存在一个公式$F=(x_1 \lor x_2 \lor x_3)\land(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3)\land(\lnot x_1 \lor x_2)\land(x_2 \lor x_3)$,其本质是一个CNF(conjunctive normal form,合取范式),其中x_1,x_2,x_3是命题变量,\lor,\land,\lnot分别表示逻辑运算符“或”(disjunction,析取),“与”(conjunction,合取),“非”(negation,否定)。变量x_i或其反变量\lnot x_i是一个文字(literal),文字的析取是一个子句(clause)。因此,上面的公式F是四个子句的合取。我们可以通过将x_1x_2置为1,x_3置为0来满足公式:x_2 = 1满足了第一、第三和第四个子句。第二个子句由x_3 = 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输入进行优化,可用于很多应用,如图形优化问题、基于模型的诊断、协作路径查找以及机器学习模型的验证和解释等。

图1:SAT求解器的性能

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.

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘鸿洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值