《布尔可满足性问题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.

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
首先,NP问题是指可以在多项式时间内验证一个解的问题集合,而NP完全问题则是NP问题中最难的问题,所有NP问题都可以在多项式时间内约化为NP完全问题。而NAE-3SAT问题是指判断一个由若干个逻辑变量和若干个逻辑表达式组成的布尔公式是否存在一组真假值,使得每个逻辑表达式至少有一个变量取值为真,至少有一个变量取值为假。 为了证明NAE-3SAT问题是NP完全问题,我们需要证明两个方面:首先证明NAE-3SAT问题是一个NP问题,其次证明所有NP问题都可以在多项式时间内约化为NAE-3SAT问题。 对于第一个问题,我们可以设计一个多项式时间的算法来验证一个NAE-3SAT问题的解是否正确。具体地,我们只需要检查每个逻辑表达式是否至少有一个变量取值为真,至少有一个变量取值为假,并且检查所有逻辑表达式的值是否都为真。这个算法的时间复杂度是多项式时间,因此NAE-3SAT问题是一个NP问题。 对于第二个问题,我们需要证明所有NP问题都可以在多项式时间内约化为NAE-3SAT问题。我们可以通过将一个NP问题的实例转化为一个NAE-3SAT问题的实例来实现这个约化。具体地,我们可以将一个NP问题的实例表示为一个布尔公式,然后将这个布尔公式转化为一个NAE-3SAT问题的实例。具体地,我们可以将每个逻辑表达式转化为一个NAE-3SAT问题的子问题,其中每个子问题都包含一个逻辑表达式中的所有变量和一个附加的变量,这个附加的变量表示逻辑表达式的值是否为真。然后,我们将所有子问题的结果通过逻辑与连接起来,得到一个最终的NAE-3SAT问题的实例。 由于NP问题可以在多项式时间内约化为NAE-3SAT问题,而NAE-3SAT问题是一个NP问题,因此NAE-3SAT问题是NP完全问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

潘鸿洋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值