1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SAT问题ppt整理

SAT问题 内容 什么是SAT问题 SAT问题的重要性 DPLL算法 SAT问题 布尔变量是值域只有两个元素0和1的变量 一个只由布尔变量形成的CSP问题又称为SAT问题 可以将SAT问题看做是一类特殊的CSP问题,不过因为SAT是一类重要的问题,在现实中和理论上有着重要的意义,因此我们将重新给出SAT问题的定义 SAT问题的相关定义 一般来说,SAT问题是判定一个命题公式是否可满足的问题,通常这个命题公式是CNF公式。相关定义如下: 文字:布尔变量x和布尔变量的非﹁x称为文字,前者为正文字,后者为负文字 子句:l1∨… ∨ lk形式的式子称为子句,其中∨是逻辑上的析取连接词, li是文字;子句也常被表示为文字的集合 CNF公式:C1 ∧… ∧ Cm为CNF公式,其中∧是逻辑上的合取连接词,Ci是子句; CNF公式也常被表示为子句的集合 SAT问题的相关定义 赋值t:变量到{0,1}的映射 对于文字l: t(l) = 1当且仅当: l为正文字x且t(x) = 1 l为负文字x且t(x) = 0 对于子句C=l1∨… ∨ lk: t(C)=1当且仅当 对于某个li有t(li) = 1 对于公式F= C1 ∧… ∧ Cm:t(F)=1当且仅当 对于所有的Ci有t(Ci) = 1 SAT问题的相关定义 这样一个SAT问题就是: 给定一个CNF公式F,判定它是否存在一个赋值t,使得t(F)=1 SAT问题的重要性 SAT问题是一个重要的问题,它是最早被证明为NP完全的问题之一;目前SAT问题还被用于编码一些实际应用问题,比如人工智能问题,形式验证问题等 现在的SAT求解器能求解的问题的规模:百万个变量,千万个子句 SAT的理论意义 [Cook 70] 中指出SAT 是NPC的 如果能有效的求解SAT问题(不必要是多项式时间的),那么其他的NPC问题也能有效的求解。 图染色问题 每个节点染且仅染一种颜色,相邻的节点颜色不同 图是否能2染色? Decidable in P. 图是否能3染色? NP-complete. 图是否能K(k3)染色? NP-complete. SAT问题的实践意义 SAT 问题在实践中主要应用于: 验证和测试电路图案 两个电路的等价性检测 软件的可达性分析 程序的形式验证 …… 求解SAT 尝试所有的赋值可能 当有 n 个变量时,需要尝试 2n 个可能的组合 指数爆炸 应用一些启发式策略来生成比较可能满足布尔公式的赋值 SAT求解器 SAT求解器是求解SAT问题的算法,它以一个CNF公式作为输入,以0,1作为输出,表示该公式是否可满足。有的求解器还可以给出满足的解,或者不满足的原因 SAT求解器分为完全求解器和不完全求解器两种 完全求解器 穷尽搜索空间 只要有足够的时间,一定能够给出答案 适用于实际应用中的问题 不完全求解器 大多采用局部搜索方法 当问题可满足的时候,有可能给出答案,也有可能给不出答案 当问题不可满足的时候,无法给出答案 适用于随机产生的CNF公式 DPLL SAT 求解器 Davis-Putnam-Logemann-Loveland 算法(1960,1962). 大部分的现有确定性求解器都是基于 DPLL 算法 它提供了一个结构化的方法来枚举可能的赋值。 Chronological backtracking 最近的一些途径 Conflict analysis learning Non-chronological backtracking Search space pruning DPLL算法简述 它是一个回溯搜索算法 它的基本思想是每次选中一个未被赋值的变量进行赋值,然后判断该赋值是否满足整个公式: 满足:结束搜索; 导致冲突(某个子句为0):回溯; 否则:对下一个变量进行赋值 DPLL算法的例子 DPLL算法的例子 上图是一个典型的DPLL算法过程,是一个树状结构 分别给变量a,b,c赋值,给变量赋值为1用变量本身表示,赋值为0用变量的非表示 当给变量a,b,c分别赋值为1,1,0的时候,遇到了冲突,这时需要回溯到b,重新给b赋值 DPLL 算法 decide-next-branch() 选择一个没有被赋值的变量,并给定一个赋值 deduce() – 单元值传播(unit propagation): 如果有一个没有赋值的变量,给它一个赋值,从这个赋值出发做BCP (Boolean Constrain

文档评论(0)

zyzsaa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档