首页 > 编程语言 >路径规划之启发式算法之一:A-Star(A*)算法

路径规划之启发式算法之一:A-Star(A*)算法

时间:2024-11-30 19:30:32浏览次数:7  
标签:set Star 路径 列表 算法 搜索 启发式 节点

A*算法是一种启发式搜索算法,常用于解决路径规划问题。

一、A*算法的定义与原理

        A*算法是一种用于在图形或网格中查找最短路径的算法。它在搜索过程中综合考虑了每个节点的实际距离(g值)和预估距离(h值),以找到最优路径。具体来说,算法通过评价各个节点的代价值(f值),其中f值等于g值加上h值,来获取下一需要拓展的最佳节点,直至到达最终目标点位置。

        改进A算法是在传统A算法的基础上进行优化,以提高路径搜索的效率和准确性。改进的主要方向包括启发函数的选择与优化、搜索邻域的优化、双向搜索算法(双向A*)、对open list列表进行数据结构优化,以及曲线平滑化处理。

二、特点与优势

        1. 启发式搜索:A*算法利用启发信息(即预估距离h值)来指导搜索过程,从而提高了搜索效率。

        2. 环境适应性强:该算法对环境反应迅速,能够根据不同场景和约束条件进行路径规划。

        3. 路径直接:A*算法搜索路径直接,不易陷入局部最优解。

三、核心公式

        A*算法的核心在于其估价函数,该函数由两部分组成:实际代价g(n)和启发式估计代价h(n)。总的代价消耗f(n)是这两者的和,表示为:

f(n)=g(n)+h(n)

        其中:

        f(n) 表示节点的综合优先级,在选择节点时考虑该节点的综合优先级;

        g(n) 表示起始点到当前节点的代价值;

        h(n) 表示当前节点到目标点的代价估计值,也就是预估函数。

四、算法流程

       1.  A*算法的实现通常包括以下步骤:

        (1)初始化:创建开放列表(open list)和封闭列表(close list),并将起点加入开放列表。

        (2)搜索:从开放列表中选择f值最小的节点进行搜索。更新该节点的g值和h值,并检查其邻居节点。如果邻居节点在开放列表或封闭列表中,则更新其g值(如果通过当前节点到达该邻居节点的路径更短)。如果邻居节点不在任何列表中,则将其加入开放列表,并设置其父节点为当前节点。

        (3)更新列表:将已搜索过的节点从开放列表中移除,并加入封闭列表。

        (4)终止条件:如果目标节点在开放列表中,则找到最优路径并终止搜索。否则,继续搜索直到开放列表为空或达到其他终止条件。

        2. 改进A*算法的流程如下:

       (1)初始化:初始化open_set(开放列表)和close_set(关闭列表),将起点加入open_set中,并设置优先级为0(优先级最高)。

        (2)循环选择:如果open_set不为空,则从open_set中选取优先级最高的节点n。

        (3)目标检查:如果节点n为终点,则从终点开始逐步追踪parent节点,一直达到起点;返回找到的结果路径,算法结束。

        (4)节点扩展:如果节点n不是终点,则将节点n从open_set中删除,并加入close_set中;遍历节点n所有的邻近节点。

        (5)邻近节点检查:对于每个邻近节点m,如果m在close_set中,则跳过;如果m不在open_set中,则设置节点m的parent为节点n,计算节点m的优先级,并将节点m加入open_set中。

        (6)循环结束:重复步骤2-5,直到找到终点或open_set为空。

五、应用领域

        A*算法被广泛应用于各种路径规划问题,包括但不限于:

        (1)计算机图形学:在图形图像处理中,A*算法常用于搜索最优路径。

        (2)自动导航:A*算法可用于导航系统,规划机器人或车辆的移动路径。

        (3)网络规划:A*算法可用于网络规划和路由规划,如规划互联网数据包的最优路径。

        (4)游戏开发:A*算法常用于游戏开发,用于寻找游戏人物或NPC(非玩家角色)移动的最优路径。

六、注意事项与局限性

        (1)启发函数的选择:启发函数h(n)的选择对A*算法的性能和结果有很大影响。如果h(n)的值过小,算法将遍历更多的节点,导致搜索速度变慢;如果h(n)的值过大,则可能无法找到最短路径。因此,需要根据具体应用场景选择合适的启发函数。

        (2)计算复杂度:A*算法的计算复杂度较高,特别是在节点数量较多或障碍物复杂的情况下。因此,在实际应用中需要权衡搜索效率和计算复杂度之间的关系。

        (3)实时性要求:对于实时性要求较高的应用场景(如自动驾驶、无人机导航等),A*算法可能需要进行优化或与其他算法结合使用以满足实时性要求。

七、优化策略

        (1)启发函数的选择与优化:预估函数的选择对A*算法的性能有很大影响。如果h(n)的值过小,算法将遍历更多的节点,导致搜索速度变慢;如果h(n)的值过大,则可能无法找到最短路径。可以为启发函数增加权重系数,节点比较时启发函数的优化。

        (2)搜索邻域的优化:舍弃邻域法和扩展邻域法可以减少搜索范围,提高搜索效率。

        (3)*双向搜索算法(双向A)**:从起点和终点同时进行搜索,提高计算速度。

        (4)数据结构优化:对open list列表进行数据结构优化,如使用二叉堆等,以提高算法的执行效。

        (5)曲线平滑化:采用贝塞尔曲线等方法进行路径平滑化处理,提高路径的平滑度。

标签:set,Star,路径,列表,算法,搜索,启发式,节点
From: https://blog.csdn.net/lzm12278828/article/details/144148077

相关文章

  • 关于Quartus的start按钮灰色无法下载的问题的解决
    Quartus的start按钮灰色可能一首先记得连接实验板并且添加.sof文件点击HardwareSetup选择USB-Blaster即可可能二如果上面的找不到USB-Blaster,可进入电脑的设备管理器,找到其他设备中的USB-Blaster选项右击更新驱动,注意选择相应路径更新完成后再次回到Quartus应该就可以......
  • 算法学习笔记
    基础算法贪心[lnsyoj4029/luoguP4109/HEOI2015]定价[lnsyoj2271/luoguP3745/省选联考2017]期末考试莫队普通莫队[luoguSP3267]D-query[luoguP1494]小Z的袜子带修莫队[luoguP1903]数颜色树上莫队[luoguSP10707]CountonatreeII[luoguP4074/WC2013]......
  • BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列
    BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比目录BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比预测效果基本介绍模型描述程序设计参考资料预测效......
  • 【C++算法】21.二分查找算法_山脉数组的峰顶索引
    文章目录题目链接:题目描述:解法C++算法代码:图解题目链接:852.山脉数组的峰顶索引题目描述:解法暴力解法:若:arr=[0,1,2,3,2,1,0]可以定义一个指针指向第一个元素,如果它后面的元素比它大,那么他就不是峰值。当第一次遇到一个数是大于后面那个数的时候,那个数就......
  • 【C++习题】22.二分查找算法_寻找峰值
    文章目录题目链接:题目描述:解法C++算法代码:图解题目链接:162.寻找峰值题目描述:解法暴力解法:三种山峰的情况开始元素比它后面一个元素大的话直接就是山峰了(因为nums[-1]=nums[n]=-∞)普通山峰最后一个元素比前面一个元素大的话直接就是山峰了二分算......
  • 机器学习经典算法:空间内一点到超平面的距离推广
    关于超平面与法向量超平面(H,Hyperplane):是二维平面中直线、三维空间中平面对象的推广形式,本质是nnn维空间的一个子空间,满足向量加法与乘法的封闭。空间中的平面都可以被平面上任意一点x0x_0x0​及与平面内任意向量所垂直的平面法向量w⃗\vecww所......
  • 【微电网】基于改进粒子群算法的微电网优化调度(Matlab代码实现)
    ......
  • 哈希表算法题
    目录题目一——1.两数之和-力扣(LeetCode)1.1.暴力解法11.2.暴力解法2 1.2.哈希表解法 题目二——面试题01.02.判定是否互为字符重排-力扣(LeetCode) 2.1.哈希表解法2.2.排序解法  题目三——217.存在重复元素-力扣(LeetCode)3.1.哈希表解法3.2.排序解法 ......
  • 代码随想录算法训练营第三十二天|leetcode509. 斐波那契数、leetcode70. 爬楼梯、leet
    1动态规划五部曲文章链接:代码随想录视频链接:从此再也不怕动态规划了,动态规划解题方法论大曝光!|理论基础|力扣刷题总结|动态规划入门_哔哩哔哩_bilibili确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组2leetcode509.斐......
  • 快速排序算法
    快速排序(QuickSort)是由英国计算机科学家TonyHoare在1960年提出的排序算法。它是一种基于分治法的排序算法,通常在平均情况下具有很高的性能,时间复杂度为O(nlog⁡n)O(n\logn),尽管最坏情况下时间复杂度为O(n2)O(n^2),但通过一些优化方法可以避免这种情况。快速排序的基本......