1、搜索方法,状态空间与搜索图 盲目搜索,搜索,搜索是人工智能中的一个基本问题,是推理不可分割的一部分,尼尔逊将其列为人工智能研究的四个核心问题之一。 搜索问题研究对象属于结构不良或非结构化的问题,一般很难获得问题的全部信息,没有计算方法直接获得问题的解,搜索,一般图搜索 基于问题规约的与或图搜索,状态空间法,状态空间表示法的基本思想是将待求解的问题通过状态和操作表示出来: 状态是表示求解问题过程中每一步问题状况的数据结构。 操作也称为运算符,是将问题从一种状态变换为另一种状态的手段,它包括操作和操作的条件。,状态空间法,状态空间是状态和操作的总称,一般表示为(S,O)其中S-问题求解过程中所有可
2、能的合法状态构成的集合;O-所有有效操作算子集合,及操作的前提条件。,状态空间法,如果我们将问题的状态集合看作一个图中的结点,将操作集合看作是结点间的有向连线,则当我们用状态空间表示出一个问题后,就可以用一张图表示,此图称为状态空间图,因此状态空间搜索有时也称为图搜索。,状态空间表示问题,求解问题的表达一般采用如下的三元组:W=(SP,I,G)其中SP-(S,O)问题的状态空间;I-表示问题的初始状态集合;G-表示问题的目标状态集合。,状态空间表示示例,例:二阶梵塔问题。设有三根针,编号分别是1号、2号和3号。在初始时,1号针上穿有A、B两个金片,A比B小,A位于B上面。要求把这两个金片全部移
3、到另一根针上,规定每次只能移动一个金片,任何时刻都不能使大片位于小片的上面。,B,A,1,2,3,状态空间表示示例,解:设Sk=( SkA,SkB)表示问题的状态,其中SkA表示金片A所在的针号,SkB表示金片B所在的针号。全部可能的状态有如下9种:S0=( 1,1), S1=( 1,2), S2=( 1,3)S3=( 2,1), S4=( 2,2), S5=( 2,3)S6=( 3,1), S7=( 3,2), S8=( 3,3)系统的状态集合S=S0,S1,S2,S3,S4,S5,S6,S7,S8,状态空间表示示例,使用A(i,j)和B(i,j)分别表示将金片A从第i号针移到第j号针和将金
4、片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)操作集合O如上。,状态空间表示示例,根据9种状态和12种操作可以构成问题的状态空间图。,1,1,2,1,3,1,3,2,1,2,2,2,2,3,3,3,1,3,A(1,3),B(1,2),A(3,2),状态空间表示示例,二阶梵塔问题的状态空间表示为: 初始状态集:I=S0 目标状态集:G=S4 , S8 状态空间为:SP=S,O,状态空间表示示例,例:修道士和野人问题。设在河的左岸有N
5、个修道士和N个野人以及一条船修道士想利用这条船把所有人运到河对岸,但受到以下条件的约束:修道士和野人都会划船,但每次最多载M个人;任何时刻野人的数目都不能超过修道士的人数。请规划一个渡河的方案。,状态空间表示示例,解:为了方便,假设N=3,M=2 问题状态用一个三元组表示S=(m,c,b) 其中m-表示和左岸修道士的人数。c-表示和左岸野人的人数。b-表示和左岸船的数目。,状态空间表示示例,状态数目=4X4X2=32 S= S0=(3,3,1), S1=(3,2,1), S2=(3,1,1), S3=(2,2,1) S4=(1,1,1), S5=(0,3,1), S6=(0,2,1), S7=
6、(0,1,1) S8=(3,2,0), S9=(3,1,0), S10=(3,0,0),S11=(2,2,0) S12=(1,1,0),S13=(0,2,0),S14=(0,1,0),S15=(0,0,0) ,状态空间表示示例,操作考虑到限制条件有如下10种: 船由左岸到右岸和船由右岸到左岸两种方式; 船上的人的组合有01,10,02,20,11五种方式; 操作集合为O=R01,R10,R02,R20,R11,L01,L10,L02,L20,L11,状态空间表示示例,修道士和野人问题的状态空间表示为: 初始状态集:I=S0 目标状态集:G=S15 状态空间为:SP=S,O,状态空间表示示例,修
7、道士和野人问题的状态空间图如下:,331,220,320,310,300,311,110,321,221,020,031,010,021,011,111,000,状态空间的盲目搜索,状态空间搜索的基本思想就是通过搜索引擎寻找一个操作算子的调用序列,使问题从初始状态变迁到目标状态之一,而状态变迁序列及相应的操作算子调用序列称为从初始状态到目标状态的解。,状态空间的盲目搜索,搜索术语:状态空间的搜索可以看为一个图搜索,下面定义搜索涉及的相关术语: 结点深度-搜索图是一个有根图,根结点是初始状态,记其结点深度为0,其他结点深度定义为其父结点深度dn-1加1: dn-1 = dn-1+1。 路径-从结
8、点ni到结点nj的路径是由相邻结点间的弧线构成的折线。通常要求路径是无环的。,状态空间的盲目搜索,接上 结点扩展-应用操作算子将上一状态结点ni变迁到下一状态结点nj, ni被扩展结点, nj是ni的子结点。 路径代价-相邻结点间路径代价C(nj,ni)。,一般图搜索过程,OPEN表:用于存放刚生成的结点,由于这些结点还没有扩展,也称为未扩展结点表。OPEN表的一般形式如图:,一般图搜索过程,CLOSED表:用于存放已经扩展或将要扩展的结点。 CLOSED表的一般形式如图:,一般图搜索过程,状态空间一般图搜索过程为: 产生一个仅有初始结点S0的OPEN表,建立一个仅有初始结点S0的图G; 产生
9、一个空的CLOSED表; 如果OPEN表为空,则失败退出; 在OPEN表的首部取一个结点n,将其放入CLOSED表,在OPEN表删除结点n;,一般图搜索过程,若nG,则成功退出,解为图G中沿指针从n到S0的路径。 生成结点n的一切后继结点,并将不是结点n的先辈结点构成的集合M,并作为结点n的后继结点装入图G中。 针对M中结点的不同情况分别处理如下: 对没有在G中出现的新结点p,设置一个指向父结点的指针,放入OPEN表中。,一般图搜索过程,若pG,即结点p出现在OPEN表或CLOSED表中,此时需根据具体情况决定是否改变图G中相关结点的指针。 转第3步,一般图搜索过程,关于第7步的说明: 结点p
10、在OPEN表中,说明结点p在结点n之前已经是某一个结点m的子结点,但本身并没有被考察,即没有生成p的后继结点,这表明从S0的到结点p至少存在两条路径,指向父结点的指针按路径代价较小确定。,S0,n,m,p,Path1,Path2,一般图搜索过程,关于第7步的说明: 结点p在CLOSED表中,说明结点p在结点n之前已经是某一个结点m的子结点,指向父结点的指针按路径代价较小确定。 结点p的已经生成后继结点,对后继结点指向父结点的指针按路径代价确定。,盲目搜索策略,一般图搜索提高效率的关键是优化OPEN表中结点的排序方式,若每次排在表首的结点都在最终搜索到的解路径上,则算法不会扩展任何多余结点就可以
11、快速结束搜索。所以不同的排序方式形成多种搜索策略。,广度优先搜索,也称为宽度优先,这种搜索策略的搜索过程是从初始结点S0开始逐层向下扩展,在第n层没有扩展完成之前,不进行下一层结点的的搜索。 OPEN表中的结点总是按产生的先后排序,先产生的结点排在OPEN的前面,后产生的结点排在OPEN表的后面。,广度优先搜索示例,例:八数码问题。在3X3的方格棋盘上,分别放置了标有数字1、2、3、4、5、6、7、8的八张牌,初始状态S0,目标状态Sg如图所示,可以使用的操作有:空格左移、空格右移、空格上移、空格下移。应用广度优先策略寻找从初始状态到目标状态的路径。,2 3 1 8 4 7 6 5,2 3 8
12、 4 7 6 5,S0,Sg,广度优先搜索示例搜索树,2 3 1 8 4 7 6 5,2 3 1 8 4 7 6 5,2 8 3 1 4 7 6 5,2 3 1 8 4 7 6 5,1 2 38 4 7 6 5,2 8 31 4 7 6 5,2 8 3 1 4 7 6 5,2 8 3 1 6 4 7 5,2 3 4 1 8 7 6 5,1 2 3 8 4 7 6 5,S0,Sg,S1,S2,S3,S4,S5,S6,S7,S8,广度优先搜索示例,解路径为:S0 S1 S4 Sg,广度优先搜索的优缺点,是一种完备的搜索策略,即只要问题有解,就一定可以找到解路径。 广度优先搜索得到的解一定是路径最短
13、的解。 盲目性较大,搜索过程产生很多无用的结点,因此搜索效率低。,深度优先搜索,深度优先搜索过程是从初始结点S0开始,选择最新产生的结点考察扩展,直到找到目标结点为止。 OPEN表中的结点总是将新产生的结点方在在OPEN的前面。,深度优先搜索示例,例:八数码问题。在3X3的方格棋盘上,分别放置了标有数字1、2、3、4、5、6、7、8的八张牌,初始状态S0,目标状态Sg如图所示,可以使用的操作有:空格左移、空格右移、空格上移、空格下移。应用深度优先策略寻找从初始状态到目标状态的路径。,2 3 1 8 4 7 6 5,2 3 8 4 7 6 5,S0,Sg,深度优先搜索示例,2 3 1 8 4 7
14、 6 5,2 3 1 8 4 7 6 5,1 2 38 4 7 6 5,1 2 3 8 4 7 6 5,S0,Sg,S1,S4,2 8 3 1 4 7 6 5,2 3 1 8 4 7 6 5,S2,S3,深度优先搜索优缺点,深度优先搜索是一种不完备的搜索策略。 深度优先的解不一定是最短路径。 如果目标恰好在搜索分支,则可以很快找到解。,有界深度优先搜索,综合深度优先和广度优先的优点,按深度优先策略进行,但限制搜索深度,当搜索深度达到深度限制dm时还没有找到目标,则停止当前枝的搜索,转到另一枝继续搜索。,有界深度优先搜索,给定深度限制dm,有界深度优先搜索算法如下: 产生一个仅有初始结点S0的O
15、PEN表,建立一个仅有初始结点S0的图G,置S0的深度d(S0)=0; 产生一个空的CLOSED表; 如果OPEN表为空,则失败退出;,有界深度优先搜索,在OPEN表的首部取一个结点n,将其放入CLOSED表,在OPEN表删除结点n; 考察结点n是否为目标结点,若是,则得到问题的解,成功退出; 如果结点深度d(n)=dm,则转第3步; 若结点不可扩展,则转第3步; 扩展结点,将其子结点放入OPEN表的首部,并为每一个子结点指定父结点,转第3步。,关于有界深度优先搜索的说明,深度限制dm是一个重要参数,若解路径的长度小于等于dm ,则搜索一定可以找到解,否则搜索无法找到解。 深度限制不宜太大。
16、可以对有界深度优先策略进行改进,先设定一个较小的深度限制进行搜索,若找到解,则停止搜索,否则增大深度限制继续向下搜索。如此不断增大深度限制,直到求得问题的解。,代价树搜索,前面的搜索父结点和子结点间的代价相同(结点深度)。 如果状态空间图的各个边有实际意义,而且不同,我们用实际意义表示从父结点迁移到子结点的代价,而这种带有代价边的状态空间图(一般看成一棵树)称为代价数。,代价树搜索,用g(n)表示从S0到结点n的路径的代价,用C(n1, n2)表示从父结点n1到子结点n2的代价,则从S0到结点n2的代价可以表示为:g(n2)=g(n1)+ C(n1, n2),S0,n1,n2,C(n1, n2
17、),g(n1),代价树的广度优先搜索,代价树广度优先搜索算法步骤如下: 产生一个仅有初始结点S0的OPEN表,建立一个仅有初始结点S0的图G,置S0的代价g(S0)=0。 产生一个空的CLOSED表; 如果OPEN表为空,则失败退出;,代价树的广度优先搜索,在OPEN表的首部取一个结点n,将其放入CLOSED表,在OPEN表删除结点n; 考察结点n是否为目标结点,若是,则得到问题的解,成功退出; 若结点n不可扩展,则转第3步; 扩展结点n,并为每一个子结点指定父结点,同时按公式g(ni)=g(n)+ C(n, ni)计算每个子结点的代价,将其子结点放入OPEN表中,按代价对OPEN表中的结点重
18、新排序,转第3步。,代价树的广度优先搜索,例:交通问题。设有5个城市,他们之间的交通线路如图所示,图中数字表示城市间的交通费用。用代价树广度优先搜索,求出从A市到E市费用最小的交通路线。,A,C,D,E,B,3,4,2,4,5,3,代价树的广度优先搜索,解:将原网络图转化为代价树,A,C1,B1,D1,D2,E1,E2,B2,C2,E3,E4,3,4,2,4,5,3,4,2,3,5,代价树的广度优先搜索,代价树的广度优先搜索,按代价树广度优先搜索可得最优解:A C1 D1 E2代价为8。所以从到的最小费用路线为A C D E,代价树的深度优先搜索,代价树深度优先搜索算法步骤如下: 产生一个仅有初始结点S0的OPEN表,建立一个仅有初始结点S0的图G,置S0的代价g(S0)=0。 产生一个空的CLOSED表; 如果OPEN表为空,则失败退出;,代价树的深度优先搜索,在OPEN表的首部取一个结点n,将其放入CLOSED表,在OPEN表删除结点n; 考察结点n是否为目标结点,若是,则得到问题的解,成功退出; 若结点n不可扩展,则转第3步; 扩展结点n,并为每一个子结点指定父结点,同时按公式g(ni)=g(n)+ C(n, ni)计算每个子结点的代价,将其子结点按代价放入OPEN表的首部,转第3步。,