第9章启发式搜索案例.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 第9章 启发式搜索 第二部分 状态空间搜索 使用评估函数 除了搜索过程不是从开始节点统一向外扩展外,下面描述的搜索过程有点像广度优先搜索,不同的是,它会优先顺着有启发性和具有特定信息的节点搜索下去,这些节点可能是到达目标的最好路径。我们称这个过程为最优(best-first)或启发式搜索。 其基本思想: 1)假定有一个启发式(评估)函数, 可以帮助确定下一个要扩展的最优节点。我们采用一个约定,即 的值小表示找到了好的节点(这个函数基于指定问题域的信息,它是状态描述的一个实数值函数)。 2)下一个要扩展的节点n是 值最小的节点(假定节点扩展产生一个节点的所有后继)。 3)当下一个要扩展的节点是目标节点时过程终止。 我们常常可以为最优搜索指定好的评估函数。例如在8数码问题中,可以用不在正确位置的数字个数作为状态描述好坏的一个度量: =位置不正确的数字个数(和目标相比) 在搜索过程中采用这个启发式函数将产生下图所示的图,每个节点的数值是该节点的值。 这个例子表明,在搜索过程中我们需要偏向有利于回溯到早期路径的搜索。因此我们加了一个“深度因子”给 : 其中: 是对图中节点n的“深度”估计(即从开始节点到n的最短路径长度), 是对节点n的启发或评估。 像前面一样, 如果 =不正确位置的数字个数(和目标相比), =搜索图中节点n的深度, 可以得到下图 : 两个重要的问题: 第一,我们如何为最优搜索决定评估函数? 第二,最优搜索的特性是什么?它能找到到达目标节点的好路径吗? 我们把上面两个问题放到以后讨论,这里主要讨论最优搜索的形式表示。 一个通用的图搜索算法 GRAPHSEARCH 1)生成一个仅包含开始节点N0的搜索树Tr。把N0放在一个称为OPEN的有序列表中。 2)生成一个初始值为空的列表CLOSED。 3)如果OPEN为空,则失败并退出。 4)选出OPEN中的第一个节点,并将它从OPEN中移出,放入CLOSED中,称该节点为n。 5)如果n是目标节点,顺着Tr中的弧从n回溯到n0找到一条路径,获得解决方案,则成功退出(弧在第6步产生)。 6)扩展节点n,生成n的后继节点集M(放入OPEN)。通过在Tr中建立从n到M中每个成员的弧生成n的后继。 7)按照任意的模式或启发式方式对列表OPEN重新排序。 8)返回步骤3。 这个算法可用来执行最优搜索、广度优先搜索或深度优先搜索。 在广度优先搜索中,新节点只要放在OPEN的尾部即可(先进先出, FIFO),节点不用重排。 在深度优先搜索中,新节点放在OPEN的开始(后进先出, LIFO)。 在最优(也叫启发式)搜索中,按照节点的启发式方式来重排OPEN。 算法A* 用最优搜索算法详细说明GRAPHSEARCH。最优搜索算法根据函数 的增加值,(在第7步)重排OPEN中的节点。把GRAPHSEACH的这种算法称为算法A*。 设h(n)=节点n和目标节点(遍及所有可能的目标节点以及从n到它们的所有可能路径)之间的最小代价路径的实际代价。 设g(n)=从开始节点n0到节点n的一个最小代价路径的代价。 那么f(n)=g(n)+h(n)就是从n0到目标节点并且经过节点n的最小代价路径的代价。注意f(n0)=h(n0)是从n0到目标节点的一个(不受限的)最小代价路径的代价。 对每个节点n,设 (启发因子)是h(n)的某个估计, (深度因子)是由A*发现的到节点n的最小代价路径的 代价。在算法A*中,我们用 。 注意,如果算法A*中的 恒等于0,就成为相同代价搜索。 如果要搜索的隐式图不是一棵树(有超过一个动作序列能从开始状态到达相同的环境状态)会怎样呢? 引深问题: 把GRAPHSEARCH中的第6步改为: 6)扩展节点n,生成后继集合М(放入OPEN)。 n的双亲不能在М中。通过在Tr中建立从n到М中每个成员的弧生成n的后继。 考虑到更长的循环,把第6步改为: 6)扩展节点n,生成后继集合М(放入OPEN)。 n的祖先不能在М中。通过在Tr中建立从n到М中每个成员的弧生成n的后继。 算法A*:

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档