目录

人工智能-一种现代方法-第6章-约束满足问题

人工智能 一种现代方法 第6章 约束满足问题

文章目录

定义约束满足问题

使用要素化来描述状态:一组变量,每个变量有自己的值。当每个变量都有自己的赋值同时满足所有关于变量的约束时,问题就得到了解决。这类问题就叫做 约束满足问题(CSP) ,全称Constraint Satisfaction Problem。

CSP利用了状态结构的优势,使用的是通用策略而不是问题专业启发式来求解复杂问题。

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

赋值:问题的状态由对部分或者全部变量的一个赋值来定义,{X_i=v_i,…}。

相容赋值、合法赋值 :一个不违反约束条件的赋值。

完整赋值:每个变量都已经赋值。

部分赋值:只有部分变量赋值。

CSP的解是相容的、完整的赋值。

CSP包含三个成分X,D,C:

  • X:变量集合 (variables)
  • D:值域集合,每个变量有自己的值域 (domain)
  • C:描述变量取值的约束集合 (constraint)

八皇后问题的CSP形式

  • Variables: X={X1,X2,X3,…,X8}

  • Domain: D={D1,D2,D3,…,D8},Di={1,2,3,4,5,6,7,8}

  • Constraints:C={<{Xi,Xj}, Xi≠Xj & |Xi-Xj|≠|i-j|, 1 ≤ i ≤ 8,1 ≤ j ≤ 8}

    a solution {5,2,4,6,8,3,1,7}

地图着色问题

任务:对澳大利亚地图的每个州进行着色,每个区域可以涂上红色、绿色或者蓝色,要求是相邻的区域颜色不能相同。

下图中的右图就是左图所示的罗马尼亚问题的 约束图

https://note.youdao.com/yws/api/personal/file/WEB21a473643ea3b16cbe69e9aa5ffe95bc?method=download&shareKey=445a0f5a38a8c455e08ead594bf9386c

https://note.youdao.com/yws/api/personal/file/WEB6623af413c4ddd9f6b40b843b4b74b2a?method=download&shareKey=e3bc9497a23bb7939d9e29210feac2e8

地图着色问题的CSP形式化

  • Variables: X={WA, NT, Q, NSW, V, SA, T}

  • Domain: D={D 1 ,…,D 7 }, D i ={red, green, blue}

  • Constraints: adjacent regions must have different colors:C={WA≠NT, WA≠SA, NT≠SA, NT≠Q, SA≠Q,SA≠W, SA≠V,Q≠NSW, NSW≠V}

    SA≠WA是< (SA, WA),SA≠WA>的简洁表示

Solutions are assignments satisfying all constraints:

{WA=red, NT=green, Q=red,NSW=green, V= red, SA=blue,T= green}

约束传播:CSP中的推理

CSP中的推理: 约束传播 。约束传播使用约束减小一个变量的合法取值范围,从而影响到跟此变量有约束关系的另一变量的取值。

局部搜索(local search):全部赋值full assignment

约束传播(constraint propagation):部分赋值partial assignment

  • 给一个变量赋值后,则通过约束传播可缩小与其有约束关系的其他变量的值域。

例如

https://note.youdao.com/yws/api/personal/file/WEB94deb004a9cd0e516092171d1b3ae794?method=download&shareKey=22cb4588829b6d48f8723f1a3c74aba6

  • 在CSP中,算法可以进行约束传播,也可以搜索 (从几种可能性中选择新的变量赋值)。约束传播与搜索可以交替进行,或者也可以将约束传播作为搜索前的预处理步骤。
  • 约束传播的核心思想是局部相容性
  • 增强约束图中各部分局部相容性会导致不相容的结点取值被删除。
结点相容

如果单个变量(对应于CSP网络中的结点)值域中的所有取值满足它的一元约束,就称此变量是 结点相容 的。

例如,如果地图着色问题中南澳洲人不喜欢绿色,变量SA原来值域为{red, green, blue},删除green此结点即为结点相容的,此时SA的值域为{red, blue}。

如果网络中每个变量都是结点相容的,则此网络是结点相容的。

弧相容

对于变量Xi,Xj ,若对Xi的 每个赋值 在Xj都存在某个取值满足弧(Xi, Xj)的二元约束,则称Xi对于Xj是弧相容的。

如果每个变量对于其它变量都是弧相容的,则称该 网络是弧相容 的。

https://note.youdao.com/yws/api/personal/file/WEB3c9f4f1da646c50968057beae331ab50?method=download&shareKey=47d0a2bb2eabae75ac05c96b9845d179

路径相容

对{Xi , Xj}的每一个相容赋值{Xi =a, Xj =b},Xm都有合适的取值同时使得{Xi , Xm }和{Xm , Xj }是相容的,则称 集合{Xi , Xj }对于Xm 是(路径)相容的 。被称为路径相容,是因为这很像是一条从Xi途经Xm,再到Xj的路径。

k-相容

如果对于任何k-1个变量的任何相容赋值,任何第k个变量总能被赋予一个和前k-个变量相容的值,那么这个CSP是k相容的。

1-相容是节点相容。2-相容即为弧相容。对二元约束网络,3-相容是路径相容。

全局约束

全局约束可涉及任意个约束变量(此处说的全局约束不一定是所有变量 )。例如,Alldiff约束表示所有相关变量必须取不同的值。Alldiff约束的不相容检测的一种简单形式:如果约束涉及m个变量,可能的不同取值有n个,且m>n,那么约束不可能满足。

另一个重要的高阶约束是资源约束,有时称为atmost约束。例如在调度问题中,用P1 ,…,P4 表示执行四项任务的人数。总人数不超过10人的约束记为atmost(10, P1 , P2 , P3 , P4)。

CSP形式化为一个搜索问题(CSP的回溯搜索)

在CSP中,算法可以进行约束传播,也可以搜索(从几种可能性中选择新的变量赋值)。

很多CSP只用推理是无法求解的,还需要通过搜索来求解。

部分赋值的回溯搜索算法 :可以用标准的深度优先搜索,状态可能是部分赋值,行动是将var=value加入到赋值中。

CSP的一个性质:变量赋值是 可交换 的, 不用考虑变量赋值的顺序

例子:澳大利亚地图着色的一个部分搜索树如下

https://note.youdao.com/yws/api/personal/file/WEB315eaebce5236eb333558dd193811b0c?method=download&shareKey=47405f418179da1136144a400dc3ee85

回溯搜索,深度优先搜索的一种形式,经常用于求解CSP问题 。每次为一个变量选一个赋值,没有合法的值的时候就回溯。 推理和搜索可以交错进行(如前向检验、弧相容检验)

https://note.youdao.com/yws/api/personal/file/WEB3a4504d177663282cbab2df61bf43e1b?method=download&shareKey=37da326ba623cea9b09e553bad3cfe0a

如何提高回溯搜索的效率

变量顺序(最少剩余值、最大度)、值的顺序(最少约束值)、提前检查失败(前向检验、维护弧相容)、利用树形结构

还是以澳大利亚地图着色为例:

https://note.youdao.com/yws/api/personal/file/WEB078343b8f55305d464ff87d1fdbfacf5?method=download&shareKey=6dc7af9726f1075e5e45cb2d704e9b56

变量顺序

1)选择“合法”取值最少或 失败优先 的变量——称为 最少剩余值(MRV) 启发式。(做一个强有力的引导,方便提早遇到失败,从而剪枝)

https://note.youdao.com/yws/api/personal/file/WEBc3527b2dcd002f722d47eae24fc806ba?method=download&shareKey=e70a773b7146f1bfb488922d00985a22

如果变量都有同样的最少剩余值,该怎么选呢?

2)度启发式:通过选择 与其他未赋值变量约束最多的变量 来试图降低未来的分支因子。(用来打破僵局,如选择第一个着色区域)

https://note.youdao.com/yws/api/personal/file/WEB349985fe5e6d4717a806347607ae87f9?method=download&shareKey=424c678a109c6fc69d8e23f90fbc5e3f

取值顺序

上面讲了怎么选取变量,一旦变量选好了,变量的值应该怎么选呢?

最少约束值 :优先选择的赋值是给邻居变量留下更多的选择

下图中,右上角的Q应选择红色,若选择蓝色,则SA没有可选的颜色了

https://note.youdao.com/yws/api/personal/file/WEB3b373203c3ec11a4aa957337389fa92b?method=download&shareKey=d6dd9e437fc7e8e9edbb2c8591966289

如何提前检查失败(搜索与推理交错进行)

前向检验(Forward Checking) :检查未分配变量的合法剩余值,当任何变量没有合法值时终止。

https://note.youdao.com/yws/api/personal/file/WEB090e80c9a12e83513a983f59f85e0901?method=download&shareKey=cb601847fefd5b9aaf9331138b9f0066