1、第五章 搜索策略搜索是人工智能中的一个基本问题,是推理不可分割的一部分,它直接关系到智能系统的性能与运行效率,因而尼尔逊把它列为人工智能研究中的四个核心问题之一。5.1 基本概念1. 什么是搜索人工智能所要解决的大部分问题是结构不良或非结构化的问题,对这样的问题一般不存在成熟的求解算法可供利用,而只能是利用已有的知识一步步摸索着前进。在此过程中,存在着如何寻找可用知识的问题,即如何确定推理路线,使其付出的代价尽可能的少,而问题又能得到较好的解决。如:在正向推理中, 对已知的初始事实,需要在知识库中寻找可使用的知识,这就存在按何种线路进行寻找的问题。, 另外,可能存在多条线路都可实现对问题的求解
2、,这就又出现按哪一条线路进行求解以获得较高的运行效率的问题。像这样根据问题的实际情况不断寻找可利用的知识,从而构造一条代价较少的推理路线,使问题得到圆满解决的过程称为搜索。2. 搜索分类搜索分为盲目搜索和启发式搜索。盲目搜索按预定的控制策略进行搜索,在搜索过程中获得的中间信息不用来改进控制策略。这种搜索具有盲目性,效率不高,不便于复杂问题的求解。启发式搜索在搜索中加入了与问题有关的启发性信息,用以指导搜索朝着最有希望的方向前进,加速问题的求解过程并找到最优解。,5.2 求解问题的表示方法用搜索策略求解问题,首先要解决的问题也是:用什么样的形式把问题表示出来.一般来说,有两种方法:状态空间表示法
3、;与/或树表示法;1. 状态空间表示法 状态空间表示法是用来表示问题及其搜索过程的一种方法,它是人工智能中最基本的形式化方法。 状态空间表示法是用“状态”和“算符”来表示问题的一种方法。其中,“状态”用以描述问题求解过程中不同时刻的状况;“算符”表示对状态的操作,算符的每一次使用就使问题由一种状态变换为另一种状态;解 当到达目标状态时,由初始状态到目标状态所用算符的序列就是问题的一个解。,. 状态状态是描述问题求解过程中任一时刻状况的数据结构,一般用一组变量的有序组合表示:SK(SK0, SK1, )当给每一个分量以确定的值时,就得到了一个具体的状态。 . 算符引起状态中某些分量发生变化,从而
4、使问题由一个状态变为另一个状态的操作称为算符。在产生式系统中,每一条产生式规则就是一个算符。 . 状态空间由问题的全部状态及一切可用算符所构成的集合称为问题的状态空间,般用个三元组表示:(S,F,G)其中, S是问题的所有初始状态构成的集合; F是算符的集合;G是目标状态的集合。状态空间的图示形式称为状态空间图。其中,节点表示状态;有向边(弧)表示算符。,例1:钱币翻转问题,如图所示。设有三个钱币,起初是状态为(反正反),允许每次翻转一个钱币(只反一个,也必反一个),连反三次,问是否可达 到目标状态?(正正正) 或(反反反)?,设用 Sk=(s1,s2,s3) 表示问题的状态,s=0 表示钱币
5、正面,s=1表示钱币反面。 则钱币可能出现的状态有八种:S0=(0,0,0), S1=(0,0,1), S2=(0,1,0), S3=(0,1,1) S4=(1,0,0), S5=(1,0,1), S6=(1,1,0), S7=(1,1,1) 问题的初始状态集合:S=S5目标状态集合:G=S0 , S7算符:f1 把s1翻一面;f2 把s2翻一面;f3 把s3翻一面;,上述问题的状态空间“三元组”为: (S5, f1,f2,f3, s0,s7)相应的状态空间图:,从图中看出:从S5不可能经三次翻转到达S0, 从S5 可经三次翻转到达S7 , 且有七种操作方式。,2. 与/或树表示法与/或树是用
6、于表示问题及其求解过程的又一种形式化方法,通常用于表示比较复杂问题的求解。对于一个复杂问题,直接求解往往比较困难。此时,可通过下述方法进行简化: (1)分解:“与”树把一个复杂问题分解为若干个较为简单的子问题,然后对每个子问题分别进行求解,最后把各子问题的解复合起来就得到了原问题的解。这是“与”的问题。,P1, P2, P3 为子节点,子问题对应子节点。 P为“与”节点,只有当三个子问题都有解时,P才可解。 如图所示,称为“与”树。,(2) 等价变换:“或”树 利用等价变换,把它变换为若干个较容易求解的新问题。若新问题中有一个可求解,则就得到了原问题的解。这是“或”的问题。如图所示,称为“或”
7、树。,与/或树: 将上述两种方法也可结合起来使用,此时的图称为“与/或树”,其中既有“与”节点,也有“或”节点。在此统称为子节点。,(3) 几个基本概念:.本原问题不能再分解或变换,而且直接可解的子问题称为本原问题。.端节点与终止节点在与/或树中,没有子节点的节点称为端节点;本原问题所对应的节点称为终止节点。显然终止节点一定是端节点,但端节点不一定是终止节点。,. 可解节点在与/或树中,满足下列条件之一者,称为可解节点: 它是一个终止节点。 它是一个“或”节点,且其子节点中至少有一个是可解节点。 它是一个“与”节点,且其子节点全部是可解节点。. 不可解节点关于可解节点的三个条件全部不满足的节点
8、称为不可解节点。. 解树由可解节点所构成,并且由这些可解节点可推出初始节点(它对应于原始问题)为可解节点的子树称为解树。在解树中一定包含初始节点。例如:t标出的节点是终止节点,根据可解节点的定义,原始问题P是可解的。,例:三阶汉诺塔问题。设有A,B,C三个金片以及三根钢针,三个金片按自上而下从小到大的顺序穿在1号钢针上,要求把它们全部移到3号钢针上,而且每次只能移动一个金片,任何时刻都不能把大的金片压在小的金片上面,如图所示。,首先进行问题分析:(1) 为了把三个金片全部移到3号针上,必须先把金片C移到3号针上。 (2) 为了移金片C,必须先把金片A及B移到2号针上。(3) 当把金片c移到3号
9、针上后,就可把A,B从2号移到3号针上,这样就可完成问题的求解。由此分析,得到了原问题的三个子问题:(1)把金片A及B移到2号针的双金片问题。(2)把金片C移到3号针的单金片问题。(3)把金片A及B移到3号针的双金片问题。其中,子问题(1)与子问题(3)又分别可分解为三个子问题。,AB C,ABC,为了用与/或树把问题的分解过程表示出来,先要定义问题的形式化表示方法。设仍用状态表示问题在任一时刻的状况;用三元组 (i,j,k) 表示状态:i代表金片C所在的钢针号;j代表金片B所在的钢针号;k代表金片A所在的钢针号。用“”表示状态的变换;这样原始问题就可表示为: (1, 1, 1) (3,3,3
10、)用与/或树把分解过程表示出来。,若把这些本原问题的解按从左至右的顺序排列,就得到了原始问题的解:(1,1,1)(1,l,3), (1,1,3)(1,2,3), (1,2,3)(1,2,2), (1,2,2)(3,2,2), (3,2,2)(3,2,1),(3,2,1)(3,3,1), (3,3,1)(3,3,3) 它指出了移动金片的次序。,此图共有七个终止节点,对应于七个本原问题,它们是通过“分解”得到的。,5.3 状态空间搜索策略1. 概述(1) 显式图与隐式图为了求解问题,需要把知识存储在计算机的知识库中,有下列两种存储方式:显式存储:把与问题有关的全部状态空间图,即相应的全部知识(事实
11、性知识、过程性知识,控制性知识)都直接存入知识库,称为“显式存储”或“显式图”。隐式存储:只存储与问题有关的部分知识,在求解过程中,又初始状态出发,运用相应的知识,逐步生成所需的部分状态空间图,通过搜索推理,找到所求目标。这样只需在知识库中存储局部状态空间图,称为“隐式图”。通常,为了节约计算机的存储容量,提高搜索推理效率,采用隐式存储方法,进行隐士图搜索推理。,(2) 搜索方法.运用事实性知识,给出问题的部分状态描述,包括:初始状态S0,目标状态Sg,和某些中间状态Sh;.运用过程性知识,给出由状态空间图“父节点”生成“子节点”的操作“算符”;.运用控制性知识(在此为搜索策略),选取适当的节
12、点,控制继续搜索的方向。(3) 搜索过程.给出初始状态(初始节点);.选择选择适用的算符对其进行操作,生成一组子状态(或称后继状态、后继节点、子节点);.检查目标状态是否在其中出现。若出现,则搜索成功,找到了问题的解;若不出现,则按某种搜索策略从已生成的状态中再选一个状态作为当前状态。重复上述过程,直到目标状态出现或者不再有可供操作的状态及算符时为止。,(4) 搜索过程中要用到的两个数据结构OPEN表:用于存放刚生成的节点。对于不同的搜索策略,节点在OPEN表中的排列顺序是不同的。CLOSED表:用于存放将要扩展或者已扩展的节点,所谓对节点进行“扩展”是指:用合适的算符对该节点进行操作,生成一
13、组子节点。,OPEN表,CLOSED表,(5) 状态空间法搜索策略 广度优先搜索 深度优先搜索 有界深度优先搜索 代价树的广度优先搜索 代价树的深度优先搜索(以上属于盲目搜索策略) 局部择优搜索 全局择优搜索(以上搜索属于启发式搜索),2. 广度优先搜索法(Breadth-First Search)(1) 基本思想从初始节点开始,按照某种生成规则(算符)逐步生成下一级各子节点,顺序(先生成的子节点优先检查,优先扩展)地检查是否出现目标节点,在该级全部节点中沿广度进行“横向”扫描,即:沿“广度”遍历所有节点,故称“广度优先搜索法”。(2) 广度优先搜索法搜索过程 .把初始节点S0放人OPEN表,
14、若S0为目标节点,则得到问题的解,退出;.如果OPEN表为空,则问题无解,退出;.把OPEN表的第一个节点(记为节点n)取出放入CLOSED表;.考察节点n,若节点n不可扩展,则转第步;.扩展节点n,将其子节点放入0PEN表的尾部,并为每一个子节点都配置指向父节点的指针;.如果n的任一个后继节点是目标节点,则找到问题的解,成功退出,否则转向第步。,OPEN表,CLOSED表,(a),(b),(c),(d),S0,S0,1,1,2,1,2,0,0,0,3,4,2,0,3,3,5,6,7,8,9,4,1,1,1,1,2,2,3,3,4,4,5,S0,1,0,2,0,3,1,4,1,Sg(9),例:
15、 重排九宫问题。在3X3的方格棋盘上放置分别标有数字1,2,3,4,5,6,7,8的八张牌,初始状态为50,目标状态为S,如下图所示。可使用的算符有:空格左移,空格上移,空格右移,空格下移即,它们只允许把位于空格左,上,右,下边的牌移入空格。要求寻找从初始状态到目标状态的路径。应用广度优先搜索,可得到如图所示的搜索树。,由图可以看出,解的路径是: S03 8 16 26 (Sg)小结:缺点: 广度优先搜索的盲目性较大,当目标节点距离初始节点较远时将会产生许 多无用节点,搜索效率低,这是它的缺点。 优点: 只要问题有解,用广度优先搜索总可以得到解,而且得到的是路径最短的解,这是它的优点。,3.
16、深度优先搜索(1) 基本思想从初始节点S0开始,按生成规则生成下一级各子节点,若目标节点未出现,则按“最晚生成的子节点优先扩展”的原则,生成再下一级的子节点,如此下去,沿着最晚生成的子节点分支,逐级向“纵向”深入发展,故称为“深度优先搜索法”。(2) 深度优先搜索法搜索过程该过程与广度优先搜索的唯一区别是:广度优先搜索是将节点n的子节点放入到OPEN表的尾部,而深度优先搜索是把节点n的子节点放入到OPEN表的首部。仅此一点不同,就使得搜索的路线完全不一样。,OPEN表,CLOSED表,(a),(b),(c),S0,S0,1,2,3,4,5,(d),0,2,0,2,2,2,0,3,2,4,2,4
17、,2,5,4,6,4,6,4,7,6,8,6,1,Sg(8),(e),例:对上节所示的重排九宫问题进行深度优先按索,可得如下图所示的搜索树。这只是搜索树的一部分,尚未到达目标节点,仍可继续往下搜索。,小结: 在深度优先搜索中,搜索一旦 进入某个分支,就将沿着该分支一直向下搜索。如果目标节点恰好在此分支上,则可较快地得到解。但是,如果目标节点不在此分支上,而该分支又是一个无穷分支,则就不可能得到解。所以深度优先搜索是不完备的,即使问题有解,它也不一定能求得解。另外,用深度优先搜索求得的解,不一定是路径最短的解,其道理是显然的。,4. 有界深度优先搜索(1) 基本思想为了解决深度优先搜索不完备的问
18、题,避免搜索过程陷入无穷分支的死循环,对深度优先搜索引入搜索深度的界限(设为dm),当搜索深度达到了深度界限,而尚未出现目标节点时,就换一个分支进行搜索。(2) 有界深度优先搜索的搜索过程,例:设深度界度dm4,用有界深度优先搜索方法求解重排九官问题。搜索树如图所示。解的路径是: S0 20 25 26 28(Sg),(3) 有界深度优先搜索法的改进上述方法存在两个问题: 深度界限的选择很重要dm 若太小,则达不到解的深度,得不到解;若太大,则搜索时将产生许多无用的子节 点,既浪费了计算机的存储空间与时间,又降低了搜索效率。 由于解的路径长度事先难以预料,所以要恰当地给出dm的值是比较困难的。
19、 即使能求出解,它也不一定是最优解。解决方法:.dm随搜索深度不断加大先任意给定一个较小的数作为dm,然后进行上述的有界深度优先搜索,当搜索达到了 指定的深度界限dm仍未发现目标节点,并且CLOSED表中仍有待扩展节点时就将这些节点送回OPEN表,同时增大深度界限dm,继续向下搜索。如此不断地增大dm,只要问题有解,就一定可以找到它。.增加一个R表此时找到的解不一定是最优解。为找到最优解,可增设一个表(R),每找到一个目标节点Sg后,就把它放入到R的前面,并令dm等于该目标节点所对应的路径长度,然后继续搜索。由于后求得的解的路径长度不会超过先求得的解的路径长度,所以最后求得的解一定是最优解。,
20、求最优解的有界深度优先搜索过程如图所示。其中Sg 是目标节点Sg*是距离S0最近的 目标节点。,5.代价树的广度优先搜索(1)基本思想代价:从一个节点,经过一条支路,转移到另一个节点,所需支付的代价(时间、 费用等)。代价树:边上标有代价的树称为代价树。在代价树中,若用g(x)表示从初始节点S0到节点x的代价,用c(x1, x2)表示从父节点x1到子节点x2的代价,则有:g(x2)=g(x1)十c(x1, x2)代价树广皮优先搜索的基本思想是:每次从OPEN表中选择节点往CLOSED表传送时,总是选择其代价为最小的节点。也就是说,OPEN表中的节点在任一时刻都是按其代价从小至大排序的,代价小的
21、节点排在前面,代价大的节点排在后面,而不管节点在代价树中处于什么位置。,(2) 代价树的广度优先搜索过程,例:右图是五城市间的交通路线图,A城市是出发地,E城市是目的地,两城市间的交通费用(代价)如图中数字所示。求从A到E的最小费用交通路线。,先将交通图转换为代价树,转换的方法是: 从起始节点A开始,把与它直接相邻的节点作为它的子节点。对其它节点也做相同 的处理。 若一个节点已作为某节点的直系先辈节点时,就不能再作为这个节点的子节点。例如,与节点C相邻的节点有A与D,但因A已作为C的父节点在代价树中出现了,所以它不能再作为c的子节点。 图中的节点除起始节点A外,其它节点都可能要在代价树中出现多
22、次,为区分它的多次出现,分别用下标l,2,标出,其实它们都是因中的同一节点。例如El,E2,E3,E4都是图中的节点E。,第一步扩展 A,得第 1 级子节点 C1(3),B1(4),按 C1,B1 排序, C1代价最小, 优先扩展 第二步扩展 C1 得第 2 级子节点 D1(5), 按 B1,D1 排序, B1代价最小, 优先扩展 第三步扩展 B1 得第 2 级子节点 D2(8), E1(9)按 D1,D2 ,E1排序, D1代价最小, 优先扩展 第四步扩展 D1 得第 3 级子节点 E2(8), B2(9)E2 即为目标节点对此代价树进行代价树的广度优先搜索,可得到最优解为: A C1 D1
23、 E2 代价为8。由此可知从A城市到E城市舶最小费用路线为:A C D E,6.代价树的深度优先搜索 (1) 基本思想 在代价树的广度优先搜索中,每次都是从OPEN表的全体节点中选择一个代价最小的节点送入CLOSED表进行考察; 代价树的深度优先搜索是从刚扩展出的子节点中选一个代价最小的节点送入CLOSED表进行考察。例如上例:第一步扩展 A,得第 1 级子节点 C1(3),B1(4),按 C1,B1 排序, C1代价最小, 优先扩展第二步扩展 C1 得第 2 级子节点 D1(5), 按 D1 排序, D1代价最小, 优先扩展第三步扩展 D1 得第 3 级子节点 E2(8), B2(9)E2
24、即为目标节点 由于代价树的深度优先搜索有可能进入无穷分支路径,因此它是不完备的。,(2) 代价树深度优先搜索的过程,7.启发式搜索启发式搜索要用到问题自身的某些特性情息,以指导搜索朝着最有希望的方向前进。由于这种搜索针对性较强,因而原则上只需要搜索问题的部分状态空间,效率较高。(1)启发性信息与估价函数启发信息 在搜索过程中,关键的一步是如何确定下个要考察的节点,确定的方法不同就形成了不同的搜索策略。 如果在确定节点时能充分利用与问题求解有关的特性情息,估计出节点的重要性,就能在搜索时选择重要性较高的节点,以利于求得最优解。像这样可用于指导搜索过程,且与具体问题求解有关的控制性信息称为启发性信
25、息。估价函数用于估价节点重要性的函数称为估价函数。其一般形式为:f(x)g(x) + h(x)其中: g(x)为从初始节点S0到节点x已经实际付出的代价;h(x)是从节点x到目标节点Sg的最优路径的估计代价。,h(x):称为启发函数,它体现了问题的启发性信息,其形式要根据问题的特性确定,例如: 它可以是节点x到目标节点的距离, 也可以是节点x处于最优路径上的概率等等。f(x):估价函数,它表示从初始节点经过节点x到达目标节点的最优路径的代价估计值,它的作用是估价OPEN表中各节点的重要程度,决定它们在OPEN表中的次序。g(x):指出了搜索的横向趋势,它有利于搜索的完备性,但影响搜索的效率。如
26、果我们只关心到达目标节点的路径,并且希望有较高的搜索效率,则g(x)可以忽略,但此时会影响搜索的完备件。因此,在确定f(x)时,要权衡各种利弊得失,使g(x)与h(x)各占适当的比重。,例:设有如下结构的移动将牌游戏:,其中:B代表黑色将牌;W代表白色将牌;E代表该位置为空。该游戏的玩法是:(1) 当一个将脾移入相邻的空位置时,费用为一个单位。(2) 一个将牌至多可跳过两个将牌进人空位置,其费用等于跳过的将牌数加1。要求把所有的B都移至所有W的右边,请设计估价函数中的h(x)。根据要求可知,W左边的B越少越接近目标,因此可用W左边B的个数作为h(x), 即:h(x)3 (每个W左边B个数的总和
27、)这里乘以系数3是为了扩大 h(x) 在 f(x) 中的比重。对于,h(x)=3 (2+2+3)=21,(2) 局部择优搜索局部择优搜索是一种启发式搜索方法,是对深度优先搜索方法的一种改进。 基本思想:当一个节点被扩展以后,按f(x)对每一个子节点计算估价值,并选择最小者作为下一个要考察的节点,由于它每次都只是在子节点的范围内选择下一下要考察的节点,范围比较狭窄,所以称为局部择优搜索。 搜索过程: .把初始节点S0放入OPEN表,计算f(S0);.如果OPEN表为空,则问题无解,退出;.把OPEN表的第一个节点(记为节点n)取出放入CLOSED表;.考察节点n是否为目标节点。若是,则求得了问题
28、的解,退出;.若节点”不可扩展,则转第步。.扩展节点n,用估价函数f(x)计算每个子节点的估价值,并按估价值从小到大的顺序依次放到OPEN表的首部,为每个子节点配置指向父节点的指针。然后转第步。, 深度优先搜索、代价树的深度优先搜索以及局部择优搜索比较共同处:都是以子节点为考察对象,逐级向“纵向”深入发展;不同处:它们选择节点的标推不一样:深度优先搜索以子节点的深度作为选择标准,后生成的子节点先被考察;代价树深度优先搜索以各子节点到父节点的代价作为选择标准,代价小者优先被选择;局部择优搜索以估价函数的值作为选择标准,哪一个子节点的f值最小就优先被选择。 三种方法的关系 在局部择优搜索中,若令f
29、(x)=g(x),则局部择优搜索就成为代价树的深度优先搜索;若令f(x)=d(x),这里d(x)表示节点x的深度,则局部择优搜索就成为深度优先搜索。所以深度优先搜索和代价树的深度优先搜索可看作局部择优搜索的两个特例。,(3) 全局择优搜索 基本思想局部择优搜索,只是从刚生成的子点节中选择一个节点进行考察,选择的范围比较狭窄;全局择优搜索,每次从OPEN表的全体节点中选择一个估价值最小的节点进行考察。只此一点与局部择优搜索不同。 搜索过程: .把初始节点S0放入OPEN表,计算f(S0);.如果OPEN表为空,则问题无解,退出;.把OPEN表的第一个节点(记为节点n)取出放入CLOSED表;.考
30、察节点n是否为目标节点。若是,则求得了问题的解,退出;.若节点”不可扩展,则转第步。.扩展节点n,用估价函数f(x)计算每个子节点的估价值,为每个子节点配置指向父节点的指针,把这些节点都送入OPEN表,然后对OPEN表中的全部节点按估价值从小到大的排序,然后转第步。 广度优先搜索、代价树的广度优先搜索以及全局择优搜索比较若令f(x)=g(x),则全局择优搜索就成为代价树的广度优先搜索;若令f(x)=d(x),这里d(x)表示节点x的深度,则全局择优搜索就成为广度优先搜索。所以广度优先搜索和代价树的广度优先搜索可看作全局择优搜索的两个特例。,例: 用全局择优搜索求解重排九宫问题。设估价函数为f(
31、x)d(x) + h(x)其中,d(x)表示节点x的深度,h(x)表示节点x的格局与目标节点格局不相同的牌数。,解为: S0S1 S2 S3 Sg,8. 状态空间的一般搜索过程讲了前面的一些搜索策略后,我们总结一下搜索的一般过程。(1) 把初始节点S0放入OPEN表,并建立目前只包含S0的图,记为G;(2) 检查OPDN表是否为空,若为空则问题无解,退出;(3) 把OPEN表的第一个节点取出放入CLOSED表,并记该节点为节点n;(4) 考察节点n是否为目标节点。若是,则求得了问题的解,退出;(5) 扩展节点n,生成一组子节点。把其中不是节点n先辈的那些子节点记作集合M,并把这些子节点作为节点
32、n的子节点加入G中。(6) 针对M中子节点的不同情况,分别进行如下处理: 对于那些未曾在G中出现过的M成员设置一个指向父节点(即节点n)的指针,并把它们放入OPEN表; 对于那些先前已在G中出现过的M成员,确定是否需要修改它指向父节点的指针; 对于那些先前已在G中出现并且已经扩展了的M成员,确定是否需要修改其后继节点指向父节点的指针;(7) 按某种搜索策略对OPEN表中的节点进行排序;(8) 转第(2)步。,在启发式搜索中,估价函数的定义是十分重要的,如定义不当,则上述搜索算法不一定 能找到问题的解,即使找到解,也不一定是最优的。为此,需要对估价函数进行某些限制。 下面我们看A*算法。9. A
33、*算法(1) A*算法 如果使一般搜索过程满足如下限制,则它就成为A*算法:(1) 把OPEN表中的节点按估价函数f(x)g(x)+h(x) 的值从小至大进行排序。(一般搜索过程的第(7)步)(2) g(x)是对g*(x)的估计,g(x)o。(3) h(x)是h*(x)的下界,即对所有的x均有:h(x) h*(x)其中 g*(x)是从初始节点S0到节点x的最小代价;h*(z)是从节点x到目标节点的最小代价,若有多个目标节点,则为其中最小的一个。,(2) A*算法中的两个函数g(x) 比较容易得到,它实际上就是从初始节点S0到节点x的路径代价,恒有g(x) g*(x),h(x) 的确定依赖于具体
34、问题领域的启发性信息,其中 h(x) h*(x) 的限制是十分重要的,它可保证A“算法能找到最优解。(3) A*算法的特性 A*算法的可纳性对于可解状态空间图即(从初始节点到目标节点有路径存在)来说,如果一个搜索算法能在有限步内终止,并且能找到最优解,则称该搜索算法是可纳的。A*算法是可纳的 A*算法的最优性A*算法的搜索效率在很大程度上取决于h(x),在满足h(x) (h*(x)的前提下,h(x) 的值越大越好。h(x)的值越大,表明它携带的启发性信息越多,搜索时扩展的节点数越少,搜索效率越高。 A*算法的单调性限制,5.4 与/或树的搜索策略当知识表达方式采用“与/或树”时,知识推理相应也
35、要使用“与/或树”搜索方法。 “与/或树”搜索策略包括: 与/或树的广度优先搜索 与/或树的深度优先搜索(以上属于盲目搜索策略) 与/或树的有序搜索 博奕树的启发式搜索 (以上搜索属于启发式搜索)1. 与/或树的一般搜索方法(1) 与或树搜索的有关概念和定义,可解节点: 终止节点是可解节点; 当子节点中至少有一个是可解节点时,“或”节点为可解节点; 当子节点中全部是可解节点时,“与”节点为可解节点; 不可解节点: 没有子节点的非终止节点是不可解节点; 当子节点中全部节点是不可解节点时,“或”节点为不可解节点; 当子节点中至少有一个是不可解节点时,“与”节点为不可解节点;可解标示过程:一个节点是
36、否为可解节点是由它的子节点确定的,由可解子节点来确定父节点、祖父节点等为可解节点的过程称为可解标示过程。不可解标示过程:由不可解子节点来确定其父节点、祖父节点等为不可解节点的过程称为不可解标示过程。在与/或树的搜索过程中将反复使用这两个过程,直到初始节点(即原始问题)被标示为可解或不可解节点为止。,(2) 与/或树的一般搜索道程:.把原始问题作为初始节点S0,并把它作为当前节点;.应用分解或等价变换算符对当前节点进行扩展;.为每个被扩展的子节点设置指向父节点的指针;.选择合适的子节点作为当前节点,反复执行第步和第步,在此期间要多次调用可解标示过程和不可解标示过程,直到初始节点被标示为可解节点或
37、不可解节点为止。(可解与不可解标不过程都是自下而上进行的,即由于节点的可解性确定父节点的可解性.)搜索树由上述搜索过程所形成的节点和指针结构称为搜索树。解树如果在搜索的某一时刻,通过可解标示过程可确定初始节点是可解的,则由此初始节点及其下属的可解节点就构成了解树。 (3)与/或树搜索的两个特性由于与/或树搜索的目标是寻找解树,因此: 如果已确定某个节点为可解节点,则其不可解的后裔节点就不再有用,可从搜索树中删去; 如果已确定某个节点是不可解节点,则其全部后裔节点都不再有用,可从搜索树中删去, 但当前这个不可解节点还不能删去,因为在判断其先辈节点的可解性时还要用到它。这两种特性,可用来提高搜索效
38、率。,2.与/或树的广度优先搜索与/或树的广度优先搜索与状态空间的广度优先搜索类似,也是按照“无产生的节点先扩 展”的原则进行搜索,只是在搜索过程中要多次调用可解标示过程和不可解标示过程。搜索过程如图其中:应用可解标示过程为:如果考察的子节点为可解节点,则逆向对其父节点、祖父节点 等先辈节点中的可解节点进行标示。应用不可解标示过程为:如果考察的子节点为不可解节点,则逆向对其父节点、祖父节点等先辈节点中的不可解节点进行标示。,例:设有如图所示的与/或树,节点按图中所标注的顺序号进行扩展。其中标有t1,t2,t3,t4的节点均为终止节点,A和E为不可解的端节点。搜索过程为:(1) 首先扩展1号节点
39、得到2号节点和3号节点。(OPEN表中有2,3号节点)由于这两个子节点均不是终止节点,所以接着扩展2号节点。(此时OPEN表中只剩下3号节点)(2) 扩展2号节点得到4号节点和t1节点。(此时OPEN表中的节点有:3号节点、4号节点及t1节点)标示t1节点:由于t1是终止节点,则标示它为可解节点,并应用可解标示过程,对其先 辈节点中的可解节点进行标示。但t1的父节点是一个“与”节点,因此仅由t1可解尚不能确定2号节点是否为可解节点。所以继续搜索,下一步扩展的是3号节点。,(3) 扩展3号节点得到5号节点与B节点。两者均不是终止节点,所以接着扩展4号节点。 (4) 扩展4号节点得到节点A和t2节
40、点。标示t2:由于t2是终止节点,所以标示它为可解节点,标示4号、2号节点:由于t2是可解节点,逆推,应用可解标示过程标示出4号节点、2号节点均为可解节点,但l导节点目前还不能确定它是否为可解节点。(此时5号节点是OPEN表中的第一个待考察的节点)所以下一步扩展5号节点。 (5) 扩展5号节点得到t3和t4节点。标示t3和t4节点:由于t3和t4节点均为终止节点,所以被标示为可解节点,标示5号、3号、1号节点:通过应用可解标示过程可得到5号、3号及1号节点均为可解节点。 (6) 搜索成功,得到了由1,2,3,4,5号节点及tl,t2,t3,t4节点构成的解树。如图中粗线所示。,3.与/或树的深
41、度优先搜索与/或树的深度优先搜索过程和与/或树的广度优先搜索过程基本相同,注意:(1) 只是要把 “扩展节点n,将其子节点放入OPEN表的尾部”该为:“扩展节点n,将其子节点放入OPEN表的首部”这样就可使后产生的节点先被扩展。(2) 也可以像状态空间的有界深度优先搜索那样为与/或树的深度优先搜索规定一个深度界限,使搜索在规定的范围内进行。搜索过程如图。,4.与/或树的有序搜索前面讨论的广度优先搜索及深度优先搜索都是盲目搜索,其共同点是:(1)搜索从初始节点开始,先自上而下地进行搜索,寻找终止节点及端节点,然后再自下而上地进行标示,一旦初始节点被标示为可解节点或不可解节点,搜索就不再继续进行。
42、(2)搜索都是按确定路线进行的,当要选择一个节点进行扩展时,只是根据节点在与/或树中 所处的位置,而没有考虑要付出的代价,因而求得的解树不一定是代价最小的解树,即不定是最优解树。与/或树的有序搜索与/或树的有序搜索是用来求取代价最小的解树的一种搜索方法。为了求得代价最小的解树,就要在每次确定欲扩展的节点时,计算一下扩展这个节点可能要付出的代价,并选择代价最小的节点进行扩展。它是一种启发式搜索策赂。,(1) 解树的代价解树的代价可通过计算解树中节点的代价得到。计算节点代价:设用c(x,y)表示节点x到其子节点y的代价,则计算节点x的代价的方法如下:(1)如果x是终止节点,则定义节点x的代价 h(
43、x)=0;(2)如果x是“或”节点,yl,y2,yn是它的子节点,则节点x的代价由下式计算得到h(x) = minc(x,yi)+ h(yi)1i n(3)如果x是“与”节点,则节点x的代价有两种计算方法:和代价法与最大代价法。若按和代价法计算,则有 若按最大代价法计算,则有h(x) = maxc(x,yi)+ h(yi)1i n(4)如果x不可扩展,且又不是终止节点,则定义 h(x)=,计算解树的代价由上述计算节点的代价可以看出,如果问题是可解的,则由于节点的代价就可推算出父节点代价,这样逐层上推,最终就可求出初始节点S0的代价。 S0的代价就是解树的代价。 2启发函数 从计算解树的过程看,
44、是自下而上的,即从子节点的代价得到父节点的代价。 而搜索是自上而下进行的,即先有父节点,后有子节点。怎样在欲扩展的节点时,得到扩展这个节点的需付出的代价? 解决的办法是:根据问题本身提供的启发性信息定义一个启发函数,由此启发函数估算出子节点yi的代价h(yi),然后再按和代价或最大代价算出节点x的代价值h(x)。有了h(x),节点x的父节点,祖父节点以及直到初始节点S0的各先辈节点的代价h都可自下而上的逐层推算出来。,(3) 希望树有序搜索的目的是求出最优解树,即代价最小的解树。这就要求搜索过程中任一时刻求出的部分解树其代价都应是最小的。为此,每次选择欲扩展的节点时都应挑选有希望成为最优解树一
45、部分的节点进行扩展。由于这些节点及其先辈节点(包括初始节点S0)所构成的与/或树有可能成为最优解树的一部分,因此称它为“希望树”。在搜索过程中,随着新节点的不断生成,节点的代价值是在不断变化的,因此希望树也是在不断变化的。希望树T的定义: .初始节点S0在希望树T中;.如果节点x在希望树T中,则一定有:如果x是具有子节点y1,y2,yn的“或”节点,则具有minc(x,yi)+ h(yi)1i n值的那个子节点yi也应在T中。 如果x是“与”节点,则它的全部子节点都应在T中。(4) 与/或树有序搜索过程与/或树的有序搜索是一个不断选择、修正希望树的过程。如果问题有解,则经过有序搜索将找到最优解树。,