- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
A*寻路初探
A*寻路初探 GameD
作者: PatrickLester
译者:Panic2005年3月18日
译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里
有个模糊的概念。这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为学习人工智能的
开始。
这篇文章非常知名,国内应该有不少人翻译过它,我没有查找,觉得翻译本身也是对自身英文水平的
锻炼。经过努力,终于完成了文档,也明白的A*算法的原理。毫无疑问,作者用形象的描述,简洁
诙谐的语言由浅入深的讲述了这一神奇的算法,相信每个读过的人都会对此有所认识(如果没有,那
就是偶的翻译太差了--b)。
现在是2005年7月19日的版本,应原作者要求,对文中的某些算法细节做了修改。
原文链接:http: /reference/articles/article2003.asp
原作者文章链接:http: /games/aStarTutorial.htm
以下是翻译的正文。
会者不难,A*(念作A星)算法对初学者来说的确有些难度。
这篇文章并不试图对这个话题作权威的陈述。取而代之的是,它只是描述算法的原理,使你可以在进
一步的阅读中理解其他相关的资料。
最后,这篇文章没有程序细节。你尽可以用任意的计算机程序语言实现它。如你所愿,我在文章的末
尾包含了一个指向例子程序的链接。 压缩包包括C++和BlitzBasic两个语言的版本,如果你只是
想看看它的运行效果,里面还包含了可执行文件。
我们正在提高自己。让我们从头开始。。。
假设有人想从A点移动到一墙之隔的 B点,如下图,绿色的是起点A,红色是
终点B,蓝色方块是中间的墙。
[图1]
你首先注意到,搜索区域被我们划分成了方形网格。像这样,简化搜索区域,
是寻路的第一步。这一方法把搜索区域简化成了一个二维数组。数组的每一个
元素是网格的一个方块,方块被标记为可通过的和不可通过的。路径被描述为
从A到B我们经过的方块的集合。一旦路径被找到,我们的人就从一个方格的
中心走向另一个,直到到达目的地。
这些中点被称为“节点”。当你阅读其他的寻路资料时,你将经常会看到人们讨
论节点。为什么不把他们描述为方格呢?因为有可能你的路径被分割成其他不
是方格的结构。他们完全可以是矩形,六角形,或者其他任意形状。节点能够
被放置在形状的任意位置-可以在中心,或者沿着边界,或其他什么地方。我
们使用这种系统,无论如何,因为它是最简单的。
开始搜索
正如我们处理上图网格的方法,一旦搜索区域被转化为容易处理的节点,下一
步就是去引导一次找到最短路径的搜索。在A*寻路算法中,我们通过从点A
开始,检查相邻方格的方式,向外扩展直到找到目标。
我们做如下操作开始搜索:
1,从点A开始,并且把它作为待处理点存入一个“开启列表”。开启列表就
像一张购物清单。尽管现在列表里只有一个元素,但以后就会多起来。你的路
径可能会通过它包含的方格,也可能不会。基本上,这是一个待检查方格的列
表。
2,寻找起点周围所有可到达或者可通过的方格,跳过有墙,水,或其他无
法通过地形的方格。也把他们加入开启列表。为所有这些方格保存点A作为“父
方格”。当我们想描述路径的时候,父方格的资料是十分重要的。后面会解释它
的具体用途。
3,从开启列表中删除点A,把它加入到一个“关闭列表”,列表中保存所有
不需要再次检查的方格。
在这一点,你应该形成如图的结构。在图中,暗绿色方格是你起始方格的中心。
它被用浅蓝色描边,以表示它被加入到关闭列表中了。所有的相邻格现在都在
开启列表中,它们被用浅绿色描边。每个方格都有一个灰色指针反指他们的父
方格,也就是开始的方格。
[图2]
接着,我们选择开启列表中的临近方格,大致重复前面的过程,如下。但是,
哪个方格是我们要选择的呢?是那个 F值最低的。
路径评分
选择路径中经过哪个方格的关键是下面这个等式:
F=G+H
这里:
*G= 从起点A,沿着产生的路径,移动到网格上指定方格的移动耗费。
*H= 从网格上那个方格移动到终点 B的预估移动耗费。这经常被称为启
发式的,可能会让你有点迷惑。这样叫的原因是因为它只是个猜测。我们没办
法事先知道路径的长度,因为路上可能存在各种障碍(墙,水,等等)。虽然本
文只提供了一种计算 H的方法,但是你可以在网上找到很多其他的方法。
我们的路径是通过反复遍历开启列表并且选择具有最低F值的方格来生成的。
文章将对这个过程做更详细的描述。首先,我们更深入的看看如何计算这个方
程。
正如上面所说,G表示沿路径从起点到当
文档评论(0)