SAT

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Components of DPLL
• 冲突分析和学习(Conflict Analysis and Learning)
• 冲突分析:找到导致冲突的原因并且试图去解决 冲突的过程。 • 冲突学习:冲突分析之后,对于当前冲突的信息 就会以子句的形式加入到子句数据空间中,这些 加进去的子句,虽然在一定程度上有些冗余,但 是不会改变原来问题的满足性,而且帮助可以减 少搜索空间。
DPLL Framework
• 迭代描述
status = preprocess(); if (status!=UNKNOWN) return status; while(true) { decide_next_branch(); while (true) { status = deduce(); if (status == CONFLICT) { blevel = analyze_conflict(); if (blevel == 0) return UNSATISFIABLE; else backtrack(blevel); } else if (status == SATISFIABLE) return SATISFIABLE; else break; } }
Components of DPLL
• 预处理:将SAT实例转换成CNF的过程
• 随机重启动:即在搜索的某一阶段放弃当 前所有变量的赋值,重新开始问题的搜索 。
• "A machine program for theorem proving," Communications of the ACM, vol. 5, pp. 394-397, 1962
SAT Solvers 最新进展
• 基于DPLL框架的解决SAT问题的代码,即 SAT解析器(SAT Solvers)
Components of DPLL
• 推导算法(Deduction algorithm ) • 优化当前问题
– 一元子句(Unit clause) 如果在子ห้องสมุดไป่ตู้中除了一个文字没有被赋值外,其他的文字赋值都是0, 那么这个子句就叫做一元子句。 – 一元子句规则(Unit clause rule) 对于一元子句中未被赋值的一个文字,必须赋值为1,这就叫做一 元子句规则。 – 布尔约束推导(BCP Mechanisms)
• SAT的应用范围
Introduction
• SAT问题属于布尔逻辑的范畴,绝大多数的 SAT都是以CNF(合取范式)的形式给出。
• CNF :有一个或者多个子句逻辑与组成。 • 子句:有一个或者多个变量的文字逻辑或组成 • 文字:一个变量有两个文字,正向位文字(X) 和反向位文字(~X)
Introduction
• 子句存储的数据结构(Data Structure for Storing Clause Database) • 子句链表存储。 好处:灵活,便于操作 缺点:内存使用效率不高 容易造成缓存缺失 • 子句数组存储 好处:内存使用高效,访问方便。 缺点: 不够灵活 • 数组的存储结构还是比较好的 • 其他的存储结构 Trie
• 每一个子句有两个计数器,分别用来记录子句中文字被赋值为0的个 数和赋值为1的个数。 • 每一个变量有两个链表,分别包含了变量正向文字存在的子句和反向 文字出现的子句。
BCP 的‘懒散’数据结构-头尾指针
• 第一个提出来针对BCP的懒散数据结构,最初应用在 SATO解析器中。 • 每个子句有两个指针,分别指向子句的头部和尾部文字。 子句的文字是以数组的形式存储的。 • 每一个变量v维护四个链表,包含指向子句的指针,分别 是: clause_of_pos_head(v),clause_of_neg_head(v), clause_of_pos_tail(v) 和clause_of_neg_tail(v).
DPLL Framework
• 递归描述
DPLL(formula, assignment){ necessary = deduction(formula, assignment); new_asgnmnt = union(necessary, assignment); if (is_satisfied(formula, new_asgnmnt)) return SATISFIABLE; else if (is_conflicting(formula, new_asgnmnt)) return CONFLICT; var = choose_free_variable(formula, new_asgnmnt); asgn1 = union(new_asgnmnt, assign(var, 1)); if (DPLL(formula, asgn1)==SATISFIABLE) return SATISFIABLE; else { asgn2 = union (new_asgnmnt, assign(var, 0)); return DPLL(formula, asgn2); } }
• Algorithms: – 1.完全算法: 算法结束时要么找到一组真值赋值,证明 可满足性。要么证明没有解存在。
– 2 不完全算法: 算法结束时若是能找到一组可满足的真 值赋值,则判定问题是可满足的。否则,不能判断问 题是否可满足。
DPLL Framework
Davis, Putnam, Logemann and Loveland • "A computing procedure for quantification theory," Journal of ACM, vol. 7, pp. 201-215, 1960.
DPLL-based SAT solvers
概念:
– 合取范式 – 子句、变量、文字 举例说明,比如,下式表示了一个CNF表达式。 F=(a+b+~c)(~b+e)(a+~f+c) 其中,变量集合V={a,b,c,c,f},该CNF表达式由 三个子句组成,分别是 cI=(a+b+~c),c2=(~b+e)和 c3=(a+~f+c)。 – 冲突子句: 一个子句它的所有变量文字的值都0
头尾指针(head-tail points )
• 在搜索的过程中,如果碰到一个文字的赋值是1,那么这个子句就是 满足的. • 在搜索的过程中,碰一个文字L是没有被赋值的,而且该文字不是尾 文字,就把该子句从 clause_of_neg_head(v)删除加入到 以L为头指 针的链表中 • 所有在这两个指针之间的文字赋值都是0,但是尾指针指向的文字没 有被赋值,那么这个子句就是一元子句。未赋值的文字就是一元文字 。 • 如果在这两个指针之间的文字赋值都是0 ,尾指针指向的文字赋值也 是零,这个子句就是冲突子句。
冲突分析和学习
冲突分析和学习
• 同步回溯:当决策变量的某一个相位赋值 并执行BCP后发现了冲突,需要取消当前 的赋值并选择该变量的另一个相位赋值。 • 非同步回溯:通过分析断定该变量的另一 个相位也是存在冲突的,从而回溯到更高 的决策层中去。
同步回溯和非同步回溯
Components of DPLL
The Quest for Efficient Boolean Satisfiability Solvers with zchaff as an example
Introduction
• SAT: 给定一个命题逻辑,判断是否存在一组变量赋值,能够是 这个公式为真。这个问题就是布尔满足性问题。Boolean satisfiability problem,简称SAT • SAT问题是第一个NP完全问题。
Components of DPLL
• (启发式搜索)Branching Heuristics
Components of DPLL
• 基本的DPLL算法主要采用的是深度优先搜 索(DFS)的思想,即将搜索空间表示成由各 个变量所构成的搜索树,以传统的深度优 先搜索策略历遍所有的通路,找到能使问 题满足的真值赋值。 • 最短子句出现频率最大(MOM(高精度) ) • 独立下降式变量和(VSIDS)
相关文档
最新文档