初识A算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
初识A算法

初识A算法 自己收集整理的 错误在所难免 仅供参考交流 如有错误 请指正!谢谢      初识A*算法 A*算法在人工智能中是一种典型的启发式搜索算法 为了说清楚A*算法 先解释何谓启发式算法 一、何谓启发式搜索算法   在说它之前先提提状态空间搜索 状态空间搜索就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程 通俗点说 就是在解一个问题时 找到一条解题的过程可以从求解的开始到问题的结果 由于求解问题的过程中分枝有很多 主要是求解过程中求解条件的不确定性 不完备性造成的 使得求解的路径很多这就构成了一个图 说这个图就是状态空间 问题的求解实际上就是在这个图中找到一条路径可以从开始到结果 这个寻找的过程就是状态空间搜索   常用的状态空间搜索有深度优先和广度优先 广度优先是从初始状态一层一层向下找 直到找到目标为止 深度优先是按照一定的顺序前查找完一个分支 再查找另一个分支 以至找到目标为止   前面说的广度和深度优先搜索有一个很大的缺陷就是他们都是在一个给定的状态空间中穷举 这在状态空间不大的情况下是很合适的算法 可是当状态空间十分大 且不预测的情况下就不可取了 他的效率实在太低 甚至不可完成 在这里就要用到启发式搜索了   启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估 得到最好的位置 再从这个位置进行搜索直到目标 这样可以省略大量无畏的搜索路径 提到了效率 在启发式搜索中 对位置的估价是十分重要的 采用了不同的估价可以有不同的效果 先看看估价是如何表示的   启发中的估价是用估价函数表示的 如:   f(n) = g(n) + h(n)   其中f(n)是节点n的估价函数 g(n)实在状态空间中从初始节点到n节点的实际代价 h(n)是从n到目标节点最佳路径的估计代价 在这里主要是h(n)体现了搜索的启发信息 因为g(n)是已知的 如果说详细点 g(n)代表了搜索的广度的优先趋势 但是当h(n)g(n)时 可以省略g(n),而提高效率 这些就深了 不懂也不影响啦!我们继续看看何谓A*算法 二、初识A*算法   启发式搜索其实有很多的算法 比如:局部择优搜索法、最好优先搜索法等等 当然A*也是 这些算法都使用了启发函数 但在具体的选取最佳搜索节点时的策略不同 象局部择优搜索法 就是在搜索的过程中选取最佳节点后舍弃其他的兄弟节点 父亲节点 而一直得搜索下去 这种搜索的结果很明显 由于舍弃了其他的节点 可能也把最好的节点都舍弃了 因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳 最好优先就聪明多了 他在搜索时 便没有舍弃节点(除非该节点是死节点) 在每一步的估价中都把当前的节点和以前的节点的估价值比较得到一个最佳的节点 这样可以有效的防止最佳节点的丢失 那么A*算法又是一种什么样的算法呢?其实A*算法也是一种最好优先的算法 只不过要加上一些约束条件罢了 由于在一些问题求解时 我们希望能够求解出状态空间搜索的最短路径 也就是用最快的方法求解问题 A*就是干这种事情的!我们先下个定义 如果一个估价函数可以找出最短的路径 我们称之为可采纳性 A*算法是一个可采纳的最好优先算法 A*算法的估价函数可表示为:   f(n) = g(n) + h(n)   这里 f(n)是估价函数 g(n)是起点到终点的最短路径值 h(n)是n到目标的最断路经的启发值 由于这个f(n)其实是无法预先知道的 所以我们用前面的估价函数f(n)做近似 g(n)代替g(n) 但g(n)=g(n)才可(大多数情况下都是满足的 可以不用考虑) h(n)代替h(n) 但h(n)=h(n)才可(这一点特别的重要) 可以证明应用这样的估价函数是可以找到最短路径的 也就是可采纳的 应用这种估价函数的最好优先算法就是A*算法   举一个例子 其实广度优先算法就是A*算法的特例 其中g(n)是节点所在的层数 h(n)=0 这种h(n)肯定小于h(n) 所以由前述可知广度优先算法是一种可采纳的 实际也是   再说一个问题 就是有关h(n)启发函数的信息性 h(n)的信息性通俗点说其实就是在估计一个节点的值时的约束条件 如果信息越多或约束条件越多则排除的节点就越多 估价函数越好或说这个算法越好 这就是为什么广度优先算法的那么臭的原因了 谁叫它的h(n)=0 一点启发信息都没有 但在游戏开发中由于实时性的问题 h(n)的信息越多 它的计算量就越大 耗费的时间就越多 就应该适当的减小h(n)的信息 即减小约束条件 但算法的准确性就差了 这里就有一个平衡的问题  A*算法在人工智能领域常见  深入A*算法 1、A*算法的程序编写原理   A*算法是最好优先算法的一种 只是有一些约束条件而已 先来看看最好优先算法是如何编写的 如图有如下的状态空间:

文档评论(0)

pep2233 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档