先介绍几个概念有助于理解Astar算法,
启发式搜索:对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。可以省略大量不必要的搜索,提高效率。
估价函数:从当前节点移动到目标节点的预估费用,这个估计就是启发式的,在寻路问题和迷宫问题中,我们通常用曼哈顿估价函数(Manhattan)预估费用。 (如果搜索区域的划分不是正方形,就不用Manhattan算法(|x|+|y|),换成其他的)
Astar算法与BFS: BFS是Astar算法的一个特例。对BFS算法,从当前节点拓展出来的每一个没有被访问过的节点都要放入队列进一步拓展,正因为如此,BFS算法的估计函数H永远为0,没有启发式的信息,所以可以认为是最烂的Astar算法。
开启列表: 将要被遍历的点的集合。
关闭列表:已经被遍历的点的集合。

Astar算法特点: 理论上是时间最优的,缺点是空间呈指数增长。(IDAstar 算法:这种算法被称为迭代加深Astar算法,可以有效的解决 Astar 空间增长带来的问题,甚至可以不用到优先级队列。)

搜索区域 (绿色–起点A,红色–终点B,蓝色–墙)

搜索区域被划分成了方形网格(二维数组),像这样简化搜索区域,是寻路的第一步。

二维数组的每一个元素都是一个方格,被标记为 可通过不可通过,路径就是从起点到终点所经过的方块的集合。(通过的路径也可以叫节点的集合,因为路径不一定要分割成方块,完全可以是菱形,三角形或是其他形状,而节点可以放在形状的任意位置,所以简单通用。)

开始搜索
从A开始,通过查找相邻方格,向外拓展直至找到B点。

  1. 从A开始将其存入一个“开启列表”(待检查方格的列表)。
  2. 寻找起点A周围所有的可通行方格(忽略墙,水等不可通行的地形方格),将他们加入“开启列表”。然后设置起点A为他们的父方格
  3. 从”开启列表“删除起点A,将其存入一个“关闭列表”(保存所有不需要再次检查的方格)。如图暗绿色方格是起始点A的中心。它被用浅蓝色描边,以表示它被加入到关闭列表中了。所有可通行相邻方格都在”开启列表“之中,被用浅绿色描边。每个方格都有一个灰色指针指向父方格。

    接着我们就要开始选择开启列表中的临近方格,选中之后重复前边的过程。但是,如何选择临近方格呢?

路径评分
选择临近方格的关键是这个等式:F = G + H,我们选取F值最低的方格。
G = 从 起点 开始到 待选方格 的路径的移动耗费。(是可以明确计算出的,而且要实时保持是最短最优的)
H = 临近方格 到 终点B 的预估移动耗费。(大致预测,假设所有方格可通行忽略了障碍物对移动耗费的影响,通常越靠近终点越小)

计算方法:
G: 通常我们令垂直移动一格耗费为1,水平移动一格耗费为1,对角线移动一格为1.414。但是为了简化,我们要用近似值,因为整数对计算机而言计算更便捷,垂直耗费10,水平耗费10,对角线耗费14。(如果不用简化方法,寻路将变得十分缓慢)
求值的方法就是取其父节点的G值,再根据它相对于父节点的位置(水平,垂直,对角线)取耗费值,二者相加。
H: H值得估算方法有多种,本文仅介绍一种–曼哈顿f方法(Manhattan)。它计算的是当前格到目标格之间水平和垂直得方格的数量之和,忽略对角线,障碍物,只是对剩余距离的一个估算,非实际值,这也是这类方法被称为启发式的原因。

F = G + H, 如下图,F,G,H的值分别位于方格的左上角,左下角,右下角。


继续搜索
继续搜索时,从开启列表中选择F值最低的方格(如果有两个F值相同的方格,通常后存入列表的格子会更快捷)。然后:
4. 将它从开启列表删除,存入关闭列表。
5. 检查所有相邻的方格,略过已经在关闭列表中的和不可通过的格子,将他们存入开启列表,如果它们不在开始列表中,就将当前节点作为他们的父节点。
6. 如果某个相邻格已经在开启列表中,则通过判断G值,检查当前当前路径是否更好,如果新的G值更低,则将此相邻节点的父节点改为当前节点,从新计算它的G和H值,如果不是就什么也不做。

经过上边的过程,我们会很快找到终点。

显示路径
从目标格开始,按箭头方向朝父节点移动,最终会回到起始格,这条路径就是我们所找到的最优路径。


方法总结
1.将起始格添加入开启列表。
2.重复如下操作:
a. 寻找开启列表中F值最低的格子,称其为当前格。
b. 把它存入关闭列表,从当前列表中删除。
c. 对于相邻格,如果不可通过或者已在关闭列表,则略过。
反之 ①如果它不在开启列表就将它存入开启列表,以当前节点为父节点,计算相邻格的F,G,H.
②若已经存在于开启列表,则用G值检查新的路径是否更好,如果G值耕地就把这一相邻格的父节点改 为当前格,重新计算相邻格的G和H。 如果保持开启列表按F值排序,改变后就需要重新对开启列表进行排序。
d. 停止,
①如果没有找到目标格,而开启列表已经空了,就表示路径不存在。
②如果目标格被添加如关闭列表,这是路径被找到。
3. 保存路径,从目标格开始沿着父节点移动直至回到开始节点。

Astar算法基本概念及其实现相关推荐

  1. AStar 算法 ---在Unity当中实现

    介绍 AStar算法,是一种在静态路网中求最短路径的一种算法,是一种启发式的算法.其中,算法当中起点与终点的距离,与算法当中的预估距离越接近,则搜索速度越快. 其实,在AStar算法当中,他的搜索路径 ...

  2. Python数据结构与算法—基本概念

    数据结构基本概念 数据结构: 程序 = 数据结构 + 算法 1.数据:即信息的载体,是能够输入到计算机中并且能被计算机识别.存储和处理的符号总称. 2.数据元素:是数据的基本单位,又称之为记录(Rec ...

  3. 分水岭算法c语言,分水岭算法的概念及原理

    (转至网络) 分水岭算法的概念及原理 分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值 ...

  4. C语言之算法的概念和特点

    一.算法的概念 对算法最通俗易懂的说法是:解决问题的方法和步骤 一个程序主要包块两个方面的信息: (1)数据:在程序中要用到那些数据,以及这些数据的类型和数据的组成形式. (2)算法:解决某个问题所选 ...

  5. 计算机算法的概念教案,《算法的概念》教学设计

    一.教材背景分析 1.教材的地位和作用 <算法的概念>是全日制普通高级中学教科书人教B版必修3第一章<算法初步>的第一节内容,<算法初步>是课程标准的新增内容,它是 ...

  6. 计算机程序概念内涵,算法的概念的教学设计

    <算法的概念的教学设计>由会员分享,可在线阅读,更多相关<算法的概念的教学设计(7页珍藏版)>请在人人文库网上搜索. 1.算法的概念的教学设计杭二中分校 陈海玲一内容和内容解析 ...

  7. A-Star算法探索和实现(一)

    什么是A-Star算法? A*搜寻算法俗称A星算法,又叫A-Star算法.A*算法是比较流行的启发式搜索算法之一,被广泛应用于路径优化领域(引用自百度百科).在游戏开发中,我们可以将A*算法作为一种敌 ...

  8. 利用Astar算法实现飞行轨迹的三维规划(基于Matlab代码实现)

    目录  1 概述     1.1研究背景  2 运行结果  3 Matlab代码实现  4 参考文献 1 概述 随着自动化技术的发展,现代航空技术水平有了前所未有的提高,促进了无人机在军事.民用领域的 ...

  9. 计算机算法的概念教案,高中信息技术 1.2 算法和算法的描述教案

    <高中信息技术 1.2 算法和算法的描述教案>由会员分享,可在线阅读,更多相关<高中信息技术 1.2 算法和算法的描述教案(6页珍藏版)>请在人人文库网上搜索. 1.1-2节 ...

  10. 计算机算法的概念教案,算法概念的教学

    算法初步是必修内容中唯一新增的章节,要教好它,自己先要接受它.喜欢它,在教学中,算法思想的引入则是重中之重,为了提高学生学习算法的积极性,要更多关注算法的"数学味". 在西方很早就 ...

最新文章

  1. IIC通信控制的AD5259------在调试过程中遇到的奇葩问题
  2. sse php,sse.php · Gitee 极速下载/modphp - Gitee.com
  3. 方差分析 球形检验_重复测量数据的方差分析
  4. window如何将CMD以管理员身份添加到右键菜单?
  5. QTableWidget去掉默认行号
  6. Lucene –快速添加索引和搜索功能
  7. pod 挂载点 mysql_Pod挂载(Secret )
  8. SpringBoot基础篇(二):HelloWorld细节探究
  9. mysql 重命名索引_mysql增删改字段,重命名替换字段
  10. py3+urllib+re,爬虫下载捧腹网图片
  11. 异常:org.springframework.http.converter.HttpMessageNotReadableException
  12. 孤立森林(iForest - Isolation Forest)
  13. Allegro cadence下载安装
  14. 传奇服务器怎么修改升级武器成功,四次升级武器成功
  15. 影像自动解译_遥感影像的解译-分类
  16. Systemverilog:面向对象编程与面向过程编程区别
  17. 【XHashx运维笔记】1+X初级B卷
  18. Java猿社区—Apache Commons Collections—CollectionUtils工具类详解
  19. 安装ENVI报错“Internal Error 25259. DirectX -9”的解决方法
  20. Qt 程序名称加上空格

热门文章

  1. 归并排序时间复杂度过程分析
  2. QPSK调制及MATLAB实现
  3. 软考高级-系统架构师-论文
  4. 解决Stata 15 的中文乱码问题
  5. ITU-R BT601/BT709 BT656/BT1120区别与联系
  6. MyBatis的下载
  7. 军用软件开发周期和文档
  8. mysqldump 快还是navicat快_剪辑软件评测:选喵影工厂、爱剪辑还是快剪辑?
  9. ubantu分区知识
  10. 常用的电子产品安规基础标准 - IEC Standards(CB转换或各国安规标准)