AC-3算法补充
-
定义约束满足问题
- 定义:使用成分表示来描述状态:即一组变量,每个变量都有自己的值。当每个变量都有自己的赋值的同事满足所有关于变量的约束时,问题就得到了解决。这类问题成为约束满足问题,简称CSP。
- 约束满足问题包含三个成分
-
-
-
求解CSP
- 问题的状态由对部分或者全部变量的一个赋值来定义。
- 一个不违反任何约束条件的赋值称作为相容的或者合法的赋值。
- 完整赋值:每个变量都已赋值,而CSP的解是相容的、完整的赋值。
- 部分赋值:只有部分变量的赋值。
-
实例:
- 着色问题(P170)
- 作业调度(P171)
-
CSP的形式化
- 最简单的CSP:涉及的变量是离散的、有限值域的
- 无限值域:需要用约束语言代替取值约束,如T1+D1<T2
- 连续值域:线性约束。
-
约束类型:
-
参数划分:
- 一元约束(限定单个变量的取值)
- 二元约束(与两个变量有关)
- 三元约束:between(X,Y,Z)
- 全局约束:变量个数任意的约束,常见Alldiff:all 变量取值不同
-
偏好约束,绝对约束
-
偏好约束:指出那些解是更为喜欢的
- 有偏好约束的CSP可以用于基于路径或局部的最优搜索方法求解:约束优化问题(COP)
- 绝对约束:任何违反规则的都排除在解之外
-
偏好约束:指出那些解是更为喜欢的
-
参数划分:
- 任意有限值域的约束都可以通过引入足够的约束变量而转化为二元约束。
-
求解CSP
-
约束传播:CSP中的推理
-
与常规只能做搜索的状态空间搜索算法不同,CSP可以:
- 算法可以搜索,从几种可能性中选择新的变量赋值
- 约束传播的特殊推理:使用约束来减少一个变量的合法取值范围,从而影响到跟此变量有约束关系的另一变量的取值。
- 核心思想是:局部相容性
-
局部相容有结点相容、弧相容、路径相容、k相容
-
结点相容:如果单个变量,值域中的所有取值满足它的一元约束,就称此变量为结点相容。
- 如果网络中的每个变量都有结点相容的,则此网络是结点相容的。
- 通过运行结点相容,总能消除CSP中的所有一元约束,可以将所有n元约束转化为二元约束。
- 正是因此,通常的做法是定义只含有二元约束的CSP求解器。
- 弧相容:如果CSP中的某变量值域中的所有取值满足该变量的所有二元约束,则称此变量是弧相容,弧相容流行算法:AC-3(最后见补充)
-
结点相容:如果单个变量,值域中的所有取值满足它的一元约束,就称此变量为结点相容。
-
与常规只能做搜索的状态空间搜索算法不同,CSP可以:
-
-
-
- 路径相容:有时弧相容但是无解,因此需要更强的相容概念。
-
-
-
-
-
-
K相容:可以定义更强的传播形式,如果对于任何一个k-1个变量的相容赋值,第k个变量总能被赋予一个和前k-1个变量相容的值,那么这个CSP就是k相容的。
- 1-相容:结点相容、2-相容:弧相容、3-相容:路径相容。
- 强k-相容:k-相容、(k-1)-相容、(k-2)-相容……直到1-相容。
-
K相容:可以定义更强的传播形式,如果对于任何一个k-1个变量的相容赋值,第k个变量总能被赋予一个和前k-1个变量相容的值,那么这个CSP就是k相容的。
-
-
-
-
- 全局约束:P176
-
-
CSP的回溯搜索:部分赋值的回溯搜索算法
- CSP至关重要的性质:可交换性(行动的先后对结果无影响,那么问题可交换。)
- 回溯搜索用于深度优先搜索中:
-
-
变量和取值顺序
- 最小剩余值启发
-
变量和取值顺序
-
-
- 度启发式
-
-
-
- 最少约束值启发
-
-
-
搜索与推理交错进行(P180还需要再看)
- 最简单的推理形式:前向检索
-
智能回溯:向后看(P182,还需要再看)
- 时序回溯:返回前一个变量并且尝试另外一个值
-
搜索与推理交错进行(P180还需要再看)
-
CSP局部搜索
- 局部搜索算法对求解许多CSP都是有效的,它们使用完整状态的形式化:初始状态是给每个变量赋一个值,搜索过程是一次改变一个变量的取值。
- 最小冲突启发式对很多CSP有效。(下面没太懂)
-
问题的结构:如何以结构化方式表示问题。(P184)
- 求解树结构CSP时,首先任意选择变量为树的根,选择变量顺序,这样每个变量在树中出现在父节点之后。这样的排序成为拓扑排序。
-
一般约束图化简为树的形式:
-
基于删除节点
- 对部分变量赋值,使剩下的变量能够形成一个树。(例如着色问题中的下面转化)
-
基于删除节点
-
-
-
基于合并结点
- 以约束图的树分解为基础,它把约束图分解为相关联的子问题,每个子问题独立求解,再把得到的结果合并。
- 树分解必须满足一下三个条件:
-
基于合并结点
-
- 本章小结