【人工智能方法】CONSTRAINT SATISFACTION PROBLEMS

CONSTRAINT SATISFACTION PROBLEMS

1 Introduction

2 How to define a CSP?

3 Inference in CSPs

3.1 节点相容

3.2 弧相容

4 Backtracking Search For CSPs

4.1 变量选择:最少剩余值(MRV)启发式

4.2 变量选择:度启发式

4.3 取值顺序:最少约束值启发式

4.4 推理:前向检验(Forward Checking)

5 The Structure Of Problems

5.1 如何将约束图化简为树状结构?

5.1.1 基于删除节点

5.1.2 基于合并节点


1 Introduction

Constraint satisfaction problem (CSP),即 约束满足问题。问题有一组变量,每个变量都有自己的取值范围。当每个变量都有自己的赋值同时满足所有关于变量的约束时,问题就得到了解决。

CSP 问题求解的 主要思想通过识别违反约束的变量 / 值的组合迅速消除大规模的搜索空间


2 How to define a CSP?

约束满足问题包含三个要素:变量、变量的值域和关于变量的约束。因此,我们可以形式化的定义如下: 

约束满足问题包含 3 个成分 X、D 和 C:

  • X是变量的集合{X1, X2, ..., Xn};
  • D是值域的集合{D1, D2, ..., Dn}, 每个变量都有自己的值域;
  • C是描述变量取值的约束集合.

举个例子,典型的地图着色问题就是一个 CSP。地图着色问题:对不同区域分配颜色,使得相邻的区域不同色。“相邻区域不同色”就是该问题的约束。

其中,对约束的划分:

  • 一元约束:只限制单个变量的取值。比如,SA 不能被染成绿色。
  • 二元约束:两个变量相关的约束。比如,SA 不能与 WA 的颜色相同。
  • 全局约束:变量个数任意的约束。最常见的全局约束是 Alldiff,即约束中所有变量都必须取不同的值。

以上讨论的约束都属于 绝对约束,任何违反规则的都排除在解之外。当然还有 偏好约束,即指出哪些解是喜欢的。比如 SA 偏好蓝色(偏好约束),但绝不能被染成绿色(绝对约束)。


3 Inference in CSPs

在 CSP 问题中,算法可以进行搜索,也可以做 约束传播 的推理。

所谓 约束传播使用约束来减小一个变量的合法的取值范围,从而影响到跟此变量有约束关系的另一个变量的取值

核心思想:局部相容性

3.1 节点相容

节点相容:单个变量(对应 CSP 网络中的节点)值域中的所有取值满足它的一元约束

举个例子,假设原本 SA = NA = {红色,绿色,蓝色};

SA 不能被染成蓝色,NA 不能被染成红色,则有:SA = {红色,绿色},NA = {蓝色,绿色}。

 节点相容总能消除一元约束。

3.2 弧相容

弧相容:CSP 中的某变量值域中的所有取值满足该变量的所有二元约束

最常用的弧相容算法是 AC-3,算法大致流程如下:

  1. AC-3 算法维护一个弧队列;
  2. 将 CSP 中所有弧入队;
  3. 取出弧 (Xi, Xj),首先使 Xi,相对 Xj 弧相容。若 Di 没有变化,则处理下一条弧;若 Di 变小,则每个 指向 Xi 的弧必须重新入队;
  4. 若 Di 变成空集,则无解;否则继续检查,直至队列为空。


4 Backtracking Search For CSPs

Backtracking Search 又称 回溯搜索,用于深度优先搜索中。它每次为一个变量进行赋值,当没有合法的值可以赋给某个变量时,就进行回溯。

 进一步,为了使得搜索高效,我们需要解决以下问题:

  1. 下一步该给哪个变量赋值?按照什么顺序赋值?
  2. 每步搜索应该做怎样的推理?

4.1 变量选择:最少剩余值(MRV)启发式

最少剩余值(MRV)启发式:选择“合法”取值最少的变量。因为这样选择的变量最可能很快的导致失败,从而进行剪枝。

4.2 变量选择:度启发式

度启发式:通过 选择与其他未赋值变量约束最多的变量 来试图降低未来的分支因子。

4.3 取值顺序:最少约束值启发式

最少约束值启发式:优先选择的值给邻居变量留下更多的选择。

Q:为什么变量选择是失败优先,而值的选择是失败最后呢?

A:选择最少剩余值的变量通过早期的有效减枝而有助于最小化搜索树的节点数。而对于值的排序,我们希望尽快的找到一个解,因此首先选择最有可能的值是有意义的。

4.4 推理:前向检验(Forward Checking)

前向检验是最简单的推理形式。只要变量 X 被赋值了,前向检验过程对它进行 弧相容 检查:对于每个通过约束与 X 相关的、未赋值的变量 Y,从 Y 的值域中删去与 X 不相容的值。


5 The Structure Of Problems

当 CSP 的约束图是一棵树时,即任意两个变量间最多通过一条路径连通,则该 CSP 问题可在变量个数的 线性时间 内求解。

求解树状 CSP 问题的方式,本质上就是 拓扑排序。先做好弧相容定理的检验,然后按顺序赋值即可,无需回溯。

5.1 如何将约束图化简为树状结构?

5.1.1 基于删除节点

首先对部分变量进行赋值,使剩下的变量能够形成一棵树。一般算法如下:

  1. 从 CSP 的变量中选择子集 S,使得约束图在删除 S 之后成为一棵树。S 称为 环割集;
  2. 对于满足 S 所有约束的 S 中变量的每个可能赋值:
    1. 从 CSP 剩余变量的值域中删除与 S 赋值的不相容的值,并且
    2. 若去掉 S 后的剩余 CSP 有解,则解和 S 的赋值一起返回

5.1.2 基于合并节点

以约束图的分解为基础,把约束图分解为多个相关联的子问题。每个子问题独立求解,再把得到的结果合并起来。

Guess you like

Origin blog.csdn.net/weixin_41960890/article/details/120401299