惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
C
Check Point Blog
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
U
Unit 42
WordPress大学
WordPress大学
B
Blog
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
D
DataBreaches.Net
G
Google Developers Blog
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
A-Star 算法详解
Yiwei Zhang · 2025-02-25 · via 又见苍岚

A*(A-Star)算法是一种静态路网中求解最短路径的搜索方法, 本文记录相关内容。

简介

A*算法是一个“搜索算法”,目的是在一个图上“求解最短路径”,实质上是 Dijsktra 的升级版,加入了启发式搜索,从而减少搜索范围,提高效率。

核心思想

通过评估函数 $f(n) = g(n) + h(n)$ 指导 搜索方向,其中:

  1. g(n):从起点到当前节点 n 的实际路径代价。
  2. h(n)(启发式函数):当前节点到目标节点的估计代价,需满足可采纳性(即不高估实际代价,如曼哈顿距离用于四方向移动网格)。

注意: 如果启发式函数 $h(n)$ 不满足可采纳性,A*可能无法找到最优解。另外,如果 $h(n)$ 是一致的(也就是满足三角不等式),那么A*算法在扩展节点时一旦找到目标节点就可以立即停止,因为此时的路径已经是最优的了。否则可能需要继续检查以确保最优性。

算法流程

  1. 初始化开放列表(优先队列)和封闭列表(记录已处理节点),将起点加入开放列表。
  2. 循环直到找到目标或开放列表为空:
    • 取出开放列表中f(n) 最小的节点 n
    • n是目标,回溯路径并结束。
    • n移入封闭列表,扩展其相邻节点。
    • 对每个相邻节点m
      • m在封闭列表中,跳过。
      • 计算新g(m),若更优或m未在开放列表中,更新g(m)f(m),并将m加入开放列表。

关键点

  • 最优性保证:当 $h(n)$ 可采纳时,A* 能找到最短路径。
  • 效率:启发式函数质量决定搜索速度。若 $h(n)$ 接近实际代价(如对角线距离允许八方向移动时),节点扩展更少。
  • 对比
    • Dijkstra:无启发式( $h(n)=0$),扩展更多节点。
    • 最佳优先搜索:仅用 $h(n)$,不保证最优。

常用启发式函数

对于网格形式的图,有以下这些启发函数可以使用:

  • 若图形中只允许朝上下左右四个方向移动,使用曼哈顿距离:
    $$
    d=|x_1-x_2|+|y_1-y_2|
    $$

  • 若图形中允许朝八个方向移动,使用对角距离:
    $$
    d= max(|x_1-x_2|,|y_1-y_2|)
    $$

  • 若图形中允许朝任何方向移动:使用欧几里得距离:

$$ d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2} $$

参考资料

文章链接:
https://www.zywvvd.com/notes/study/algorithm/graph/astar/astar/