图搜索与问题求解课件.ppt
《图搜索与问题求解课件.ppt》由会员分享,可在线阅读,更多相关《图搜索与问题求解课件.ppt(169页珍藏版)》请在三一办公上搜索。
1、第 3 章 图搜索与问题求解,3.1 状态图搜索 3.2 状态图搜索问题求解 3.3 与或图搜索 3.4 与或图搜索问题求解 3.5 博弈树搜索 习题三,1,谢谢观赏,2019-8-26,3.1 状 态 图 搜 索,3.1.1 状态图例3.1 走迷宫是人们熟悉的一种游戏,如图31就是一个迷宫。如果我们把该迷宫的每一个格子以及入口和出口都作为节点,把通道作为边,则该迷宫可以由一个有向图表示(如图3-2所示)。那么,走迷宫其实就是从该有向图的初始节点(入口)出发,寻找目标节点(出口)的问题,或者是寻找通向目标节点(出口)的路径的问题。,2,谢谢观赏,2019-8-26,图 3-1 迷宫图,3,谢谢
2、观赏,2019-8-26,图 3-2 迷宫的有向图表示,4,谢谢观赏,2019-8-26,例 3.2 在一个33的方格棋盘上放置着1,2,3,4,5,6,7,8八个数码,每个数码占一格,且有一个空格。这些数码可在棋盘上移动,其移动规则是:与空格相邻的数码方可移入空格。现在的问题是:对于指定的初始棋局和目标棋局(如图3-3所示),给出数码的移动序列。该问题称为八数码难题或重排九宫问题。可以看出,图中的一条边(即相邻两个节点的连线)就对应一次数码移动,反之,一次数码移动也就对应着图中的一条边。而数码移动是按数码的移动规则进行的。所以,图中的一条边也就代表一个移动规则或者移动规则的一次执行。于是,这
3、个八数码问题也就是要在该有向图中寻找目标节点,或找一条从初始节点到目标节点的路径问题。,5,谢谢观赏,2019-8-26,图 3-3 八数码问题示例,6,谢谢观赏,2019-8-26,3.1.2 状态图搜索1.搜索方式用计算机来实现状态图的搜索,有两种最基本的方式:树式搜索和线式搜索。所谓树式搜索,形象地讲就是以“画树”的方式进行搜索。即从树根(初始节点)出发,一笔一笔地描出一棵树来。准确地讲,树式搜索就是在搜索过程中记录所经过的所有节点和边。所以,树式搜索所记录的轨迹始终是一棵“树”,这棵树也就是搜索过程中所产生的搜索树。,7,谢谢观赏,2019-8-26,所谓线式搜索,形象地讲就是以“画线
4、”的方式进行搜索。准确地讲,线式搜索在搜索过程中只记录那些当前认为是处在所找路径上的节点和边。所以,线式搜索所记录的轨迹始终是一条“线”(折线)。,8,谢谢观赏,2019-8-26,线式搜索的基本方式又可分为不回溯的和可回溯的两种。不回溯的线式搜索就是每到一个“叉路口”仅沿一条路继续前进,即对每一个节点始终都仅生成一个子节点(如果有子节点的话)。生成一个节点的子节点也称对该节点进行扩展。这样,如果扩展到某一个节点,该节点恰好就是目标节点,则搜索成功;如果直到不能再扩展时,还未找到目标节点,则搜索失败。可回溯的线式搜索也是对每一个节点都仅扩展一条边,但当不能再扩展时,则退回一个节点,然后再扩展另
5、一条边(如果有的话)。这样,要么最终找到了目标节点,搜索成功;要么一直回溯到初始节点也未找到目标节点,则搜索失败。,9,谢谢观赏,2019-8-26,由上所述可以看出,树式搜索成功后,还需再从搜索树中找出所求路径,而线式搜索只要搜索成功,则“搜索线”就是所找的路径,即问题的解。那么,又怎样从搜索树中找出所求路径呢?这只需在扩展节点时记住节点间的父子关系即可。这样,当搜索成功时,从目标节点反向沿搜索树按所作标记追溯回去一直到初始节点,便得到一条从初始节点到目标节点的路径,即问题的一个解。,10,谢谢观赏,2019-8-26,2.搜索策略由于搜索具有探索性,所以要提高搜索效率(尽快地找到目标节点)
6、,或要找最佳路径(最佳解)就必须注意搜索策略。对于状态图搜索,已经提出了许多策略,它们大体可分为盲目搜索和启发式(heuristic)搜索两大类。通俗地讲,盲目搜索就是无“向导”的搜索,启发式搜索就是有“向导”的搜索。那么,树式盲目搜索就是穷举式搜索,即从初始节点出发,沿连接边逐一考察各个节点(看是否为目标节点),或者反向进行;而线式盲目搜索,对于不回溯的就是随机碰撞式搜索,对于回溯的则也是穷举式的搜索。,11,谢谢观赏,2019-8-26,启发式搜索则是利用“启发性信息”引导的搜索。所谓“启发性信息”就是与问题有关的有利于尽快找到问题解的信息或知识。例如:“欲速则不达”、“知已知彼,百战不殆
7、”、“学如逆水行舟不进则退”等格言,就是指导人们行为的启发性信息。常识告诉我们,如果有向导引路,则就会少走弯路而事半功倍。所以,启发式搜索往往会提高搜索效率,而且可能找到问题的最优解。根据启发性信息的内容和使用方式的不同,启发式搜索又可分为许多不同的策略,如全局择优、局部择优、最佳图搜索等等。按搜索范围的扩展顺序的不同,搜索又可分为广度优先和深度优先两种类型。对于树式搜索,既可深度优先进行,也可广度优先进行。对于线式搜索则总是深度优先进行。,12,谢谢观赏,2019-8-26,3.搜索算法由于搜索的目的是为了寻找初始节点到目标节点的路径,所以在搜索过程中就得随时记录搜索轨迹。为此,我们用一个称
8、为CLOSED表的动态数据结构来专门记录考查过的节点。显然,对于树式搜索来说,CLOSED表中存储的正是一棵不断成长的搜索树;而对于线式搜索来说,CLOSED表中存储的是一条不断伸长的折线,它可能本身就是所求的路径(如果能找到目标节点的话)。另一方面,对于树式搜索来说,还得不断地把待考查的节点组织在一起,并做某种排列,以便控制搜索的方向和顺序。为此,我们采用一个称为OPEN表的动态数据结构,来专门登记当前待考查的节点。,13,谢谢观赏,2019-8-26,图 3-4 OPEN表与CLOSED表示例,14,谢谢观赏,2019-8-26,树式搜索算法:,步1 把初始节点So放入OPEN表中。步2
9、若OPEN表为空,则搜索失败,退出。步3 移出OPEN表中第一个节点N放入CLOSED表中,并冠以顺序编号n。步4 若目标节点Sg=N,则搜索成功,结束。步5 若N不可扩展,则转步2。,15,谢谢观赏,2019-8-26,步6扩展N,生成一组子节点,对这组子节点做如下处理:(1)删除N的先辈节点(如果有的话)。(2)对已存在于OPEN表的节点(如果有的话)也删除之;但删除之前要比较其返回初始节点的新路径与原路径,如果新路径“短”,则修改这些节点在OPEN表中的原返回指针,使其沿新路返回(如图3-5所示)。(3)对已存在于CLOSED表的节点(如果有的话),做与(2)同样的处理,并且再将其移出C
10、LOSED表,放入OPEN表重新扩展(为了重新计算代价)。(4)对其余子节点配上指向N的返回指针后放入OPEN表中某处,或对OPEN表进行重新排序,转步2。,16,谢谢观赏,2019-8-26,图 3-5 修改返回指针示例,17,谢谢观赏,2019-8-26,说明:(1)这里的返回指针也就是父节点在CLOSED表中的编号。(2)步6中修改返回指针的原因是,因为这些节点又被第二次生成,所以它们返回初始节点的路径已有两条,但这两条路径的“长度”可能不同。那么,当新路短时自然要走新路。(3)这里对路径的长短是按路径上的节点数来衡量的,后面我们将会看到路径的长短也可以其“代价”(如距离、费用、时间等)
11、衡量。若按其代价衡量,则在需修改返回指针的同时还要修改相应的代价值,或者不修改返回指针也要修改代价值(为了实现代价小者优先扩展)。,18,谢谢观赏,2019-8-26,线式搜索算法:不回溯的线式搜索,步1 把初始节点So放入CLOSED表中。步2 令NSo。步3 若N是目标节点,则搜索成功,结束。步4 若N不可扩展,则搜索失败,退出。步5 扩展N,选取其一个未在CLOSED表中出现过的子节点N1放入CLOSED表中,令NN1,转步3。,19,谢谢观赏,2019-8-26,可回溯的线式搜索步1 把初始节点So放入CLOSED表中。步2令NSo。步3若N是目标节点,则搜索成功,结束。步4 若N不可
12、扩展,则移出CLOSED表的末端节点Ne,若NeSo,则搜索失败,退出。否则,以CLOSED表新的末端节点Ne作为N,即令NNe,转步4。步5扩展N,选取其一个未在CLOSED表用出现过的子节点N1放入CLOSED表中,令NN1,转步3。,20,谢谢观赏,2019-8-26,需说明的是,上述算法仅是搜索目标节点的算法,当搜索成功后,如果需要路径,则还须由CLOSED表再找出路径。找路径的方法是:对于树式搜索,从CLOSED表中序号最大的节点起,根据返回指针追溯至初始节点So,所得的节点序列或边序列即为所找路径;对于线式搜索,CLOSED表即是所找路径。,21,谢谢观赏,2019-8-26,3.
13、1.3 穷举式搜索1.广度优先搜索广度优先搜索就是始终先在同一级节点中考查,只有当同一级节点考查完之后,才考查下一级节点。或者说,是以初始节点为根节点,向下逐级扩展搜索树。所以,广度优先策略的搜索树是自顶向下一层一层逐渐生成的。,22,谢谢观赏,2019-8-26,例 3.3 用广度优先搜索策略解八数码难题。由于把一个与空格相邻的数码移入空格,等价于把空格向数码方向移动一位。所以,该题中给出的数码走步规则也可以简化为:对空格可施行左移、移、上移和下移等四种操作。设初始节点So和目标节点Sg分别如图3-3的初始棋局和目标棋局所示,我们用广度优先搜索策略,则可得到如图3-6所示的搜索树。,23,谢
14、谢观赏,2019-8-26,图 3-6 八数码问题的广度优先搜索,24,谢谢观赏,2019-8-26,广度优先搜索算法:步1 把初始节点So放入OPEN表中。步2 若OPEN表为空,则搜索失败,退出。步3 取OPEN表中前面第一个节点N放在CLOSED表中,并冠以顺序编号n。步4 若目标节点Sg=N,则搜索成功,结束。步5 若N不可扩展,则转步2。步6 扩展N,将其所有子节点配上指向N的指针依次放入OPEN表尾部,转步2。,25,谢谢观赏,2019-8-26,其中OPEN表是一个队列,CLOSED表是一个顺序表,表中各节点按顺序编号,正被考察的节点在表中编号最大。如果问题有解,OPEN表中必出
15、现目标节点Sg,那么,当搜索到目标节点Sg时,算法结束,然后根据返回指针在CLOSED表中往回追溯,直至初始节点,所得的路径即为问题的解。广度优先搜索亦称为宽度优先或横向搜索。这种策略是完备的,即如果问题的解存在,用它则一定能找到解,且找到的解还是最优解(即最短的路径)。这是广度优先搜索的优点。但它的缺点是搜索效率低。,26,谢谢观赏,2019-8-26,2.深度优先搜索深度优先搜索就是在搜索树的每一层始终先只扩展一个子节点,不断地向纵深前进,直到不能再前进(到达叶子节点或受到深度限制)时,才从当前节点返回到上一级节点,沿另一方向又继续前进。这种方法的搜索树是从树根开始一枝一枝逐渐形成的。,2
16、7,谢谢观赏,2019-8-26,深度优先搜索算法:步1 把初始节点So放入OPEN表中。步2 若OPEN表为空,则搜索失败,退出。步3 取OPEN表中前面第一个节点N放入CLOSED表中,并冠以顺序编号n。步4 若目标节点Sg=N,则搜索成功,结束。步5 若N不可扩展,则转步2。步6扩展N,将其所有子节点配上指向N的返回指针依次放入OPEN表的首部,转步2。,28,谢谢观赏,2019-8-26,图 3-7 八数码问题的深度优先搜索,例3.4对于八数码问题,应用深度优先搜索策略,可得如图3-7所示的搜索树。,29,谢谢观赏,2019-8-26,深度优先搜索亦称为纵向搜索。由于一个有解的问题树可
17、能含有无穷分枝,深度优先搜索如果误入无穷分枝(即深度无限),则不可能找到目标节点。所以,深度优先搜索策略是不完备的。另外,应用此策略得到的解不一定是最佳解(最短路径)。,30,谢谢观赏,2019-8-26,3.有界深度优先搜索广度优先和深度优先是两种最基本的穷举搜索方法,在此基础上,根据需要再加上一定的限制条件,便可派生出许多特殊的搜索方法。例如有界深度优先搜索。有界深度优先搜索就是给出了搜索树深度限制,当从初始节点出发沿某一分枝扩展到一限定深度时,就不能再继续向下扩展,而只能改变方向继续搜索。节点x的深度(即其位于搜索树的层数)通常用d(x)表示,则有界深度优先搜索算法如下:,31,谢谢观赏
18、,2019-8-26,步1 把So放入OPEN表中,置So的深度d(So)=0。步2 若OPEN表为空,则失败,退出。步3 取OPEN表中前面第一个节点N,放入CLOSED表中,并冠以顺序编号n。步4 若目标节点Sg=N,则成功,结束。步5 若N的深度d(N)=dm(深度限制值),或者若N无子节点,则转步2。步6 扩展N,将其所有子节点Ni配上指向N的返回指针后依次放入OPEN表中前部,置d(Ni)=d(N)+1,转步2。,32,谢谢观赏,2019-8-26,3.1.4 启发式搜索1.问题的提出从理论上讲,似乎可以解决任何状态空间的搜索问题,但实践表明,穷举搜索只能解决一些状态空间很小的简单问
19、题,而对于那些大状态空间问题,穷举搜索就不能胜任了。因为大空间问题往往会导致“组合爆炸”。例如梵塔问题,当阶数较小(如小于6)时,在计算机上求解并不难,但当阶数再增加时,其时空要求将会急剧地增加。,33,谢谢观赏,2019-8-26,例如当取64时,则其状态空间中就有364=0.94*10个节点,最短的路径长度(节点数)=264-121019,这是现有的任何计算机都存放不下,也计算不了的。又如博弈问题,计算机为了取胜,它可以将所有算法都试一下,然后选择最佳走步。找到这样算法并不难,但计算时的时空消耗却大得惊人。例如:就可能有的棋局数讲,一字棋是9!3.6105,西洋棋是1078,国际象棋是10
20、120,围棋是10761。假设每步可以选择一种棋局,用极限并行速度(10-104秒/步)计算,国际象棋的算法也得1016年,即1亿亿年才可以算完。,34,谢谢观赏,2019-8-26,2.启发性信息启发式搜索就是利用启发性信息进行制导的搜索。启发性信息就是有利于尽快找到问题之解的信息。按其用途划分,启发性信息一般可分为以下三类:(1)用于扩展节点的选择,即用于决定应先扩展哪一个节点,以免盲目扩展。(2)用于生成节点的选择,即用于决定应生成哪些后续节点,以免盲目地生成过多无用节点。(3)用于删除节点的选择,即用于决定应删除哪些无用节点,以免造成进一步的时空浪费。,35,谢谢观赏,2019-8-2
21、6,例如,由八数码问题的部分状态图可以看出,从初始节点开始,在通向目标节点的路径上,各节点的数码格局同目标节点相比较,其数码不同的位置个数在逐渐减少,最后为零。所以,这个数码不同的位置个数便是标志一个节点到目标节点距离远近的一个启发性信息,利用这个信息就可以指导搜索。可以看出,这种启发性信息属于上面的第一种类型。需指出的是,不存在能适合所有问题的万能启发性信息,或者说,不同的问题有不同的启发性信息。,36,谢谢观赏,2019-8-26,3.启发函数在启发式搜索中,通常用所谓启发函数来表示启发性信息。启发函数是用来估计搜索树上节点x与目标节点Sg接近程度的一种函数,通常记为h(x)。如何定义一个
22、启发函数呢?启发函数并无固定的模式,需要具体问题具体分析。通常可以参考的思路有:一个节点到目标节点的某种距离或差异的度量;一个节点处在最佳路径上的概率;或者根据经验的主观打分,等等。例如,对于八数码难题,用h(x)就可表示节点x的数码格局同目标节点相比数码不同的位置个数。,37,谢谢观赏,2019-8-26,4.启发式搜索算法1)全局择优搜索全局择优搜索就是利用启发函数制导的一种启发式搜索方法。该方法亦称为最好优先搜索法,它的基本思想是:在OPEN表中保留所有已生成而未考察的节点,并用启发函数h(x)对它们全部进行估价,从中选出最优节点进行扩展,而不管这个节点出现在搜索树的什么地方。,38,谢
23、谢观赏,2019-8-26,全局择优搜索算法如下:,步1 把初始节点So放入OPEN表中,计算h(So)。步2 若OPEN表为空,则搜索失败,退出。步3 移出OPEN表中第一个节点N放入CLOSED表中,并冠以序号n。步4 若目标节点Sg=N,则搜索成功,结束。步5 若N不可扩展,则转步2。步6 扩展N,计算每个子节点x的函数值h(x),并将所有子节点配以指向N的返回指针后放入OPEN表中,再对OPEN表中的所有子节点按其函数值大小以升序排序,转步2。,39,谢谢观赏,2019-8-26,图 3-8 八数码问题的全局择优搜索,40,谢谢观赏,2019-8-26,例 3.5 用全局择优搜索法解八
24、数码难题。初始棋局和目标棋局同例3。解设启发函数h(x)为节点x的格局与目标格局相比数码不同的位置个数。以这个函数制导的搜索树如图3-8所示。图中节点旁的数字就是该节点的估价值。由图可见此八数问题的解为:So,S1,S2,S3,Sg。,41,谢谢观赏,2019-8-26,2)局部择优搜索局部择优搜索与全局择优搜索的区别是,扩展节点N后仅对N的子节点按启发函数值大小以升序排序,再将它们依次放入OPEN表的首部。故算法从略。,42,谢谢观赏,2019-8-26,3.1.5 加权状态图搜索1.加权状态图与代价树例 3.6 图3-9(a)是一个交通图,设A城是出发地,E城是目的地,边上的数字代表两城之
25、间的交通费。试求从A到E最小费用的旅行路线。,43,谢谢观赏,2019-8-26,图 3-9 交通图及其代价树,44,谢谢观赏,2019-8-26,可以看出,这个图与前面的状态图不同的地方是边上附有数值。它表示边的一种度量(此例中是交通费,当然也可以是距离)。一般地,称这种数值为权值,而把边上附有数值的状态图称之为加权状态图或赋权状态图。显然,加权状态图的搜索与权值有关,并且要用权值来导航。具体来讲,加权状态图的搜索算法,要在一般状态图搜索算法基础上再增加权值的计算与传播过程,并且要由权值来确定节点的扩展顺序。,45,谢谢观赏,2019-8-26,同样,为简单起见,我们先考虑树型的加权状态图代
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 搜索 问题 求解 课件
链接地址:https://www.31ppt.com/p-2146085.html