基于图的A*的搜索算法

A*算法是一种启发式搜索算法,基于Dijkstra算法并加入启发式函数,如欧氏距离或曼哈顿距离,用于找到LM1到LM6的最短路径。文章介绍了算法的核心公式,使用openList和closeList容器避免重复计算,并提供了代码链接,其中将邻接矩阵优化为邻接表。作者欢迎指正错误并提供了参考资料。
摘要由CSDN通过智能技术生成

A是一种启发式的搜索算法,是基于Dijkstar算法的一种改进,A具有启发式。

废话不多说,先上效果图

图中LM1-LM6可以表示站点、城市、火车站等概念(统一可以用x,y来表示的点)

搜索LM1到LM6的最短路径

蓝色的线表示通过A*算法搜索出来的最短路径,红色的线表示站点之间存在的路径(或者说道路),

A*算法的核心算法计算公式:

f为所经路径的所有代价值

g为从起点处到当前节点的代价值

h为当前节点到目标点的代价值

h有包含启发式函数:一般是欧氏距离或者曼哈顿距离等公式。

维护两个容器openList,closeList

openList将当前节点所有可到达节点放入容器中,并且按照节点的f,h值的大小进行排序(此操作在遍历栅格类型的地图可能造成大量重复计算),将f值最小的节点当成下一个遍历中心节点.

closeList将遍历过的节点放入容器中,避免重复计算,同时可以用于路径回溯

代码链接:

A_Star git 链接

本代码对参考代码做了改进,节点之间的路径用邻接矩阵表示修改成邻接表来表示。

新人萌新一枚,如有错误请联系改正,参考资料如有侵权请联系删除。

参考资料

使用A*算法求最短路径

使用A*算法求最短路径代码链接

图的邻接矩阵与邻接表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于您的问题,改进A*算法与DWA算法的融合可以用于路径规划和机器人运动控制等方面。下面是一种可能的实现方式: 1. 首先,我们需要了解A*算法和DWA算法的基本原理和步骤。 - A*算法是一种启发式搜索算法,用于在或网格中找到最短路径。它通过维护一个开放列表和一个关闭列表来搜索路径,并使用估计函数(启发式函数)来选择下一个节点。 - DWA算法(Dynamic Window Approach)是一种基于运动模型的机器人运动控制方法。它通过评估机器人在当前速度条件下的运动窗口,选择最优速度和转向命令。 2. 在融合A*算法和DWA算法时,我们可以按照以下步骤进行操作: - 使用A*算法计算出一条初始路径。这条路径通常是在离散化的地或网格中得到的,其中每个点代表机器人可以行走的位置。 - 将初始路径作为DWA算法的输入,根据机器人的运动模型和环境条件,使用DWA算法生成一系列速度和转向命令。 - 对于每个生成的速度和转向命令,使用A*算法进行路径评估。评估的方法可以是计算路径的代价函数,包括路径长度、距离障碍物的安全距离等。 - 根据评估结果,选择最优的速度和转向命令,并执行机器人的运动。 3. 在实际实现中,还需要考虑以下几个方面: - 如何定义A*算法的启发式函数,以便能够准确地评估路径的代价。 - 如何设置DWA算法中的运动窗口,以覆盖机器人可能的速度和转向范围。 - 如何处理动态环境的变化,例如障碍物的移动和新障碍物的出现。 - 是否需要进行路径平滑处理,以减少机器人运动的抖动和不稳定性。 需要注意的是,以上提供的是一种可能的实现方式,具体的实现细节可能根据具体问题和需求进行调整。希望对您有所帮助!如果有更多问题,欢迎继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值