全局路径规划 - 04 A*算法

算法简介#

  1. A*算法是一种静态路网中求解最短路径最有效的直接搜索方法。广泛应用于室内机器人的路径搜索、游戏动画路径搜索等;

  2. A*算法结合了贪心算法(深度优先)和Dijkstra算法(广度优先),是一种启发式的搜索算法;

  3. 路径优劣评价公式为:f(n)=g(n)+h(n)g(n)是在状态空间中从初始状态到状态n的实际代价,h(n)是从状态n目标状态的最佳路径的估计代价

  4. A*算法使用了两个状态表,分别称为OpenListCloseListOpenList存储待考察的节点,CloseList存储已考察过的节点。

地图预处理#

  1. 将地图栅格化,把每一个正方形格子的中央称为节点;

  2. 确定栅格属性,即每一个格子有两种状态:可走和不可走;

  3. 定义两个列表集合:OpenList和CloseList,OpenList可以存储节点的g值;

  4. 确定起始节点和目标节点。

算法流程#

  1. 初始时,定义起始节点为父节点,移入CloseList中;

  2. 逐个检查与父节点i相邻的周围的节点j,忽略不可走节点和已经存在于CloseList中的节点:

    • 若节点j不在OpenList中,则将节点j的父节点记为节点i,计算节点i到节点j的距离d,计算g(j)=g(i)+d,并把它们加入到OpenList中成为待考察的对象;

    • 若节点j已经在OpenList中,则检查这条路径是否更优,即经由节点i到达节点j是否有更小的g值:计算节点i到节点j的距离d,若g(i)+d小于OpenList中节点j存储的g(j),则这条路径更优,更新OpenList中节点j存储的gg(j)=g(i)+d,并将节点j的父节点记为节点i,若这条路径不是更优,则不进行任何操作;

  3. 计算OpenList中所有节点的f值:f(n)=g(n)+h(n),从OpenList中取出f值最小的节点,放到CloseList中,并把它作为新的父节点i

    • 这里启发式函数h(n)一般用曼哈顿距离或者欧氏距离来替代。
  4. 重复步骤2和步骤3,不断重复,直到搜索到目标节点,完成路径搜索。搜索出路径的结果可以直接遍历父节点得到。

代码实现#

待更新,后续会补到GitHub上

posted @   HeyRay_Yang  阅读(475)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
点击右上角即可分享
微信分享提示
主题色彩