【路径规划算法】基于A*,A-star启发搜索,Hybrid-A*,混合A*算法,Dijkstra迪杰斯特拉算法,GBFS贪婪最佳优先搜索算法,DFS深度优先搜索,BFS广度优先搜索算法路径规划

  💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

1. A*(A-star)启发搜索算法

2. Hybrid-A(混合A)算法

3. Dijkstra迪杰斯特拉算法

4. GBFS(贪婪最佳优先搜索)算法

5. DFS(深度优先搜索)算法

6. BFS(广度优先搜索)算法

📚2 运行结果

🎉3 参考文献

🌈4 Python代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

在路径规划算法中,A(A-star)启发搜索、Hybrid-A(混合A*)、Dijkstra迪杰斯特拉算法、GBFS(贪婪最佳优先搜索)、DFS(深度优先搜索)和BFS(广度优先搜索)是几种常用的算法。下面将分别介绍这些算法在路径规划中的应用和特点。

1. A*(A-star)启发搜索算法

原理
A算法是一种启发式搜索算法,用于在图或网格中找到从起始节点到目标节点的最短路径。它结合了Dijkstra算法的全局搜索能力和贪心最佳优先搜索的启发式搜索能力。A算法通过评价函数f(n) = g(n) + h(n)来选择下一个要探索的节点,其中g(n)是从起点到节点n的实际代价,h(n)是从节点n到目标节点的估计代价(启发式函数)。

特点

  • 高效性:由于引入了启发式函数,A*算法能够更快速地找到最短路径。
  • 完备性:在启发式函数可接受的条件下,A*算法能够找到最短路径。
  • 灵活性:启发式函数可以根据具体问题进行设计,以适应不同的应用场景。

2. Hybrid-A(混合A)算法

原理
Hybrid-A算法是A算法的一种扩展,它结合了车辆动力学模型,用于在连续空间上搜索满足车辆非完整性约束的最短路径。Hybrid-A算法放弃了A算法中对搜索空间的离散化,而是利用Dubins或Reeps-Shepp模型来生成满足车辆运动学约束的路径。

特点

  • 考虑车辆动力学:Hybrid-A*算法能够生成符合车辆实际运动能力的路径。
  • 路径平滑:生成的路径更加平滑,有利于车辆的跟踪和控制。
  • 牺牲完备性和最优性:为了考虑车辆动力学,Hybrid-A*算法可能无法找到全局最优解,且算法的完备性也可能受到影响。

3. Dijkstra迪杰斯特拉算法

原理
Dijkstra算法是一种用于找到图中节点之间最短路径的算法。它维护一个优先队列,并按照从起点到当前节点的累计成本(g(n))来选择下一个要探索的节点。

特点

  • 全局搜索:Dijkstra算法会探索所有可能的路径,直到找到最短路径。
  • 无启发式:Dijkstra算法不依赖于启发式函数,因此其搜索过程较为盲目。
  • 高计算成本:在大型图中,Dijkstra算法的计算成本可能较高。

4. GBFS(贪婪最佳优先搜索)算法

原理
GBFS算法是一种贪心算法,它根据某种启发式规则(如欧氏距离或曼哈顿距离)来选择下一个要探索的节点。GBFS算法总是选择看起来最接近目标节点的节点进行探索。

特点

  • 贪心性:GBFS算法总是选择当前看起来最优的节点进行探索。
  • 快速但不保证最优:GBFS算法能够快速找到一条路径,但这条路径可能不是最短路径。
  • 适用于无障碍环境:在无障碍环境中,GBFS算法通常能够找到最短路径。

5. DFS(深度优先搜索)算法

原理
DFS算法是一种用于遍历或搜索树或图的算法。它从根节点(或起始节点)开始,尽可能深地搜索树的分支,直到达到叶子节点或满足某种条件为止。然后回溯到上一个节点,继续探索其他未探索的分支。

特点

  • 深度优先:DFS算法总是尽可能深地探索图的分支。
  • 空间效率高:DFS算法通常只需要较小的内存空间来存储搜索过程中的节点。
  • 可能陷入死循环:在无限图或包含循环的图中,DFS算法可能无法找到目标节点或返回结果。

6. BFS(广度优先搜索)算法

原理
BFS算法是一种用于遍历或搜索树或图的算法。它从根节点(或起始节点)开始,逐层遍历图的节点,直到找到目标节点或遍历完所有节点为止。

特点

  • 广度优先:BFS算法总是先访问离起始节点最近的节点。
  • 找到最短路径:在无障碍图中,BFS算法能够找到从起始节点到目标节点的最短路径(按边数计算)。
  • 空间成本高:BFS算法可能需要较大的内存空间来存储待探索的节点。

综上所述,每种算法都有其独特的优势和适用场景。在选择算法时,需要根据具体问题的特点和需求进行权衡和选择。

📚2 运行结果

部分代码:

 终点坐标
        map_array : ndarray
            二值化地图, 0表示障碍物, 255表示空白, H*W维
        move_step : int
            移动步数, 默认3
        move_direction : int (8 or 4)
            移动方向, 默认8个方向
        """

        # 网格化地图
        self.map_array = map_array # H * W

        self.width = self.map_array.shape[1]
        self.high = self.map_array.shape[0]

        # 起点终点
        self.start = Node(*start_pos) # 初始位置
        self.end = Node(*end_pos)     # 结束位置
       
        # Error Check
        if not self._in_map(self.start) or not self._in_map(self.end):
            raise ValueError(f"x坐标范围0~{self.width-1}, y坐标范围0~{self.height-1}")
        if self._is_collided(self.start):
            raise ValueError(f"起点x坐标或y坐标在障碍物上")

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]王泉啸,蔡先华,WangQuanXiao,等.动态最佳路径算法研究[J].城市勘测, 2009(1):73-75.DOI:10.3969/j.issn.1672-8262.2009.01.019.

[2]鲁毅,高永平,龙江腾.A*算法在移动机器人路径规划中的研究[J].湖北师范大学学报:自然科学版, 2022(002):042.

[3]赵作鹏,宗元元.面向矿井突水避险的双向搜索多最优路径算法[J].中国矿业大学学报, 2015, 44(3):7.DOI:CNKI:SUN:ZGKD.0.2015-03-028.

🌈4 Python代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值