搜索与或图搜索实例算法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

初始节点
q=5 n1
连接符1
n2
连接符2
q=1 n4
n3
q=2 n5
n6 n8
n7
在重新计算n0耗散的小循环中: …
由于n4,n5为SOLVED, 则n0为SOLVED q(n0)=5, 找到解

G={n0,n1,n2,n3,n4,n5,n6,n7,n8} 第四个大循环(扩展结点),直到n0是SOLVED: 1. 找到待扩展的局部图G’{n0,n4,n5,n7,n8} 2. n=G’中非终结点, 此时n=n4 3. 扩展结点n=n4, 生成后继结点集合{n5, n8},
AO*算法的最优性:
若s→ N存在解图,当h(n)≤h*(n),且h(n)满足单调限制条件,则AO*一 定能够找到最佳解图, 即AO*具有可采纳性
单调限制条件指对于图中从结点到n→{n1,…,nk}的每一个连接符都施 加限制h(n)≤C+ h(n1)+..+ h(nk),如果同时有h(ti)=0(ti∈N),那么单 调限制意味着h是h*的下界范围,即对所有的结点n有h(n)≤h*(n)
与或图搜索
与或图表示
弧线 与节 点
终结点
父节点
或节

A
子节

N MH
BC D E FG
• 与或图是一个超图,节点间通过连 接符连接。
• K-连接符:
…... K个
与或图搜索问题
a 目标
初始节点s c
b 目标
n0→ {n7,n8}的3个解图
初始节 点n0
初始节 点n0
目标n7 (a)
目标n8
初始节 点n0
• 没有后裔的非终节点是不能解节点。
• 若非终节点有“或”子节点,当且仅当所有子节点均不能解时,该非终节点才不 能解。
• 若非终节点有“与”子节点时,当至少有一个子节点不能解时,该非终节点才不 能解。
耗散值的计算
1.若n是N的一个元素, 则k(n, N) =0 2.若n是一个外向连接符指向后继结点{n1,..ni}
设:K连接符 的耗散值为K
AO*算法搜索例子
G中只有一个结点n0
第一个大循环(扩展结点),直到n0是SOLVED:
q=3 n0 初始节点
1. 找到待扩展的局部图G’{n0} 2. n=G’中任意结点, 此时n=n0
3. 扩展结点n=n0, 生成后继结点集合{n1,n4,n5},
n1
连接符1
连接符2
令q(m)=q(n5)=min(q1,q2)=2 d.修改指针到q2对应的连结符上去 e.n7,n8为SOLVED,则m=n5也为SOLVED f. q(m=n5)被修改过,则需要也对m的父结点 进行修改, 即将m=n5的父结点n0加到S中 g.小循环结束 5.大循环结束
AO*算法搜索例子
q=5 n0
目标n7
(c)
目标n8
目标n7
(b)
目标n8
无解节点
有解节点
终结点
t
t
t
t
t
t
能解节点(a) t
t t (b)
• 终节点是能解节点
• 若非终节点有“或”子节点时,当且仅当其子节点至少有一能解时,该非终节点 才能解。
• 若非终节点有“与”子节点时,当且仅当其子节点均能解时,该非终节点才能解。
不能解节点
k(n, N) = Cn+k(n1, N)+…+k(ni, N) 其中:N为终节点集
Cn为连接符的耗散值
n
…...
n1 n2
ni
i个
初始节 点n0
搜索解图(c)耗散值的递归计算:
n0=2+k(4, N)+k(5, N)
n4
目标n7
k(5, N)= min(2+k(7,N)+k(8,
n5
N),…)
=2
q(n4)=1, q(n5)=1, q(n1)=2, 都不是终结点, 把结点加到G中
n4
4. 小循环(修改结点耗散值),直到S为空: a. S={n=n0}
b. 保证n的后代不在S中
c. m=n0的连接符有两条,
n5
计算q1(m)=1+q(n1)=1+2=3
q2(m)=2+q(n5)+q(n4)=2+1+1=4
1+k(8,N))
目标n8
= min(3, 1)=1
N0= 2+1+2=5
(c)
(a)的解图耗散值为8
(b)的解图耗散值为7
具有最小耗散值的解图称为最佳解 图,其值也用h*(n)标记.上例中的 h*(n)=5
普通图搜索的情况
s
n f(n) = g(n) + h(n) 对n的评价实际是对从s经过n到目的地这条路径的评价
与或图: 对局部图的评价
初始节点
c
a b
目标
目标
与或图搜索:AO*算法
ቤተ መጻሕፍቲ ባይዱ
两个过程
• 图生成过程,即扩展节点
自顶向下, 从最优的局部途中选择一个节点扩展
• 计算耗散值的过程
自下向顶, 对当前的局部图重新计算耗散值
AO*算法搜索例子
n0 初始节点
n1
n2
n4
n3
n5
n6
n7 目标
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
目标n7
(c)
目标n8
目标n7
(b)
目标n8
无解节点
有解节点
终结点
t
t
t
t
t
t
能解节点(a) t
t t (b)
• 终节点是能解节点
• 若非终节点有“或”子节点时,当且仅当其子节点至少有一能解时,该非终节点 才能解。
• 若非终节点有“与”子节点时,当且仅当其子节点均能解时,该非终节点才能解。
不能解节点
q=43 n0 初始节点
第二个大循环(扩展结点),直到n0是SOLVED: 1. 找到待扩展的局部图G’{n0,n1}
q=5 n1
连接符1
n2
连接符2
2. n=G’中非终结点, 此时n=n1
3. 扩展结点n=n1, 生成后继结点集合{n2,n3},
q(n2)=4, q(n3)=4, 都不是终结点,把结点加到
k(n, N) = Cn+k(n1, N)+…+k(ni, N) 其中:N为终节点集
Cn为连接符的耗散值
n
…...
n1 n2
ni
i个
目标n7
初始节 点n0
搜索解图耗散值的递归计算:
n0=2+k(4, N)+k(5, N)
n4
k(5, N)= min(2+k(7,N)+k(8,
n5
N),…)
=2
k(4, N)= min(1+k(5, N),

AO*算法搜索例子
q=4q=5 n0
初始节点
q=5
n1
连接符1
连接符2
n2
n4
qq==12
n3
n5
n6 n8
n7
G={n0,n1,n2,n3,n4,n5} 第三个大循环(扩展结点),直到n0是SOLVED: 1. 找到待扩展的局部图G’{n0,n4,n5} 2. n=G’中非终结点, 此时n=n5 3. 扩展结点n=n5, 生成后继结点集合
令q(m)=q(n0)=min(q1,q2)=3
d.修改指针到q1对应的连结符上去
e.如果n1为非SOLVED,则m=n0也为非
SOLVED
f.如果m=n0为SOLVED,或者q(m)被修改过,则
需要也对m的父结点进行修改, 即将m的父结点
加到S中
g.小循环结束
5.大循环结束
AO*算法搜索例子 G={n0,n1,n4,n5}
q(n4)=1, q(n5)=1, q(n1)=2, 都不是终结点, 把结点加到G中
n4
4. 小循环(修改结点耗散值),直到S为空: a. S={n=n0}
b. 保证n的后代不在S中
c. 取出m=n0的连接符有两条,
n5
计算q1(m)=1+q(n1)=1+2=3
q2(m)=2+q(n5)+q(n4)=2+1+1=4
与或图搜索
与或图表示
弧线 与节 点
终结点
父节点
或节

A
子节

N MH
BC D E FG
• 与或图是一个超图,节点间通过连 接符连接。
• K-连接符:
…... K个
与或图搜索问题
a 目标
初始节点s c
b 目标
n0→ {n7,n8}的3个解图
初始节 点n0
初始节 点n0
目标n7 (a)
目标n8
初始节 点n0
q=43 n0 初始节点
第二个大循环(扩展结点),直到n0是SOLVED: 1. 找到待扩展的局部图G’{n0,n1}
q=5 n1
连接符1
n2
连接符2
2. n=G’中非终结点, 此时n=n1
3. 扩展结点n=n1, 生成后继结点集合{n2,n3},
q(n2)=4, q(n3)=4, 都不是终结点,把结点加到
• 没有后裔的非终节点是不能解节点。
• 若非终节点有“或”子节点,当且仅当所有子节点均不能解时,该非终节点才不 能解。
• 若非终节点有“与”子节点时,当至少有一个子节点不能解时,该非终节点才不 能解。
耗散值的计算
1.若n是N的一个元素, 则k(n, N) =0 2.若n是一个外向连接符指向后继结点{n1,..ni}
n4
G中 4. 小循环(修改结点耗散值),直到S为空:
a. S={n=n1}
n3
b. 保证n的后代不在S中
n5
c. m=n1的连接符有两条,
计算q1(m)=1+q(n3)=1+4=5
q2(m)=1+q(n2)=1+4=5
d继令.q修…cq1续.q改2(m(m小(指mm=)循)=针n)==环01到q1的+:(+qhn连2h(1n对接()n1=应符5)m=)的有+1inh+连两((q54结条=1),=符6,q计42上算)=去45.大fdeg行....循如令q修小修(环果q改循m改(结n指m环=,3束n即)结针非=1将到束)qS被O(mqn修L10=V对改)nE=应1D过m的,的则,i则n父连m(需q结结=1要点n,符q也1n2上也0对)=加去为m5到非的SS父中O结LV点ED进
设:K连接符 的耗散值为K
AO*算法搜索例子
G中只有一个结点n0
第一个大循环(扩展结点),直到n0是SOLVED:
q=3 n0 初始节点
1. 找到待扩展的局部图G’{n0} 2. n=G’中任意结点, 此时n=n0
3. 扩展结点n=n0, 生成后继结点集合{n1,n4,n5},
n1
连接符1
连接符2
n4
G中 4. 小循环(修改结点耗散值),直到S为空:
a. S={n=n1}
n3
b. 保证n的后代不在S中
n5
c. 取出m=n1的连接符有两条,
计算q1(m)=1+q(n3)=1+4=5
q2(m)=1+q(n2)=1+4=5
d继令.q修…cq1续.q改2(m(m小(指mm=)循)=针n)==环01到q2的+:(+qhn连2h(1n对接()n1=应符5)m=)的有+1inh+连两((q54结条=1),=符6,q计42上算)=去45.大fdeg行....循如令q修小修(环果q改循m改(结n指m环=,3束n即)结针非=1将到束)qS被O(mqn修L10=V对改)nE=应1D过m的,的则,i则n父连m(需q结结=1要点n,符q也1n2上也0对)=加去为m5到非的SS父中O结LV点ED进
q(n5)=2, q(n8)=0 4. 小循环(修改结点耗散值),直到S为空:
a. S={n=n4} b. 保证n的后代不在S中 c. m=n5的连接符有两条,
计算q1(m)=1+q(n5)=1+2=3 q2(m)=1+q(n8)=1+0=1
令q(m)=q(n4)=min(q1,q2)=1 d.修改指针到q2对应的连结符上去 e. n8为SOLVED,则m=n4也为SOLVED f. m=n4也为SOLVED,则需要也对m的父结 点进行修改, 即将m=n1的父结点n0加到S 中 g.小循环结束 5.大循环结束
k(4, N)= min(1+k(5, N),
1+k(8,N))
目标n8
= min(3, 1)=1
N0= 2+1+2=5
解图(c)
同理可计算得: (a)的解图耗散值为8 (b)的解图耗散值为7
具有最小耗散值的解图称为最佳解 图,其值也用h*(n)标记.上例中的 h*(n)=5
普通图搜索的情况
s
n
t f(n) = g(n) + h(n) 对n的评价实际是对从s经过n到目的地这条路径的评价
与或图: 对局部图的评价
初始节点
c
a b
目标
目标
与或图搜索:AO*算法
两个过程
• 图生成过程,即扩展节点
自顶向下, 从最优的局部途中选择一个节点扩展
• 计算耗散值的过程
自下向顶, 对当前的局部图重新计算耗散值
AO*算法搜索例子
n0 初始节点
n1
n2
n4
n3
n5
n6
n7 目标
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
令q(m)=q(n0)=min(q1,q2)=3
d.修改指针到q1对应的连结符上去
e.如果n1为非SOLVED,则m=n0也为非
SOLVED
即h(n)
f.如果m=n0为SOLVED,或者q(m)被修改过,则 需要也对m的父结点进行修改, 即将m的父结点
加到S中
g.小循环结束
5.大循环结束
AO*算法搜索例子 G={n0,n1,n4,n5}
{n6,n7,n8}, q(n6)=2, q(n7)=0, q(n8)=0 把结点加到G中 4. 小循环(修改结点耗散值),直到S为空: a. S={n=n5} b. 保证n的后代不在S中 c. m=n5的连接符有两条,
计算q1(m)=1+q(n6)=1+2=3 q2(m)=1+q(n7)+q(n8)=2+0+0=2
相关文档
最新文档