资源描述
第1章 搜索问题 一种在图中寻找路径的方法。28314765813247651.八数码魔方八数码魔方1.1 1.1 搜索问题搜索问题知识的表示方法知识的表示方法初始节点S0目标节点Sg2.2.状态空间表示状态空间表示 状态(State)的基本概念 状态(state)是为描述某类不同事物间的差别而引入的一组最少变量q0,q1,qn的有序集合,其矢量形式如下:Q=q0,q1,qnT (1)式中每个元素qi(i=0,1,n)为集合的分量,称为状态变量。给定每个分量的一组值就得到一个具体的状态,如 Qk=q0k,q1k,,qnkT (2)v 例如,八数码魔方中,所有初始节点S0构成初始节点状态集合Q;所有目标节点Sg构成目标节点状态集合Q。当Q中每个分量取定一个值时,就得到一个具体的状态集合,如例子中的 就是Q0,而 就是Qk。2831476581324765问题求解技术主要是两个方面:问题的表示求解的方法问题的状态空间问题的状态空间(state space)是一个表示该问题全部可能状态及其关系的图,它包含三种说明的集合,即所有可能的问题初始状态集合S、算符集合F以及目标状态集合G。因此,可把状态空间记为三元状态(S,F,G)。算符算符:使问题从一种状态变化为另一种状态的手段称为操作符或算符。操作符可为走步、过程、规则、数学算子、运算符号或逻辑符号等。例如,例子中的八数码魔方问题就可以用三元例如,例子中的八数码魔方问题就可以用三元状态空间表示为状态空间表示为 (S0,F,Sg)其中,S0代表初始状态,Sg代表目标状态,而F就是所有能将初始状态变化为目标状态的算符集合。举例:012x012y迷宫问题v 整个迷宫问题的知识表示是如书上第10页的图2.3,这是一种状态图知识表示法。v 问题是:机器人位于迷宫入口(0,0)处,如何到达迷宫的出口(2,2)。解:问题空间的初始状态是节点(0,0),而目标状态是节点(2,2)。从图2.3可见,从(0,0)到(2,2)需经过(U,R,R,U)算符集合的操作,因此本问题的解用三元状态集合表示为:(0,0),(U,R,R,U),(2,2)3.与图有关的术语v 状态空间图由节点(不一定是有限的节点)及连接节点的分枝的集合构成。v 有限节点图节点数目有限的图称为有限节点图。v 有向图一对节点用分枝线连接起来,从一个节点指向另一个节点。这种图叫做有向图。始节点叫父节点或双亲节点,终节点叫子节点。扩展求解父节点的所有子节点,叫做扩展。路径在一系列节点n1,n2,nm中,从n1开始,ni总有分枝连接ni+1,称从n1到nm之间的分枝集合是路径。路径中不包含两个及以上相同的分枝,如果n1和nm是同一个节点,则称这种路径为闭路。不构成闭路的称为树。在用状态空间图来表示问题时,对问题的求解就是求出从初始节点到目标节点的路径。1.2 图搜索策略1.图搜索的定义一种计算机在状态图中寻找路径的方法。2.CLOSED表的引入编号节点号父节点号CLOSED表(记录扩展过的节点)3.OPEN表的引入节点号父节点号OPEN表(记录待扩展的节点)举例:八数码魔方例子中OPEN表变化过程节点号节点号父节点号父节点号S0空AS0BS0CS0DS0EAFACLOSED表变化过程编号编号节点号节点号父节点号父节点号0S0空1AS02BS0图搜索的一般过程图搜索的一般过程(1)建立一个只含有起始节点S的搜索图G,把S放到一个叫做OPEN表的未扩展节点表中。(2)建立一个叫做CLOSED的已扩展节点表,其初始为空表。(3)LOOP:若OPEN表是空表,则失败退出。(4)选择OPEN表上的第一个节点,把它从OPEN表移出并放进CLOSED表中。称此节点为节点n。(5)若n为一目标节点,则有解并成功退出,此解是追踪图G中沿着指针从n到S这条路径而得到的(指针将在第7步中设置)。图搜索的一般过程图搜索的一般过程(6)扩展节点n,同时生成不是n的祖先的那些后继节点的集合M。把M的这些成员作为n的后继节点添入图G中。(7)对那些未曾在G中出现过的(既未曾在OPEN表上或CLOSED表上出现过的)M成员设置一个通向n的指针。把M的这些成员加进OPEN表。对已经在OPEN或CLOSED表上的每一个M成员,确定是否需要更改通到n的指针方向。对已在CLOSED表上的每个M成员,确定是否需要更改图G中通向它的每个后裔节点的指针方向。(8)按某一任意方式或按某个探试值,重排OPEN表。(9)GO LOOP。开始开始把把S放入放入OPEN表表OPEN表为空表?表为空表?把第一个节点把第一个节点(n)从从OPEN表移至表移至CLOSED表表n为目标节点吗?为目标节点吗?把把n的后继节点放入的后继节点放入OPEN表的表的末端,提供返回节点末端,提供返回节点n的指针的指针修改指针方向修改指针方向重排重排OPEN表表失败失败成功成功图搜索一般过程的框图图搜索一般过程的框图是是是是否否否否1.3 无信息图搜索过程深度优先搜索(纵向搜索)宽度优先搜索(横向搜索)均一代价搜索1.深度优先搜索 定义 首先扩展最新产生的(即最深的)节点。深度相等的节点可以任意排列。这种盲目(无信息)搜索叫做深度优先搜索或纵向搜索。特点 扩展最深的节点的结果使得搜索沿着状态空间某条单一的路径从起始节点向下进行下去;只有当搜索到达一个没有后裔的状态时,它才考虑另一条替代的路径。v 为了防止搜索过程沿着无益的路径扩展下去,往往给出一个节点扩展的最大深度深度界限。v深度优先搜索算法是一种“后进先出”的算法。开始开始把把S放入放入OPEN表表OPEN表为空表?表为空表?把第一个节点把第一个节点(n)从从OPEN表移至表移至CLOSED表表扩展扩展n,把其后裔放入,把其后裔放入OPEN表的前头表的前头失败失败成功成功深度优先深度优先搜索算法框图搜索算法框图是是否否是是否否是否有后继节点是否有后继节点为目标节点?为目标节点?S是否为目标节点?是否为目标节点?成功成功是是否否八数码魔方的八数码魔方的深度优先深度优先搜索树搜索树2.宽度优先搜索 定义 以接近起始节点的程度逐层扩展节点的搜索方法(breadth-first search),这种盲目(无信息)搜索叫做宽度优先搜索或横向搜索。特点 一种高代价搜索,但若有解存在,则必能找到它。算法 这种搜索是逐层进行的;在对下一层的任一节点进行搜索之前,必须搜索完本层的所有节点。v 宽度优先搜索算法是一种“先进先出”的算法。开始开始把把S放入放入OPEN表表OPEN表为空表?表为空表?把第一个节点把第一个节点(n)从从OPEN表移至表移至CLOSED表表扩展扩展n,把,把n的后继节点放入的后继节点放入OPEN表的末端,提供返回节点表的末端,提供返回节点n的指针的指针失败失败宽度优先搜索宽度优先搜索算法框图算法框图是是否否把第一个节点把第一个节点(n)从从OPEN表移至表移至CLOSED表表n为目标节点吗?为目标节点吗?成功成功是是否否举例:八数码魔方1238456712384567(目标状态)(初始状态)1238456712384123845674123856712 384123845671238456712384567678910111213123845675675671123845671238456712384567123845672345八数码魔方的八数码魔方的宽度优先搜索宽度优先搜索树树13456123845671238456712384567123845671 238456723242526271236782212384567123845671 238456712 38456712384567123845671238456714151617181920211238456742829303112 38456712 38456712384567123845673213456123678381238456739扩展26个节点,共生成46个节点之后,才得到目标3.均一代价搜索是横向搜索的一种推广,不是沿着等长度路径断层进行扩展,而是沿着均一代价路径断层进行扩展。搜索树中每条连接弧线上的有关代价,表示时间、距离等花费。若所有连接弧线具有相等代价,则简化为横向搜索算法。均一代价搜索中的几个记号:均一代价搜索中的几个记号:起始节点记为S;从节点i到它的后继节点j的连接弧线代价记为c(i,j);从起始节点S到任一节点i的路径代价记为g(i)。开始开始把把S放入放入OPEN表表OPEN表为空表?表为空表?把第一个节点把第一个节点(n)从从OPEN表移至表移至CLOSED表表扩展扩展n,把,把n的后继节点放入的后继节点放入OPEN表的末端,提供返回节点表的末端,提供返回节点n的指针的指针失败失败均一代价搜索算法框图均一代价搜索算法框图是是否否把第一个节点把第一个节点(n)从从OPEN表移至表移至CLOSED表表n为目标节点吗?为目标节点吗?成功成功是是否否按按g(i)值由小到大的顺序重排值由小到大的顺序重排OPEN表表均一代价搜索法思路:均一代价搜索法思路:1、从A点开始依次展开得到AB(7)、AC(3)、AD(10)、AE(15)四个新结点,把第一层结点A标记为已展开,并且每个新结点要记录下其距离(括号中的数字);2、把未展开过的AB、AC、AD、AE四个结点中距离最小的一个展开,即展开AC(3)结点,得到ACB(8)、ACD(16)、ACE(13)三个结点,并把结点AC标记为已展开;3、再从未展开的所有结点中找出距离最小的一个展开,即展开AB(7)结点,得到ABC(12)、ABD(20)、ABE(19)三个结点,并把结点AB标记为已展开;4、再次从未展开的所有结点中找出距离最小的一个展开,即展开ACB(8)结点;5、每次展开所有未展开的结点中距离最小的那个结点,直到展开的新结点中出现目标情况(结点含有5个字母)时,即得到了结果。算法分析:算法分析:由上可见,均一代价搜索法并没有象横向搜索一样展开所有结点,只是根据代价最小的原则,每次展开距离A点最近的那个结点,反复下去即可最终得到答案。虽然中途有时也展开了一些并不是答案的结点,但这种展开并不是大规模的,不是全部展开,因而耗时要比横向搜索小得多。迷宫问题如下,F是入口,B是出口,试采用均一代价搜索算法进行求解。举例:迷宫问题举例:迷宫问题0123x123yFGHECADB22241111注:每个节点小括号内的数值表示走到该节点所需付出的代价。注:每个节点小括号内的数值表示走到该节点所需付出的代价。F(0)G(1)H(3)E(2)C(3)A(64)D(5)B(6)12345678搜索到的路径为黄线所示演讲完毕,谢谢观看!
展开阅读全文