当前位置: 首页 > news >正文

A∗算法(A-star algorithm)一种在路径规划和图搜索中广泛使用的启发式搜索算法

A∗A*A算法(A-star algorithm)是一种在路径规划和图搜索中广泛使用的启发式搜索算法,它结合了Dijkstra算法的广度优先搜索思想和启发式算法的效率优势,能够高效地找到从起点到终点的最短路径。

1. 基本原理

A*算法的核心是通过估计代价来指导搜索方向,从而减少不必要的搜索范围,提高搜索效率。它使用两个主要的代价函数:

  • g(n)g(n)g(n):从起点到当前节点 nnn 的实际代价(已知的代价)。
  • h(n)h(n)h(n):从当前节点 nnn 到目标节点的估计代价(启发式函数,通常是基于某种启发式规则估计的代价)。

A算法的关键是定义一个总代价函数:
f(n)=g(n)+h(n)f(n) = g(n) + h(n)f(n)=g(n)+h(n)
其中,f(n)f(n)f(n) 表示从起点经过节点 nnn 到达目标节点的总估计代价。A
算法会优先选择 f(n)f(n)f(n) 值最小的节点进行扩展。

2. 算法步骤

A*算法的执行过程如下:

  1. 初始化

    • 将起点 SSS 放入开放列表(Open List),开放列表用于存储待处理的节点。
    • 初始化闭合列表(Closed List)为空,闭合列表用于存储已经处理过的节点。
  2. 循环

    • 从开放列表中选择 f(n)f(n)f(n) 值最小的节点 nnn,将其从开放列表中移除,并加入闭合列表。
    • 如果节点 nnn 是目标节点,则算法结束,通过回溯父节点来构造路径。
    • 如果节点 nnn 不是目标节点,则对节点 nnn 的所有相邻节点进行扩展:
      • 对于每个相邻节点 mmm
        • 如果 mmm 不可通行(例如障碍物),则跳过。
        • 如果 mmm 已经在闭合列表中,则跳过。
        • 如果 mmm 不在开放列表中,则将其加入开放列表,并设置 mmm 的父节点为 nnn,计算 mmmg(m)g(m)g(m)h(m)h(m)h(m)f(m)f(m)f(m)
        • 如果 mmm 已经在开放列表中,但通过当前节点 nnn 到达 mmm 的代价 g(m)g(m)g(m) 更小,则更新 mmm 的父节点为 nnn,并重新计算 mmmg(m)g(m)g(m)f(m)f(m)f(m)
  3. 终止条件

    • 如果找到目标节点,则算法成功,通过回溯父节点构造路径。
    • 如果开放列表为空且未找到目标节点,则算法失败,表示无路径可达。

3. 启发式函数 h(n)h(n)h(n)

启发式函数 h(n)h(n)h(n) 是A*算法的关键部分,它决定了算法的效率和准确性。启发式函数的选择需要满足以下条件:

  • 可接受性(Admissibility)h(n)h(n)h(n) 不能高估从节点 nnn 到目标节点的实际代价,即 h(n)≤h∗(n)h(n) \leq h^*(n)h(n)h(n),其中 h∗(n)h^*(n)h(n) 是从 nnn 到目标节点的实际代价。
  • 一致性(Consistency):对于任意相邻节点 nnnmmm,有 h(n)≤d(n,m)+h(m)h(n) \leq d(n, m) + h(m)h(n)d(n,m)+h(m),其中 d(n,m)d(n, m)d(n,m) 是从 nnnmmm 的实际代价。

常见的启发式函数包括:

  • 欧几里得距离(Euclidean Distance):适用于连续空间,计算公式为 h(n)=(xn−xg)2+(yn−yg)2h(n) = \sqrt{(x_n - x_g)^2 + (y_n - y_g)^2}h(n)=(xnxg)2+(ynyg)2,其中 (xn,yn)(x_n, y_n)(xn,yn)(xg,yg)(x_g, y_g)(xg,yg) 分别是节点 nnn 和目标节点的坐标。
  • 曼哈顿距离(Manhattan Distance):适用于网格地图,计算公式为 h(n)=∣xn−xg∣+∣yn−yg∣h(n) = |x_n - x_g| + |y_n - y_g|h(n)=xnxg+ynyg
  • 切比雪夫距离(Chebyshev Distance):适用于网格地图,允许对角线移动,计算公式为 h(n)=max⁡(∣xn−xg∣,∣yn−yg∣)h(n) = \max(|x_n - x_g|, |y_n - y_g|)h(n)=max(xnxg,ynyg)

4. 优点和缺点

优点

  • 效率高:A*算法通过启发式函数减少了搜索空间,比Dijkstra算法更快地找到最短路径。
  • 最优性:在启发式函数满足可接受性和一致性的条件下,A*算法能够保证找到最短路径。
  • 灵活性:通过选择不同的启发式函数,A*算法可以适应不同的应用场景。

缺点

  • 对启发式函数的依赖:启发式函数的选择对算法的性能影响很大,不合适的启发式函数可能导致搜索效率低下甚至失败。
  • 内存消耗大:A*算法需要存储开放列表和闭合列表,对于大规模地图或复杂场景,可能会消耗大量内存。

5. 应用场景

A*算法广泛应用于以下领域:

  • 机器人路径规划:用于移动机器人在复杂环境中的导航。
  • 游戏开发:在游戏地图中为角色规划路径。
  • 物流配送:规划物流车辆的最优行驶路线。
  • 地理信息系统(GIS):用于地理路径规划和交通流量分析。

A*算法是一种非常强大的搜索算法,它通过启发式函数有效地平衡了搜索效率和路径最优性,是路径规划和图搜索领域的重要工具。

http://www.dtcms.com/a/310323.html

相关文章:

  • 利用CompletableFuture优化查询效率
  • 1.2.4 砌体结构设计构造要求
  • Dify知识库分段策略详解:通用分段 vs 父子分段
  • 开源框架推荐:API数据批处理与爬虫集成
  • 前端开发一百问(动态更新)
  • 【0基础PS】PS工具详解--仿制图章工具
  • RustFS:高性能文件存储与部署解决方案(MinIO替代方案)
  • MySQL锁的分类 MVCC和S/X锁的互补关系
  • QT6.5.3 vs2022 pcl1.14.1窗体界面打开pcd点云文件
  • PAT 1022 Digital Library
  • nodejs最近开发过程中的总结
  • 【LeetCode】算法详解#11 ---相交链表
  • 智能Agent场景实战指南 Day 29:Agent市场趋势与前沿技术
  • 一篇文章读懂AI Agent(智能体)
  • spring boot 启动报错---java: 无法访问org.springframework.boot.SpringApplication 错误的类文件
  • 获取LLM 内部的结构信息和矩阵维度信息
  • LeetCode 热题100:206. 反转链表
  • 【AI问答】PromQL中interval和rate_interval的区别以及Grafana面板的配置建议
  • 从本地到云端:将Linux文件夹上传至GitHub仓库的完整指南
  • 动态爱心树
  • 商汤悟能具身智能平台让机器人「觉醒」
  • Mysql 实战问题处理速通
  • 《操作系统真象还原》 第五章 保护模式进阶
  • h5独立部署
  • Galaxea机器人由星海图人工智能科技有限公司研发的高性能仿人形机器人
  • 国内短剧CSP系统开发:技术架构与合规实践全解析
  • GESP2025年6月认证C++八级( 第三部分编程题(1)树上旅行)
  • 一体化伺服电机在自动焊接设备中的控制转台转动部分应用案例
  • 【文章素材】3dBackgroundBoxes(3D背景盒子组件)项目及文章思路
  • 【PHP 自动加载机制详解】