1、5.1 搜索的概念及种类,搜索是人工智能的一个基本问题,是推理不可分割的一部分。一个问题的求解过程其实就是搜索过程,所以搜索实际上就是求解问题的一种方法。与搜索技术相对应的知识表示法一般有两种:状态空间表示法、另一种是与/或树表示法。,第五章 状态空间搜索策略,一搜索的概念,现实世界中的大多数问题都是非结构化问题,一般不存在现成的求解方法来求解这样的问题,而只能利用已有的知识一步一步的搜索着前进。在这一过程中,所要解决的问题是如何寻找可利用的知识,即如,西南科技大学 信息工程学院,2,何确定推理路线,才能使在付出尽量少的代价的前提下把问题圆满解决。如果存在多条路线可实现对问题求解,那就又存在这
2、样的问题 ,即如何从这多条求解路线中,选出求解代价最小的一条,以提高求解程序的运行效率。,概念:根据问题的实际情况,按照一定的策略或规则,从知识库中寻找可利用的知识,从而构造出一条使问题获得解决的推理路线的过程,称为搜索。 两层含义: 1)要找到从初始事实到问题最终答案的一条推理路线; 2)找到的这条路线是时间和空间复杂度最小的求解路线。,西南科技大学 信息工程学院,3,二搜索的种类:,1盲目搜索(无信息搜索)在搜索过程中,只按预先规定的搜索控制策略进行搜索,而没有任何中间信息来改变这些控制策略,即问题本身的特性对搜索控制策略没有如何影响,使得搜索带有盲目性,效率不高。,缺点:如果碰到比较复杂
3、的问题时,求解的效率可能相当低。所以盲目搜索只用于解决比较简单得问题。,2启发式搜索(有信息搜索)在搜索过程中,根据问题本身的特性或搜索过程中产生的一些信息来不断地改变或调整搜索的方向,使搜索朝着最有希望的方向前进,加速问题的求解,并找到最优解。,西南科技大学 信息工程学院,4,启发式搜索由于考虑到问题本身的特性并利用这些特性,从而使搜索求解的效率更高,更易于求解复杂的问题。但并不是对所有的问题都能方便地抽取出问题的相关特性和信息,因此尽管启发式搜索好于盲目搜索,但盲目搜索也会在很多问题的求解中得到应用。,在状态空间表示法中,可以采用图示的方式表示,即状态空间图。状态空间图是一个有向图。当把一
4、个待求解的问题表示为状态空间以后,就可以通过对状态空间的搜索,实现对问题的求解。,5.2盲目搜索策略,如果从状态空间图的角度来看,则对问题的求解就相当于在有向图上寻找一条从某一节点(初始状态节点)到另一节点(目标状态节点)的路径。,西南科技大学 信息工程学院,5,但是,若要把表示问题的整个状态空间都存入计算机,往往需要占据巨大的存储空间,尤其对比较复杂的问题,这几乎是不可能实现的,并且一般也无这种必要。因为对于一个具体的问题,其解往往只与状态空间的一部分相关,只要计算机生成并存储与问题有关的解状态空间部分,即可将问题解决。但如何来生成并存储与问题有关的部分状态空间呢?这就是人工智能中所研究的搜
5、索技术问题。,一状态空间图的搜索策略,搜索法求解问题的基本思想:首先将问题的初始状态(即状态空间图中的初始节点)当作当前状态,选择一适当的算符作用于当前状态,生成一组后继状态(或称后继节点),然后检查这组后继状态中有没有目标状态。如果有,则说明,西南科技大学 信息工程学院,6,搜索成功,从初始状态到目标状态的一系列算符即是问题的解;若没有,则按照某种控制策略从已生成的状态中再选一个状态作为当前状态,重复上述过程,直到目标状态出现或不再有可供操作的状态及算符时为止。,几个概念:,扩展:用合适的算符对某个节点进行操作生成一组后继节点的过程。扩展过程实际上就是求后继节点的过程。,已扩展节点:对状态空
6、间图中的某个节点,如果求出了它的后继节点,则称此节点为已扩展节点。,未扩展节点:对状态空间图中那些尚未求出其后继节点的节点称为未扩展节点。,西南科技大学 信息工程学院,7,OPEN和CLOSED表:为了记录搜索过程,建立两个名字分别为OPEN和CLOSED的表,用于分别存放未扩展节点和已扩展节点。它们的数据结构如下:,西南科技大学 信息工程学院,8,状态空间图的搜索算法如下:,Step1:建立一个只含有初始节点S0的搜索图G,把S0放入OPEN表中。,Step2:建立CLOSED表,且置为空表。,Step3:判断OPEN表是否为空表。若为空,则问题无解,结束。,Step5:考察节点n是否为目标
7、节点。若是,则问题有解,并成功退出。问题的解即可从图G中沿着指针从n到S0的这条路径得到。,Step4:选择OPEN表中的第一个节点,把它从OPEN表移出,并放入CLOSED表中,将此节点记为节点n。,Step6:扩展节点n生成一组不是n的祖先的后继节点,,西南科技大学 信息工程学院,9,并将它们记作集合M,将M中的这些节点作为n的后继节点加入图G中。,Step7:对那些未曾在G中出现过的(即未曾在OPEN表上或CLOSED表上出现过的)M中的节点,设置一个指向父节点(即节点n)的指针,并把这些节点加入OPEN表中;对于已在G中出现过的M中的那些节点,确定是否需要修改指向父节点(即节点n)的指
8、针;对于那些先前已在G中出现并已在CLOSED表中的那些M中的节点,确定是否需要修改通向它们后继节点的指针。,Step8:按某一任意方式或按某种策略重排OPEN表中节点的顺序。,Step9:转Step3。搜索过程的流程图如图1所示。,西南科技大学 信息工程学院,10,西南科技大学 信息工程学院,11,这一搜索算法具有通用性。以后讨论的各种搜索策略都可以看作是它的一个特例。各种策略的主要区别就在于Step8对OPEN表中的节点排序的算法不同。在Step8中,对OPEN表中的节点排序时,主要希望从未扩展节点中选出一个最有希望的节点作为Step4扩展来用。,若这时的排序是任意的或者是盲目的,则搜索即
9、为盲目搜索;如果是按某种启发信息或准则进行排序,则其就是启发式搜索。,搜索图:在搜索过程中,生成了一个图G,它是问题状态空间图的一部分,称为搜索图。,搜索树:由搜索图G中的所有节点及Step7设置的指向父节点的反向指针,所构成的集合T称为搜索树。,西南科技大学 信息工程学院,12,搜索图G中,除初始节点S0外的每个节点,都有一个指向G中一个父辈节点的指针,该父辈节点就定为搜索树中对应节点的唯一父辈节点。,搜索解:在搜索过程中,当某个被选作扩展的节点,是目标节点时(在Step5),则就找到了问题的一个解。所找到的解就是从初始节点S0到目标节点路径上的算符所构成的序列。,而路径则是通过目标节点按S
10、tep7设置的指针指向初始节点回溯而得到的。如果在搜索中一直找不到目标节点,而且OPEN表中又不再具有可供扩展的节点,则搜索失败,在Step3退出结束。,这样的搜索过程实际上就是问题的求解过程。在利用状态空间搜索法求解问题时,并不是将整个问题的状态空间图全部输入计算机,而是只存入与问题解有关的,西南科技大学 信息工程学院,13,部分状态空间图。这种部分状态空间图是在搜索过程中生成的,并且每前进一部,都要检查是否到达目标节点,这样就可以尽量地少生成与问题无关地状态,从而提高了解题效率,节省了存储空间。,二宽度优先搜索策略宽度优先搜索又称为广度优先搜索,是一种盲目搜索。其基本思想如下:,从初始节点
11、开始,逐层对节点进行依次扩展,并考察它是否为目标节点,在对下层节点进行扩展(或搜索)之前,必须完成对当前层的所有节点的扩展(或搜索)。,在搜索过程中,未扩展节点表OPEN中的节点排序准则是:,西南科技大学 信息工程学院,14,先进入的节点排在前面,后进入的节点排在后面。其搜索过程如图2所示。,西南科技大学 信息工程学院,15,Step6:对节点n进行扩展,将它的所有后继节点放入OPEN表的末端,并为这些后继节点设置一个指向父节点n的指针,然后转Step2。,算法2:状态空间图的宽度优先搜索算法,Step1:把初始节点S0放入OPEN表中。,Step2:如果OPEN表是空表,则没有解,失败退出。
12、否则继续。,Step3:把OPEN表中的第一个节点(记为节点n)移出,并放入CLOSED表中。,Step4:判断节点n是否为目标节点。若是,则求解结束,并用回溯法找出解的路径,退出;否则继续执行Step5。,Step5:若节点n不可扩展,转Step2;否则继续执行Step6。,西南科技大学 信息工程学院,16,宽度优先算法的流程图如图3所示。,西南科技大学 信息工程学院,17,例1 八数码难题:设在3*3的一个方格棋盘上,摆放着8个数码1、2、3、4、5、6、7、8,有一个方格是空格,其初始状态如图4(a)所示,要求对空格执行下列的操作(或算符):空格左移,空格上移,空格右移,空格下移 使八个
13、数据最终按图4(b)的格式摆放,如图4(b)称为目标状态Sg。要求寻找从初始状态到目标状态的路径。,西南科技大学 信息工程学院,18,解:应用宽度优先搜索,可以得到如图5的搜索树。搜索树上的所有节点都标记它们所对应的状态描述,每个节点旁边的数字表示节点扩展的顺序(按逆时针方向移动空格)。,从图5中可以看出,其解的路径为:S0381627。,缺点:宽度优先搜索的盲目性较大,当目标节点距离初始节点较远时,将会产生大量的无用节点。搜索效率低。,优点:深度优先搜索策略是完备的,即只要问题有解,用宽度优先搜索总可以找到它的解,而且是搜索树中,从初始节点到目标节点的路径最短的解。,西南科技大学 信息工程学
14、院,19,西南科技大学 信息工程学院,20,首先扩展最新产生的(即最深的)节点,即从初始节点S0开始,在其后继节点中任选择一个节点,对其进行考察。若它不是目标节点,则对该节点进行扩展,并再从它的后继节点中选择一个节点进行考察。依此类推,一直搜索下去,当到达某个既非目标节点又无法继续扩展的节点时,才选择其兄弟节点进行考察。,搜索过程如图6所示,其搜索算法见算法3。,三深度优先搜索,深度优先搜索也是一种盲目搜索策略,其基本思想为:,西南科技大学 信息工程学院,21,算法3:状态空间图的深度优先搜索算法,Step1:把初始节点S0放入OPEN表中。,Step2:如果OPEN表为空,则问题无解,失败退
15、出。,Step3:从OPEN表中将其第一个节点(节点n)移出,并放入已扩展节点表CLOSED表中。,Step4:考察节点n是否为目标节点。若是,则找到问题的解,用回溯法求解的路径,退出;否则继续执行Step5。,Step5:若节点n不可扩展,转Step2。,Step6:扩展节点n,将其后继节点放到OPEN表的前端,并为其设置指向节点n的指针,然后转Step2。,深度优先搜索算法的流程图如图7所示。,西南科技大学 信息工程学院,22,西南科技大学 信息工程学院,23,例2:对图4所示的八数码难题,利用深度优先方法进行搜索来求解问题。 解:搜索过程如图8所示。这里只给出了搜索树的一部分,仍可继续往
16、下搜索,直到找到目标节点。,深度优先搜索与宽度优先搜索的区别:在对节点n进行扩展时,其后继节点在OPEN表中的存放位置不同。宽度优先搜索是将后继节点放入OPEN表的末端,而深度优先搜索则是将后继节点放入OPEN表的前端。,深度优先搜索的缺点:若搜索进入某一分支,则沿着这一分支一直搜索下去,对于有限的状态空间图,从理论上讲,解总是能够找到的。但是,由于某些分支可能扩展得很深,而解又不在这些分支上,这就无疑会降低搜索的效率。,西南科技大学 信息工程学院,24,西南科技大学 信息工程学院,25,为了防止在无解的分支上进行无效的搜索,对搜索的分支深度进行一定的限定,这就是有界深度优先搜索。,四有界深度
17、优先搜索,对于许多问题,其状态空间搜索树的深度可能为无限深,或者可能至少要比某个可接受的解序列的已知深度上限还要深。为了避免搜索过程沿着无穷的路径搜索下去,往往对一个节点扩展的最大深度进行限制。任何节点如果达到了深度界限,就把它作为没有后继节点进行处理,即停止对当前分支的继续搜索,而开始对另一个分支进行搜索。为此,先定义搜索树中节点深度的概念。,深度:(1) 搜索树中初始节点(即根节点)的深度为0; (2) 任何其他节点的深度等于其父辈节点的深度加上1。,西南科技大学 信息工程学院,26,算法4:有界深度优先搜索算法,Step1:把初始节点S0放入OPEN表中。,Step2:如果OPEN表为空
18、,则问题无解,退出。,Step3:把OPEN表中的第一个节点n从OPEN表移到CLOSED表中。,Step4:考察节点n是否为目标节点。若是,则找到问题的解,用回溯法求解的路径,退出;否则继续执行Step5。,Step5:如果节点n的深度等于最大深度,则转Step2。,Step6:如果节点n不可扩展,即没有后继节点,则转Step2;否则继续Step7。,Step7:扩展节点n,将其后继节点放入OPEN表的前端,并为其设置指向节点n的指针,然后转Step2。,有界深度优先搜索算法的流程图如图9所示。,西南科技大学 信息工程学院,27,西南科技大学 信息工程学院,28,例3:设八数码难题的初始状态
19、及目标状态分别如图10(a)和图10(b)所示,用有界深度优先搜索策略求解问题的搜索树如图11所示。深度界限dm=5。,西南科技大学 信息工程学院,29,西南科技大学 信息工程学院,30,完备性:在有界深度优先搜索算法中,深度界限的选择很重要。选择过大,可能会影响搜索的效率;选择过小,有可能求不到解。对于某些问题,可能它的解就位于某一分支较深的位置,而界限选取的没有那么大,就会导致找不到问题的解。所以,有界深度优先搜索策略是不完备的。,五代价树的宽度优先搜索,在前面的搜索算法讨论中,没有考虑搜索的代价问题,即假设状态空间图中各节点之间的有向边的代价都是相同的,且都为一个单位量,也就是说从状态空
20、间图中的任一个状态到另一个状态转换所付出的代价都是一样的。由此,在求解一个问题时,所付出的总代价即是从状态空间图的初始节点达到目标节点的解,西南科技大学 信息工程学院,31,路径的长度。然而,在实际问题求解中,往往是将一个状态变换成另一个状态时所付出的操作代价(或费用)是不一样的,也就是状态空间图中各有向边的代价是不一样的。那么应该采取何种搜索策略,以保证付出的代价(或费用)是最小呢?,像前面所说的一样,不可能将状态空间图的全部状态节点输入到计算机,而是仅仅存储逐步扩展过程种所形成的搜索树。,代价搜索树:有向边上标有代价的搜索树称为代价搜索树,简称代价树。,在代价树种,从节点i到其后继节点j的
21、连线之代价记为C(i,j),而把从初始节点S0到任意节点x的路径代价记为g(x),则g(j)=g(i)+C(i,j)。,西南科技大学 信息工程学院,32,代价树宽度优先搜索的基本思想是:,每次从OPEN表中选择一个代价最小的节点,移入CLOSED表。因此,每当对一节点扩展之后,就要计算它的所有后继节点的代价,并将它们与OPEN表中已有的待扩展的节点按代价的大小从小到大依次排序。从而OPEN表选择被扩展节点时即选择排在最前面的节点(代价最小)。,其搜索算法如下:,算法5:代价树的宽度优先搜索算法,Step1:把初始节点S0放入OPEN表中,令g(S0)=0。,Step2:如果OPEN表为空,则问
22、题无解,退出。,Step3:把OPEN表中代价最小的节点,即排在前端的第一个节点(即为节点n),移入到CLOSED表中。,西南科技大学 信息工程学院,33,Step4:如果节点n是目标节点,则求得问题的解,退出;否则继续。,Step5:判断节点n是否可扩展,若不可扩展则转Step2;否则转Step6。,Step6:对节点n进行扩展,将它们所有的后继节点放入OPEN表中,并对每个后继节点j计算其代价g(j)=g(i)+C(i,j),为每个后继节点设置指向节点n的指针。然后,根据节点的代价大小对OPEN表中的所有节点进行从小到大的排序。,Step7:转向Step2。,代价树宽度优先搜索的框图如图1
23、2所示。,西南科技大学 信息工程学院,34,西南科技大学 信息工程学院,35,例4:推销员旅行问题假设A、B、C、D和E是五个城市,推销员从城市A出发,到达城市E,走怎样的路线费用最省?五个城市间的交通图及每个城市间的旅行费用如图13所示,图中的数字即是旅行费用。,解:由于涉及旅行费用,所以利用代价树宽度优先搜索方法求解。为此,首先将旅行交通图转换为代价树如图14所示。,西南科技大学 信息工程学院,36,转换的方法如下:从初始节点 A开始,把与它直接相邻的节点作为它的后继节点,对其他节点也作同样的扩展。但若一个节点已作为某节点的前驱节点的话,则它就不能再作为该节点的后继节点。例如,与节点B相邻
24、的节点有A和D,但由于在代价树中,A已作为B的前驱节点出现,则它就不能再作为B的后继节点。另外,图中的节点除了初始节点A外,其他的节点都有可能在代价树中多次出现,为了区分它的多次出现,分别用下标1,2,标出,但它们却是图中的同一个节点。例如,C1和C2都代表图中的节点C。,利用代价树的宽度优先搜索策略对代价树进行搜索,可得最优解为:,西南科技大学 信息工程学院,37,西南科技大学 信息工程学院,38,其代价是17。因而,从城市A向城市E旅行,费用最省得路线为:ABDE,六代价树的深度优先搜索,代价树的深度优先搜索和宽度优先搜索的区别:,宽度优先搜索法每次从OPEN表中的全体节点中选择代价最小的
25、节点移入CLOSED表,并对这一节点进行扩展或判断(是否为目标节点),而深度优先搜索法则是从刚刚扩展的节点之后继节点中选择一个代价最小的节点移入CLOSED表,并进行扩展或判断。,代价树的深度优先搜索算法如下:,西南科技大学 信息工程学院,39,算法6:代价树的深度优先搜索算法,Step1:把初始节点S0放入OPEN表中。,Step2:如果OPEN表为空,则问题无解,退出。,Step3:将OPEN表中的第一个节点(代价最小的节点记为节点n)移入到CLOSED表中。,Step4:如果节点n是目标节点,则求得问题的解,退出;否则转Step5。,Step5:判断节点n是否可扩展。若不可扩展则转Ste
26、p2,否则转Step6。,Step6:对节点n进行扩展,并将其后继节点按有向边代价从小到大排序后放入OPEN表的前端,并为各后继节点设置指向n节点的指针。,Step7:转向Step2。,西南科技大学 信息工程学院,40,注意:在Step6中,对节点n的后继节点进行排序是按照有向边代价的大小进行的。,代价树深度优先搜索的框图如图15所示。,其原因在于:在深度优先搜索中,假设节点n的后继节点有i、j、k,则节点i、j、k的代价分别为:g(i)=g(n)+C(n,i),g(j)=g(n)+C(n,j),g(k)=g(n)+C(n,k)所以,g(i)、g(j)、g(k)的大小顺序仅由C(n,i)、C(
27、n,j)、C(n,k)来决定,而C(n,i)、C(n,j)、C(n,k)即为节点n的后继节点i、j、k的有向边代价。,西南科技大学 信息工程学院,41,西南科技大学 信息工程学院,42,例如,对图14所示的旅行交通图的代价树来说,若用深度优先搜索策略,则首先对A进行扩展,得到B1及C1两个后继节点。由于B1的代价小于C1,所以将B1移入CLOSED表,但B1不是目标节点,所以B1继续对进行扩展,得到后继节点D1。D1的代价是6+5=11,而OPEN表中有C1和D1两个节点,C1的代价是10,若按照代价树的宽度优先搜索法,则应将C1送入CLOSED表进行考察。而按代价树的深度优先搜索法,则应选D
28、1送入CLOSED表,D1的后继节点又是C2和E2,而E2的有向边代价小于C2的有向边代价,所以选择E2作为的后继节点。这时,E2已是目标节点,故搜索接受。所以,按代价树的深度优先搜索算法,得到旅行费用最小的路径为:,ABDE,西南科技大学 信息工程学院,43,代价为:6+5+6=17。,这虽然与用代价树的深度优先搜索法的结果相同,但只是一个巧合。一般情况下,这两种方法所得的结果不一定相同。,注意:代价树的深度优先搜索法不是完备的,因为代价树的深度优先搜索的有可能进入无穷分支路径而搜索不到问题的解。,53启发式搜索策略,在各种盲目搜索策略中,搜索路线是事先决定好的,没有利用被求解问题的任何特性
29、信息,在决定要被扩展的节点时,没有考虑该节点到底是否可能出现在解的路径上,也没有考虑它是否有利于问题的求解以及所求的解是否为最优解,因而这样的搜索策略具有较大的盲目性。,西南科技大学 信息工程学院,44,在盲目搜索中,所需扩展的节点数目很大,产生的无用节点肯定也就很多,效率就会较低。如果能够找到一种搜索方法,能够充分利用待求解问题自身的某些特性信息,以指导搜索朝着最有利于问题求解的方向发展,即在选择节点进行扩展时,选择那些最有希望的节点加以扩展,那么搜索的效率就会大大地提高。这种利用问题本身特性信息,以提高搜索效率地搜索策略,就是启发式搜索或叫有信息搜索。,一启发信息与估价函数,在搜索过程中,
30、关键地一步是确定如何选择下一个要被考察的节点,不同的选择方法即是不同的搜索策略。如果在确定要被考察的节点时,能够利用被求,西南科技大学 信息工程学院,45,解问题的有关特性信息,估计出各节点的重要性,那么在选择待扩展的节点时,就可以选择重要性较高的节点进行扩展,以便提高求解的效率。,启发信息:用于指导搜索过程且与具体问题求解有关的控制性信息称为启发信息。,启发信息的分类:,(1)用于决定要扩展的下一个节点,以免像在宽度优先或深度优先中那样盲目地扩展。,(2)在扩展一个节点地过程中,用于决定要生成哪一个或哪几个后继节点,以免盲目的同时生成所有可能的节点。,(3)用于确定某些应该从搜索树中抛弃或修
31、剪的节点。,西南科技大学 信息工程学院,46,“最有希望”节点:,本节所描述的启发式信息实际属于第一种启发信息,即决定哪个节点是下一个要扩展的节点,这个节点称为“最有希望”的节点。,度量节点“希望”程度的方法由多种,不同方法所考虑的与该问题相关的属性有所不同,通常可以构造一个估价函数来度量。,估价函数:用来表示节点“希望”程度的函数。 估价函数的作用:估计待搜索节点的重要程度,给它们排定次序。,如果设估价函数是f(x),则f(x)可以是任意一种函数。如f(x)可以不是节点x处于最佳路径上的概率,也可以表示节点x到目标节点之间的距离。一般说来,估价一个节点价值必须考虑:,西南科技大学 信息工程学
32、院,47,两方面的因素:已经付出的代价和将要付出的代价。,在本节,将估计函数f(x)定义为从初始节点经过节点x到达目标节点的最小代价路径的代价估计值。它的一般形式为: f(x)= g(x)+ h(x),其中,g(x)为初始节点S0到节点x已实际付出的代价;h(x)是从节点x到目标节点Sg的最优路径的估计代价,搜索的启发信息主要由来体现,故把称作启发函数。因为实际代价可以根据已生成的搜索树实际计算出来,而启发函数却依赖于某种经验估计,它来源于人们对问题的解的某种认识,即对问题节的一些特性的了解,这些特性可以帮助人们很快地找到问题的解。,西南科技大学 信息工程学院,48,估价函数f(x)综合考虑了
33、从初始节点S0到目标节点Sg的代价,是一个估算值。它的作用是帮助确定OPEN表中各待扩展节点的“希望”程度,决定它们在OPEN表中的排列次序。,分析:,1g(x)与h(x)对搜索的影响,一般地,在f(x)中,g(x)的比重越大,搜索方式就越倾向于广度优先搜索方式;h(x)的比重越大,越倾向于深度优先搜索方式。,g(x)的作用一般不可忽略,因为它代表了从初始节点到达目标节点的总代价估值中实际已付出的那部分。g(x)项体现了搜索的宽度优先趋势,这有利于搜索算法的完备性,但影响算法的搜索效率。,西南科技大学 信息工程学院,49,h(x)项体现了搜索的深度优先趋势,当g(x) h(x)时,可以忽略g(
34、x)。这时,f(x)= h(x),这会有利于搜索效率的提高,但影响搜索算法的完备性,即有可能找不到问题的解。,2.影响估价函数的因素,估价函数是针对具体问题构造的,是与问题特性密切相关的,不同的问题,其估价函数可能不同。在构造估价函数时,依赖于问题特性的启发函数h(x)的构造尤为重要。,在构造启发函数时,还要考虑到两个方面因素的影响:一个是搜索工作量,另一个是搜索代价。有些启发信息虽然能够大大减少搜索的工作量,但却不能保证求得最小代价的路径。而我们感兴趣的是,使问题求解的路径代价与为求此路径所花费的搜索代价的综合指标最小。,西南科技大学 信息工程学院,50,二最佳优先搜索,最佳优先搜索又称为有
35、序搜索或择优搜索,它总是选择最有希望的节点作为下一个要扩展的节点,而这种最有希望的节点是按估价函数f(x)的值来挑选的,一般估价函数的值越小,它的希望程度越大。最佳优先搜索又分为局部最佳优先搜索和全局最佳优先搜索。,1局部最佳优先搜索,局部最佳优先搜索的思想类似于深度优先搜索,但由于使用了与问题特性相关的估价函数来确定下一个待扩展的节点,所以它是一种启发式搜索方法。,基本思想:当对某一个节点扩展之后,对它的每一个后继节点计算估价函数f(x)的值,并在这些后继节点的范围,西南科技大学 信息工程学院,51,内,选择一个f(x)的值最小的节点,作为下一个要考察的节点。由于它每次只在后继节点的范围内选
36、择下一个要考察的节点,范围比较小,所以称为局部最佳优先搜索或局部择优搜索。,搜索算法如下:,算法7: 局部最佳优先搜索算法,Step1:把初始节点S0放入OPEN表,并计算估价函数f(S0)。,Step2:如果OPEN表为空,则问题无解,退出;否则转Step3。,Step3:从OPEN表中选取第一个节点(记作节点n,其估价函数值最小)移入CLOSED表中。,西南科技大学 信息工程学院,52,Step5:如果节点n可扩展,转Step6;否则转Step2。,Step6:对节点n进行扩展,并对它的所以后继节点计算估价函数f(x)的值,并按估价函数f(x)从小到大的顺序依次放入OPEN表的前端。,St
37、ep7;为每个各后继节点设置指向n节点的指针。,Step8:转向Step2,该搜索过程的框图如图16所示。,Step4:考察节点n是否为目标节点。若是,则求得问题的解,退出;否则转Step5。,西南科技大学 信息工程学院,53,西南科技大学 信息工程学院,54,局部最佳优先搜索与深度优先搜索及代价树的深度优先搜索的区别:在选择下一个节点时所用的标准不一样。,(1)局部最佳优先搜索是以估价函数值作为标准;,(2)深度优先搜索则是以后继节点的深度作为选择标准;,(3)代价树的深度优先搜索是以各后继节点到其前驱节点之间的代价作为选择标准。,如果把层深函数d(x)就当作估价函数f(x),或把代价函数g
38、(x)当作估价函数f(x),那么就可以把深度优先搜索和代价树深度优先搜索看作局部最佳优先搜索的两个特例。,西南科技大学 信息工程学院,55,2全局最佳优先搜索,全局最佳优先搜索也是一个有信息的启发式搜索,它的思想类似于宽度优先搜索,所不同的是,在确定下一个扩展节点时,以与问题特性密切相关的估价函数f(x)作为标准,不过这种方法是在OPEN表中的全部节点中选择一个估价函数值f(x)最小的节点,作为下一个被考察的节点,正因为选择的范围是OPEN表中的全部节点,所以它称为全局最佳优先搜索或全局择优搜索。,算法8:全局最佳优先搜索算法,Step1:把初始节点S0放入OPEN表,计算f(S0)。,Ste
39、p2:如果OPEN表为空,则问题无解,退出。,西南科技大学 信息工程学院,56,Step3:把OPEN表中第一个节点作为节点n移入CLOSED表。,Step4:考察节点n是否为目标节点。若是,则求得问题的解,退出;否则转Step5。,Step5:如果节点n可扩展,转Step6;否则转Step2。,Step6:对节点n进行扩展,并计算其所有后继节点的估价函数f(x)的值,并为每个后继节点设置指向n的指针,Step7:把这些后继节点都送入OPEN表,然后对OPEN表中的全部节点按照估价值从小到大的顺序排序。,Step8:转向Step2。,其相应的算法框图如图17所示。,西南科技大学 信息工程学院,
40、57,西南科技大学 信息工程学院,58,全局最佳优先搜索与宽度优先搜索及代价树的宽度优先搜索的关系:,全局最佳优先搜索实际是对宽度优先搜索和代价树的宽度优先搜索的扩展,而宽度优先搜索和代价树的宽度优先搜索则是它的两个特例(这时可分别令f(x)等于d(x)或g(x),d(x)表示节点x的深度,而g(x)则表示初始节点S0到节点x的代价)。,例5用全局最佳优先搜索方法求解八数码难题。如果八数码难题的初始状态图及目标状态图分别如图18(a)和图18(b)所示,请利用全局最佳优先搜索算法求取由S0转换为Sg的路径。,解:首先定义一个估价函数:,f(x)=d(x)+h(x),西南科技大学 信息工程学院,
41、59,其中,d(x)表示节点x在搜索树中的深度;h(x)表示与节点x对应的棋盘中,与目标节点所对应的棋盘中棋子位置不同的个数。,例如,对于节点S0,其在搜索树中位于0层,所以d(x)=0,而它中的与目标棋盘中棋子位置不同的个数是4,即h(x)=4。所以节点S0的估价函数值f=0+4=4。,搜索树如图19所示。在图中,节点旁边圆圈内的数字表示该节点的f(x)值 ,不带圈的数字表示节点扩展的顺序。所以问题的解路径是:,S0S1S2Sg,西南科技大学 信息工程学院,60,西南科技大学 信息工程学院,61,三A*算法,在启发式搜索中,估价函数的定义是非常重要的。如果定义得不好,则上述得搜索算法不一定找
42、到问题得解,即便找到解,也不一定是最优解。所以,有必要讨论任何对估价函数进行限制或定义。,A*启发式搜索算法就使用了一种特殊定义的估价函数。,1A*算法的定义,A*算法也是一种启发式搜索方法,它对算法1中的扩展节点选择方法做了一些限制,选用了一个比较特殊的估价函数。这时的估价函数f(x)=g(x)+h(x)是对下列函数f*(x)=g*(x)+h*(x),西南科技大学 信息工程学院,62,的一种估计或近似,即f(x)是对f*(x)的一种估计;g(x)是对g*(x)的估计;h(x)是对h*(x)的估计。,f*(x)函数的定义:,它表示从初始节点S0到节点x的一条最佳路径的实际代价加上从节点x到目标
43、节点Sg的一条最佳路径的代价之和。而g*(x)就是初始节点S0到节点x之间的最小代价路径的实际代价,h*(x)则是从节点x到目标节点Sg的最小代价路径上的代价。,(1) g(x)与g*(x),既然g(x)是对g*(x)的估计,所以g(x)是比较容易求得的,它就是从初始节点S0到节点x的路径代价,可以通过由节点x到节点S0回溯时,把所遇到的各段弧线的代价加起来而得到,显然恒有g(x) g*(x)。,西南科技大学 信息工程学院,63,(2) h(x)与h*(x),h(x)是对h*(x)的估计,它依赖于有关问题领域的启发信息,它就是以前提到的启发函数,其具体形式要根据问题的特性来进行构造。在A*算法
44、中要求启发函数h(x)是h*(x)的下界,即对所有的节点x均有:,h(x) h*(x)这一要求十分重要。它能保证A*算法找到最优解。,(3) A*算法的定义,定义:如果在一般状态空间图的搜索算法(即算法1)中的第Step8,依据估价函数: f(x)=g(x)+h(x),对OPEN表中的节点进行排序,并且要求启发函数h(x)是h*(x)的一个下界,即h(x) h*(x),则这种状态,西南科技大学 信息工程学院,64,空间图的搜索算法就称为A*算法。如果对启发函数h(x),不限制条件h(x) h*(x),则这种状态空间图的搜索算法称为A算法。,由定义可以看出,A*算法就是对算法1中扩展节点选择方法
45、作了限制,它可以使问题的求解更快速、更有效。其具体搜索算法在此不讨论。,2A*算法的性质,A*算法具有下列一些性质:,(1)可采纳性,可采纳性是指对于可求解的状态空间图(即从状态空间图的初始节点到目标节点有路径存在)来说,如果一个搜索算法能在有限步内终止,并且能找到最优解,则称该算法是可采纳的。,西南科技大学 信息工程学院,65,可以证明,A*算法是可采纳的,即它能在有限步内终止并找到最优解。,(2)单调性,单调性是指在A*算法中,如果对其估价函数中的h(x)部分即启发函数,加以适当的单调性限制条件,就可以使它对所扩展的一系列节点的估价函数值单调递增(或非递减),从而减少对OPEN表或CLOS
46、ED表的检查和调整,提高搜索效率。,对启发函数的单调性限制如下:,1) 设Sg是目标节点,它的启发函数值为0,即h(Sg)=0,2) 对所有的节点xi,如果xj是节点xi的任意子节点,有:h(xi)-h(xj) cost(xi, xj),西南科技大学 信息工程学院,66,其中,cost(xi, xj)是节点xi到节点xj的有向边代价。由此可以得到:,h(xi) cost(xi, xj) +h(xj),这就是说,节点xi到目标节点最优费用的估价不会超过从xi到其子节点xj的有向边代价加上从xj到目标节点最优费用的代价。可以证明,当A*算法选择节点进行扩展时,g(xn)= g*(xn)。而当A*算
47、法的启发函数h(x)满足上述限制条件时,由A*算法所扩展的节点序列其估价函数f的值是非递减的。,(3)信息性,信息性是指,比较两个A*算法的启发函数h1和h2,如果对搜索空间中的任一节点x都有h1(x) h2(x),就说策略h2比h1具有更多的信息性。,西南科技大学 信息工程学院,67,A*算法的搜索效率主要取决于启发函数h(x),在满足h(x) h*(x)的前提下,h(x)的值越大越好。,h(x)的值越大,表明它携带的与求解问题相关的启发信息越多,搜索过程就会在启发信息指导下朝着目标节点前进,所走的弯路越少,搜索效率就会提高。,设f1(x)和f2(x)是求解同一个问题时定义的两个不要的估价函数:,f1(x)= g1(x)+ h1(x) f2(x) = g2(x)+ h2(x),西南科技大学 信息工程学院,68,而与这两个估价函数相对应的A*1算法分别记为A*1, A*2。如果对所有的非目标节点x,启发函数h1(x) h2(x),那就可以证明:,算法A*2在搜索求解过程中所扩展的节点数一定不会少于A*1算法所扩展的节点数,也就是说,A*2的搜索效率不会高于A*1的搜索效率。这就是由于算法A*2的估价函数所携带的启发信息少于算法A*1的估价函数所携带的启发信息。,