状态空间搜索.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《状态空间搜索.ppt》由会员分享,可在线阅读,更多相关《状态空间搜索.ppt(180页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、状态空间搜索 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life, there is hope。有生命必有希望。有生命必有希望 基于递归的搜索基于递归的搜索 递归递归 递归搜索递归搜索 模式驱动搜索模式驱动搜索 产生式系统产生式系统 定义与历史定义与历史 产生式系统示例产生式系统示例 产生式系统搜索的控制产生式系统搜索的控制 产生式系统的优点产生式系统的优点 状态空间搜索策略状态空间搜索策略 数据驱动和目标驱动的搜索数据驱动和目标驱动的搜索 状态空间可以从两个方向进行搜索:从实际问题状态空间可以从两个方向进行搜索:从实际问题的
2、给定数据向目标搜索或者从目标到数据进行搜的给定数据向目标搜索或者从目标到数据进行搜索。索。 数据驱动搜索,也称为正向推理。搜索的过程是数据驱动搜索,也称为正向推理。搜索的过程是应用规则从给定的条件产生新的条件,再用规则应用规则从给定的条件产生新的条件,再用规则从新的条件产生更多的新条件。这个过程持续到从新的条件产生更多的新条件。这个过程持续到有一条满足目标要求的路径产生为止。有一条满足目标要求的路径产生为止。 另一种求解方法是:先从欲想达到的目标开始,另一种求解方法是:先从欲想达到的目标开始,看哪些规则或合法移动能产生该目标以及应用这看哪些规则或合法移动能产生该目标以及应用这些规则产生目标时需
3、要哪些条件。这些条件就成些规则产生目标时需要哪些条件。这些条件就成为我们要达到的新目标,即子目标。搜索就通过为我们要达到的新目标,即子目标。搜索就通过反向的、连续的子目标不断地进行,一直到找到反向的、连续的子目标不断地进行,一直到找到问题给定的条件为止。这样就找到了一条从数据问题给定的条件为止。这样就找到了一条从数据到目标的移动或规则组成的链,尽管搜索方向和到目标的移动或规则组成的链,尽管搜索方向和它正好相反。这种方法称为目标驱动的推理或反它正好相反。这种方法称为目标驱动的推理或反向推理。向推理。 在实际的搜索系统中可能两种方法同时使用,即在实际的搜索系统中可能两种方法同时使用,即一方面从数据
4、驱动向目标进行,可能搜索到某一一方面从数据驱动向目标进行,可能搜索到某一个子目标;另一方面又从目标向数据方面进行搜个子目标;另一方面又从目标向数据方面进行搜索,刚好也搜索到该子目标,这时推理也结束,索,刚好也搜索到该子目标,这时推理也结束,即假设的目标正确。即假设的目标正确。 图搜索的实现图搜索的实现 无论是目标还是数据驱动的搜索,其求解问题都无论是目标还是数据驱动的搜索,其求解问题都是要在状态空间图中找到从初态到目标状态的路是要在状态空间图中找到从初态到目标状态的路径。而路径上弧的序列就对应解题的先后步骤。径。而路径上弧的序列就对应解题的先后步骤。若在选择解题路径时能给出绝对可靠的预言或绝若
5、在选择解题路径时能给出绝对可靠的预言或绝对正确的机制,那就不需要搜索了,求解时会一对正确的机制,那就不需要搜索了,求解时会一次成功地穿过空间到达目标,构造出一条求解路次成功地穿过空间到达目标,构造出一条求解路径来。但实际问题中没有绝对可靠的预言,求解径来。但实际问题中没有绝对可靠的预言,求解时必须尝试多条路径直到找到目标为止。回溯是时必须尝试多条路径直到找到目标为止。回溯是一种经常使用的技术。一种经常使用的技术。图搜索的实现(续)图搜索的实现(续) 带回溯的搜索从初始状态出发,不停地寻找路径带回溯的搜索从初始状态出发,不停地寻找路径一直到它到达目标或一直到它到达目标或“不可解端点不可解端点”。
6、若找到目。若找到目标,就退出搜索,返回解题路径,若遇到不可解标,就退出搜索,返回解题路径,若遇到不可解结点,就回溯到路径中最近的父结点上,查看是结点,就回溯到路径中最近的父结点上,查看是否有当前结点的兄弟结点未扩展,并沿这些分支否有当前结点的兄弟结点未扩展,并沿这些分支继续搜索。算法在每个结点上的检查过程遵循下继续搜索。算法在每个结点上的检查过程遵循下面的递归方式:面的递归方式: 图搜索的实现(续)图搜索的实现(续) 若当前状态若当前状态S未到达目标的要求,就对它的第一未到达目标的要求,就对它的第一子状态子状态Schild1递归调用回溯过程。如果在以递归调用回溯过程。如果在以Schild1为根
7、的子图中没有找到目标,就对它的兄弟为根的子图中没有找到目标,就对它的兄弟Schild2调用此过程。此过程重复进行到某个结点调用此过程。此过程重复进行到某个结点的后裔是目标或者所有子结点都搜索完为止。的后裔是目标或者所有子结点都搜索完为止。 图搜索的实现(续)图搜索的实现(续)算法就是以这种方式执行直到找到目标或遍历了状态空间为止。下图给出的是一个假设的状态空间的深度优先回溯搜索。 1A2B8C10DE36F9GHIJ457一个假设状态空间的深度优先回溯搜索一个假设状态空间的深度优先回溯搜索 图搜索的实现(续) 下面定义一个回溯搜索的算法:算法使用下面定义一个回溯搜索的算法:算法使用3张表保存状
8、张表保存状态空间中的结点。态空间中的结点。 SL状态表列出了当前路径上的状态。如果找到了目标,状态表列出了当前路径上的状态。如果找到了目标,SL就是解题路径上状态的有序集。就是解题路径上状态的有序集。 NSL新状态表,包含了等待评估的结点,其后裔结点还新状态表,包含了等待评估的结点,其后裔结点还未被扩展。未被扩展。DE不可解端点集不可解端点集,列出了找不到解题路径的列出了找不到解题路径的状态。如果在搜索中再遇到它们,就会检测到它们是状态。如果在搜索中再遇到它们,就会检测到它们是DE中的成分而立即将其排除。中的成分而立即将其排除。 为了在最普遍的情况下(是图而不是树)定义回溯算法,为了在最普遍的
9、情况下(是图而不是树)定义回溯算法,有必有必 要检测并删除多次出现的某些状态,以避免造成要检测并删除多次出现的某些状态,以避免造成路径循环。检测可以通过对每一个新生成的状态判断它路径循环。检测可以通过对每一个新生成的状态判断它是否在上述是否在上述3张表中来实现,如果它属于某一张表,就张表中来实现,如果它属于某一张表,就说明它已被搜索过不必再考虑。说明它已被搜索过不必再考虑。 图搜索的实现(续)图搜索的实现(续) 当前正在搜索的结点叫当前正在搜索的结点叫CS,即当前状态。即当前状态。CS总总是等于最近加入是等于最近加入SL中的状态,是当前正在探寻中的状态,是当前正在探寻的解题路径的的解题路径的“
10、前锋前锋”。博弈中走步用的推理。博弈中走步用的推理规则或者其他合适的问题求解操作都可应用于规则或者其他合适的问题求解操作都可应用于CS,得到一些新状态,即得到一些新状态,即CS的子状态的有序集,的子状态的有序集,重新视该集合中第一个状态为当前状态,其余重新视该集合中第一个状态为当前状态,其余的按次序放入的按次序放入NSL中,用于以后的搜索。新的中,用于以后的搜索。新的CS加入加入SL中,搜索就这样继续进行。若中,搜索就这样继续进行。若CS没没有子状态,就要从有子状态,就要从SL,NSL中删除它,将其加中删除它,将其加入入DE,然后回溯查找然后回溯查找NSL中的下一个状态。中的下一个状态。 图搜
11、索的实现(续)图搜索的实现(续) Function backtrack (回溯算法)回溯算法) begin SL:=Start; NSL:= Start; DE := ; CS :=Start; /*初始化初始化*/ while NSL /*还有未检查的状态还有未检查的状态*/ do begin if CS = 目标(或符合目标的要求)目标(或符合目标的要求) then return (SL); /*成功,返回路径状态的表成功,返回路径状态的表*/ if CS没有子状态(不包括没有子状态(不包括DE,SL和和NSL中已有的中已有的状态)状态) then begin while(SL非空)非空)
12、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;
13、return FAIL end. 假设状态空间的深度优先回溯搜索中的回溯轨迹假设状态空间的深度优先回溯搜索中的回溯轨迹如下:如下: 初值:初值:SL = A;NSL= A;DE= ;CS=A; 图搜索的实现(续)图搜索的实现(续) 重复重复 CS SL NSL DE 0 A A A 1 B BA BCDA 2 E EBA EFBCDA 3 H HEBA HIEFBCDA 4 I IEBA IEFBCDA H 5 F FBA FBCDA EIH 6 J JFBA JFBCDA EIH 7 C CA CDA BFJEIH 8 G GCA GCDA BFJEIH 1A 2B8C10D 3E6F9G
14、4H5I7J 一个假想的状态空间的深度优先回溯搜索一个假想的状态空间的深度优先回溯搜索 状态空间的一般搜索过程 一个问题的状态空间是一个三元组,即 S,F,G,其中S是问题所有可能的状态的集合,F是操作的集合,G是目标状态的集合一般,如果问题的状态空间不太大的话,可以用显式的方式画出其状态空间图,否则用隐式的方法画出其状态空间图对状态空间的搜索就是从图中某个初始状态出发,寻求一条到达目标状态的路径状态空间的一般搜索过程 对状态空间的搜索过程用到两张表:OPEN表和CLOSED表,它们的结构如下: Open表 状态节点父节点 Closed表 编号状态节点父节点 状态空间的一般搜索过程 其中ope
15、n表存放刚生成的节点,对于不同的搜索策略,节点在open表中的排列顺序是不同的例如对宽度优先搜索是先生成的节点排在前面,而对深度优先搜索则是后生成的节点排在前面 Closed表用于存放将要扩展或者已经扩展的节点搜索的一般过程如下:状态空间的一般搜索过程 (1)把初始节点S0放进open表,并建立只包含S0的图,记为 (2)检查open表是否为空,若为空则问题无解,退出 (3)把open表的第一个节点取出放入closed表,并记该节点为n. (4)考察节点n是否为目标节点,若是,则求得了问题的解,退出 (5)扩展节点n,生成一组子节点把其中不是状态空间的一般搜索过程 节点n的先辈的那些子节点记作
16、集合,并把这些子节点作为节点n的子节点加入中 (6)针对中子节点的不同情况,分别进行如下处理: )对那些未曾在中出现过的成员设置一个指向父节点(即节点n)的指针,并把它们放入open表 )对于那些先前已在中出现的成员,确定是否需要修改它指向父节点的指针 )对于那些先前已在中出现并且已经扩展状态空间的一般搜索过程 了的成员,确定是否是需要修改其后继节点指向父节点的指针 (7)按某种搜索策略对open表中的节点进行排序 (8)转第步 说明:上面对状态空间的搜索过程具有通用性,后面讨论的各种搜索策略都可看作是它的一个特例各种搜索策略的主要区别仅在于open表中节点的排序准则不同例如在宽度优先搜索中是
17、先生成的节点排在前,在深度优先搜索中是后生成的节点排在前等状态空间的一般搜索过程 一个节点经一个算符操作后一般只生成一个子节点,但适用于一个节点的算符可能有多个,此时就会生成一组子节点在这些子节点中可能有些是当前扩展节点(即节点n)的父节点,祖父节点等,此时不能把这些先辈节点作为当前扩展节点的子节点余下的子节点记作集合,并加入图中 一个新生成的节点,它可能是第一次被生成的节点,也可能是先前已作为其它节点的后继节点被生成过,当前又作为另一个节点的后继节状态空间的一般搜索过程 点被再次生成此时,它应该作为哪一个节点的后继呢?一般由原始节点到该节点上所付出的代价来决定,哪条路径付出的代价小,相应的节
18、点就作为它的父节点 深度和广度优先搜索深度和广度优先搜索 深度优先搜索、广度优先搜索、有界深度优先搜索及最好优先搜索都与backtrack方法类似,所不同的是,它们实现了另外一些搜索策略,为求解提供了更灵活的手段。 广度优先搜索采取的是先横后纵的搜索策略,而深度优先搜索采取的是先纵后横的搜索策略。 A BCD EFGHIJ KLMNOPQR STU 用于深度和广度优先搜索的例图 深度和广度优先搜索深度和广度优先搜索 例如在上面的深度和广度优先搜索图中,深度优例如在上面的深度和广度优先搜索图中,深度优先搜索的顺序是:先搜索的顺序是: A,B,E,K,S,L,T,F,M,C,G,N,H,O,P,U
19、,I,Q,J,R 而在广度优先搜索中结点的顺序是:而在广度优先搜索中结点的顺序是: A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U 算法中设有两个表:算法中设有两个表:OPEN表和表和CLOSED表。表。 OPEN表中放的是未扩展的结点,表中放的是未扩展的结点, CLOSED表表中放的是已扩展的结点。中放的是已扩展的结点。深度和广度优先搜索深度和广度优先搜索 可以看出这里的可以看出这里的open表与回溯算法中的表与回溯算法中的NSL相似,相似,而而closed表则是回溯算法中表则是回溯算法中SL和和DE的合并的合并. 当对解的先验信息有所了解时(比如知道解可
20、能当对解的先验信息有所了解时(比如知道解可能落在最右分枝或最左分枝上时)深度优先搜索的落在最右分枝或最左分枝上时)深度优先搜索的速度还是很快的,如果弄错了方向可能会使搜索速度还是很快的,如果弄错了方向可能会使搜索落入陷阱中,补救的措施是采用定界的方法落入陷阱中,补救的措施是采用定界的方法有有界深度优先搜索。其思想是定一个界界深度优先搜索。其思想是定一个界d,这个界这个界d可以是深度可以是深度 ,也可以是一个代价。也可以是一个代价。 以上几种搜索方法都是盲目搜索的典型代表。以上几种搜索方法都是盲目搜索的典型代表。宽度优先搜索宽度优先搜索 宽度优先搜索的过程如下: 、把初始节点放入open表 、如
21、果open表为空,则问题无解,退出 、把open表的第一个节点(记为n)取出放入closed表 、考察节点n是否为目标节点,若是则求得了问题的解,退出。 、若节点n不可扩展,则转第步 、扩展节点n将其子节点放入open表的尾部宽度优先搜索宽度优先搜索 并为每一个子节点配置指向父节点指针,然后转其图示如p265的图所示 例:重排九宫问题在一个的方格棋盘上放置分别标有数字1,2,3,4,5,6,7,8的张牌,初始状态为S0目标状态为Sg即: S0为:Sg为: 宽度优先搜索宽度优先搜索 可使用的算符有,空格左移,右移,上移,下移 宽度优先搜索的图示如p267页的图深度优先搜索 深度优先搜索的过程如下
22、: 、把初始节点放入open表 、如果open表为空,则问题无解,退出 、把open表的第一个节点(记为n)取出放入closed表 、考察节点n是否为目标节点,若是则求得了问题的解,退出。 、若节点n不可扩展,则转第步 、扩展节点n将其子节点放入open表的首部深度优先搜索 深度优先搜索和宽度优先搜索的区别仅在于:宽度优先搜索是把节点n的子节点放入到open表的尾部,而深度优先搜索则是将节点n的子节点放入open表的首部深度优先搜索重排九宫的例子见p268页的图有界深度优先搜索 为了解决深度优先搜索不完备的问题,避免搜索过程陷入无穷分支的死循环,提出了有界深度优先搜索方法其过程如下: 、把初始
23、节点放入open表,置S0深度d(S0)=0 、如果open表为空,则问题无解,退出 、把open表的第一个节点(记为n)取出放入closed表有界深度优先搜索 、考察节点n是否为目标节点,若是则求得了问题的解,退出。 、若节点n的深度d(n)=dm则转 、若节点n不可扩展,转 、扩展节点n将其子节点放入open表的首部,并为其配置指向父节点的指针,转 如果问题有解,且其路径长度dm,则上述搜索过程一定能求得解,若解的路径长度dm则上述搜索过程就得不到解即界的选择很重要的不是越大就越好有界深度优先搜索 有界深度优先搜索的例子见p269的 图代价树的宽度优先搜索 在上面的搜索中都没有考虑代价的问
24、题,即假设各边上的代价是相同的,如果不是这样,边上是附有不同的数字的即代价(这样的树称为代价树)在代价树中如果用g(x)表示从初始节点S0到节点x的代价,用c(x1,x2)表示从父节点x1到子节点x2的代价,则有: g(x2)=g(x1)+c(x1,x2) 代价宽度优先搜索的基本思想就是每次从open表中选择节点往closed表传送时总是选择代价最小的节点也就是说open表中的节点在任一时刻都是按代价从小到大排序的代价树的宽度优先搜索 其搜索过程如下: 、把初始节点放入open表,置S0的代价g(S0)=0 、如果open表为空,则问题无解,退出 、把open表的第一个节点(记为n)取出放入c
25、losed表 、考察节点n是否为目标节点,若是则求得了问题的解,退出。 5、若节点n不可扩展,转代价树的宽度优先搜索 6、扩展节点n将其子节点放入open表中,并为其配置指向父节点的指针,计算各子节点的代价,并按代价对open表中的全部节点按从小到大的顺序排序,转 搜索过程见p270页的图 书上例.7给出了求城市间交通图,现要求从城市到城市的最小费用交通路线求解该问题时首先要把图转换成代价树代价树的宽度优先搜索 A4B 44 C2D5 3E 交通图代价树的宽度优先搜索 转化成代价树 A 34 C1B1 245 D1D2E1 3423 E2B2C2E35E4 交通图的代价树代价树的宽度优先搜索
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 状态 空间 搜索
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内