1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Department of Computer Science&Technology,Nanjing University,Artificial Intelligence,Spring,第四章 状态空间搜索,用搜索法对问题求解,问题实例,状态空间搜索的结构,问题的状态空间表示法,状态空间搜索策略,与,/,或树的盲目搜索,基于递归的搜索,4.1,用搜索法对问题求解,一个问题可以形式化地定义为四个组成部分:,初始状态,可能行动的描述,目标测试,路径耗散,问题的解就是从初始状态到目标状态的路径,寻找解的过程就是搜
2、索,要成功地设计和实现搜索算法,:,问题求解器是否一定能找到一个解,?,问题求解器是否能终止运行,或是否会陷入一个死循环,?,当问题求解器找到解时,找到的是否是最好的解,?,搜索过程的时间与空间复杂性如何,?,怎样才能最有效地降低搜索的复杂性,?,怎样设计才能最有效地利用描述语言,?,4.1,用搜索法对问题求解,状态空间的理论是我们用来回答这些疑问最主要的工具。,4.1,用搜索法对问题求解,图由结点集和连接结点对的弧或边的集合组成。,结点:问题求解中的不同状态(棋局,/,推理结果),弧:状态之间的转换(一步走棋,/,一条规则运用),二阶梵塔问题,设有三根钢针,它们的编号分别是,1,号、,2,号
3、和,3,号。在初始情况下,,1,号钢针上穿有,A,、,B,两个金片,,A,比,B,小,,A,位于,B,的上面。要求把这两个金片全部移到另一根钢针上,而且规定每次只能移动一个金片,任何时刻都不能使大的位于小的上面,。,解:,全部可能的问题状态共有以下,9,种:,S,0,=(1,1)S,1,=(1,2)S,2,=(1,3)S,3,=(2,1)S,4,=(2,2),S,5,=(2,3)S,6,=(3,1)S,7,=(3,2)S,8,=(3,3),4.2,问题实例,问题的初始状态集合,:,目标状态集合,:,A,B,A,B,A,B,1 2 3,1 2 3,1 2 3,二阶梵塔,问题的初始状态和目标状态,
4、初始状态,S,0,和目标状态,S,4,、,S,8,如图所示,S,0,=(1,1),S,4,=(2,2),S,8,=(3,3),S=S0=(1,1),G=S4,S5=(2,2),(3,3),操作分别用,A(i,j),和,B(i,j),表示,:,A(i,j):,把金片,A,从第,i,号钢针移到,j,号钢针上;,B(i,j):,把金片,B,从第,i,号钢针移到第,j,号钢针上。,共有,12,种操作,它们分别是:,A(1,2)A(1,3)A(2,1)A(2,3)A(3,1)A(3,2),B(1,2)B(1,3)B(2,1)B(2,3)B(3,1)B(3,2),一个问题可以形式化地定义为四个组成部分:,
5、初始状态,可能行动的描述,目标测试,路径耗散,A,B,A,B,A,B,1 2 3,1 2 3,1 2 3,二阶梵塔,问题的初始状态和目标状态,S,0,=(1,1),S,4,=(2,2),S,8,=(3,3),(3,3)(1,3)(1,2)(2,2),从初始节点,(1,1),到目标节点,(2,2),及,(3,3),的任何一条路径都是问题的一个解。,最短的路径长度是,?,A(1,2),B(1,3),A(2,3),(1,1),(3,1),(3,2),(2,1),(2,3),A(1,3),B(1,2),A(3,2),A,B,A,B,A,B,1 2 3,1 2 3,1 2 3,S,0,=(1,1),S,
6、4,=(2,2),S,8,=(3,3),a,b,c,2,猴子摘香蕉问题,解:,4,元组 (,w,x,y,z,),其中:,w,表示猴子的水平位置;,x,表示箱子的水平位置;,y,表示猴子是否在箱子上,当猴子在箱子上时,,y,取,1,,否则,y,取,0,;,z,表示猴子是否拿到香蕉,当拿到香蕉时,z,取,1,,否则,z,取,0,。,初始状态,:,a,b,c,S0:(a,b,0,0),S1:(b,b,0,0),S2:(c,c,0,0),S3:(c,c,1,0),S4:(c,c,1,1),目标状态,允许的操作为,:,Goto(u,),:猴子走到位置,u,,即,(w,x,0,0)(u,x,0,0),Pu
7、shbox(v,):,猴子推着箱子到水平位置,v,,即,(x,x,0,0)(v,v,0,0),Climbbox,:,猴子爬上箱子,即,(x,x,0,0)(x,x,1,0),Grasp,;猴子拿到香蕉,即,(c,c,1,0)(c,c,1,1),猴子摘香蕉问题的解,(a,b,0,0),(b,b,0,0),(c,c,0,0),(b,b,1,0),(c,c,1,0),(a,a,0,0),(c,c,1,1),初始状态,Goto(b,),Goto(b,),Pushbox(c,),Grasp,目标状态,猴子摘香蕉问题的状态空间图,解序列为:,Goto(b,),Pushbox(c,),Climbbox,Gra
8、sp,Pushbox(c,),Climbbox,Climbbox,Pushbox(c,),Pushbox(a,),Pushbox(a,),a,b,c,3.,八数码问题,7,2,4,5,6,8,3,1,8,7,6,5,4,3,2,1,状态:状态描述了,8,个棋子中的每一个以及空位在棋盘的,9,个方格上的分布。,初始状态:任何状态都可以被指定为初始状态。注意要到达任何一个给定的目标,可能的初始状态中恰好只有一半可以作为开始。,后继函数:用来产生通过四个行动(把空位向,Left,,,Right,,,Up,或,Down,移动)能够达到的合法状态。,目标测试:用来检测状态是否能匹配所要求的目标格局。,路
9、径耗散:每一步的耗散值为,1,,因此整个路径的耗散值为路径中的步数。,八数码问题,2 8 3,1 4,7 6 5,2 8 3,1 4,7 6 5,2 3,1 8 4,7 6 5,2 8 3,1 4,7 6 5,2 8 3,1 6 4,7 5,8 3,2 1 4,7 6 5,2 8 3,7 1 4,6 5,2 3,1 8 4,7 6 5,2 3,1 8 4,7 6 5,2 8,1 4 3,7 6 5,2 8 3,1 4 5,7 6,2 8 3,1 6 4,7 5,2 8 3,1 6 4,7 5,8 3,2 1 4,7 6 5,2 8 3,7 1 4,6 5,8 3,2 1 4,7 6 5,8 1
10、 3,2 4,7 6 5,2 8 3,7 4,6 1 5,2 8 3,7 1 4,6 5,1 2 3,8 4,7 6 5,1 2 3,7 8 4,6 5,1 2 3,8 4,7 6 5,2 3 4,1 8,7 6 5,2 8,1 4 3,7 6 5,2 8 3,1 4 5,7 6,2 8 3,6 4,1 7 5,2 8 3,1 6,7 5 4,S,0,1,2 3 4 5,6 7 8 9 10 11 12 13,14 15 16 17 18 19 20 21,22 23 24 25 26 27,Sg,4.,八皇后问题,*,*,*,*,*,*,*,*,4.,八皇后问题,状态:把,8,个皇后摆放在棋
11、盘上的任何安排都是一个状态。,初始状态:棋盘上没有皇后。,后继状态:把一个皇后添加到棋盘上的任何空格。,目标测试:,8,个皇后都在棋盘上,并且互相攻击不到。,图是结点及连接它们的边的集合。,如果图中每个结点都有一个或多个描述符,(,标记,),使之与其他结点区别开来,这样的图称为标记图。,有方向性的弧连接的图是有向图。,图中的弧也可以做上标记,用来给关系取名或表示权值。当一对结点间有多条弧相连时,这种方法可以使之区别。,4.3,状态空间搜索的结构,结点集,=A,B,C,D,E,弧集,=(A,B),(A,D),(B,C),(C,B),(C,D),(D,A),(D,E),(E,C),(E,D),有向
12、图,E,A,B,D,C,有根树,一个家庭关系的例子,A,C,F,E,G,H,I,J,D,B,4.3,状态空间搜索的结构,有根图具有唯一一个称为根的结点,从根结点出发到图中任何结点都存在相应路径。,用来描述结点之间关系:祖先、后裔、父母、子女、兄弟,4.3,状态空间搜索的结构,E,A,B,D,C,4.4,问题的状态空间表示法,图的结点和弧分别表示问题求解过程中解题状态和解题步骤。,初始状态对应于实际问题的已知信息,是图中的根结点。,目标就是实际问题的解。,状态空间搜索将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。,定义,状态空间搜索,状态空间是一个四元组,N,A,S,GD:,N,是
13、图中状态结点集,代表问题求解过程中的各种状态。,A,是结点间弧,(,或链,),的集合,代表问题求解过程的各个步骤。,S,是,N,的非空子集,包含问题的初始状态。,GD,是,N,的非空子集,包含问题的目标状态。,GD,中的状态可用两种方式中的任一种来描述:,搜索中遇到了目标状态的可检测的性质;,欲搜索的路径的性质。,图中从,S,中结点到,GD,中结点的路径称为求解路径。,搜索算法的任务是在问题空间里找到一条求解路径。它包含了一系列使问题得到解决的操作,(,算子,),。,4.4,问题的状态空间表示法,例:,旅行推销员问题,假设一个推销员要到,5,个城市去访问,然后回家。问题是要找到一条最短的路径,
14、使得推销员访问过每个城市后回到出发地。假定推销员在,A,城,他最后要返回原地。,4.4,问题的状态空间表示法,B,A,C,D,E,100,100,100,50,125,125,125,75,75,50,图,旅行推销员问题的一个例子,A,D,C,B,E,A:,B,A,C,D,E,100,100,100,50,125,125,125,75,75,50,4.4,问题的状态空间表示法,开销为,450,目标要求的是有最小开销的完整回路。,多种可能解题路径的方法。,目标是开销最小的路径。,遍历搜索旅行推销员问题的复杂度为,(N-1)!,4.4,问题的状态空间表示法,减少搜索的复杂性,减少搜索的复杂性,4.
15、4,问题的状态空间表示法,有限分枝法,回路的开销作为界限,以检验以后的侯选路径。每次加入一条路径,如果发现扩展它的最好结果的开销比界限值大,就不在沿着这条路径的方向继续搜索。,“最近邻居”法,“按照去最近的、未到达的城市”规则构筑路径,图,旅行推销员问题的一例,B,A,C,D,E,100,100,100,50,125,125,300,75,75,50,4.4,问题的状态空间表示法,4.5,状态空间搜索策略,4.5.1,数据驱动和目标驱动的搜索,状态空间可以从两个方向进行搜索:从实际问题的给定数据向目标搜索或者从目标到数据进行搜索,数据驱动,推理是运用问题给出的条件及规则或合法移动,产生新的条件
16、向目标靠近,;,目标驱动,推理着眼于目标,寻找产生目标的规则,通过反向连续的规则和子目标进行反向推理直至找到问题给出的条件。,采用哪种方式取决于求解问题的结构。,目标驱动搜索可用于下列情况,:,问题的说明中给出了目标或假设,或者很容易用公式来表示它们。,有大量的规则适用于问题的条件,因而可以推出许多结论和结果,较早地选好目标可剪掉空间中许多分枝,使目标驱动搜索的效率更高。,问题没有给出数据,必须在求解中获取。,4.5.1,数据驱动和目标驱动的搜索,数据驱动搜索可用于下列情况,:,问题的初始说明给出了全部或大部分数据。,存在大量可能的目标,但对实际问题的条件及给定的信息加以运用的方法很少 。,
17、难以形成一个目标或假设。,4.5.1,数据驱动和目标驱动的搜索,4.5.2,图搜索的实现,状态空间搜索的基本思想,:,先把问题的初始状态作为当前扩展节点对其进行扩展,生成一组子节点,然后检查问题的目标状态是否出现在这些子节点中。,若出现,则搜索成功,找到了问题的解;若没出现,则再按照某种搜索策略从已生成的子节点中选择一个节点作为当前扩展节点。,重复上述过程,直到目标状态出现在子节点中或者没有可供操作的节点为止。,“扩展”,是指对该节点用某个可用操作进行作用,生成该节点的一组子节点,4.5.2,图搜索的实现,应用回溯算法,J,D,C,G,F,I,H,E,B,A,7,5,4,3,2,1,10,6,
18、8,9,图一个假想状态空间的深度优先回溯搜索,goal,4.5.2,图搜索的实现,定义一个回溯搜索的算法。设,:,SL,为状态表,列出了当前路径上的状态。,NSL,为新状态表,包含了等待评估的结点,其后裔结点还未被扩展。,DE,为不可解节点集。,CS,为当前正在检测的状态,即当前状态。,4.5.2,图搜索的实现,function,backtrack,;,begin,SL:=Start;NSL:=Start,;,DE=,;,CS:=Start,;,%,初始化,while NSL%,还有未检查的状态,do begin,if CS=,目标,(,或符合目标的要求,),then return(SL),;
19、成功,返回路径中状态的表,if CS,没有子状态,(,不包括,DE,、,SL,和,NSL,中已有的状态,),then begin,while(SL,非空,)and(CS=SL,中第一个元素,),do begin,将,CS,加入,DE,;,%,标明此状态不可解,从,SL,中删除第一个元素;,%,回溯,从,NSL,中删去第一个元素;,CS:,NSL,中第一个元素;,end,;,将,CS,加入,SL,;,end,else begin,将,CS,子状态,(,不包括,DE,、,SL,、,NSL,中已有的,),加入,NSL,;,CS:,NSL,中第一个元素;,将,CS,加入,SL,;,end,end
20、return FAIL,;,%,整个空间搜索完,end,.,4.5.2,图搜索的实现,J,D,C,G,F,I,H,E,B,A,7,5,4,3,2,1,10,6,8,9,goal,CS SL NSL DE,A A A ,B BA BCDA ,E EBA EFBCDA ,H HEBA HIEFBCDA ,I IEBA IEFBCDA H,F FBA FBCDA EIH,J JFBA JFBCDA EIH,C CA CDA BFJEIH,G GCA GCDA BFJEIH,初值:,SL=A,;,NSL=A,;,DE=,;,CS=A,;,4.5.2,图搜索的实现,用未处理状态表,(NSL),使算法能
21、返回,(,回溯,),到其中任一个状态。,有一张,坏,状态表,(DE),避免算法重新搜索无解的路径。,有当前解题路径状态表,(SL),当满足目标时可以将它,作为结果,返回。,为避免陷入死循环必须是显式地对新状态进行检查,看它是否在三张表中。,Backtrack,是状态空间搜索的一个基本算法,后面所讲的图搜索算法,包括深度优先,广度优先,最好优先搜索,都有回溯中的思想。,基本思想是用表来保存搜索空间中状态轨迹的搜索算法。,度量问题求解的性能,完备性,最优性,时间复杂度,空间复杂度,当,问题有解时,这个算法是否能够保证找到一个解,这个搜索策略是否能够找到最优解,找到一个解需要花费多长时间,在,执行搜
22、索的过程中需要多少内存,4.5.3,深度和广度优先搜索,广度优先的基本思想:,从初始节点,S,0,开始逐层向下扩展,在第,n,层节点还没有全部搜索完之前,不进入第,n+1,层节点的搜索。,Open,表中的节点总是按进入的先后排序,先进入的节点排在前面,后进入的节点排在后面。,深度优先的基本思想:,从初始节点,S,0,开始,在其子节点中选择一个最新生成的节点进行考察,如果该子节点不是目标节点且可以扩展,则扩展该子节点,然后再在此子节点的子节点中选择一个最新生成的节点进行考察,依此向下搜索,直到某个子节点既不是目标节点,又不能继续扩展时,才选择其兄弟节点进行考察,。,J,D,C,G,F,I,H,E
23、B,A,7,5,4,3,2,1,10,6,8,9,goal,4.5.3,深度和广度优先搜索,在,深度优先搜索中,当查到某一个状态时,它所有的子状态以及子状态的后裔结点必须先于该状态的兄弟状态被查找。尽量往深处走,只有再也找不出其后裔时才考虑兄弟。,广度优先搜索是一层一层地搜索空间,仅当某一层的状态全部搜索完毕,它才转入下一层搜索。,4.5.3,深度和广度优先搜索,4.5.3,深度和广度优先搜索,图,用于广度及深度优先搜索,的例图,A,C,F,E,G,H,I,J,D,B,U,M,L,S,K,N,O,P,R,Q,T,4.5.3,深度和广度优先搜索,广度,优先搜索,关于实现:,为了保存状态空间搜索
24、的轨迹,用到了,:,open,表和,closed,表,open,表:列出了已经产生出来但子状态未被查找的状态。,closed,表:记录了已检查过的状态。,procedure breadth_first_search,lnitialize:open,=start;closed=;,while open do,begin,从,open,表中删除最左边的状态,X;,if X,是目标,then,返回,(success);,生成,X,所有的子状态,;,将,X,放入,closed,表中,;,从,X,的子状态中删除已经,在,open,或,closed,表中的状态;,将其余子状态按生成的次序放入,open,表
25、的右边。,end,广度优先搜索,A,C,F,E,G,H,I,J,D,B,U,M,L,S,K,N,O,P,R,Q,T,目标状态,1.open=A;closed=;,2.open=B,C,D;closed=A;,3.open=C,D,E,F;closed=B,A,4.open=D,E,F,G,H;closed=C,B,A,5.open=E,F,G,H,I,J;closed=D,C,B,A,6.open=F,G,H,I,J,K,L;closed=E,D,C,B,A,7.open=G,H,I,J,K,L,M;closed=F,E,D,C,B,A,8.open=H,I,J,K,L,M,N;closed=
26、G,F,E,D,C,B,A,如此重复直到,U,或,open=,是完备的,所需的时间和内存:,广度优先搜索,指数级复杂度,深度 节点数 时间 内存,2 1100 0.11,秒,IMB,4 111,,,100 11,秒,106MB,6 10,7,19,分钟,10GB,8 10,931,小时,1TB,10,10,11,129,天,101TB,4.5.3,深度和广度优先搜索,深度优先搜索,如果已知解题路径很长,深度优先搜索就不会在图中大量的“浅层”状态上浪费时间。,但深度优先搜索会在图的深处“迷失方向”,找不到目标的更短路径或陷入到一个不通往目标的无限长的路径中。,深度优先搜索耗费的空间量是路径长度值
27、的线性函数。,深度优先搜索不是最优的,不是完备的。,4.5.4,有界深度优先搜索,无边界的搜索树问题可以通过对深度优先搜索提供一个预先设定的深度限制来解决。,一旦搜索路径进入某一层时,深度限制便强迫该路径上的搜索失败。,解决了无穷路径问题。,又是造成不完备的原因。,深度优先搜索可以看作是有界深度优先搜索的一种特殊情况。,例:,八数码问题。在,33,的方格棋盘上,分别放置了表有数字,1,、,2,、,3,、,4,、,5,、,6,、,7,、,8,的八张牌,初始状态,S,0,,,目标状态,S,g,,,如下图所示。可以使用的操作有:,空格左移,空格上移,空格右移,空格下移,即只允许把位于空格左、上、右、
28、下方的牌移入空格。,8 3,1 4,7 6 5,1 2 3,8 4,7 6 5,S,0,S,g,广度优先搜索策略,深度优先搜索策略,2 8 3,1 4,7 6 5,2 8 3,1 4,7 6 5,2 3,1 8 4,7 6 5,2 8 3,1 4,7 6 5,2 8 3,1 6 4,7 5,8 3,2 1 4,7 6 5,2 8 3,7 1 4,6 5,2 3,1 8 4,7 6 5,2 3,1 8 4,7 6 5,2 8,1 4 3,7 6 5,2 8 3,1 4 5,7 6,2 8 3,1 6 4,7 5,2 8 3,1 6 4,7 5,8 3,2 1 4,7 6 5,2 8 3,7 1
29、4,6 5,8 3,2 1 4,7 6 5,8 1 3,2 4,7 6 5,2 8 3,7 4,6 1 5,2 8 3,7 1 4,6 5,1 2 3,8 4,7 6 5,1 2 3,7 8 4,6 5,1 2 3,8 4,7 6 5,2 3 4,1 8,7 6 5,2 8,1 4 3,7 6 5,2 8 3,1 4 5,7 6,2 8 3,6 4,1 7 5,2 8 3,1 6,7 5 4,S,0,1,2 3 4 5,6 7 8 9 10 11 12 13,14 15 16 17 18 19 20 21,22 23 24 25 26 27,Sg,广度优先搜索:,2 8 3,1 4,7 6 5
30、2 8 3,1 4,7 6 5,2 3,1 8 4,7 6 5,2 8 3,1 4,7 6 5,2 8 3,1 6 4,7 5,2 8 3,1 6 4,7 5,2 8 3,1 6 4,7 5,2 8 3,1 6,7 5 4,2 8 3,1 6,7 5 4,2 8,1 6 3,7 5 4,2 8,1 6 3,7 5 4,S,0,1,2 3 4 5 6,深度优先搜索:,基本思想,当一问题较复杂时,可通过,分解,或,变换,,将其转化为一系列较简单的子问题,然后通过对这些子问题的求解来实现对原问题的求解。,分解,如果一个问题,P,可以归约为一组子问题,P,1,P,2,P,n,,,并且只有当所有子问题
31、P,i,都有解时原问题,P,才有解,任何一个子问题,P,i,无解都会导致原问题,P,无解,则称此种归约为问题的分解。,即分解所得到的子问题的“与”与原问题,P,等价。,等价变换,如果一个问题,P,可以归约为一组子问题,P,1,P,2,P,n,,并且子问题,P,i,中只要有一个有解则原问题,P,就有解,只有当所有子问题,P,i,都无解时原问题,P,才无解,称此种归约为问题的等价变换,简称变换。,即变换所得到的子问题的“或”与原问题,P,等价。,4.6,与或树,4.6.1,问题的分解与等价变换,P,P,1,P,2,P,3,与树,(1),与树 分解,P,1,P,2,P,3,或树,P,(2),或树
32、等价变换,P,P,1,P,2,P,3,P,12,P,12,P,31,P,32,P,33,与,/,或树,(3),与,/,或树,4.6,与或树,4.6.2,与或树表示法,关于与或树表示法,P,P,1,P,2,P,3,P,12,P,12,P,31,P,32,P,33,与,/,或树,与,/,或树,终止节点一定是端节点,但端节点却不一定是终止节点,端节点与终止节点,可解节点:,在与,/,或树中,满足以下三个条件之一:,任何终止节点都是可解节点。,对“或”节点,当其子节点中至少有一个为可解节点时,则该或节点就是可解节点。,对“与”节点,只有当其子节点全部为可解节点时,该与节点才是可解节点。,P,P,1,P
33、2,P,3,P,12,P,12,P,31,P,32,P,33,与,/,或树,可用类似的方法定义:,不为终止节点的端节点是不可解节点。,对“或”节点,若其全部子节点都为不可解节点,则该或节点是不可解节点。,对“与”节点,只要其子节点中有一个为不可解节点,则该与节点是不可解节点。,不可解节点:,P,P,1,P,2,P,3,P,12,P,12,P,31,P,32,P,33,与,/,或树,P,t,t t,解树,解树:,由可解节点构成,并且由这些可解节点可以推出初始节点(它对应着原始问题)为可解节点的子树为,解树,。在解树中一定包含初始节点。,问题归约求解过程,:,生成解树,即证明原始节点是可解节点的
34、过程,这一过程涉及到,与,/,或树,的搜索,例,4.4,三阶梵塔问题。要求把,1,号钢针上的,3,个金片全部移到,3,号钢针上,,1,2,3,1,2,3,4.6.3,与,/,或树表示的例子,A,B,C,解:,用三元组,(i,j,k),表示问题在任一时刻的状态,用“”表示状态的转换。上述三元组中,i,:金片,C,所在的钢针号,j,:金片,B,所在的钢针号,k,:金片,A,所在的钢针号,利用问题归约方法,原问题可分解为以下,三个子问题,:,(,1,)把金片,A,及,B,移到,2,号钢针上的双金片移动问题。,即,(1,1,1)(1,2,2),(,2,)把金片,C,移到,3,号钢针上的单金片移动问题。
35、即,(1,2,2)(3,2,2),(,3,)把金片,A,及,B,移到,3,号钢针的双金片移动问题。,即,(3,2,2)(3,3,3),1,2,3,1,2,3,A,B,C,三阶梵塔问题的分解过程可用如下图与,/,或树来表示,(1,1,1)(3,3,3),(1,1,1)(1,2,2)(1,2,2)(3,2,2)(3,2,2)(3,3,3),(1,1,1)(1,1,3)(1,1,3)(1,2,3)(1,2,3)(1,2,2)(3,2,2)(3,2,1)(3,2,1)(3,3,1)(3,3,1)(3,3,3),在该与,/,或树中,有,7,个终止节点,它们分别对应着,7,个原本问题。,如果把这些原本问
36、题从左至右排列起来,,(1,1,1)(1,3,3)(1,3,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),即得到了原始问题的解,是一个不断寻找解树的过程。,一般搜索过程如下:,(1),把原始问题作为初始节点,S0,,,并把它作为当前节点;,(2),应用分解或等价变换操作对当前节点进行扩展;,(3),为每个子节点设置指向父节点的指针;,(4),选择合适的子节点作为当前节点,反复执行第,(2),步和第,(3),步,在此期间需要多次调用可解标记过程或不可解标记过程,直到初始节点被标记为
37、可解节点或不可解节点为止。,4.6.4,与,/,或树的一般搜索,1,2 3,A 4 t,1,5,t,2,B t,3,C,搜索树,广度优先搜索,与状态空间的主要差别,:,需要在搜索过程中需要多次调用可解标识过程或不可解标识过程。,4.6.4,与,/,或树的广度优先和深度优先搜索,1,2 3,A 4 t,1,5,搜索算法:,(1),把初始节点,S,0,放入,Open,表中;,(2),把,Open,表的第一个节点取出放入,Closed,表,并记该节点为,n,;,(3),如果节点,n,可扩展,则做下列工作:,扩展节点,n,,将其子节点放入,Open,表的尾部,并为每一个子节点设置指向父节点的指针;,考
38、察这些子节点中有否终止节点。若有,则标记这些终止节点为可解节点,并用可解标记过程对其父节点及先辈节点中的可解解节点进行标记。如果初始解节点,S,0,能够被标记为可解节点,就得到了解树,搜索成功,退出搜索过程;如果不能确定,S,0,为可解节点,则从,Open,表中删去具有可解先辈的节点。,转第,(2),步。,(4),如果节点,n,不可扩展,则作下列工作:,标记节点,n,为不可解节点;,应用不可解标记过程对节点,n,的先辈中不可解解的节点进行标记。如果初始解节点,S,0,也被标记为不可解节点,则搜索失败,表明原始问题无解,退出搜索过程;如果不能确定,S,0,为不可解节点,则从,Open,表中删去具
39、有不可解先辈的节点。,转第,(2),步。,例,4.13:,设有下图所示的与,/,或树,节点按标注顺序进行扩展,其中表有,t,1,、,t,2,、,t,3,的节点是终止节点,,A,、,B,、,C,为不可解的端节点。,1,2 3,A 4 t,1,5,t,2,B t,3,C,与,/,或树的广度优先搜索,1,2 3,A 4 t,1,5,t,2,B t,3,C,与,/,或树的广度优先搜索,搜索过程为:,(1),先扩展,1,号节点,生成,2,号节点和,3,号节点。,(2),扩展,2,号节点,生成,A,节点和,4,号节点。,(3),扩展,3,号节点,生成,t,1,节点和,5,号节点。由于,t,1,为终止节点,
40、则标记它为可解节点,并应用可解标记过程,不能确定,3,号节点是否可节。,(6),扩展,5,号节点,生成,t,3,节点和,C,节点。由于,t,3,为终止节点,则标记它为可解节点,并应用可解标记过程,可标记,1,号节点为可解节点。,(4),扩展节点,A,,由于,A,是端节点,因此不可扩展。调用不可解标记过程,。,(5),扩展,4,号节点,生成,t,2,节点和,B,节点。由于,t,2,为终止节点,则标记它为可解节点,并应用可解标记过程,可标记,2,号节点为可解,但不能标记,1,号节点为可解。,(7),搜索成功,得到由,1,、,2,、,3,、,4,、,5,号节点即,t,1,、,t,2,、,t,3,节点
41、构成的解树。,与,/,或树的深度优先搜索和与,/,或树的广度优先搜索过程基本相同,.,其主要区别在于,Open,表中节点的排列顺序不同。,在扩展节点时,与,/,或树的深度优先搜索过程总是把刚生成的节点放在,Open,表的首部。,深度优先搜索,1,2 3,A 4 t,1,5,t,2,B t,3,C,与,/,或树的深度优先搜索,与,/,或树的深度优先搜索也可以带有深度限制,dm,搜索算法如下:,(1),把初始节点,S0,放入,Open,表中;,(2),把,Open,表第一个节点取出放入,Closed,表,并记该节点为,n,;,(3),如果节点,n,的深度等于,dm,,则转第,(5),步的第,点;,
42、4),如果节点,n,可扩展,则做下列工作:,扩展节点,n,,将其子节点放入,Open,表的首部,并为每一个子节点设置指向父节点的指针;,考察这些子节点中是否有终止节点。若有,则标记这些终止节点为可解节点,并用可解标记过程对其父节点及先辈节点中的可解解节点进行标记。如果初始解节点,S,0,能够被标记为可解节点,就得到了解树,搜索成功,退出搜索过程;如果不能确定,S0,为可解节点,则从,Open,表中删去具有可解先辈的节点。,转第,(2),步。,(5),如果节点,n,不可扩展,则作下列工作:,标记节点,n,为不可解节点;,应用不可解标记过程对节点,n,的先辈中不可解解的节点进行标记。如果初始解节
43、点,S,0,也被标记为不可解节点,则搜索失败,表明原始问题无解,退出搜索过程;如果不能确定,S,0,为不可解节点,则从,Open,表中删去具有不可解先辈的节点。,转第,(2),步。,例:,若按有界深度优先,且,设,dm=4,,则其节点扩展顺序为?,1,2 3,A 4 t,1,5,t,2,B t,3,C,与,/,或树的有界深度优先搜索,1,,,3,,,5,,,2,,,4,搜索过程为:,(1),先扩展,1,号节点,生成,2,号节点和,3,号节点。,(2),扩展,3,号节点,生成,t,1,节点和,5,号节点。由于,t,1,为终止节点,则标记它为可解节点,并应用可解标记过程,不能确定,3,号节点是否可
44、解。,(6),搜索成功,得到由,1,、,3,、,5,、,2,、,4,号节点即,t,1,、,t,2,、,t,3,节点构成的解树。,(4),扩展,2,号节点,生成,A,节点和,4,号节点。,(5),扩展,4,号节点,生成,t2,节点和,B,节点。由于,t,2,为终止节点,则标记它为可解节点,并应用可解标记过程,可标记,2,号节点为可解,再往上又可标记,1,号节点为可解。,(3),扩展,5,号节点,生成,t,3,节点和,C,节点。由于,t,3,为终止节点,则标记它为可解节点,并应用可解标记过程,可标记,3,号节点为可解节点,但不能标记,1,号为可解。,1,2 3,A 4 t,1,5,t,2,B t,
45、3,C,与,/,或树的有界深度优先搜索,谓词演算推理的与或树表示,法,命题演算中一个蕴含集,q,=,p,r,=,p,v,=,q,s,=,r,t,=,r,s,=,u,s,t,p,q,s,u,t,v,r,假设有下面的断言集,:,与,/,或树,P,R,Q,图,表达式,QR=P,P,R,Q,图 表达式,QR=P,a,b,c,ab,=,d,ac,=,e,bd,=,f,f,=,g,ae,=,h,g,d,e,h,f,b,c,a,图,一个命题演算表达式,集合的与,/,或树,h,为真吗?,b,不再为真时,h,还会为真吗?,为了证明,X,为真,最短的推理序列是什么?,例子:,这是谓词演算的例子,阐述的是一个目标驱
46、动的图搜索。要证明为真的目标是一含变量的谓词演算表达式。断言集是对一只狗,Fred,和它的主人,Sam,之间关系的逻辑描述。,该例中的事实和规则如下,:,1.,Fred,是一只长毛大牧羊犬。,collie(,fred,).,2.,Sam,是,Fred,的主人。,master(,fred,sam,).,3.,今天是星期六。,day(,saturday,).,4.,星期六天气很冷。,(warm(,saturday,).,深入讨论,5.,Fred,是一只训练过的狗。,trained(,fred,).,6.,长毛垂耳犬或训练过的长毛大牧羊犬是好狗。,Xspaniel(X)(collie(X)train
47、ed(X,)=,gooddog(X,),7.,若好狗有主人,则狗会和主人在一起。,X,Y,Zgooddog(X)master(X,Y)location(Y,Z,)=location(X,Z),8.,若今天是星期六并且天气暖和,则,Sam,就在公园里。,day(saturday,),warm(saturday,)=,location(sam,park,).,9.,若今天是星期六并且天气不暖和,则,Sam,就在展览馆中。,day(saturday,),warm(saturday,),=,location(sam,museum,).,目标是,:,X,location(fred,X,),也就是,:Fr
48、ed,在哪,?,深入讨论,表示,FRED,在展览馆的与,/,或树,LOCATION(X,Z),GOODDOG(X),NOT WARM(SATURDAY),DAY(SATRDAY),MASTER(FRED,SAM),TRAINED(X),COLLIE(X),LOCATION(Y,Z),MASTER(X,Y),TRAINED(FRED),COLLIE(FRED),SUBSTITUTIONS=FRED/X,SAM/Y,MUSEUM/Z,4.7,基于递归的搜索,4.7.1,递归,一个递归过程包括,:,1.,过程调用自身重复一串动作的递归步骤。,2.,防止过程无穷递归的终止条件。,对,所有递归定义和递归
49、算法都是必要的。递归是为大小不定的数据结构,如广义表、树、图构造的一个自然的控制,特别适合状态空间搜索。,4.7,基于递归的搜索,procedure member(item,list);,begin,if list is empty,then return(fail)%terminating condition#1,else if item=first element of list,then return(success)%terminating condition#2,else begin,tail:=list with its first item removed;,member(ite
50、m,tail)%recursive call,end,end,测试一元素是否是表成员的过程可递归定义如下,:,4.7.2,递归搜索,深度优先搜索算法直接变为递归,:,Function,depthsearch,;,begin,if open is empty then return(fail);,current_state:=the first element of open;,if current_state is a goal state,then return(success),else begin,open:=the tail of open;,closed:=closed with c






