已阅读5页,还剩108页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
搜索策略,搜索是人工智能中的一个基本问题,并与推理密切相关, 搜索策略的优劣,将直接影响到智能系统的性能与推理效率。,主要内容,状态空间的表示 搜索的基本概念 状态空间的搜索 状态空间的一般搜索过程 盲目搜索 启发式搜索,概述,问题求解 AI中每个研究领域都有其各自的特点和规律,但就求解问题的过程看,都可抽象为一个问题求解过程. 问题求解过程实际上是一个搜索,广义地说,它包含了全部计算机科学 1974年,Nilsson归纳出的AI研究的基本问题 知识的模型化和表示 常识性推理、演绎和问题解决 启发式搜索 人工智能系统和语言 本章讨论的表示主要包括: 状态空间表示 问题空间表示,搜索的基本概念,搜索的含义 状态空间法,适用情况: 不良结构或非结构化问题;难以获得求解所需的全部信息;更没有现成的算法可供求解使用。 概念: 依靠经验,利用已有知识,根据问题的实际情况,不断寻找可利用知识,从而构造一条代价最小的推理路线,使问题得以解决的过程称为搜索,搜索的类型 按是否使用启发式信息: 盲目搜索:按预定的控制策略进行搜索,在搜索过程中获得的中间信息并不改变控制策略。 启发式搜索:在搜索中加入了与问题有关的启发性信息,用于指导搜索朝着最有希望的方向前进,加速问题的求解过程并找到最优解。 按问题的表示方式: 状态空间搜索:用状态空间法来求解问题所进行的搜索 与或树搜索:用问题归约法来求解问题时所进行的搜索,什么是搜索 根据问题的实际情况不断寻找可利用的知识,构造出一条代价较少的推理路线,使问题得到圆满解决的过程称为搜索 包括两个方面: - 找到从初始事实到问题最终答案的一条推理路径 - 找到的这条路径在时间和空间上复杂度最小 搜索分两大类: 盲目搜索:也称为无信息搜索,即只按预定的控制策略进行搜索,在搜索过程中获得的中间信息不用来改进控制策略 启发式搜索: 在搜索中加入了与问题有关的启发性信息,用于指导搜索朝着最有希望的方向进行,加速问题的求解过程并找到最优解,状态空间法,状态(State): 是表示问题求解过程中每一步问题状况的数据结构,它可形式地表示为: Sk=Sk0, Sk1, 当对每一个分量都给以确定的值时,就得到了一个具体的状态。 操作(Operator) 也称为算符,它是把问题从一种状态变换为另一种状态的手段。操作可以是一个机械步骤,一个运算,一条规则或一个过程。操作可理解为状态集合上的一个函数,它描述了状态之间的关系。,状态空间(State space) 用来描述一个问题的全部状态以及这些状态之间的相互关系。常用一个三元组表示为: (S, F, G) 其中,S为问题的所有初始状态的集合;F为操作的集合;G为目标状态的集合。 状态空间也可用一个赋值的有向图来表示,该有向图称为状态空间图。在状态空间图中,节点表示问题的状态,有向边表示操作。,状态空间表示法,状态空间表示法是用来表示问题及其搜索过程的一种方法 状态 状态是描述问题求解过程中任一时刻状况的数据结构.,A,B,C,D,(2, 3,7 ,0 , 5, 2, 4, 8, 6),状态空间表示法,一般一个搜索问题由四个部分组成: 初始状态集合:定义了agent所处的环境; 操作符集合:把一个问题从一个状态变换为另一个状态的动作; 目标检测函数:agent用来确定一个状态是不是目标; 路径费用函数:对每条路径赋予一定费用的函数。 初始状态集合和操作符集合定义了问题的搜索空间,状态空间法求解问题的基本过程: 首先为问题选择适当的“状态”及“操作”的形式化描述方法; 然后从某个初始状态出发,每次使用一个“操作”,递增地建立起操作序列,直到达到目标状态为止; 此时,由初始状态到目标状态所使用的算符序列就是该问题的一个解。,八数码问题,states 数字的位置 ,共有9!/2=181440 actions 空格的上下左右移动 goal test 给定的目标状态 path cost 每一步消耗为1,二阶梵塔问题,二阶梵塔问题。设有三根钢针,它们的编号分别是1号、2号和3号。在初始情况下,1号钢针上穿有A、B两个金片,A比B小,A位于B的上面。要求把这两个金片全部移到另一根钢针上,而且规定每次只能移动一个金片,任何时刻都不能使大的位于小的上面。,解:设用Sk=(Sk0, Sk1)表示问题的状态,其中,Sk0表示金片A所在的钢针号,Sk1表示金片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),A B,A B,A B,1 2 3,1 2 3,1 2 3,二阶梵塔问题的初始状态和目标状态,问题的初始状态集合为S=S0 目标状态集合为G=S4, S5,初始状态S0和目标状态S4、S8如图所示,S0=(1, 1),S4=(2, 2),S8=(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) 根据上述9种可能的状态和12种操作,可构成二阶梵塔问题的状态空间图,如下图所示。,(3,3) (1,3) (1,2) (2,2) 二阶梵塔的状态空间图,从初始节点(1, 1)到目标节点(2, 2)及(3, 3)的任何一条路径都是问题的一个解。其中,最短的路径长度是3,它由3个操作组成。例如,从 (1, 1)开始,通过使用操作A(1, 3)、B(1, 2)及A(3, 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),例 修道士(Missionaries)和野人(Cannibals)问题(简称M-C问题) 设在河的一岸有三个野人、三个修道士和一条船,修道士想用 这条船把所有的人运到河对岸,但受以下条件的约束: 一是修道士和野人都会划船,但每次船上至多可载两个人; 二是在河的任一岸,如果野人数目超过修道士数,修道士会被 野人吃掉。 如果野人会服从任何一次过河安排,请规划一个确保修道士和 野人都能过河,且没有修道士被野人吃掉的安全过河计划。,解:首先选取描述问题状态的方法。在这个问题中,需要考虑两岸的修道士 人数和野人数,还需要考虑船在左岸还是在右岸。从而可用一个三元组来表 示状态 S=(m, c, b) 其中,m表示左岸的修道士人数,c表示左岸的野人数,b表示左岸的船数。 右岸的状态可由下式确定: 右岸修道士数 m=3-m 右岸野人数 c=3-c 右岸船数 b=1-b 在这种表示方式下,m和c都可取0、1、2、3中之一,b可取0和1中 之一。因此,共有442=32种状态。,这32种状态并非全有意义,除去不合法状态和修道士被野人吃 掉的状态,有意义的状态只有16种: 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=(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),操作是指用船把修道士或野人从河的左岸运到右岸,或从河的 右岸运到左岸。 每个操作都应当满足如下条件: 一是船至少有一个人(m或c)操作,离开岸边的m和c的减少 数目应该等于到达岸边的m和c的增加数目; 二是每次操作船上人数不得超过2个; 三是操作应保证不产生非法状态。,操作的表示: 用符号Pij表示从左岸到右岸的运人操作 用符号Qij表示从右岸到左岸的操作 其中: i表示船上的修道士人数 j表示船上的野人数 操作集 本问题有10种操作可供选择: F=P01, P10, P11, P02, P20,Q01, Q10, Q11, Q02, Q20,至此,该问题的状态空间(S,F,G)构造完成,这就完成了对 问题的状态空间表示。 为了求解该问题,根据该状态空间的16种可能达到的合法 状态和10种算符,构造状态转换图。,用状态空间表示,首先必须定义状态的描述形式,把问题的一切状态都表示出来,其次定义算符,完成状态的转换 问题的求解过程就是一个把算符不断地作用于状态的过程.如果在使用某个算符后得到的状态就是目标状态,就得到了问题的解.这个解就是从初始状态到目标状态所用算符构成的序列.,算符的一次使用,就使问题由一种状态转变为另一种状态.可能有多个算符序列都可使问题从初始状态变到目标状态,这就得到了多个解. 对任何一个状态,可使用的算符可能不止一个,这样由一个状态所生成的后继状态可能有多个.如何选择下一步的操作,由搜索策略决定.,搜索策略,搜索的基本概念 状态空间的盲目搜索 状态空间的启发式搜索,状态空间的盲目搜索,一般图搜索过程 广度优先和深度优先搜索 代价树搜索,状态空间搜索的基本思想 先把问题的初始状态作为当前扩展节点对其进行扩展,生成一组子节点,然后检查问题的目标状态是否出现在这些子节点中。 若出现,则搜索成功,找到了问题的解;若没出现,则再按照某种搜索策略从已生成的子节点中选择一个节点作为当前扩展节点。 重复上述过程,直到目标状态出现在子节点中或者没有可供操作的节点为止。所谓对一个节点进行“扩展”是指对该节点用某个可用操作进行作用,生成该节点的一组子节点。,算法的数据结构和符号约定 Open表:用于存放刚生成的节点 Closed表:用于存放已经扩展或将要扩展的节点 S0:用表示问题的初始状态 G:表示搜索过程所得到的搜索图 M:表示当前扩展节点新生成的且不为自己先辈的子节点集。,如何度量问题求解的性能 一般搜索策略可以通过下面四个准则来评价: 完备性:如果存在一个解答,该策略是否保证能够找到? 时间复杂性:需要多长时间可以找到解答? 空间复杂性:执行搜索需要多少存储空间? 最优性:如果存在不同的几个解答,该策略是否可以发现最高质量的解答?,如何度量问题求解的性能 搜索策略反映了状态空间或问题空间扩展的方法,也决定了 状态或问题的访问顺序。 在AI领域,状态空间图由初始状态和算子隐含地表示,经常是 无限的,它的复杂度根据下面三个值来表达: 分支因子b:任何节点的后继的最大个数 最浅的目标节点的深度d 状态空间中任何路径的最大长度m,状态空间搜索过程要点 求解一个能够满足目标条件的问题可以表达为搜索一个图以找到一个满足目标状态描述的节点问题。 搜索过程的要点如下: 起始节点:对应于初始状态描述 后继节点:把适用于某个节点状态描述的一些算符用来推算该节点而得到的新节点,称为该节点的后继节点 指针:从每个后继节点返回指向其父辈节点 检查各后继节点看是否为目标节点.,状态空间搜索过程要点 搜索过程扩展后继节点的次序 如果搜索是以接近起始节点的程度(由节点之间连结弧线的数目来衡量)依次扩展节点,称为广(宽)度优先搜索 如果搜索时首先扩展最新产生的节点,称为深度优先搜索,状态空间搜索过程要点 调整指针 扩展一个节点 生成出该节点的所有后继节点。 弧的费用 有一条弧连接ni和nj两个节点, 用C(ni, nj)表示从ni到nj的费用(耗散值)。 路径的耗散值 一条路径的耗散值等于连接这条路径各节点间所有耗散值的总和。用C(ni, nj)表示从ni到nj的路径的耗散值。,状态空间的一般搜索过程 主要数据结构 OPEN表:存放刚生成的节点,是还未扩展的节点.一般是端节点. CLOSED表:存放将要扩展或已扩展的节点.或者是已被扩展但还没有在搜索树中生成后继节点的端节点,或者是非端节点,一般图搜索过程 (1)把初始节点S0放入OPEN表,并建立目前只包含S0的图,记为G (2)检查OPEN表是否为空,若为空则问题无解,退出 (3)把OPEN表的第一个节点取出放入CLOSED表,记该节点为n (4)考察n是否为目标节点.如是,则问题得解,退出 (5)扩展节点n,生成一组子节点.把其中不是节点n先辈的那些节点记作集合M,并把这些子节点作为节点n的子节点加入G中 (6)针对M中子节点的不同情况,分别进行处理 对于那些未曾在G中出现过的M成员设置一个指向父节点(即n)的指针,并把它们放入OPEN表 对于那些先前已在G中出现过的M成员,确定是否需要修改它指向父节点的指针 对于那些先前已在G中出现并且已经扩展了的M成员,确定是否需要修改其后继节点指向父节点的指针 (7)按某种搜索策略对OPEN表中的节点进行排序 (8)转第(2)步,算法说明 (1) 上述过程是状态空间的一般图搜索算法,它具有通用性,后面所要讨论的各种状态空间搜索策略都是上述过程的一个特例。各种搜索策略的主要区别在于对Open表中节点的排列顺序不同。例如,广度优先搜索把先生成的子节点排在前面,而深度优先搜索则把后生成的子节点排在前面。,算法说明 对节点n扩展后,生成并记入M的子节点有以下三种情况: 该子节点来从未被任何节点生成过,由n第一次生成; 该子节点原来被其他节点生成过,但还没有被扩展,这一次又被n再次生成; 该子节点原来被其他节点生成过,并且已经被扩展过,这一次又被n再次生成。 上三种情况是对一般图搜索算法而言。对于状态空间是树状结构不会出现后两种情况,这是因为每个节点经扩展后生成的子节点都是第一次出现的 节点,不必检查并修改指向父节点的指针。,在第(6)步针对M中子节点的不同情况进行处理时,如果发生当第种情况,那么,这个M中的节点究竟应该作为哪一个节点的后继节点? 一般是由原始节点到该节点路径上所付出的代价来决定的,哪一条路经付出的代价小,相应的节点就作为它的父节点。 原始节点到该节点路径上的代价是指这条路经上的所有有向边的代价之和。 如果发生第种情况,除了需要确定该子节点指向父节点的指针外,还需要确定其后继节点指向父节点的指针。其依据也是由原始节点到该节点的路径上的代价。,在搜索图中,除初始节点外,任意一个节点都含有且只含有一个指向其父节点的指针。因此,由所有节点及其指向父节点的指针所构成的集合是一棵树,称为搜索树。,在搜索过程的第(4)步,一旦某个被考察的节点是目标节点,则搜索过程成功结束。由初始节点到目标节点路径上的所有操作就构成了该问题的解,而路径由第(6)步所形成的指向父节点的指针来确定。 如果搜索过程终止在第(2)步,即没有达到目标,且Open表中已无可供扩展的节点,则失败结束。,例子,2,S,1,3,2,10,11,OPEN表中的节点修改指针,2,S,1,3,2,8,9,10,11,CLOSE表中的节点修改指针,2,S,1,3,2,8,9,10,11,CLOSE表中的节点(8)的后裔(10)修改指针,这是一个通用的搜索过程,后面讨论的状态空间各种搜索策略都是其特例.各种搜索策略的主要区别就是对OPEN表中节点排序准则不同 算法结束后,将生成一个图G,称为搜索图。同时由于每个节点都有一个指针指向父节点,这些指针指向的节点构成G的一个支撑树,称为搜索树。 从目标节点开始,将指针指向的状态回串起来,即找到一条解路径.,盲目搜索,盲目 搜索策略只使用问题定义中的信息 宽度优先搜索 代价一致搜索 深度优先搜索 深度有限搜索 迭代加深搜索,广度优先搜索,基本思想 从初始节点S0开始逐层向下扩展,在第n层节点还没有全部搜索完之前,不进入第n+1层节点的搜索。Open表中的节点总是按进入的先后排序,先进入的节点排在前面,后进入的节点排在后面。,广度优先搜索,搜索算法: 把初始节点S0放入Open表中; 如果Open表为空,则问题无解,失败退出; 把Open表的第一个节点取出放入Closed表,并记该节点为n; 考察节点n是否为目标节点。若是,则得到问题的解,成功退出; 若节点n不可扩展,则转第(2)步; 扩展节点n,将其子节点放入Open表的尾部,并为每一个子节点设置指向父节点的指针,然后转第(2)步。,例 八数码难题。在33的方格棋盘上,分别放置了表有数字1、2、3、4、5、6、7、8的八张牌,初始状态S0,目标状态Sg,如下图所示。可以使用的操作有 空格左移,空格上移,空格右移,空格下移 即只允许把位于空格左、上、右、下方的牌移入空格。要求应用广度优先搜索策略寻找从初始状态到目标状态的解路径,3 1 8 4 7 6 5,1 2 3 8 4 7 6 5,S0 Sg,2 3 1 8 4 7 6 5,1,2,5,6,7,3,目标,8,4,广度优先搜索,Complete Yes (如果 b 是有限的) Time 1+b+b2+b3+ +bd + b(bd-1) = O(bd+1) Space O(bd+1) Optimal Yes (如果每步代价为1) 分支因子b:任何节点的后继的最大个数 最浅的目标节点的深度d 状态空间中任何路径的最大长度m 空间是大问题(和时间相比) 特点 缺点 当目标节点距离初始节点较远时会产生许多无用的节点,搜索效率低 优点 只要问题有解,则总可以得到解,而且是最短路径的解,深度优先搜索,基本思想 从初始节点S0开始,在其子节点中选择一个最新生成的节点进行考察,如果该子节点不是目标节点且可以扩展,则扩展该子节点,然后再在此子节点的子节点中选择一个最新生成的节点进行考察,依此向下搜索,直到某个子节点既不是目标节点,又不能继续扩展时,才选择其兄弟节点进行考察。,深度优先搜索,算法描述 (1) 把初始节点S0放入Open表中; (2) 如果Open表为空,则问题无解 ,失败退出; (3) 把Open表的第一个节点取出放入Closed表,并记该节点为n; (4) 考察节点n是否为目标节点。若是,则得到问题的解,成功退出; (5) 若节点n不可扩展,则转第(2)步; (6) 扩展节点n,将其子节点放入Open表的首部,并为每一个子节点设置 指向父节点的指针,然后转第(2)步。,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,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,S0 1,2 3 4 5 6,八数码难题的深度优先搜索如右图,一种改进的深度优先算法是有界深度优先搜索算法,深度限制为dm,八数码难题,深度优先搜索,Complete? No: 当空间为无限深度时 Time? O(bm): 如果 m 比d大很多则比较严重 Space? O(bm), 线性空间 Optimal? No 分支因子b:任何节点的后继的最大个数 最浅的目标节点的深度d 状态空间中任何路径的最大长度m 特点 缺点 如果目标节点不在搜索所进入的分支上,而该分支又是一个无穷分支,则就得不到解.因此该算法是不完备的 优点 如果目标节点不在搜索所进入的分支上,则可以较快地得到解,有界深度优先搜索,定义搜索深度的界限dm,当搜索深度达到了深度界限,而尚未出现目标节点时,就换一个分支进行搜索 搜索过程如下: (1)把初始节点S0放入OPEN表,置S0的深度d(S0)=0 (2)如果OPEN表为空,则问题无解,退出 (3)把OPEN表的第一个节点(记为节点n)取出,放入CLOSED表 (4)考查节点n是否为目标节点.若是,则求得了问题的解,退出 (5)如果节点n的深度d(节点n)=dm,则转第(2)步 (6)若节点n不可扩展,则转第(2)步 (7)扩展节点n,将其子节点放入OPEN表的首部,并为每一个子节点都配置指向父节点的指针,转第(2)步,2 3 1 8 4 7 6 5,2,3,4,5,6,7,8,9,a,b,c,d,目标,迭代加深搜索,对于有界深度搜索策略,有下面几点需要说明: 1)在有界深度搜索算法中,深度限制dm是一个很重要的参数。 2)深度限制dm不能太大。 3)有界深度搜索的主要问题是深度限制值dm的选取。 问题:但是对很多问题,我们并不知道该值到底为多少,直到该问题求解完成了,才可以确定出深度限制dm。,迭代加深搜索,改进方法-迭代加深搜索算法 : 先任意给定一个较小的数作为dm,然后按有界深度算法搜索,若在此深度限制内找到了解,则算法结束;如在此限度内没有找到问题的解,则增大深度限制dm,继续搜索。 迭代加深搜索是一种回避选择最优深度限制问题的策略,它是试图尝试所有可能的深度限制:首先深度为0,然后深度为1,然后为2,等等,一直进行下去。 问题: 迭代加深搜索看起来会很浪费,因为很多节点都要扩展多次。,迭代加深搜索,迭代加深搜索,迭代加深搜索,迭代加深搜索,迭代加深搜索,深度为d,分支因子为b的深度优先搜索生成的节点数为: NDLS = b0 + b1 + b2 + + bd-2 + bd-1 + bd 深度为d,分支因子为b的迭代加深搜索生成的节点数为 NIDS = (d+1)b0 + d b1 + (d-1)b2 + + 3bd-2 +2bd-1 + 1bd 对于 b = 10, d = 5, NDLS = 1 + 10 + 100 + 1,000 + 10,000 + 100,000 = 111,111 NIDS = 6 + 50 + 400 + 3,000 + 20,000 + 100,000 = 123,456 增加 = (123,456 - 111,111)/111,111 = 11%,迭代加深搜索,Complete? Yes Time? (d+1)b0 + d b1 + (d-1)b2 + + bd = O(bd) Space? O(bd) Optimal? Yes, 如果每步代价为1 分支因子b:任何节点的后继的最大个数 最浅的目标节点的深度d 状态空间中任何路径的最大长度m,其他问题,避免重复状态:由于扩展已经遇到并扩展过的状态可能造成时间的浪费 利用CLOSED表,如果当前节点与其中的某个节点相匹配的话,那么它可以被放弃而不去扩展,或者需要比较耗散值 如果单步耗散为常数时,代价广度优先搜索找到的总是最优路径 使用不完全信息的搜索: 无传感问题:Agent了解它的每个行动的结果,但是没有传感器。 从Agent可能到达的状态中搜索,而不是实际状态空间中搜索 偶发性问题:环境是部分可观察的,或者行动是不确定的。在每个行动后Agent能从感知器中得到新的信息。 其解答往往表现为树的形式,对树的分支的选择取决于树上结点接收到的感知信息,代价树搜索,在代价树中,可以用g(n)表示从初始节点S0到节点n的代价, 用c(n1, n2)表示从父节点n1到其子节点n2的代价。这样,对节 点n2的代价有:g(n2)=g(n1)+c(n1, n2)。代价树搜索的目的是 为了找到最佳解,即找到一条代价最小的解路径。,代价树的广度优先搜索算法: (1) 把初始节点S0放入Open表中,置S0的代价g(S0)=0; (2) 如果Open表为空,则问题无解 ,失败退出; (3) 把Open表的第一个节点取出放入Closed表,并记该节点为n; (4) 考察节点n是否为目标。若是,则找到了问题的解,成功退出; (5) 若节点n不可扩展,则转第(2)步; (6) 扩展节点n,生成其子节点ni(i=1, 2, ),将这些子节点放入Open表中,并为每一个子节点设置指向父节点的指针。按如下公式: g(ni)=g(n)+c(ni) i=1,2,. 计算各子结点的代价,并根据各子结点的代价对Open表中的全部结点按由 小到大的顺序排序。然后转第(2)步。,例 城市交通问题。设有5个城市,它们之间的交通线路如左图所示,图中的数字表示两个城市之间的交通费用,即代价。用代价树的广度优先搜索,求从A市出发到E市,费用最小的交通路线。,2 4 5,A,C1,B1,D1,D2,E1,E2,B2,C2,E3,3 4,3 4 2 3,城市交通图 城市交通图的代价树,解:代价树如右图所示。其中,红线为最优解,其代价为8,主要内容,概述 状态空间的搜索 状态空间的一般搜索过程 盲目搜索 启发式搜索 约束满足问题 博弈,启发式搜索(1),前面讨论的方法都是盲目的搜索方法,即都没有利用问题本身的特性信息,在决定要被扩展的节点时,都没有考虑该节点在解的路径上的可能性有多大,它是否有利于问题求解以及求出的解是否为最优 启发式搜索要用到问题自身的某些特性信息,以指导搜索朝着最有希望的方向前进 启发信息的强度 强:降低搜索工作量,但可能导致找不到最优解 弱:一般导致工作量加大,极限情况下变为盲目搜索,但可能可以找到最优解,启发式搜索(2),启发性信息和估价函数 用于指导搜索过程,且与具体问题有关的控制性信息称为为启发性信息 用于评价节点重要性的函数称为估价函数.记为 f(x) = g(x) + h(x) g(x)为从初始节点S0到节点x已经实际付出的代价 h(x)是从节点x到目标节点Sg的最优路径的估价代价,体现了问题的启发性信息,称为启发函数 f(x)表示从初始节点经过节点x到达目标节点的最优路径的代价估价值,其作用是用来评估OPEN表中各节点的重要性,决定其次序,启发式搜索(3),启发式就是要猜测: 从节点n开始,找到最优解的可能性有多大? 从起始节点开始,经过节点n,到达目标节点的最佳路径的费用是多少?(存在一个约束) g h,最佳优先搜索(1),思想:对每个节点使用估价函数,估计希望: 扩展最有希望未扩展的节点 主要包括: - 贪婪最佳优先搜索 - A*算法,最佳优先搜索(2),贪婪最佳优先搜索(1),启发失函数 f(n)=h(n) :从n到最近的目标节点代价的估计 这里采用hSLD(n): 从n到Bucharest的直线距离 贪婪算法扩展看来与目标最近的节点,贪婪最佳优先搜索(2),贪婪最佳优先搜索(3),贪婪最佳优先搜索(4),贪婪最佳优先搜索(5),特性 完备性 : NO 时间: O(bm) ,但是一个好的启发式可以得到很大的改进 空间: O(bm) ,保存所有的节点在内存中 最优: NO,A*算法(1),思想: 避免对已经扩展的路径进行再扩展 评价函数为: f(x) = g(x) + h(x) 把OPEN表中的节点按此函数的值从小到大进行排序 g(x)是对g*(x)的估价,g(x)0 h(x)是h*(x)的下界,即对所有的x, h(x)=h*(x) 其中: g*(x)是从初始节点S0到节点x的最小代价 h*(x)是从节点x到目标节点的最小代价,若有多个目标节点,则为 其中最小的一个,n,S,g*(n),h*(n),g,A*算法(2),f*(S) f*(S) = g*(S)+h*(S) = h*(S) 从S无约束地到达目标的最佳路经上的耗散值; g(n) 一般取实际走过的路径的费用和. g(n) g*(n) 随着算法的执行,由于指针的变动,g(n)会下降. h0 没有启发式信息;,A*算法(3),8数码问题 h(n) = “不在位”的将牌数 h(n) = 将牌“不在位”的距离和,A*算法(4),A*算法(5),宽度优先: 当问题为单位耗散值,且问题有解时,一定能找到最优解; f(n) = g(n) + h(n) g(n) h(n) = 0 h*(n),A*算法例子(1),A*算法例子(2),A*算法例子(3),A*算法例子(4),A*算法例子(5),A*算法可纳性,对于可解状态图(即从初始节点到目标节点有路径存在)所说,如果一个搜索算法能在有限步内终止,并且能找到最优解,则称该搜索算法是可纳的. 定理:A*算法是可纳的,即在有限步内终止,并且找到最优解 证明思路 对于有限图,A*算法一定会在有限步内终止 对应无限图,只要从初始节点到目标节点有路径存在,A*算法也必然终止 A*算法一定终止在最优路径上,A*算法的最优性和单调性,最优性 A*算法的搜索效率在很大程度上取决于h(x),在满足h(x)=h*(x)的前提下,h(x)的值越大越好. H(x)所携带的启发性信息越多,搜索时所扩展的节点数越少,搜索效率就越高 单调性限制 单调性限制是指h(x)满足如下两个条件 h(Sg)=0 设xj是节点xi 的任意子节点,则有 h(xi)-h(xj)=c(xi,xj) 其中:Sg是目标节点,c(xi,xj)是节点xi到子节点xj的边代价 A*算法的h(x)满足单调性限制时,可有下面的结论 若A*算法选择节点xn进行扩展,则g(xn)=g*(x) 由A*算法所扩展的节点序列其f值是非递减的,启发式对性能的影响(1),8数码问题,两个启发式函数: h1(n):不在目标位的棋子数目 h2(n):所有棋子到其目标位置的距离和(Manhattan距离),h1(S)=6 h2(s)=4+0+3+3+1+0+2+1=14,启发式对性能的影响(2),典型情况下的搜索代价: d=14 IDS=3,473,941节点 A*(h1)=539节点 A*(h2)=113节点 d=24 IDS 54,000,000,000节点 A*(h1)=39,135节点 A*(h2)=1,641节点,A*算法特性(1),完备性 : Yes,除非有无限多的节点具有f C*的节点,A*算法特性(2),但是对大多数搜索问题,搜索目标时的搜索空间的节点数仍然是答案深度
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 共享游艇合同范例
- 宾馆用品租用合同范例
- 安装石材护栏合同范例
- 委托经营协议合同模板
- 快餐外兑合同范例
- 技术合同服务费合同范例
- 工厂整体出租合同范例
- 2024年杭州客运上岗证口答题
- 2024年镇江赤峰客运从业资格证模拟考试
- 2024年长沙客运资格证考试
- 工业铂-铜热电阻检定规程-课件
- 2023年北京大学强基计划测试数学真题试卷
- 如何做好研究生导师
- 矿泉水厂建设项目实施方案
- 狼人杀上帝记录表
- 【知识解析】人民英雄纪念碑主题图集
- 信息组织元数据
- 关于高速公路交通安全设施的设置
- 供电可靠性(初级)理论普考题库及答案汇总-上(单选题)
- “双减”背景下初中数学分层作业设计实践探究 论文
- 氯化锂蒸发结晶干燥工艺
评论
0/150
提交评论