第二章 与或图搜索问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
初始节点
n1 n4 5
n0
初始节点
n4(1) n2(4)
n3
n5 n3(4) n6(2)
n5(1)
2
n6
n8
n8(0)
目标
n7
目标
n7(0)
红色:5 黄色:6
23
n0 n1 n2
初始节点
n1 n4 5
n0
初始节点
1 n4(1)
n2(4)
n3
Baidu Nhomakorabea
n5 n3(4) n6(2)
n5(1)
2
n6
n8
n8(0)
第二章 与或图搜索问题
初始节点s
a c b
目标 目标
1
2.1 问题归约法
基本思想 当一问题较复杂时,可通过分解或变换,将其转化为一系列较简 单的子问题,然后通过对这些子问题的求解来实现对原问题的求解。
分解 如果一个问题P可以归约为一组子问题P1,P2,…,Pn,并且只有当所有 子问题Pi都有解时原问题P才有解,任何一个子问题Pi无解都会导致原 问题P无解,则称此种归约为问题的分解。 即分解所得到的子问题的“与”与原问题P等价。 等价变换 如果一个问题P可以归约为一组子问题P1,P2,…,Pn,并且子问题Pi 中只要有一个有解则原问题P就有解,只有当所有子问题Pi都无解时 原问题P才无解,称此种归约为问题的等价变换,简称变换。 即变换所得到的子问题的“或”与原问题P等价。 2
26
2.3 博弈树搜索
博弈问题
双人 一人一步 双方信息完备 零和
27
分钱币问题
对方先走 (7)
(6,1)
(5,2)
(3,2,2)
(4,3)
(3,3,1)
(5,1,1) (4,2,1)
(4,1,1,1) (3,1,1,1,1)
(3,2,1,1)
(2,2,2,1) 我方必胜
28
(2,2,1,1,1)
12
解图的耗散值记为k(n,N),则可递归计 算如下: ①若n是N的一个元素,则k(n,N)=0; ②若n是一个外向连接符指向后继节点 {n1,…,ni},并设该连接符的耗散值为Cn, 则 k(n,N)=Cn+ k(n1 ,N) + … + k (ni ,N)
13
能解节点
终节点是能解节点 若非终节点有“或”子节点时,当且仅当 其子节点至少有一能解时,该非终节点才 能解。 若非终节点有“与”子节点时,当且仅当 其子节点均能解时,该非终节点才能解。
P
t
t t
解树
5
2.1 问题归约法
2. 问题的与/或树表示 例4.4 三阶梵塔问题。要求把1号钢针上的3个金片全部移到3号钢针 上,如下图所示。
1
2
3
1
2
3
解:这个问题也可用状态空间法来解,不过本例主要用它来说明如何 用归约法来解决问题。 为了能够解决这一问题,首先需要定义该问题的形式化表示方法。设 用三元组 (i, j, k) 表示问题在任一时刻的状态,用“→”表示状态的转换。上述三元组中 i 代表金片C所在的钢针号 j 代表金片B所在的钢针号 6 k 代表金片A所在的钢针号
利用问题归约方法,原问题可分解为以下三个子问题:
(1) 把金片A及B移到2号钢针上的双金片移动问题。即(1, 1, 1)→(1, 2, 2) (2) 把金片C移到3号钢针上的单金片移动问题。即 (1, 2, 2)→(3, 2, 2) (3) 把金片A及B移到3号钢针的双金片移动问题。即(3, 2, 2)→( (3, 3, 3) 其中,子问题(1)和(3)都是一个二阶梵塔问题,它们都还可以再继续进行分解; 子问题(2)是本原问题,它已不需要再分解。 三阶梵塔问题的分解过程可用如下图与/或树来表示
14
不能解节点
没有后裔的非终节点是不能解节点。 若非终节点有“或”子节点,当且仅当所 有子节点均不能解时,该非终节点才不能 解。 若非终节点有“与”子节点时,当至少有 一个子节点不能解时,该非终节点才不能 解。
15
普通图搜索的情况
s
n
f(n) = g(n) + h(n) 对n的评价实际是对从s到n这条路 径的评价
目标
n7
目标
n7(0)
红色:5 黄色:6
24
AO*算法过程 : 1、建立一个搜索图G,G:=s,计算q(s)=h(s),IF GOAL(s)THEN M(s,SOLVED);开始时图G只包括s,耗散值估计为h(s),若s是终节 点,则标记上能解。 2、Until s已标记上SOLVED,do: 3、begin 4、G′:=FIND(G);根据连接符标记(指针)找出一个待扩展的局部解图 G′。 5、n:=G′中的任一非终节点;选一个非终节点作为当前节点。 6、EXPAND(n),生成子节点集{nj},计算q(nj)=h(nj),其中nj G, G:=ADD({nj},G),IF GOAL(nj) THEN M(nj, SOLVED);对G中 未出现的子节点计算耗散值,若有终节点则加能解标记,然后把n的子节点添 加到G中。 7、S:={n};建立含n的单一节点集合S。 8、Until S为空,do: 9、begin 10、REMOVE(m,S), ;这个m的子节点mc应不在S中。 11、· 修改m的耗散值q(m): 对m指向节点集{n1i,n2i,…,nki}的每一个连接符i分别计算qi: qi(m)=Ci+q(n1i)+…+q(nki), q(m):=min qi(m);对m的i个连接符,取计算结果最小的那个耗散值为 q(m)。 · 加指针到min qi(m)的连接符上,或把指针修改到min qi(m)的连接符上, 即原来指针与新确定的不一致时应删去。 · M(nji, SOLVED) THEN M(m, SOLVED);若该连接符的所有子 IF 节点都是能解的,则m也标上能解。 12、IF M(m, SOLVED)∨(q(m)≠q0(m)) THEN ADD(ma, S);m能解或修正的耗散值与原先估算q0不同,则把m 的所有先辈节点ma添加到S中。 25 13、end 14、end
2.1 问题归约法
2. 问题的与/或树表示
(1)与树 分解
P
P
(2) 或树 等价变换
P1
P2 与树
P3
P1
P2 或树
P3
(3) 与/或树
P P2 P12 P3 P31 P32 P33
3
P1 P12
与/或树
(4) 端节点与终止节点
在与/或树中,没有子节点的节点称为端节点;本原问题所对应的节 点称为终止节点。可见,终止节点一定是端节点,但端节点却不一定是 终止节点。 (5) 可解节点与不可解节点
16
与或图: 对局部图的评价
初始节点
c
a
b 目标 目标
17
局部图的耗散值记为k(n,N),则: ①若n是局部图的一个叶节点,则k(n,N) =h(n); ②若n是一个外向连接符指向后继节点 {n1,…, },并设该连接符的耗散值为Cn, 则 k(n,N)=Cn+ k(n1 ,N) + … + k (ni ,N) 其中,h(n)表示节点n到目标节点集的最佳 解图耗散值的估计。
③对“与”节点,只要其子节点中有一个为不可解节点,则该与节点是 4 不可解节点。
(6) 解树 由可解节点构成,并且由这些可解 节点可以推出初始节点(它对应着原 始问题)为可解节点的子树为解树。 在解树中一定包含初始节点。 例如,右图给出的与或树中,用红 线表示的子树是一个解树。在该图中, 节点P为原始问题节点,用t标出的节 点是终止节点。根据可解节点的定义, 很容易推出原始问题P为可解节点。 问题归约求解过程就实际上就是生 成解树,即证明原始节点是可解节点 的过程。这一过程涉及到搜索的问题, 对于与/或树的搜索将在后面详细讨 论。
2.2基本概念
与或图是一个超图,节点间通过连接符连 接。 K-连接符:
…...
K个
8
耗散值的计算
k(n, N) = Cn+k(n1, N)+…+k(ni, N) 其中:N为终节点集 Cn为连接符的耗散值
n
…...
n1 n2 i个 ni
9
• 解图: 初始节点
目标 目标
10
递归定义局部图: 定义: ①单一节点是一个局部图; ②对于一个局部图的任意叶节点n,选择一 个n的外向连接符K,则该局部图、外向连 接符K,以及K所连接的n的后继节点一起组 成的图,仍然组成一个局部图。
11
解图可递归定义如下: 定义:一个与或图G中,从节点n到节点集N 的解图记为 , 是G的子图。 ①若n是N的一个元素,则 由单一节点组成; ②若n有一个指向节点{n1,…,nk}的外向连 接符K,使得从每一个ni到N有一个解图 (i=1,…,k),则 由节点n,连接符K,及 {n1,…,nk}中的每一个节点到N的解图所组 成; ③否则n到N不存在解图。
在与/或树中,满足以下三个条件之一的节点为可解节点: ①任何终止节点都是可解节点。 ②对“或”节点,当其子节点中至少有一个为可解节点时,则该或节点 就是可解节点。 ③对“与”节点,只有当其子节点全部为可解节点时,该与节点才是可 解节点。 同样,可用类似的方法定义不可解节点: ①不为终止节点的端节点是不可解节点。 ②对“或”节点,若其全部子节点都为不可解节点,则该或节点是不可 解节点。
18
两个过程
图生成过程,即扩展节点
从最优的局部途中选择一个节点扩展
计算耗散值的过程
对当前的局部图从新计算耗散值
19
AO*算法举例
n0 n1 n2 n4
初始节点
n3
n5
n6
n8
其中: h(n0)=3 h(n1)=2 h(n2)=4 h(n3)=4 h(n4)=1 h(n5)=1 h(n6)=2 h(n7)=0 h(n8)=0 设:K连接符 的耗散值为K
这个算法可划分成两个操作阶段: 第一阶段是4-6步,完成自顶向下的图生成操作, 先通过有标记的连接符,找到目前为止最好的一 个局部解图,然后对其中一个非终节点进行扩展, 并对其后继节点赋估计耗散值和加能解标记。 第二阶段是7-12步,完成自下向上的耗散值修正 计算、连接符(即指针)的标记以及节点的能解 标记。 耗散值的修正从刚被扩展的节点n开始,其修正耗 散值q(n)取估计h(n)的所有值中最小的一个, 然后根据耗散值递归计算公式逐级向上修正其先 辈节点的耗散值,只有下层节点耗散值修正后, 才可能影响上一层节点的耗散值,因此必须自底 向上一直修正到初始节点。这由算法中的内循环 过程完成,
(2,1,1,1,1,1)
1,极小极大过程
评价函数:
可以对所有的棋局进行评估。当评价函数值大于0时, 表示棋局对我方有利,对对方不利。当评价函数小于0 时,表示棋局对我方不利,对对方有利。而评价函数值 越大,表示对我方越有利。当评价函数值等于正无穷大 时,表示我方必胜。评价函数值越小,表示对我方越不 利。当评价函数值等于负无穷大时,表示对方必胜。
(1,1,1)→(3,3,3)
(1,1,1)→(1,2,2)
(1,2,2)→(3,2,2)
(3,2,2)→(3,3,3)
(1,1,1)→(1,1,3) (1,1,3)→(1,2,3) (1,2,3)→(1,2,2)
(3,2,2)→(3,2,1) (3,2,1)→(3,3,1) (3,3,1)→(3,3,3)
29
30
过程MINIMAX: ①T:=(s,MAX),OPEN:=(s),CLOSED:=( );开始时 树由初始节点构成,OPEN表只含有s。 ②LOOP1:IF OPEN=( )THEN GO LOOP2; ③n:=FIRST(OPEN),REMOVE(n,OPEN),ADD(n, CLOSED); ④IF n可直接判定为赢、输或平局 THEN f(n):=∞∨-∞∨0,GO LOOP1 ELSE EXPAND(n)→{ni},ADD({ ni},T) IF d(ni)<k THEN ADD({ni },OPEN),GO LOOP1 ELSE计算f(ni ),GO LOOP1;ni达到深度k,计算各端节点f值。 ⑤LOOP2:IF CLOSED=NIL THEN GO LOOP3 ELSE np :=FIRST(CLOSED); ⑥IF(np ∈MAX)∧(f( nci∈MIN)有值) THEN f( np ):=max{f( nci )},REMOVE np ,CLOSED); 若MAX所有子节点均有值,则该MAX取其极大值。 IF ( np ∈MIN)∧(f( ncj∈MAX)有值) THEN f np ):=min{f (ncj )},REMOVE( np ,CLOSED);若 MIN所有子节点均有值,则该MIN取其极小值。 ⑦GO LOOP2; ⑧LOOP3:IF f(s)≠NIL THEN EXIT(END∨M(Move,T));s 有值,则结束或标记走步。 31
20
目标
n7
目标
n0 n1 n2
初始节点
n1(2) n4
n0
初始节点
n4(1)
n3
n5
n5(1)
n6
n8
目标
n7
红色:4
黄色:3
目标
21
n0 n1 n2
初始节点
n1 n4 5
n0
初始节点
n4(1) n2(4)
n3
n5 n3(4)
n5(1)
n6
n8
目标
n7
红色:4
黄色:6
目标
22
n0 n1 n2
在该与/或树中,有7个终止节点,它们分别对应着7个本原问题。如果把 这些本原问题从左至右排列起来,即得到了原始问题的解:
(1, 1, 1)→(1, 3, 3) (3, 2, 2)→(3, 2, 1) (1, 3, 3)→(1, 2, 3) (1, 2, 3)→(1, 2, 2) (1, 2, 2)→(3, 2, 2) 7 (3, 2, 1)→(3, 3, 1) (3, 3, 1)→(3, 3, 3)