学内容:本章在上一章知识表示的基础上研究问题求解的方法,是人工智能研究的又一核心问题。内容包括早期搜索推理技术,如图搜索策略和消解原理;以及高级搜索推理技术,如规则演绎系统、产生式系统、系统组织技术、不确定性推理和非单调推理。
教学重点:图搜索策略、消解原理、规则演绎系统、产生式系统。
教学难点:启发式搜索、规则双向演绎系统等。
教学方法:课堂教学为主,辅以恰当的实验。注意结合前面所学知识表示的基础内容,将其与问题求解方法融为一体。及时提问、收集学生学习情况。尽量使用实例和网络课程中的多媒体素材进行讲解。
教学要求:重点掌握一般图搜索策略和消解原理,掌握各种搜索方法和产生式系统原理,了解规则演绎系统的基本原理,对系统组织技术、不确定性推理和非单调推理等高级推理技术作一般性了解。
3.1 图搜索策略
教学内容:本节介绍图搜索的一般策略,作为各种图搜索技术的基础。
教学重点:图搜索的一般过程、OPEN表和CLOSE表的概念。
教学难点:OPEN表和CLOSE表的物理意义。
教学方法:课堂教学为主,通过提问彻底弄清图搜索的基本概念。
教学要求:重点掌握图搜索一般策略,掌握OPEN表和CLOSE表的构成及作用。
1、图搜索策略的定义
图搜索策略可看作一种在图中寻找路径的方法。初始节点和目标节点分别代表初始数据库和满足终止条件的数据库。求得把一个数据库变换为另一数据库的规则序列问题就等价于求得图中的一条路径问题。研究图搜索的一般策略,能够给出图搜索过程的一般步骤。
2、图搜索算法中的几个重要名词术语
(1)OPEN表与CLOSE表
(2)搜索图与搜索树
3、图搜索(GRAPHSEARCH)的一般过程
(1) 建立一个只含有起始节点S的搜索图G,把S放到一个叫做OPEN的未扩展节点表中。
(2) 建立一个叫做CLOSED的已扩展节点表,其初始为空表。
(3) LOOP:若OPEN表是空表,则失败退出。
(4) 选择OPEN表上的第一个节点,把它从OPEN表移出并放进CLOSED表中。称此节点为节点n。
(5) 若n为一目标节点,则有解并成功退出,此解是追踪图G中沿着指针从n到S这条路径而得到的(指针将在第7步中设置)。
(6) 扩展节点n,同时生成不是n的祖先的那些后继节点的集合M。把M的这些成员作为n的后继节点添入图G中。
(7) 对那些未曾在G中出现过的(既未曾在OPEN表上或CLOSED表上出现过的)M成员设置一个通向n的指针。把M的这些成员加进OPEN表。对已经在OPEN或CLOSED表上的每一个M成员,确定是否需要更改通到n的指针方向。对已在CLOSED表上的每个M成员,确定是否需要更改图G中通向它的每个后裔节点的指针方向。
(8) 按某一任意方式或按某个探试值,重排OPEN表。
(9) GO LOOP。
提问:图搜索是针对什么知识表示方法的问题求解方法?
4、图搜索方法分析:
图搜索过程的第8步对OPEN表上的节点进行排序,以便能够从中选出一个“最好”的节点作为第4步扩展用。这种排序可以是任意的即盲目的(属于盲目搜索),也可以用以后要讨论的各种启发思想或其它准则为依据(属于启发式搜索)。每当被选作扩展的节点为目标节点时,这一过程就宣告成功结束。这时,能够重现从起始节点到目标节点的这条成功路径,其办法是从目标节点按指针向S返回追溯。当搜索树不再剩有未被扩展的端节点时,过程就以失败告终(某些节点最终可能没有后继节点,所以OPEN表可能最后变成空表)。在失败终止的情况下,从起始节点出发,一定达不到目标节点。
提问:什么是图搜索? 其中,重排OPEN表意味着什么,重排的原则是什么?
3.2盲目搜索
教学内容:介绍三种盲目搜索方法,即宽度优先搜索、深度优先搜索和等代价搜索。
教学重点:盲目搜索的特点,宽度优先搜索。
教学难点:等代价搜索中代价的概念。
教学方法:以实例强化内容的学习,通过提问引导学生对三种方法的特点进行比较。
教学要求:掌握盲目搜索的特点,比较三种盲目搜索方法的优缺点。
3.2.1宽度优先搜索
1、定义
如果搜索是以接近起始节点的程度依次扩展节点的,那么这种搜索就叫做宽度优先搜索(breadth-first search)。
2、特点
这种搜索是逐层进行的;在对下一层的任一节点进行搜索之前,必须搜索完本层的所有节点。
3、宽度优先搜索算法
(1) 把起始节点放到OPEN表中(如果该起始节点为一目标节点,则求得一个解答)。
(2) 如果OPEN是个空表,则没有解,失败退出;否则继续。
(3) 把第一个节点(节点n)从OPEN表移出,并把它放入CLOSED的扩展节点表中。
(4) 扩展节点n。如果没有后继节点,则转向上述第(2)步。
(5) 把n的所有后继节点放到OPEN表的末端,并提供从这些后继节点回到n的指针。
(6) 如果n的任一个后继节点是个目标节点,则找到一个解答,成功退出;否则转向第(2)步。
4、宽度优先搜索方法分析:
宽度优先搜索是图搜索一般过程的特殊情况,将图搜索一般过程中的第8步具体化为本算法中的第6步,这实际是将OPEN表作为“先进先出”的队列进行操作。
宽度优先搜索方法能够保证在搜索树中找到一条通向目标节点的最短途径;这棵搜索树提供了所有存在的路径(如果没有路径存在,那么对有限图来说,我们就说该法失败退出;对于无限图来说,则永远不会终止)。
5、例:把宽度优先搜索应用于八数码难题时所生成的搜索树,这个问题就是要把初始棋局变为如下目标棋局的问题:
1 2 3
8 4
7 6 5
提问:宽度优先搜索方法中OPEN表需要按什么方式进行操作?
A.先进后出 B.先进先出
3.2.2深度优先搜索
1、定义
在此搜索中,首先扩展最新产生的(即最深的)节点。深度相等的节点可以任意排列。
这种盲目(无信息)搜索叫做深度优先搜索(depth-first search)。
2、特点
首先,扩展最深的节点的结果使得搜索沿着状态空间某条单一的路径从起始节点向下进行下去;只有当搜索到达一个没有后裔的状态时,它才考虑另一条替代的路径。
3、深度界限
为了避免考虑太长的路径(防止搜索过程沿着无益的路径扩展下去),往往给出一个节点扩展的最大深度棗深度界限。任何节点如果达到了深度界限,那么都将把它们作为没有后继节点处理。
4、含有深度界限的深度优先搜索算法
请同学们课后自学,并回答课后思考题。
思考题:有界深度优先搜索方法能够保证在搜索树中找到一条通向目标节点的最短途径吗?
3.2.3等代价搜索
1、定义
宽度优先搜索可被推广用来解决寻找从起始状态至目标状态的具有最小代价的路径问题,这种推广了的宽度优先搜索算法叫做等代价搜索算法。
2、等代价搜索中的几个记号
起始节点记为S;
从节点i到它的后继节点j的连接弧线代价记为c(i,j);
从起始节点S到任一节点i的路径代价记为g(i)。
3、等代价搜索算法
(请同学们课后认真阅读本算法,指出与宽度优先、深度优先算法有何特别之处。)
4、等代价搜索方法分析
如果所有的连接弧线具有相等的代价,那么等代价算法就简化为宽度优先搜索算法。
思考:试比较各种盲目搜索搜索方法的效率,找出影响算法效率的原因。
3.3 启发式搜索
教学内容:启发式搜索策略概述和有序搜索。启发式搜索弥补盲目搜索的不足,提高搜索效率。
教学重点:启发式搜索策略、启发信息和有序搜索。
教学难点:估价函数的设计、A*算法原理。
教学方法:通过实例加深对原理的理解,鼓励同学扩大阅读范围。
教学要求:掌握启发式搜索策略和估价函数的设计方法,了解A*算法原理。
3.3.1启发式搜索策略和估价函数
1、为什么需要启发式搜索
盲目搜索效率低,耗费过多的计算空间与时间,这是组合爆炸的一种表现形式。
2、定义
进行搜索技术一般需要某些有关具体问题领域的特性的信息,把此种信息叫做启发信息。利用启发信息的搜索方法叫做启发式搜索方法。
3、启发式搜索策略
有关具体问题领域的信息常常可以用来简化搜索。一个比较灵活(但代价也较大)的利用启发信息的方法是应用某些准则来重新排列每一步OPEN表中所有节点的顺序。然后,搜索就可能沿着某个被认为是最有希望的边缘区段向外扩展。应用这种排序过程,需要某些估算节点“希望”的量度,这种量度叫做估价函数(evalution function)。
4、估价函数
为获得某些节点“希望”的启发信息,提供一个评定侯选扩展节点的方法,以便确定哪个节点最有可能在通向目标的最佳路径上 。
f(n)——表示节点n的估价函数值
建立估价函数的一般方法:试图确定一个处在最佳路径上的节点的概率;提出任意节点与目标集之间的距离量度或差别量度;或者在棋盘式的博弈和难题中根据棋局的某些特点来决定棋局的得分数。这些特点被认为与向目标节点前进一步的希望程度有关。
3.3.2 有序搜索
1、定义
用估价函数f来排列GRAPHSEARCH第8步中OPEN表上的节点。应用某个算法(例如等代价算法)选择OPEN表上具有最小f值的节点作为下一个要扩展的节点。这种搜索方法叫做有序搜索(ordered search)或最佳优先搜索(best-first search),而其算法就叫做有序搜索算法或最佳优先算法。
尼尔逊(Nilsson)曾提出一个有序搜索的基本算法。估价函数f是这样确定的:一个节点的希望程序越大,其f值就越小。被选为扩展的节点,是估价函数最小的节点。
2、实质
选择OPEN表上具有最小f值的节点作为下一个要扩展的节点,即总是选择最有希望的节点作为下一个要扩展的节点。
3、有序状态空间搜索算法
(1) 把起始节点S放到OPEN表中,计算f(S)并把其值与节点S联系起来。
(2) 如果OPEN是个空表,则失败退出,无解。
(3) 从OPEN表中选择一个f值最小的节点i。结果有几个节点合格,当其中有一个为目标节点时,则选择此目标节点,否则就选择其中任一个节点作为节点i。
(4) 把节点i从OPEN表中移出,并把它放入CLOSED的扩展节点表中。
(5) 如果i是个目标节点,则成功退出,求得一个解。
(6) 扩展节点i,生成其全部后继节点。对于i的每一个后继节点j:
(a)计算f(j)。
(b)如果j既不在OPEN表中,又不在CLOSED表中,则用估价函数f把它添入OPEN表。从j加一指向其父辈节点i的指针,以便一旦找到目标节点时记住一个解答路径。
(c)如果j已在OPEN表上或CLOSED表上,则比较刚刚对j计算过的f值和前面计算过的该节点在表中的f值。如果新的f值较小,则
(i) 以此新值取代旧值。
(ii) 从j指向i,而不是指向它的父辈节点。
(iii) 如果节点j在CLOSED表中,则把它移回OPEN表。
(7) 转向(2),即GO TO(2)。
4、有序搜索方法分析
宽度优先搜索、等代价搜索和深度优先搜索统统是有序搜索技术的特例。对于宽度优先搜索,选择f(i)作为节点i的深度。对于等代价搜索,f(i)是从起始节点至节点i这段路径的代价。
有序搜索的有效性直接取决于f的选择,如果选择的f不合适,有序搜索就可能失去一个最好的解甚至全部的解。如果没有适用的准确的希望量度,那么f的选择将涉及两个方面的内容:一方面是一个时间和空间之间的折衷方案;另一方面是保证有一个最优的解或任意解。
5、例:八数码难题
采用了简单的估价函数
f(n)=d(n)+W(n)
其中:d(n)是搜索树中节点n的深度;W(n)用来计算对应于节点n的数据库中错放的棋子个数。因此,起始节点棋局
2 8 3
1 4
7 6 5
的f值等于0+4=4。
3.3.3 A*算法
A*算法是一种有序搜索算法,其特点在于对估价函数的定义上。
1、几个记号
令k(ni,nj)表示任意两个节点ni和nj之间最小代价路径的实际代价(对于两节点间没有通路的节点,函数k没有定义)。于是,从节点n到某个具体的目标节点ti,某一条最小代价路径的代价可由k(n,ti)给出。令h*(n)表示整个目标节点集合{ti}上所有k(n,ti)中最小的一个,因此,h*(n)就是从n到目标节点最小代价路径的代价,而且从n到目标节点能够获得h*(n)的任一路径就是一条从n到某个目标节点的最佳路径(对于任何不能到达目标节点的节点n,函数h*没有定义)。
2、估价函数的定义
定义g*为g*(n)=k(S,n)
定义函数f*,使得在任一节点n上其函数值f*(n)就是从节点S到节点n的一条最佳路径的实际代价加上从节点n到某目标节点的一条最佳路径的代价之和,即:
f*(n)=g*(n)+h*(n)
希望估价函数f是f*的一个估计,此估计可由下式给出:
f(n)=g(n)+h(n)
其中:g是g*的估计;h是h*的估计。对于g(n)来说,一个明显的选择就是搜索树中从S到n这段路径的代价,这一代价可以由从n到S寻找指针时,把所遇到的各段弧线的代价加起来给出(这条路径就是到目前为止用搜索算法找到的从S到n的最小代价路径)。这个定义包含了g(n)≥g*(n)。h*(n)的估计h(n)依赖于有关问题的领域的启发信息。这种信息可能与八数码难题中的函数W(n)所用的那种信息相似。把h叫做启发函数。
3、A*算法定义
定义1 在GRAPHSEARCH过程中,如果第8步的重排OPEN表是依据f(x)=g(x)+h(x)进行的,则称该过程为A算法。
定义2 在A算法中,如果对所有的x存在h(x)≤h*(x),则称h(x)为h*(x)的下界,它表示某种偏于保守的估计。
定义3 采用h*(x)的下界h(x)为启发函数的A算法,称为A*算法。当h=0时,A*算法就变为有序搜索算法。
4、A*算法
A*算法描述参考教材。
提问:由g*(n)和g(n)的定义知g*(n)≤g(n)。
A.对 B.错
思考:试比较宽度优先搜索、有界深度优先搜索及有序搜索的搜索效率,并以实例数据加以说明。
3.10 小 结
对本章讨论过的各种搜索推理技术加以归纳总结。
评论