1 / 46

AI :问题求解

AI :问题求解. 案例研究 -- 约束满足问题. 地图染色问题. 能否用 k 种色彩对地图染色,一个国家一种颜色,相邻国家颜色不一样 四 色定理:第一个用计算机证明的数学定理,证明的正文 300 页, “是否存在四色定理的一个简短证明, …… 使得一个合格的数学家能在(比如说)两个星期里验证其正确性呢? ”(摘自 汤米 ·R· 延森和比雅尼 · 托夫 特 《 图染色问题 》 ) 优化问题? 搜索问题?. NO. 一个染色过程(序列),不考虑路径 耗散. 找到一个“符合要求”染色序列即可,要求非常简单!与典型的搜索问题有区别!. CSP 问题的形式化定义.

tarala
Download Presentation

AI :问题求解

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AI:问题求解 案例研究--约束满足问题

  2. 地图染色问题 • 能否用k种色彩对地图染色,一个国家一种颜色,相邻国家颜色不一样 • 四色定理:第一个用计算机证明的数学定理,证明的正文300页,“是否存在四色定理的一个简短证明,……使得一个合格的数学家能在(比如说)两个星期里验证其正确性呢?”(摘自汤米·R·延森和比雅尼·托夫特 《图染色问题》) • 优化问题? • 搜索问题? NO 一个染色过程(序列),不考虑路径耗散 找到一个“符合要求”染色序列即可,要求非常简单!与典型的搜索问题有区别!

  3. CSP问题的形式化定义 • CSP = (X,D,C),是一个三元组,其中: • X是一组变量,不妨假设为一个n维向量X=(X1,X2,…,Xn) • D是值域,定义了每一个变量的值域,D=(D1,D2,…,Dn) • C是一个约束组,C=(C1,C2,…,Cm),每个约束Ci可以认为是X的一个k元子集k元向量Ri构成的序偶<ti,Ri>,可以理解为ti和Ri之间是个等式或不等式计算式 • 取值,所有的取值,形成一个“赋值”v=(x1,x2,…,xn),或者说是一个“解”,也就是说v的子集t1,t2,…,tm都已被赋值,可以分别参与R1,R2,…,Rm的计算,判断等式/不等式是否成立

  4. 例子:3-SAT • n个变量x1,x2,…,xn • 每个变量的取值域为:{0,1},(另一种说法:变量是布尔变量,此时值域{T,F}) • m个约束,每个约束是少于等于3个变量的析取式,或者将m个约束表示为一个合取式约束条件: • 求一个真值指派(x1,x2,…,xn)=(v1,v2,…,vn),使得上述每个析取式都被满足(为真),或使得上述合取式为真。 • http://www.satcompetition.org/,每年的竞赛

  5. NT Q WA SA NT NSW Q V WA SA T NSW V T 地图着色问题:形式化 • 7个变量:{WA,NT,SA,Q,NSW,V,T} • 每个变量的取值范围都一样:{red, green, blue} • 约束条件:任何两个相邻的变量色彩不一样 WANT, WASA, NTSA, NTQ, SAQ, SANSW, SAV, QNSW, NSWV

  6. 8皇后问题:形式化 • 8个变量:x1,x2,…,x8 • 每个变量的取值范围:{1,2,…,8},表示行编号 • 约束条件,包括两类: • 若xi=k,则xj k, 1,2,…,8, ji, 第k行只能放一个皇后 • 每个对角线只能放置一个皇后,即任意两个皇后i, j, xi=k,xj=l, 满足约束

  7. 2 3 4 1 5 i,j[1,5], ij, Ni  Nj i,j[1,5], ij, Ci  Cj ... …… more Street puzzle Ni = {English, Spaniard, Japanese, Italian, Norwegian} Ci= {Red, Green, White, Yellow, Blue} Di = {Tea, Coffee, Milk, Fruit-juice, Water} Ji = {Painter, Sculptor, Diplomat, Violinist, Doctor} Ai = {Dog, Snails, Fox, Horse, Zebra} 推理问题 (Ni = English)  (Ci = Red) The Englishman lives in the Red house The Spaniard has a Dog The Japanese is a Painter The Italian drinks Tea The Norwegian lives in the first house on the left The owner of the Green house drinks Coffee The Green house is on the right of the White house The Sculptor breeds Snails The Diplomat lives in the Yellow house The owner of the middle house drinks Milk The Norwegian lives next door to the Blue house The Violinist drinks Fruit juice The Fox is in the house next to the Doctor’s The Horse is next to the Diplomat’s (Ni = Japanese)  (Ji = Painter) (N1 = Norwegian) (Ci = White)  (Ci+1 = Green) (C5 White) (C1 Green) Who owns the Zebra? Who drinks Water?

  8. 有限和无限CSP问题 • 有限/无限CSP问题的区别在于解的数目是否是有限的。 • 判断的方法:变量的取值域是有限还是无限? • 一旦有一个变量的取值范围是无限的,则CSP问题就是无限的(此时解的个数是无限的) • 若每个变量的取值个数是有限的,则得到有限CSP问题,典型问题是SAT

  9. 将CSP问题形式化为搜索问题系统化的方法 • 有效赋值:对n个变量x1,x2,…,xn,一个一个地赋值,不妨设前k个赋值为: x1 v1, x2 v2,…, xk vk,此时的赋值,会使前k变量相关的约束条件都满足; • 完全赋值:k=n,也就是n个变量都被赋值,使得所有的约束条件都得到了满足。 • 有了上述概念,我们可以给出搜索问题的描述: • 状态/状态空间:有效赋值/所有可能有效赋值 • 初始状态: {}, k=0 • 后继函数:{x1 v1, x2 v2,… xk vk}  {x1 v1, x2 v2,… ,xk vk, xk+1 vk+1} • 目标测试:k=n • 路径耗散:假设单步路径耗散为1

  10. 图解:后继函数 {x1 v1, ..., xk vk} 剩下r=n-k个变量,假设每个变量的取值个数相同,都是s,则有b =s x r个后继,故分支因子是b {x1 v1, ..., xk vk, xk+1 vk+1}

  11. 可交换性:变量的赋值次序和完全赋值的可达性无关 CSP的关键属性之一 • 带来的好处之一:扩展节点的时候,任意选择一个未赋值的变量,考查其所有可能的赋值即可(扩展节点),后继节点的数目s x r  s {x1 v1, ..., xk vk} 树的高度不变!! {x1 v1, ..., xk vk, xk+1 vk+1}

  12. 可交换性:变量的赋值次序和完全赋值的可达性无关 CSP的关键属性之一 • 带来的好处之二:不需要存储到达当前节点(已有有效赋值)的路径 • 回溯算法:使用递归的简化深度优先算法

  13. 示例:回溯算法 搜索算法又会回溯到变量X3并尝试其它赋值,假设X3只有两个可能的赋值,则算法继续回溯到变量X1 X1 v11 此时仍假设X2 没有合适的赋值使得约束被满足 X3 v31 v32 v31 接下来, 搜索算法回溯到前一个变量X3并尝试其它的赋值 X2 X2 X2 假设此时X2没有赋值,使得所有约束条件能够被满足 Assignment = {(X1,v11), (X3,v31)} Assignment = {(X1,v11)}

  14. 示例:回溯算法 X1 v11 v12 X2 X3 v21 v31 v32 算法在子树搜索时考虑变量的次序可以不同! X3 X2 X2 v32 Assignment = {(X1,v12)} Assignment = {(X1,v12), (X2,v21)} Assignment = {(X1,v12), (X2,v21), (X3,v32)}

  15. 算法描述:回溯算法 CSP-BACKTRACKING(A) • If 有效赋值A 是完全的then return A • X 选择一个未被赋值的变量 • D 选择一个X的所有可能取值次序(比如s个取值的随机排序) • For each vin D do • Add (Xv) to A • IfA是有效的 then • result CSP-BACKTRACKING(A) //递归调用 • If result failure then return result • Remove (Xv) from A • Return failure 算法启动:CSP-BACKTRACKING({})

  16. 回溯算法:提高算法的效率如何减少回溯? CSP-BACKTRACKING(A) • If 有效赋值A 是完全的 then return A • X 选择一个未被赋值的变量 • D  选择一个X的所有可能取值次序(比如s个取值的随机排序) • For each v in D do • Add (Xv) to A • IfA是有效的 then • result CSP-BACKTRACKING(A) //递归调用 • If result failure then return result • Remove (Xv) from A • Return failure

  17. 回溯算法:提高算法的效率如何减少回溯? • 下一步选择哪个变量进行赋值? • 为什么会回溯?当前的赋值不一定会最终得到解,继续赋值下去,可能会发现后续变量的赋值总会和以前的某些赋值一起违背某些约束,我们称之为“冲突”,“冲突”导致回溯的产生 • 选择一个变量,让冲突更早来到!可以减少回溯 • 待赋值变量x的s个取值,赋值给x的次序是什么? • 理想状态,每次给每个变量的赋值都是“最佳的”,那么就不会有回溯出现,快速地获得了解 具体技术是什么?

  18. 1 2 3 4 5 6 7 8 X1X2X3X4X5X6X7X8 技术:前向检验 • 8皇后问题为例 • 假设赋值x1=5,导致图中涂黑圆的格子成为其它变量x1,… x8等的取值“禁区”,可以将这些格子从这些变量的取值域中“丢弃” • 发展这个思想,每增加一个变量的赋值,引发了某些未赋值变量取值范围的缩小(要求满足约束条件而造成的),确定这些变量缩小的变量取值范围,一旦某个变量的取值范围为空集{},则发现了“冲突”,这就是“前向检验”

  19. NT Q WA T NSW SA V 地图着色:前向检验 Constraint graph Q WA 前向检验将把红色从NT 和SA的取值域中移除

  20. NT Q WA T NSW SA V 地图着色:前向检验 空集: 当前赋值{(WA  R), (Q  G), (V  B)} 将不会出现在最终解中

  21. 技术:前向检验一般性描述

  22. 改进的回溯算法 CSP-BACKTRACKING(A, D) • If 有效赋值A 是完全的then return A • X 选择一个未被赋值的变量 • Dx 选择一个X的所有可能取值次序 • For each vin Dxdo • Add (Xv) to A • 新值域DA forward checking(DA, X, v, A) • If DA中每个变量的值域都非空 then • result CSP-BACKTRACKING(A,D) //递归调用 • If result failure then return result • Remove (Xv) from A • Return failure D表示不在A的变量的“可变动”取值域

  23. 回溯算法:提高算法的效率 具体操作 • 下一步选择哪个变量进行赋值? • 启发式函数:选择约束最强的变量/残留值域最小的变量 • 理由:分支因子最小,后继最少!

  24. NT WA NT Q WA SA SA NSW V T 示例:地图着色问题 • SA的残留值域大小为1,Q的残留值域大小为2,其它三个的残留值域大小都是3 • 选择SA上色

  25. 回溯算法:提高算法的效率 具体操作 • 下一步选择哪个变量进行赋值? • 启发式函数1:选择约束最强的变量/残留值域最小的变量 • 理由:分支因子最小,后继最少! • 存在问题: • 很多个变量,残留值域大小相同,怎么办?如何选择? • 新的启发式函数2:找到一个变量,在未满足约束组(还有变量未被赋值,所以无法判断是否满足)中出现的次数最多,称为“最多被约束着的变量” 理由:使将来残留值域缩减得更多!降低分支因子

  26. NT Q WA SA SA NSW V T 示例:地图着色问题 • 启发式函数1和启发式函数2复合成完整的启发式函数,实现对“下一个变量”的选择 • 第一个变量赋值之前,所有变量 的残留值域大小都是3,选谁? SA同时出现在5个未被满足的 约束条件中,故选择之赋值。

  27. 回溯算法:提高算法的效率 具体操作 • 变量x选择出来了,如何给其残留的值域排序? • 启发式函数3:选择值v  x,满足使得从未赋值的变量的残留值域中删除的值最少。 • 理由:这个v,被称为“最少被约束着的值”,也就是说这个赋值对未来的影响最小,以防将来没办法给其它变量找到赋值 • 具体做法:对每个不同的v,都需要进行前向检验,然后检查前向检验的结果,看哪个v值对残留值域大小的影响最小!(操作比较复杂,费时间)

  28. NT NT WA WA NT NT Q Q WA WA SA SA NSW NSW V V {} {Blue} T T 示例:地图着色问题 • 此时,假设Q被选出,准备执行上色,Q的残留值域大小为2,红色或蓝色 • 若Q上蓝色,则SA的残留值域大小为0; • 若Q上红色,则SA的残留值域大小为1,故选择SA残留值域最大的着色方式

  29. 改进的回溯算法 CSP-BACKTRACKING(A, D) • If 有效赋值A 是完全的then return A • X 选择一个未被赋值的变量 • Dx 选择一个X的所有可能取值次序 • For each vin Dxdo • Add (Xv) to A • 新值域D  forward checking(D, X, v, A) • If DA中每个变量的值域都非空 then • result CSP-BACKTRACKING(A,D) //递归调用 • If result failure then return result • Remove (Xv) from A • Return failure 2.1)启发式函数1 2.2)启发式函数2 3.1)启发式函数3

  30. CSP的应用 • 教务处排课 • 电路布局设计 • 任务调度 • ...... • 最优化问题CSP: • 未知最优解的最优化问题,不知道什么时候搜索停止; • 实际工程中,往往可以设置一个可接受的解的质量水平,将这个解质量看成是一个约束条件,最优化问题的优化目标就转化成了约束条件,得到了一个CSP

  31. NT Q WA T NSW SA V 更进一步减少回溯:约束传播 更好的冲突检测机制或方法? 已经存在冲突

  32. 2相容:二元约束的传播 • 一个变量x的赋值后,其它未赋值变量中一个变量的赋值可能会影响另一个未赋值变量的残留值域,找到这种变化,实现“约束传播”! • 相容的概念:一个变量x的任何一个赋值,另一个变量y至少存在一个赋值,这些赋值不违背任何约束,则称x,y是2相容的

  33. X1 {1,2,3,4} X2 {1,2,3,4} 1 2 3 4 1 2 3 4 X3 {1,2,3,4} X4 {1,2,3,4} 约束传播示例:4-皇后问题

  34. X1 {1,2,3,4} X1 {1,2,3,4} X1 {1,2,3,4} X2 {1,2,3,4} X2 {1,2,3,4} X2 {1,2,3,4} 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 X3 {1,2,3,4} X3 {1,2,3,4} X3 {1,2,3,4} X4 {1,2,3,4} X4 {1,2,3,4} X4 {1,2,3,4} 约束传播示例:4-皇后问题 • 开始,假设x1赋值1 • 执行前向检验,可以去掉部分值域 • 注意到x2=3时, x3找不到任何赋值满足约束,故不相容!所以可以把3从x2的值域中删除,同样把2从x3的值域删除

  35. X1 {1,2,3,4} X1 {1,2,3,4} X2 {1,2,3,4} X2 {1,2,3,4} 1 2 3 4 1 2 3 4 X3 {1,2,3,4} X3 {1,2,3,4} X4 {1,2,3,4} X4 {1,2,3,4} 约束传播示例:4-皇后问题 • 同样删除4从x3的值域删除 • x3成为空集,冲突! • 接下来回溯

  36. X1 {1,2,3,4} X2 {1,2,3,4} 1 2 3 4 1 2 3 4 X3 {1,2,3,4} X4 {1,2,3,4} 约束传播示例:4-皇后问题 • 算法把1从x1的值域删除,并赋值为2

  37. X1 {1,2,3,4} X2 {1,2,3,4} 1 2 3 4 1 2 3 4 X3 {1,2,3,4} X4 {1,2,3,4} 约束传播示例:4-皇后问题 • 执行前向检验

  38. X1 {1,2,3,4} X1 {1,2,3,4} X2 {1,2,3,4} X2 {1,2,3,4} 1 2 3 4 1 2 3 4 X3 {1,2,3,4} X3 {1,2,3,4} X4 {1,2,3,4} X4 {1,2,3,4} 约束传播示例:4-皇后问题 • x3的赋值为3, x2的不存在有效的赋值,即x2和x3不是2相容的,将3从x2的的值域删除 • 同样可以把1,4从x4的的值域删除

  39. 判断相容性:一般性描述 REMOVE-VALUES(X,Y) • removed  false • For each v in Y的残留值域 do • If 不存在u in X的残留值域 会满足与 (X,Y)相关的约束 then • Remove v from Y‘s domain • removed  true • Return removed 不管X取什么值,已有的赋值(包括Y的赋值)总是会产生冲突 时间复杂度:O(sd2), O(d2) d是值域初始时刻的大小 s是(X,Y)相关的约束个数 REMOVE-VALUES(X,Y) 移除Y的值域中某些与X残留值域不相容的值

  40. 二元约束的传播算法:AC3 AC3() • 初始化一个空队列Q存放所有了未赋值的变量 • While Q   do : • XRemove(Q) • For each Y: 和X有二元关系的未赋值变量 do: • If (REMOVE-VALUES(X,Y) then • If Y的残留值域为空 then exit • Insert(Y,Q) 时间复杂度:O(nsdsd2)=O(ns2d3), d是值域初始时刻的大小 s是(X,Y)相关的约束个数 n是变量个数 前向检验时间复杂度:O(nd)

  41. XY {1, 2} {1, 2} X Y YZ XZ Z {1, 2} AC3的不足:不能检测出所有的冲突! • 下图没有完全赋值满足约束,AC3算法不会对任何变量的值域进行修改! • 三元关系,3相容 • k元关系,k相容 Tradeoff: 在回溯时间代价和约束 传播时间代价之间寻求一个平衡! REMOVE-VALUES(X,Y) REMOVE-VALUES(X,Y,Z) …… 时间复杂度增加!

  42. 改进的回溯算法: +AC3 CSP-BACKTRACKING(A, D) • If 有效赋值A 是完全的then return A • 执行AC3,更新D • If 某个未赋值变量残留值域为空 then return failure • X 选择一个未被赋值的变量 • Dx 选择一个X的所有可能取值次序 • For each vin Dxdo • Add (Xv) to A • 新值域D  forward checking(D, X, v, A) • If DA中每个变量的值域都非空 then • result CSP-BACKTRACKING(A,D) //递归调用 • If result failure then return result • Remove (Xv) from A • Return failure

  43. NT Q NT WA Q NSW WA SA NSW V V 约束图 • 变量是节点,两个变量之间有约束关系,就连接一条边,得到一个约束图 • 三个变量构成的约束呢?超图? • 若约束图是约束树,则存在多项式的算法,使得问题可解;(参见教材) • 若不是约束树,那么能否找到约束图分解为约束树的方法? • 方法一:删除法。对某些节点赋值,从约束图中删除这些已经赋值的节点,同时更新所有约束,得到剩下的约束图为约束树 • NP-hard的问题 从所有变量集合中删除一个子集s后,得到约束树,s被称为环割集,最小环割集的发现算法被证明是NP-hard的

  44. NT Q WA NSW SA V 约束图 • 变量是节点,两个变量之间有约束关系,就连接一条边,得到一个约束图 • 三个变量构成的约束呢?超图? • 若约束图是约束树,则存在多项式的算法,使得问题可解;(参见教材) • 若不是约束树,那么能否找到约束图分解为约束树的方法? • 方法二:合并法。如图所示,把某些节点合并在一起看,当成子问题,所有的子问题连接成为树约束

  45. 回溯到哪儿? • 课后阅读

  46. 特殊的约束 • 课后阅读

More Related