版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章产生式系统的搜索策略状态空间:由给定问题的所有可能的状态组成的空间(相当于全集G)搜索空间:按某种策略在状态空间中选取的部分空间(G的子集)解路径(解空间):求解问题的一条有效路径。搜索策略的基本思路:搜索空间必须包含解路径,如果问题有解,且尽量缩小搜索空间。搜索策略的评价准则:总体费用最低2/3/20231费用的划分:
a规则应用的费用:执行规则时所花的费用
b控制费用:选择规则所花的费用。2/3/20232第三章目录3.1回溯策略3.2图搜索策略3.3启发式图搜索策略
1)A算法
2)爬山算法
3)分支界限算法
4)动态规划算法
5)A*算法2/3/20233
6)h函数与A*的关系
7)关于单调性限制
8)A*算法示例2/3/202343.1回溯算法2/3/202352/3/20236例四皇后问题2/3/20237定义综合数据库:设:DATA={ij︱1<=i,j<=4},其中:ij表示棋子所在行列如:24表示第二行第四列有一枚棋子因为棋盘上可放入的棋子数为0~4个所以集合中元素数位0~4个,即length(DATA)=0~42/3/202382/3/202392/3/2023102/3/2023112/3/2023122/3/2023132/3/2023143.2图搜索策略2/3/202315图搜索策略图搜索的实质是从问题空间中找出一张包含目标节点的子图。图搜索的结果:1,一个完整的搜索图G。2一个解路径,用指针表示的解路径。ProcedureGraphSearch1G=G0(G0=s),open=(s)//s:初始状态2closed=()3Loop:ifopen=()thenexit(fall)4n←first(open)remove(n,open),add(n,closed)5ifgoal(n)thenexit(success)6{mj}←expand(n),//mj不含n的先辈节点7open←add(open,mj)//mj不在open,closed中2/3/202316标记mj每个到n节点指针确定是否需要修改已在open,closed中的每个节点到n的指针确定是否需要修改已在closed中的每个节点的后继节点原来的指针。8按照某种方式排列open表中的节点,goloop2/3/2023172/3/2023182/3/202319深度优先算法Procedruedepth-First-Search1G=G0(G0=s),open=(s),closed=()//s:初始状态2Loop:ifopen=()thenexit(fall)3n←first(open)4ifgoal(n)thenexit(success)5remove(n,open),add(n,closed)6{mj}←expand(n),//mj不含n的先辈节点7open←add(open,mj)//mj不在open,closed中标记mj每个到n节点指针,按照节点深度递减顺序排列open中的节点
8goloop2/3/202320讨论1:如果问题有解,有深度优先搜索算法,是否能够找到解?不一定.解空间是否有限?讨论2:本算法的改进之处是open中节点按照深度优先排列,但是没有对深度加以控制,可能造成搜索代价太大2/3/202321宽度优先算法Procedruebreadth-First-Search1G=G0(G0=s),open=(s),closed=()//s:初始状态2Loop:ifopen=()thenexit(fall)3n←first(open)4ifgoal(n)thenexit(success)5remove(n,open),add(n,closed)6{mj}←expand(n),//mj不含n的先辈节点7open←add(open,mj)//mj不在open,closed中2/3/202322
标记每个到n节点指针,按照节点深度递增顺序排列open中的节点
8goloop
理论上可以利用宽度优先搜索能够找到解,如果问题有解的话。讨论:宽度优先算法和深度优先算法可能出现组合爆炸。都没有利用任何启发式信息,所以称为无信息搜索策略。2/3/202323:宽度优先例题:由一张桌子T、三个积木A、B、C组成一个积木世界,初始状态是A在B上,B在桌子上,C在桌子上;目标状态是:A、B、C依次从上到下排列在桌子上。如图2/3/202324解:1)状态描述(P1,P2,P3)表示按A、B、C顺序依次分别在P1,P2,P3上其中Pi是积木或者桌子。初始状态时(B、T、T),目标状态可以表示(B、C、T)2)定义操作:move(x,y)表示将积木x移到Y上;约束条件:aX顶部必须是空的b如果Y是积木,Y的顶部必须是空的
c同一种状态出现不得多于一次。2/3/2023251)解题过程2)open表和closed表3)节点样子画出整个图G和解路径4)程序何时结束5)改用深度优先如何?2/3/2023263.3启发式图搜索策略基本概念启发式图搜索的实质是利用启发信息有目的地进行搜索,减少搜索的盲目性。降低搜索空间找到最佳解启发式信息用于解决open表中节点的排列次序问题,方法是利用一个评价函数计算open表中节点的评价函数值,按照函数值从小到大排列所有节点。2/3/202327评价函数的目的:把最有希望得到最佳解或者解的排列在前面。路径:给定节点序列(n0,n1,…nk)。如果该序列中的任一节点ni-1都有后继节点ni,则该节点序列为从n0到nk的一条路径,路径长度为K路径耗散值:路径耗散值等于该路径上所有相邻节点间耗散值的总和。2/3/202328设:路径山任两点间的耗散值为才C(ni,nj),则从ni到nk的路径耗散值为C(ni,nj)=C(ni,nj)+C(nj,nk)最佳路径耗散值:最佳路径上的实际耗散值,记为:K(ni,nj).K(ni,nj)<=C(ni,nj)2/3/202329定义几个函数1)g*(n)=k(s,n):从初始节点s到当前节点n的最佳路径的耗散值。2)h*(n)=k(n,t):从当前节点n到目标节点t的最佳路径的好三者。3)f*(n)=g*(n)+h*(n):从初始节点s通过当前节点n到目标节点t的最佳路径的耗散值。2/3/2023304)评价函数:f(n)=g(n)+h(n),其中f,g,h分别是f*,g*,h*的估计值。通常约定:f(n)按照升序排列。讨论:有上述定义,得:1)g(n)>=g*(n)2)当h=0且g(n)=d(n)时,f(n)=d(n)既宽度优先策略,d(n):节点深度。
3)h(n)称为启发函数。2/3/2023313.1.1A算法1G=G0(G0=s),open=(s),closed=(),f(s)=g(s)+h(s)//s:初始状态2Loop:ifopen=()thenexit(fall)3n←first(open)h()4ifgoal(n)thenexit(success)5remove(n,open),add(n,closed)6{mj}←expand(n),//mj不含n的先辈节点
计算f(n,mi)=g(n,mi)+h(mi),(自s经过n,mi到目标节点的耗散值)2/3/202332open←add(open,mj)标记mj到n的指针(mj不在open,closed中)iff(n,mk)<f(mk)thenf(mk)←f(n,mk)标记mk到n的指针(mk在open中)iff(n,mL)<f(mL)thenf(mL)←f(n,mL)标记mL到n的指针(mL在closed中)
add(mL,open),把mL放回到open中7Open中的节点按f值升序排列
8goloop2/3/2023332/3/202334例八数码问题令:g(n)=d(n)节点深度
h(n)=w(n)不在位的数码个数(启发函数)则f(n)=d(n)+w(n)如初始节点s的f值f(0)=d(0)+w(0)=0+4=4有4个数码不在位。2/3/2023352/3/202336对于f(n)=g(n)+h(n),如果单独考虑g(n)或者h(n),即,
1)f(n)=g(n)只考虑搜索过的路径已经耗费的费用;//分支界限算法
2)f(n)=h(n)只考虑未来的发展趋势//爬山算法那么可以得到两种特殊的算法:爬山算法和分支界限算法。2/3/2023373.3.2爬山算法ProcedureHill_Climbing1n=s2Loop:ifgoal(n)thenexit(success)3{mi}←expangd(n),计算每个h(mi)
nextn←h(mi)最小值的节点4ifh(n)<h(nextn)thenexit(fail)5n←nextn6goloop优点,缺点2/3/2023383.3.3分支界限算法f(n)=g(n)ProcedureBranch_Bound1queue(s-s),g(s)=0//queue中保存的是从s出发的路径。2Loop:ifqueue=0thenexit(fail)3path←FIRST(queue),n←LAST(pATH)//取第一条路径,及该路径的最后节点n4ifgoal(n)thenexit(success)5{mj}←expand(n),计算g(mj)=g(n,mj)
remove(s-n,queue),add(s-mj,queue)//删除原来的路径,添加长度加一的路径。2/3/2023396queue队列中分支按g值升序排列7GOLOOP例下图右八城市,城市间的耗散值已经给出,利用分支界限算法给出从S到t的最佳路径。2/3/2023402/3/2023413.3.4动态规划算法Proceduredynamic_Programming1queue(s-s),g(s)=0//queue中保存的是从s出发的路径。2Loop:ifqueue=0thenexit(fail)3path←FIRST(queue),n←LAST(pATH)//取第一条路径,及该路径的最后节点n4ifgoal(n)thenexit(success)5{mj}←expand(n),计算g(mj)=g(n,mj)
remove(s-n,queue),add(s-mj,queue)2/3/202342
//删除原来的路径,添加长度加一的路径。6仅保留queue中到达某一公共节点路径中耗散值最小的路径,余者删除;queue队列中分支按g值升序排列7GOLOOP2/3/2023432/3/202344讨论a动态规划与分支界限差别在于去掉公共路径的冗余部分,提高效率。
b如果问题空间是树结构,动态规划与分支界限相同。因为对于树结构不存在到达同一节点有多重路径的情况。C动态规划改进的代价。比如上例中,增加一个城市。2/3/202345A算法总结1初始状态,open=(s)2正常情况下(非成功非失败),取open中的第一个节点n,将n由open转移到closed。3扩充节点n,将新节点加入到open中4修改某些节点的路径5open中节点按照升序排列值得重视的一点:A算法失败的唯一原因是open表为空2/3/202346思考题:图中:s是起始点t是目标节点;如果存在从s到t的一条最佳路径。而n是最佳路径上的一点。1)f*(s)f*(n)f*(t)的关系2)如果f*(s)=10,g*(n)=4问h*(n)=?2/3/2023473.3.5A*算法(最佳图搜索算法)A*算法定义:
对于算法A,如果有h(n)≤
h*(n),即h(n)以h*(n)为上界,则称该算法称为A*算法。如果令h(n)=0,则满足h(n)≤
h*(n)
这就是分支界限算法和动态规划算法。再令g(n)=d(n)(d(n)是节点深度)则f(n)=d(n);A*算法就是宽度优先算法。宽度优先算法能找到最佳解。例:第二章中八数码问题令h(n)=w(n)=不在位数字个数。2/3/202348算法可采纳性:给定任意图,设存在从开始节点s到目标节点t的路径。如果算法能够结束在s到t的最佳路径上,则称该算法是可采纳的。A*是具有可采纳性。定理1
对于有限图,如果从s到t存在路径,则A算法一定成功结束。2/3/202349推论1.1
因为A*算法是A算法的一个特例。所以在有限图上如果如果从s到t存在路径,则A*算法一定成功结束。定理2
对于无限图,如果存在s到t路径,则A*算法一定成功结束。2/3/202350推论2.1open表中任一满足f(n)≦f*(s)的节点n最终都将被A*选作扩展节点。定理3
如果存在节点s到目标节点t路径,则A*算法一定能找到最佳解结束。推论3.1A*选来扩展的节点都有f(n)≦f*(s)2/3/202351小结
1如果存在节点s到目标节点t路径,则A*算法一定能找到最佳解结束。
2open表中所有满足f(n)≦f*(s)的节点n最终都将被A*选作扩展节点。
3A*选来扩展的节点都有f(n)≦f*(s)4f*(s)作为A*的一个衡量上限。2/3/2023523.3.6h函数和A*算法的关系本节重点来讨论h函数(即启发信息量)对A*算法搜索效率的影响总结。定义:给定两个A*算法A1
和A2,都有
f(n1)=g(n1)+h(n1)f(n2)=g(n2)+h(n2)
如果对于所有非目标节点n,有h(n1)<h(n2)
则算法A2比算法A1有较多启发信息。讨论:启发信息与h函数值成正比。极端情况下,完全没有启发信息时h=0,则此时A*算法就是宽度优先算法。2/3/202353定理:给定两个A*算法A1
和A2如果A2的启发式信息比A1多,则在任何存在节点s到目标节点t的路径上,搜索结束时,由A2扩展的每一个节点必定被A1扩展。(A1扩展的节点多)
注意搜索空间小,不代表能够找到最佳解。2/3/202354当h=0时,除最下面一层节点外,所有节点都进入closed表。求解路径如图红线所示。当考虑到h时,被扩充的节点只有s、c、j,解路径相同2/3/2023553.37h函数单调性限制单调性限制的作用是:避免重复计算某些节点的f值(主要对连通图而言)以便减少搜索代价。单调性定义:给定一个启发函数h,如果对于所有节点ni和nj(nj是ni的子节点),如果满足h(ni)-h(nj)≤c(ni,nj)h(t)=0,则称h满足单调性限制。
上式可以写成h(ni)-≤h(nj)+c(ni,nj)可以理解为三角不等式。
2/3/202356定理5
如果好h(n)满足单调性限制条件,则A*算法扩展了节点n之后,就找到了到达节点n的最佳路径,即:如果A*选中节点n,在单调性限制条件下,有g(n)=g*(n)2/3/2023573.38A*算法示例迷宫问题给定迷宫图如下,找出从入口到出口的最短路径。2/3/202358解1)综合数据库定义状态集:{(x,y)∣1≤x,y≤4}
其中(x,y)表示任意节点的坐标所以问题表示为求解从(1,1)到(4,4)的最短路径。2规则集(定义4条移动规则)右移R1:if(x,y)then(x+1,y)左移R2:if(x,y)then(x-1,y)2/3/202359上移R3:if(x,y)then(x+1,y+1)下移R4:if(x,y)then(x+1,y-1)两种解法:宽度优先,设定h(n)2/3/2023602/3/2023613)A*算法f函数定义f(n)=g(n)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论