Ch5 约束满足与 SAT (Constraint Satisfaction & SAT)
课件:lec5.pdf (约束满足问题 / CSP) + sat.pdf (SAT 问题)
教材:Artificial Intelligence: A Modern Approach (Russell & Norvig),CSP 部分 Ch 6;SAT 部分补充讲义
教师:吉建民,USTC
0. 本章概述
本章把 约束满足问题 (Constraint Satisfaction Problems, CSP) 与 布尔可满足性问题 (Boolean Satisfiability, SAT) 统一在"约束"这一主题下:CSP 给出一种形式化表示语言(变量 + 值域 + 约束),让通用算法比标准搜索更强;SAT 则是 CSP 的一个特例(布尔变量 + 范式约束),也是第一个被证明为 NP-complete 的问题,是当代"通用问题求解中间语言"。二者共享同一族核心技术:回溯搜索、约束传播、冲突驱动学习、局部搜索。
| 子主题 | 核心内容 | 重要程度 |
|---|---|---|
| CSP 形式化定义 | 三元组 ⟨X, D, C⟩;赋值/相容/完备/解 | ⭐⭐⭐ |
| CSP 分类体系 | 离散/连续;有限/无限值域;一元/二元/高阶/软约束 | ⭐⭐ |
| 约束图与问题结构 | 二元 CSP 约束图;连通分量分解;树结构线性可解 | ⭐⭐⭐ |
| 回溯搜索 (Backtracking) | 可交换性 → 单变量 DFS;n-queens ≈ 25 | ⭐⭐⭐ |
| 启发式 | MRV / 度启发式 / 最少约束值 (LCV) | ⭐⭐⭐ |
| 前向检验与约束传播 | Forward checking;节点/弧/路径相容;AC-3 算法 | ⭐⭐⭐ |
| k-相容与强 k-相容 | k-consistent / strongly k-consistent;全局约束 Alldiff | ⭐⭐ |
| 树结构 CSP 算法 | 拓扑排序 + 反向弧相容 → O(nd²) | ⭐⭐⭐ |
| 树分解 (Tree Decomposition) | 近树结构;分解为连通子问题 | ⭐⭐ |
| 局部搜索 (min-conflicts) | 完全状态 + 最小冲突启发;4-queens / 3-SAT | ⭐⭐⭐ |
| SAT 定义与 CNF | 布尔/命题可满足性;合取范式;k-SAT | ⭐⭐⭐ |
| 计算复杂性与相变 | Cook 定理;2-SAT (P) / 3-SAT (NPC);相变 c₃≈4.28 | ⭐⭐⭐ |
| DPLL 算法 | 单元传播 + 纯文字消去 + 二叉分支;多项式空间 | ⭐⭐⭐ |
| DPLL 增强:预处理 / Look-ahead / Conflict-driven | 蕴含图、SCC 化简;MOM/JW/Satz;backjumping、CDCL | ⭐⭐⭐ |
| 局部搜索求解 SAT | GSAT、WalkSAT;不能证明不可满足 | ⭐⭐⭐ |
| SAT Solvers | GRASP、zChaff、MiniSAT、mach_dl;VSIDS、two-watched-literals | ⭐⭐ |
| SAT 应用:硬件验证 | Model Checking;BMC 转 SAT;安全/活性性质 | ⭐⭐ |
| SAT 扩展 | SMT(NP-complete)、QBF(PSPACE-complete) | ⭐⭐ |
| 计算复杂性补遗 | P / NP / NP-hard / NP-complete;图灵机;P ?= NP | ⭐⭐ |
第一部分:约束满足问题 (CSP)
1.1 什么是 CSP
与标准搜索的对比
- 标准搜索问题 (standard search problem):状态是"黑盒 (black box)"——任何支持目标测试、评价函数、后继函数的数据结构均可。
- CSP:
- 状态由变量 及其取自值域 (domain) 的值定义;
- 目标测试是一组约束 (constraints),规定变量子集的合法取值组合;
- 是一种形式化表示语言 (formal representation language),允许设计通用 (general-purpose,而非问题特定) 的、比标准搜索更强的算法。
⭐ CSP 形式化定义
一个约束满足问题由三个部分 构成:
- :变量集 。
- :值域集 ,每个 是 的合法取值集合 。
- :约束集。每个约束 :
- scope:参与该约束的变量元组;
- rel:定义这些变量可取值组合的关系 (relation)。
- 关系既可显式枚举所有满足元组,也可表示为一个抽象关系,支持"测试某元组是否属于"和"枚举成员"两种操作。
状态、赋值与解
- 状态 (state):对部分或全部变量的赋值 。
- 相容 (consistent / legal) 赋值:不违反任何约束的赋值。
- 完备赋值 (complete assignment):每个变量都被赋值。
- 部分赋值 (partial assignment):只给部分变量赋值。
- ⭐ CSP 的解 (solution) = 相容且完备的赋值 (a consistent, complete assignment)。
1.2 经典示例
地图着色 (Map-Coloring)
- 变量 (澳大利亚各州)。
- 值域 。
- 约束:相邻区域颜色不同。
其中 是 的简写,可枚举为
。 - 解例:。
约束图 (Constraint Graph)
- 二元 CSP (Binary CSP):每个约束只涉及两个变量。
- 约束图:节点 = 变量,弧 = 约束。
- 通用 CSP 算法利用图结构加速搜索(例:Tasmania 是独立子问题)。
密码算术 (Cryptarithmetic)
- 高阶约束示例:列约束涉及进位辅助变量 (十/百/千位的进位)。
1.3 CSP 的分类体系
按变量类型分
| 类型 | 值域 | 规模/可解性 |
|---|---|---|
| 离散变量 / 有限值域 (finite domains) | 有限集 | 变量、值域大小 → 完备赋值;含 Boolean CSP / SAT (NP-complete) |
| 离散变量 / 无限值域 (infinite domains) | 整数、字符串等 | 需要约束语言;线性约束可解,非线性不可判定 (undecidable);如作业调度 |
| 连续变量 (continuous variables) | 实数 | 线性约束可由线性规划 (LP) 在多项式时间求解;如哈勃望远镜观测时刻 |
按约束种类分
- 一元约束 (unary):涉及单变量,如 。
- 二元约束 (binary):涉及一对变量,如 。
- 高阶约束 (higher-order):涉及 3 个或更多变量,如密码算术列约束。
- 偏好 / 软约束 (preferences / soft constraints):带代价,如 “red 优于 green”——导向约束优化问题 (constrained optimization problems)。
现实世界 CSP
分配问题(排课、审稿分配)、时间表、硬件配置、交通调度、工厂排程、平面布置 (floorplanning) 等;许多现实问题含实值变量。
1.4 回溯搜索 (Backtracking Search)
标准搜索的增量形式化 (incremental formulation)
- 初始状态:空赋值 。
- 后继函数:给某未赋值变量赋一个不与当前赋值冲突的值;无合法值则失败。
- 目标测试:当前赋值完备。
- 性质:所有 CSP 一致;解都在深度 ;路径无关 → 可用 DFS;分支因子 ,共 叶。
⭐ 可交换性 (commutativity) 与回溯搜索
- 变量赋值可交换: 等价于 。
- 因此每个节点只给单个变量赋值:,叶数 。
- ⭐ 回溯搜索 = 对 CSP 的单变量赋值深度优先搜索;是 CSP 的基本无信息算法 (basic uninformed algorithm)。
- 能力:可解 的 n-queens。
1.5 提升回溯效率的启发式
① 选哪个变量?—— 启发式选变量
最小剩余值(MRV, Minimum Remaining Values):
- 选择合法取值最少的变量(“最受约束的变量”)
- 思想:早期失败(fail-fast),尽早发现死胡同
度启发式(Degree Heuristic): - 当 MRV 出现平局时,选择对剩余变量约束最多的变量
- 即优先解决"牵连最多"的变量
② 值的顺序?—— 最少约束值(Least Constraining Value, LCV)
- 给定变量已选定,选对剩余变量排除值最少的值。
- 注意:计算此启发式本身需要一定开销。
- 与 MRV/LCV 组合可使 1000-queens 变得可行。
③ 能否提前检测失败?—— 前向检验 + 约束传播
前向检验 (Forward Checking)
- 思想:跟踪未赋值变量的剩余合法值;当任何变量无合法值时终止搜索。
- 比纯回溯更早发现失败,但不能发现所有早期失败(例如 NT 和 SA 不能同为 blue,前向检验不一定能立刻察觉)。
⭐ 约束传播 (Constraint Propagation)
- 定义:利用约束减少某变量合法值,进而减少其他变量合法值,如此反复。
- 比前向检验更强:反复在局部强制约束。
| 一致性层次 | 含义 |
|---|---|
| 节点一致性 | 变量的所有值满足一元约束 |
| 弧一致性(Arc Consistency) | 变量 X 对 Y 弧一致:X 的每个取值都能在 Y 中找到满足二元约束的对应值 |
| 路径一致性(Path Consistency) | 对 {Xi, Xj} 的每个一致赋值,都能找到 Xm 的赋值使其满足所有约束 |
| k-一致性 | 对任意 k-1 个变量的任何一致赋值,总能给第 k 个变量找到一致的值 |
| 强 k-一致性 | k-一致且 (k-1)-一致、…、直到 1-一致 |
| 全局约束(Global Constraint) | 如 Alldiff 约束规定所有参与变量取值各不相同 |
AC-3 算法详解
核心概念回顾
变量 对变量 弧一致,当且仅当:对于 的域 中的每一个值 ,都存在 的域 中的某个值 ,使得二元约束 被满足。
REVISE 过程
REVISE(X_i, X_j) 是 AC-3 的基本操作:检查 对 是否弧一致,若不成立则删除 中那些在 中找不到支持的值。
1 | function REVISE(X_i, X_j) returns boolean |
- 返回
true表示 发生了改变(有值被删) - 返回
false表示 未变( 对 已弧一致)
AC-3 主算法
AC-3 维护一个弧队列 (queue),初始包含 CSP 中的所有有向弧(每条二元约束产生两条有向弧: 和 )。之后反复从队列取出弧调用 REVISE,若 REVISE 导致某变量的域缩小,则将所有指向该变量的弧重新入队。
1 | function AC-3(csp) returns (whether consistent, modified domains) |
为什么 REVISE 后要把 重新入队?
当 的域缩小后,之前与 弧一致的邻居 可能不再弧一致(因为 中某些值的支持来自 中被删的值)。所以需要重新检查所有 弧。
算法性质
| 性质 | 说明 |
|---|---|
| 终止性 | 每次 REVISE 要么不变,要么至少删一个值;域有限 → 必然终止 |
| 正确性 | 算法结束时,所有弧都是弧一致的;若某域为空则 CSP 无解 |
| 唯一性 | AC-3 保证得到的弧一致 CSP 与消去弧的次序无关,结果唯一 |
| 不完备性 | 弧一致不等于可满足;弧一致的 CSP 可能仍无解(需更高一致性或搜索) |
时间复杂度
- 每条弧最多入队 次(因为 最多被删 次,每次删除导致指向 的弧重新入队)
- 共有 条有向弧(二元 CSP 中最多每对变量有一条约束)
- 每次 REVISE 检查 对值
- 总复杂度:(或更精确地 ,其中 为约束数)
AC-3 在搜索中的角色
AC-3 通常作为回溯搜索中的预处理或MAC (Maintaining Arc Consistency) 策略在每个赋值步骤后调用:
- 预处理:搜索前跑一次 AC-3 缩减全域
- MAC:每次赋值后调用 AC-3,检测早期失败并进一步传播约束
AC-3 检测的是局部不一致性。检测 CSP 的全部不一致性是 NP-难的 —— 若多项式时间可检测,则 P=NP。
1.7 问题结构与问题分解
独立子问题 (Independent Subproblems)
- 约束图的连通分量 (connected components) 即独立子问题(如 Tasmania 与澳洲大陆)。
- 可大幅缩减搜索空间。
子问题分解的收益
- 设每个子问题含 个变量(共 个),最坏代价:
- 例::
- 整体 :以 节点/秒需 40 亿年;
- 分解为 :仅需 0.4 秒。
⭐ 树结构 CSP (Tree-structured CSPs)
- 一般 CSP 最坏时间 ;树结构 CSP 可在 线性时间求解。
- 此性质也适用于逻辑与概率推理——语法限制 (syntactic restrictions) 与推理复杂度关系的重要范例。
树结构 CSP 算法
- 任选一变量为根,按拓扑排序使父→子方向一致。
- 从 倒序到 ,对每条父子弧 ()应用弧相容:
RemoveInconsistent(Parent(X_i), X_i)。 - 现在可从 起按剩余值域一次性赋值而不产生冲突:从 到 , 与 相容地赋值。
- 复杂度:。
近树结构与树分解 (Tree Decomposition)
- 现实问题常近树结构。树分解:把问题分解为一组连通子问题,两子问题共享约束时相连;独立求解后合并。
注:树分解与割集条件化 (cutset conditioning) 的图示细节,提取文本未完整呈现,需对照原课件查看。
1.8 CSP 的局部搜索 (Iterative Algorithms)
- 爬山、模拟退火等通常工作于完全状态 (complete states)(所有变量都已赋值)。
- 应用于 CSP:允许状态违反约束;算子是重赋值某变量。
- 变量选择:随机选任一冲突变量。
- ⭐ 值选择:最小冲突 (min-conflicts) 启发式——选造成与其他变量冲突最少的值;即以 爬山。
示例:4-Queens 与 3-SAT
- min-conflicts 对 4-queens 及(可满足的)3-SAT 实例常很有效。
加速手段
- 模拟退火 (simulated annealing):以随温度 下降的概率接受"坏"移动,逃出局部极大。
- minmax 优化(具体形式课件以图示给出,需对照原课件查看)。
第二部分:SAT 问题 (Boolean Satisfiability)
SAT 是 CSP 的布尔特例,也是当代"通用问题求解"的中间语言。本部分对应 sat.pdf。
2.1 SAT 基本定义
两种等价表述
- 布尔可满足性问题 (Boolean satisfiability problem, SAT):给定由 AND、OR、NOT、变量和括号构成的布尔表达式,是否存在对变量 TRUE/FALSE 的赋值使整个表达式为真?
- 例:。
- 命题可满足性问题 (Propositional satisfiability problem, SAT):给定命题逻辑公式,是否可满足(存在一个模型)?
- 例:。
- 任意布尔表达式与命题逻辑公式都可等价转换为合取范式 (CNF)。
⭐ CNF 标准形式
- 合取范式 (conjunctive normal form, CNF):。
- 子句 ():。
- 文字 (literal) :某布尔变量或其否定。
- 例:。
- SAT 问题:是否存在一组对所有布尔变量 TRUE/FALSE 的赋值,使整个 CNF 为真。
k-SAT
- 若 CNF 中每个子句恰好含 个文字,称 k-SAT。
- 2-SAT:;3-SAT:。
- 任何 k-CNF 公式都可转换为 3-CNF(引入辅助变量,如 )。
2.2 SAT 的计算复杂性⭐
| 问题 | 复杂性类 |
|---|---|
| SAT | NP-complete——第一个被证明为 NP-complete 的问题(Cook 定理 / Cook–Levin theorem) |
| 3-SAT | NP-complete |
| 2-SAT | 多项式时间可解,NL-complete(非确定图灵机对数空间可解的完全类) |
| Horn-SAT | 每个子句至多一个真文字(Horn 子句),P-complete |
⭐ 相变 (Phase Transition)
- 对基于 个变量、 个子句的 k-SAT:随 增大,从 100% 可满足过渡到 100% 不可满足。
- 记随机 k-SAT 为 ,当 :
- 已证 ,且 ;实验表明 。
- 呈 “easy-hard-easy” 模式;用 DPLL 解 3-SAT 时, 处最困难。一般 NP 问题都有类似现象。
2.3 SAT 作为通用求解中间语言
- 把待解问题转为 SAT 求解,再把解转回原问题域。
- 为何 SAT 合适:
- NP-complete,每个 NP 问题可多项式归约到 SAT,表达力足够;
- 语法语义简单,便于设计、评价算法。
- 应用领域:
- EDA(电子设计自动化):
- 组合等价性检查(Combinational Equivalence Checking)
- 自动测试模式生成(Automatic Test Pattern Generation, ATPG)
- AI(人工智能):
- 规划问题(Planning)
- 知识推理(Knowledge Reasoning)
- 有界模型检测(Bounded Model Checking, BMC)
- NP 问题可以通过归约转化为 SAT 问题来求解
- EDA(电子设计自动化):
2.4 SAT 求解方法总览
两大类高效算法:
| 类别 | 代表 | 特点 |
|---|---|---|
| DPLL/DLL (1962) 及其变体 | conflict-driven、look-ahead | 基于回溯的搜索;当代大多数 SAT solver 的基础 |
| 随机局部搜索 | GSAT (1992)、WalkSAT (1993) | 无法证明不可满足,但常很快找到满足解;基于局部搜索/爬山 |
| 现代 SAT solver 是完备的,核心策略分为两类: |
- “conflict-driven”(冲突驱动):适合"大但简单"的问题
- “look-ahead”(前瞻):适合"小但困难"的问题
单元子句与纯文字 (Unit Clauses & Pure Literals)
- 单元子句 (unit clause):只含一个文字的子句。
- 单元传播 (unit propagation):对单元子句
- 删除所有含 的子句;
- 删除所有含 的子句中的 。
- 单元传播 (unit propagation):对单元子句
- 纯文字 (pure literal):在公式中只正出现或只负出现的文字。
- 纯文字消去 (pure literal elimination):删除所有含纯文字的子句。
- 例:CNF
- 和 是 pure literals;、 是 unit clauses。
2.5 ⭐ DPLL 算法
1 | function DPLL(φ, σ) |
DPLL 的本质:带回溯的深度优先搜索,但通过单元传播和纯文字消除大幅剪枝。choose-literal() 的策略决定了求解效率。
DPLL 算法特点
- 二叉分支搜索(某变量的 t/f)。
- 在 unit propagation 与 pure literal elimination 基础上,尽可能晚地推迟分支。
- 只需多项式空间。
choose-literal()是算法关键。- 几乎是所有精确 (complete) SAT Solver 的基础。
2.6 提升 DPLL 的技术
(1) 预处理 (Preprocessing)
对输入 CNF 预处理以便于计算:
- Sorting + subsumption(排序 + 包含消去):
(较短子句"吸收"包含它的较长子句。)
- 2-simplifying(二元子句化简),重复直至无新化简:
- 据 CNF 中二元子句构造蕴含图 (implication graph):有二元子句 则图中存在 的边。
- 找出蕴含图的强连通分量 (SCC),把 SCC 中所有文字等价为新文字。
- 把 CNF 中所有 SCC 文字及其否定分别用新文字及其否定替换。
- 应用 unit propagation 与 pure literal elimination。
(2) Look-ahead DPLL(充分利用未知搜索空间信息)
Lookahead()函数:若加入 后用 unit propagation 得到矛盾,则加入 。- 比 unit propagation 更强,能推出更多;但效率损失大,实践中常不如简单 unit propagation。
choose-literal()启发式:- MOM heuristics (Maximum Occurrence in clauses of Minimum size):选在极小子句中最常出现的文字;简单高效。
- Jeroslow-Wang:选 score 值最大的文字:
评估 对满足 CNF 的贡献。
- Satz:从候选文字集中,选经 unit propagation 后得到最小子句集的文字——充分利用 UP 结果。
- 对 “small but hard” 的问题较有效。
(3) ⭐ Conflict-driven DPLL(利用搜索过程中的已知信息,尤其是冲突)
非时序回溯 (Non-chronological backtracking / backjumping)
- 思想:当一个分支失败时:
- 找出导致失败的部分赋值 (conflict set);
- 回溯到 conflict set 中最近的分支点 (most recent branching point)。
- conflict set 的确定:
- 在已知部分赋值下,某文字成真是因在某子句上做 unit propagation,称该子句为该文字的原因 (cause)。例:在 下,子句 是文字 的原因。
- 出现矛盾时,存在两个互补文字;将它们的原因(子句)归结 (resolve) 为一个子句,其补文字集即当前矛盾的 conflict set。
冲突驱动子句学习 (Conflict Driven Clause Learning, CDCL)
- 思想: 是一个 conflict set,则 可加入原始子句集——保证包含 的赋值不再发生,避免类似搜索。
- 例:当前部分赋值 ,子句 是 成立的原因,子句 是 成立的原因。则 ,可把 加入原始子句集。
- 问题:可能导致空间膨胀——用其他技术控制学习,并在需要时丢弃学到的子句。
- 其他技术:two-watched-literals unit propagation、adaptive branching。
- 对 “big but simple” 的问题较有效。
2.7 局部搜索算法 (GSAT / WalkSAT)
- 不构造解,而是修改完整赋值以不断满足更多子句。
- ⭐ 不能证明公式的不可满足性。
- 主要方法:GSAT、WalkSAT;以及模拟退火、禁忌搜索 (Tabu search)、遗传算法、杂合方法(结合 DPLL 与局部搜索)。
- 一般需多项式空间;对一些(可满足的)问题非常有效。
GSAT
1 | Repeat MAX-TRIES times or until all clauses satisfied: |
核心思想:贪心地翻转使满足子句数增加最多的变量。通过**重启(restart)**跳出局部最优。
- 可加入 restarts 和 greediness;贪心搜索,寻找较好的"邻居"。
WalkSAT
1 | Repeat MAX-TRIES times or until all clauses satisfied: |
- 关注未满足的子句。
与 CSP 局部搜索的联系:WalkSAT 的 min-conflicts 思想与 CSP 的 min-conflicts 启发式一脉相承——都是从冲突出发做贪心修复。
2.8 一些 SAT Solvers
| Solver | 作者/年代 | 特点 |
|---|---|---|
| GRASP | João Marques Silva, 1996 | 最早的 conflict-driven DPLL SAT solver,最早用 backjumping 与 clause learning |
| zChaff | Lintao Zhang (微软研究院), 2001–2007 | conflict-driven DPLL;2-literal watching、restarts、VSIDS 启发式等;2003/04/05 SAT Competition 表现优异 |
| MiniSAT | Niklas Eén, Niklas Sörensson, 2003–2007 | 类似 zChaff + Conflict clause minimization;2005/07 表现优异 |
| mach_dl | Marijn Heule, Hans van Maaren, 1999 | look-ahead DPLL + 其他高效技术;2004/05/07 表现不错 |
- 自 2002 起每年举办 SAT Competition (satcompetition.org);较强者:Chaff (2001)、MiniSAT (2003)、zChaff (2004)。
2.9 SAT 应用:硬件验证 (Hardware Verification)
Model Checking
- 将硬件设计描述为有限状态机 (初始状态 + 状态转移关系);
- 把需满足的性质 用时序逻辑描述;
- 判断 是否是 的模型,即 。
性质类型
- 安全性 (safety):“ always holds”——从初始状态出发,任何可达状态上 成立( 一般是命题公式)。
- 活性 (liveness):“there will be a point in time when holds”——如请求终被回答。
⭐ 有界模型检测 (Bounded Model Checking, BMC)
- 判断性质 “always ” 是否在长度 的运行周期内成立。
- 转为 SAT:是否存在一条长度 、从初始状态到 不成立状态的路径?
- 用谓词 刻画初始状态(每个状态 是变量集合),用 表达后继关系。BMC 等价为下面公式是否可满足:
- 可满足 → 找到 “always ” 的反例;
- 不可满足 → 不存在这样的路径,可增大 再验证。
BMC 示例:二进制加法器
- 计数器不断循环从 加到 。证明 “initially 则 always ”。
- 状态 ,计数器 。
- 初始条件:(即 )。
- 转移关系:
- 性质:。
- SAT solver 可证明对任意 ,BMC 对应公式都不可满足,故 always 总成立。
2.10 SAT 的扩展
SMT (Satisfiability Modulo Theories)
- 对函数词和谓词有特殊解释的一阶公式是否可满足的判定问题。
- 例:判断
- 例:判断
- SAT solver 高效但不能处理数字运算、线性约束等;SMT 可处理这类约束。
- SMT solver 本质:高效 SAT solver 不断调用一个处理特殊约束的求解器——把子句中原子先当普通命题原子交给 SAT solver,需要时再调用特殊约束求解器判断原子真假。
- SMT 问题一般是 NP-complete。
QBF (Quantified Boolean Formula problem)
- 容许 (for all)和 (there exists)出现的布尔表达式的可满足判定问题。
- 例:。
- QBF 是 PSPACE-complete,比 SAT 更复杂,尚无可实用的 QBF solver。
2.11 计算复杂性补遗
“容易"与"困难”
- 需指数时间才出结果 → “困难”(如 TSP 货郎担问题)。
- 多项式时间 ( 常数、 输入规模)可出结果 → “容易”;但"容易"是相对的( 实际也可能很难)。
计算模型:图灵机
- 图灵机模型是计算机计算能力的极限,目前尚无超越它的计算模型。
确定性 vs 非确定性图灵机
- 确定性图灵机 (DTM):转移函数单值。
- 非确定性图灵机 (NTM):转移函数多值。
- 含猜想阶段与验证阶段。
⭐ P 类与 NP 类
- P:在确定性图灵机上多项式时间可解。
- NP:在非确定性图灵机上多项式时间可解;等价地,在确定性图灵机上多项式时间可验证。
- ;P ?= NP——大多数学者认为 。
NP-hard 与 NP-complete
- NP-hard:每个 NP 问题都可在多项式时间归约到 。
- NP-complete:既是 NP 问题,又是 NP-hard。
- 性质:所有 NP-complete 问题对多项式归约关系构成等价类(自反、对称、传递);若找到一个 NPC 问题的多项式算法,则 。
关键概念速查表
| 名称 | 类型 | 核心内容 | 考点 |
|---|---|---|---|
| CSP 三元组 ⟨X,D,C⟩ | 定义 | 变量/值域/约束;解 = 相容且完备赋值 | ⭐⭐⭐ |
| 约束种类 | 分类 | 一元/二元/高阶/软约束 | ⭐⭐ |
| CSP 变量分类 | 分类 | 离散有限 ()/离散无限/连续;SAT 是布尔 CSP | ⭐⭐ |
| 回溯搜索 | 算法 | 可交换性 → 单变量 DFS;n-queens≈25 | ⭐⭐⭐ |
| MRV / 度启发式 / LCV | 启发式 | fail-fast / tie-breaker / 最少排除 | ⭐⭐⭐ |
| 前向检验 | 推理 | 跟踪剩余合法值,提前终止 | ⭐⭐ |
| 弧相容 / AC-3 | 推理 | ;检测全部不一致 NP-hard | ⭐⭐⭐ |
| k-相容 / 强 k-相容 | 推理 | 路径相容;Alldiff 全局约束 | ⭐⭐ |
| 树结构 CSP | 结构 | 拓扑排序 + 反向弧相容 → | ⭐⭐⭐ |
| 子问题分解 | 结构 | 连通分量; 线性于 | ⭐⭐⭐ |
| 树分解 | 结构 | 近树结构;连通子问题合并 | ⭐⭐ |
| min-conflicts | 局部搜索 | 完全状态 + 最小冲突;4-queens / 3-SAT | ⭐⭐⭐ |
| SAT / CNF / k-SAT | 定义 | 布尔/命题可满足;合取范式;2-SAT/3-SAT | ⭐⭐⭐ |
| Cook 定理 | 复杂性 | SAT 是首个 NPC 问题 | ⭐⭐⭐ |
| 2-SAT / Horn-SAT | 复杂性 | NL-complete / P-complete | ⭐⭐ |
| SAT 相变 | 复杂性 | easy-hard-easy; | ⭐⭐⭐ |
| 单元传播 / 纯文字消去 | 推理 | unit clause / pure literal 的化简规则 | ⭐⭐⭐ |
| DPLL | 算法 | UP + PLE + 二叉分支;多项式空间;complete solver 基础 | ⭐⭐⭐ |
| 预处理 | DPLL增强 | sorting+subsumption;2-simplifying(蕴含图 SCC) | ⭐⭐ |
| Look-ahead | DPLL增强 | MOM / Jeroslow-Wang / Satz 启发式 | ⭐⭐ |
| backjumping / CDCL | DPLL增强 | 非时序回溯;冲突驱动子句学习 | ⭐⭐⭐ |
| GSAT / WalkSAT | 局部搜索 | 贪心翻转变量;关注未满足子句;不能证 UNSAT | ⭐⭐⭐ |
| SAT Solvers | 工具 | GRASP / zChaff (VSIDS) / MiniSAT / mach_dl | ⭐⭐ |
| BMC | 应用 | 有界模型检测 → SAT; | ⭐⭐ |
| SMT / QBF | 扩展 | SMT (NP-complete) / QBF (PSPACE-complete) | ⭐⭐ |
| P / NP / NPC | 复杂性 | DTM vs NTM;归约等价类;P ?= NP | ⭐⭐ |
本章关键概念清单
- [ ] 写出 CSP 三元组 ⟨X, D, C⟩ 的定义,并说明"解 = 相容且完备的赋值"
- [ ] 区分一元/二元/高阶/软约束,并能给出每类的例子
- [ ] 解释离散有限/无限值域与连续变量 CSP 的复杂度差异
- [ ] 用可交换性论证为何回溯搜索每节点只赋单变量(,叶数 )
- [ ] 说出 MRV、度启发式、最少约束值 (LCV) 各自的作用与使用时机
- [ ] 说明前向检验与约束传播的差别,以及为何约束传播更强
- [ ] 写出节点/弧/路径相容、k-相容、强 k-相容的定义
- [ ] 给出 AC-3 的复杂度 并说明"检测全部不一致是 NP-hard"
- [ ] 解释 Alldiff 全局约束
- [ ] 用子问题分解推导 的代价,并解释 vs 的差距
- [ ] 描述树结构 CSP 的 算法三步骤
- [ ] 描述 min-conflicts 局部搜索的工作方式(完全状态 + 冲突变量 + 最小冲突值)
- [ ] 写出 SAT 的两种定义,并说明任意布尔/命题公式都可转为 CNF
- [ ] 写出 CNF、子句、文字的定义,并解释 k-SAT 与 3-CNF 转换
- [ ] 列出 SAT/3-SAT/2-SAT/Horn-SAT 各自的复杂性与复杂性类
- [ ] 陈述 Cook 定理,并解释 SAT 为何是"首个 NPC 问题"
- [ ] 描述 SAT 相变现象(easy-hard-easy,)
- [ ] 默写 DPLL 伪代码,说明单元传播与纯文字消去的化简规则
- [ ] 解释 DPLL 的预处理(sorting+subsumption、2-simplifying 与蕴含图 SCC)
- [ ] 说出 Look-ahead 的三种 choose-literal 启发式(MOM / Jeroslow-Wang / Satz)及 score 公式
- [ ] 解释 backjumping(非时序回溯)如何确定 conflict set
- [ ] 描述冲突驱动子句学习 (CDCL) 的思想,并指出其空间膨胀问题
- [ ] 默写 GSAT 与 WalkSAT 的算法结构,说明二者差异及"不能证不可满足"
- [ ] 列出 GRASP / zChaff / MiniSAT / mach_dl 的代表技术与特点
- [ ] 写出 BMC 转 SAT 的公式
- [ ] 区分安全性 (safety) 与活性 (liveness) 性质
- [ ] 说明 SMT 与 QBF 的定义及其复杂性(NP-complete / PSPACE-complete)
- [ ] 区分确定性/非确定性图灵机、P/NP、NP-hard/NP-complete,并说明 P ?= NP