全局路径规划 - 04 A*算法
算法简介#
-
A*算法是一种静态路网中求解最短路径最有效的直接搜索方法。广泛应用于室内机器人的路径搜索、游戏动画路径搜索等;
-
A*算法结合了贪心算法(深度优先)和Dijkstra算法(广度优先),是一种启发式的搜索算法;
-
路径优劣评价公式为:,是在状态空间中从初始状态到状态的实际代价,是从状态到目标状态的最佳路径的估计代价。
-
A*算法使用了两个状态表,分别称为OpenList和CloseList,OpenList存储待考察的节点,CloseList存储已考察过的节点。
地图预处理#
-
将地图栅格化,把每一个正方形格子的中央称为节点;
-
确定栅格属性,即每一个格子有两种状态:可走和不可走;
-
定义两个列表集合:OpenList和CloseList,OpenList可以存储节点的g值;
-
确定起始节点和目标节点。
算法流程#
-
初始时,定义起始节点为父节点,移入CloseList中;
-
逐个检查与父节点i相邻的周围的节点,忽略不可走节点和已经存在于CloseList中的节点:
-
若节点不在OpenList中,则将节点的父节点记为节点,计算节点到节点的距离,计算,并把它们加入到OpenList中成为待考察的对象;
-
若节点已经在OpenList中,则检查这条路径是否更优,即经由节点到达节点是否有更小的值:计算节点到节点的距离,若小于OpenList中节点存储的,则这条路径更优,更新OpenList中节点存储的值,并将节点的父节点记为节点,若这条路径不是更优,则不进行任何操作;
-
-
计算OpenList中所有节点的值:,从OpenList中取出值最小的节点,放到CloseList中,并把它作为新的父节点;
- 这里启发式函数一般用曼哈顿距离或者欧氏距离来替代。
-
重复步骤2和步骤3,不断重复,直到搜索到目标节点,完成路径搜索。搜索出路径的结果可以直接遍历父节点得到。
代码实现#
待更新,后续会补到GitHub上
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章