路径规划算法学习Day4-Astar算法


前言

路径规划算法学习Day3-基于栅格法的Dijkstra算法


1、A*(Astar)算法

1.1、原理

A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。

公式表示为: f(n)=g(n)+h(n),
其中:
f(n) :是从初始状态经由状态n到目标状态的代价估计,
g(n):是在状态空间中从初始状态到状态n的实际代价,
h(n):是从状态n到目标状态的最佳路径的估计代价。
对于路径搜索问题,状态就是图中的节点,代价就是距离

h(n)的选取保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取(或者说h(n)的选取)。
我们以d(n)表达状态n到目标状态的距离,那么h(n)的选取大致有如下三种情况:
1)如果h(n)< d(n)到目标状态的实际距离,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。
2)如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。
3)如果 h(n)>d(n),搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。

A* 算法是在迪杰斯特拉算法的基础上进行改进的一种算法。与之不同的是,A算法是一种启发式搜索,不会像dijkstra算法一样对整个地图都进行遍历,A算法是有方向的遍历。

1.2、启发式搜索

启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜索,达到减少搜索范围、降低问题复杂度的目的,这种利用启发信息的搜索过程称为启发式搜索。

这种搜索方式优点是搜索快,提高了效率,缺点就是得到的解有可能是次优解也有可能什么都得不到。一句话就是牺牲了精度得到了效率。

2、总结

Dijkstra与A* 对比
相同点:
两者都是以寻找最短路径为目的的算法。
不同点:
Dijkstra算法遍历的时候是对4周平等对待,没有区分的盲目进行遍历。
A* 算法是在迪杰斯特拉算法的基础上进行改进的一种算法。与之不同的是,A* 算法是一种启发式搜索,不会像dijkstra算法一样对整个地图都进行遍历,A* 算法是有方向的遍历。它会对周围各点进行评估,然后再进行搜索。

后续程序依旧是基于栅格进行,用matlab实现

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要在Qt中实现A*路径规划算法和拓扑图,您可以遵循以下步骤: 1.创建节点和边 首先,您需要创建节点和边,以便在拓扑图上进行路径规划。您可以使用Qt Graphics View框架中的QGraphicsItem类来创建节点和边,以便它们可以在场景中进行绘制。您还可以使用自定义数据结构来存储节点和边的信息,例如节点的位置、连接的边以及边的权重等。 2.实现A*算法 接下来,您需要实现A*算法来查找两个节点之间的最短路径。A*算法使用一个启发式函数来评估每个节点的代价,并选择最佳路径。您可以使用以下步骤来实现A*算法: - 创建一个开放列表和一个关闭列表来存储待评估的节点和已评估的节点。 - 将起点添加到开放列表中,并设置其代价为0。 - 重复以下步骤,直到到达终点或者开放列表为空: - 从开放列表中选取代价最小的节点。 - 如果该节点是终点,则路径已找到。否则,将其从开放列表中移除并添加到关闭列表中。 - 遍历与该节点相邻的所有节点,计算它们的代价并将它们添加到开放列表中。 - 如果该节点已经在开放列表中,并且新的代价比原来的代价更小,则更新该节点的代价和父节点。 3.绘制路径 一旦找到了最短路径,您可以使用Qt Graphics View框架中的QGraphicsPathItem类来在场景中绘制路径。 4.处理用户输入 最后,您需要处理用户输入,以便他们可以选择起点和终点,并触发路径查找和绘制。您可以使用Qt Graphics View框架中的鼠标事件来处理用户点击节点的操作,并使用信号和槽机制来触发路径查找和绘制。 需要注意的是,A*算法在复杂度上比较高,因此对于较大的拓扑图,可能需要优化算法或者使用其他的路径规划算法
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写Bug那些事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值