跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言AI算法

A* 算法深度解析:Hart, Nilsson, Raphael 1968 年论文核心思想

综述由AI生成基于 1968 年 Hart 等人发表的 A* 算法论文进行深度解析。文章回顾了算法诞生的历史背景,包括斯坦福研究所 Shakey 机器人的需求以及当时搜索算法的局限性。详细阐述了 A* 的核心公式 f=g+h,对比了其与 Dijkstra 及贪婪搜索的区别。重点讲解了可采纳性(Admissibility)与一致性(Consistency)两个关键理论条件,解释了它们如何保证算法的最优性及工程实现的效率。最后总结了 A* 在现代游戏、机器人及 NLP 等领域的应用价值。

Kubernet发布于 2026/3/28更新于 2026/5/2427 浏览

1. 执行摘要:通俗解读 A* 算法

想象一下,你正身处一座迷宫般的巨大城市中,比如迷雾笼罩的伦敦,你的任务是从特拉法加广场(起点)前往大英博物馆(终点)。你手中有一张地图,但要在成千上万条街道中找到那条绝对最短、最省体力的路线,并非易事。

在 1968 年之前,计算机处理这类问题通常有两种'极端'的思维方式。

1.1 '盲目地毯式搜索'(类似 Dijkstra)

这种方法非常严谨:它从起点出发,把周围每一条路都走一遍,计算走到每个路口的确切距离,然后再向外扩展。它的优点是一定能找到最短路径;缺点是效率极低——它会毫无方向感地向四面八方探索。即便终点在北边,它也会把南边的路先探个究竟,因为它不仅想找到路,还想确信没有别的路更短。

1.2 '凭直觉冲刺'(类似贪婪最佳优先)

这种方法完全相反:它只看终点在哪里,始终朝着'看起来更接近目标'的方向移动。优点是速度快;缺点是鲁莽——它可能把你带进死胡同,或者为了保持方向感而错过一条虽然稍微绕道但实际上更短的通途。你可能很快到终点,但未必是最短路线。

1.3 A*:严谨与直觉的统一

1968 年,斯坦福研究所(SRI)的三位科学家 Peter Hart、Nils Nilsson 和 Bertram Raphael 提出了 A*(A-Star)算法。它的核心秘密是给每一个路口(节点)打分,这个分数由两部分组成:

  • 过去的代价 $g$:从起点到当前节点已经走了多远(实打实的成本)。
  • 未来的预估 $h$:从当前节点到目标还要走多远(启发式估计,例如直线距离)。

A* 使用评价函数:

$$ f = g + h $$

它既不像 Dijkstra 那样无视方向,也不像贪婪搜索那样无视历史代价,而是优先探索那个'过去代价不大且未来看起来有希望'的节点。论文之所以经典,是因为作者不仅提出了方法,还给出严格证明:

  1. 若启发式 $\hat{h}$ 不高估真实剩余成本,则 A* 保证最优;
  2. 在相同启发信息下,A* 的扩展节点数达到一种理论意义上的'最少'(在相应条件下)。

一句话:A* 把'直觉'变成数学上可讨论、可证明、可工程化的对象。


2. 历史背景与起源:赋予机器人'直觉'

2.1 斯坦福研究所与 Shakey 机器人

理解 A* 的诞生要回到 20 世纪 60 年代中期 AI 研究前沿。斯坦福研究所(SRI,现 SRI International)的 AI 中心进行了一项雄心勃勃的计划:制造一个能够感知环境、理解指令并自主行动的移动机器人——Shakey the Robot。

Shakey 的任务并不'抽象':它要在有墙、有桌椅、有箱子的办公环境中自主导航,例如'把 3 号房间的箱子推到 5 号房间'。这意味着它必须在现实世界中规划路线、避开障碍,并尽可能高效。

当时计算资源极其匮乏,算法效率至关重要:如果机器人每走一步都要停下来计算几分钟,它就不可能'行动'。

2.2 当时的困境:数学与启发式的鸿沟

A* 诞生之前,路径规划存在明显二元对立:

  • 数学派(Dijkstra、动态规划):完备且最优,但搜索缺乏导向性,计算量容易爆炸。
  • 启发式派(例如 Graph Traverser):速度快但可能陷入局部最优或死胡同,不能保证最优。
2.3 融合与突破:把两种排序准则'加起来'

作者观察到:Dijkstra 相当于按 $g(n)$ 排序,启发式搜索按 $h(n)$ 排序。关键洞见是:为什么不把两者统一到同一个评价函数中?

于是有了:

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

这在今天看似简单,但在当时是决定性的结构统一:它将'严谨的成本累计'与'对目标的方向感'在同一个标尺下比较。


3. 形式化定义与问题建模

论文首先建立严格框架,为后续证明'可采纳性(Admissibility)'与'最优性(Optimality)'奠定基础。

3.1 图与成本结构
  • 图 $G$:节点集合 $\{ n_i \u007d$ 与有向弧集合 $\{ e_{ij} \u007d$。
  • 后继算子(Successor Operator, $\Gamma$):对节点 $n$ 应用 $\Gamma$,生成其后继节点集合及弧成本。
    这反映了 AI 搜索常见特性:图通常巨大,难以显式存储,必须'随用随生成'。
  • $\delta$-图:存在 $\delta>0$,使得所有弧成本 $c_{ij} \ge \delta$,避免零成本循环导致的非终止或不良路径结构。
3.2 路径、目标集与'真实最优代价'
  • 路径成本:路径上弧成本之和。
  • 目标集 $T$:搜索目标不是单一节点,而是目标节点集合 $T \subset \u007b n_i \u007d$。
  • 真实最优成本:记从 $n_i$ 到 $n_j$ 的最小成本为 $h(n_i,n_j)$。
    对任意节点 $n$,到目标集中最近目标的真实最优成本记为 $h(n)$。
    注意:这里的 $h(n)$ 是'真值',不是启发式估计。
3.3 评估函数

真实世界里,若我们知道:

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

搜索几乎不需要进行。但现实中 $h(n)$ 不可得,因此用估计:

$$ \hat{f}(n)=\hat{g}(n)+\hat{h}(n) $$

其中:

  • $\hat{g}(n)$:当前已发现的从起点到 $n$ 的最小路径成本(会被更新、可能变小)。
  • $\hat{h}(n)$:启发式估计(由领域知识给出,例如欧氏距离/曼哈顿距离等)。

4. A* 算法详解:机制与流程

算法维护两个核心数据结构:

  • Open List(开放表):已生成但尚未扩展的节点(搜索前沿)。
  • Closed List(封闭表):已扩展的节点(其邻居已被处理过)。
4.1 标准流程(叙述版)
  1. 初始化:将起点 $s$ 放入 Open,设 $\hat{g}(s)=0$,计算 $\hat{f}(s)=\hat{h}(s)$。
  2. 从 Open 中取 $\hat{f}$ 最小的节点 $n$(如并列可使用平局策略,例如偏向目标或更大的 $g$)。
  3. 若 $n\in T$(属于目标集),则终止并回溯父指针得到路径。
  4. 将 $n$ 放入 Closed,生成其后继 $n_i\in \Gamma(n)$:
    • 计算新代价 $g_{new} = \hat{g}(n) + c(n,n_i)$。
    • 若 $n_i$ 未出现过:加入 Open,设父指针为 $n$,更新 $\hat{g},\hat{f}$。
    • 若 $n_i$ 已出现且 $g_{new} < \hat{g}(n_i)$:更新 $\hat{g}(n_i)$ 与父指针,并重算 $\hat{f}(n_i)$。
    • 若 $n_i$ 在 Closed 且出现更优 $\hat{g}$:需要 re-open(重新打开)它(见后文'一致性'章节:一致性满足时可免)。
4.2 可视化直觉
  • 若 $\hat{h}(n)=0$,则 $\hat{f}(n)=\hat{g}(n)$,A* 退化为 Dijkstra/Uniform Cost Search。
  • $\hat{h}(n)$ 越接近真实 $h(n)$,搜索越'有方向感',扩展越少,越接近'直奔最优路径'。
4.3 与经典搜索的定位对照
特性BFSDijkstra / UCS贪婪最佳优先(GBFS)A*
排序依据深度/跳数$g(n)$$h(n)$$g(n)+h(n)$
完备性是(有限分支/无环等条件)是不一定是(在可采纳等条件下)
最优性仅边权相等时是否是(可采纳性保证)
效率特征低中高但不可靠高且可靠(条件满足时)
依赖信息图结构边权重启发式边权重 + 启发式

5. 可采纳性(Admissibility):最优路径的保证

5.1 核心条件:低估假设

论文给出 A* 找到最优解的充分条件:对任意节点 $n$,启发式估计不高估真实剩余代价:

$$ \hat{h}(n)\le h(n),\quad \forall n $$

通俗解释:启发式必须'乐观'。它可以低估(让你以为前方可能有高速路),但不能高估(否则会把真正的最短路径提前判死刑)。

5.2 证明逻辑(定理 1)——关键链条
  1. 反证假设:假设 A* 终止了,但找到的不是最优路径,而是次优目标节点 $t$,其成本满足 $\hat{f}(t) > f(s)$,其中 $f(s)$ 是真正的最优成本。
  2. 根据引理 1,Open List 中必然存在最优路径上的某节点 $n'$。
  3. 对该节点 $n'$,有 $\hat{f}(n') = g(n') + \hat{h}(n')$。
  4. 由可采纳性 $\hat{h}(n') \le h(n')$,得 $\hat{f}(n') \le g(n') + h(n') = f(n')$。
  5. 因为 $n'$ 在最优路径上,故 $f(n') = f(s)$,从而 $\hat{f}(n') \le f(s)$。
  6. A* 选择 $t$ 终止意味着 $\hat{f}(t)\le \hat{f}(n')$。
  7. 于是得到矛盾链:$\hat{f}(t)\le \hat{f}(n') \le f(s) < \hat{f}(t)$。

矛盾成立,因此假设不成立,A* 必然以最优解终止。


6. 最优性与一致性假设(Consistency / Monotonicity)

在保证'能找到最优解'之后,论文进一步讨论'效率'与实现复杂度。作者提出比可采纳性更强的条件:一致性(Consistency),现代文献也常称单调性(Monotonicity)。

6.1 一致性假设的形式(论文式三角不等式)

若对任意后继关系 $m\to n$,满足:

$$ h(m,n) + \hat{h}(n) \ge \hat{h}(m) $$

其中 $h(m,n)$ 是边成本,那么启发式被称为一致。

直观含义:从 $m$ 直接'估计到目标'的代价,不应超过'先走到邻居 $n$,再从 $n$ 估计到目标'的代价之和。启发式不能出现'朝目标走一步,估计突然跳水式下降'的非理性波动。

6.2 一致性带来的工程后果

一致性最重要的实际意义是:

  • $f$ 值沿路径单调不减(不会出现先变小再变大的反常波动)。
  • 当 A* 第一次扩展某个节点 $n$ 时,已经得到该节点的最优 $g$:$\hat{g}(n)=g(n)$。
  • 因而在一致性成立时,通常不需要 re-open Closed 节点,实现更简洁,效率更稳定。

7. 1972 年修正:追求完美的理论补丁

1968 年论文是开创性的,但并非毫无瑕疵。1972 年作者发布更正短文,澄清了一个关键边界:可采纳性保证正确性,但不必然保证不需要 re-open。

7.1 纠错要点

若 $\hat{h}$ 可采纳但不一致,A* 可能先通过次优路径到达某节点并将其关闭,随后发现更短路径到达同一节点。此时:

  • 若不 re-open,该节点的后继代价传播将不正确,可能破坏最优性;
  • 若允许 re-open,算法可能多次扩展同一节点,效率下降。
7.2 修正后的清晰结论
  • Admissibility(可采纳性):保证最优性(正确性),但可能需要 re-open。
  • Consistency(一致性):保证更强的工程性质(通常无需 re-open),并支撑更强的效率结论。

现代教材往往直接强调'一致性启发式',正源于这一历史澄清。


8. 算法的深层洞察与现代影响

8.1 领域知识的量化

A* 的哲学意义在于:它把'知识'变成了一项可以插入计算流程的量——$\hat{h}(n)$ 越接近 $h(n)$,搜索越窄、越快;当 $\hat{h}(n)=0$,算法退化为纯粹的'无知识搜索'。

这揭示了 AI 的一个朴素而深刻的事实:知识可以换算成计算效率。不是玄学,而是结构性收益。

8.2 典型变体(简述)
  • IDA*:用迭代加深降低内存占用,解决 A* 的空间瓶颈。
  • D / D Lite**:环境变化时增量更新路径,适合动态规划场景(如机器人探索)。
  • SMA*:在内存受限情况下近似保留最有希望的节点。
8.3 工业应用
  • 游戏 AI 寻路:网格/导航网格(NavMesh)+ 直线距离或曼哈顿距离启发式。
  • 自动驾驶与机器人:作为全局路径规划或局部规划的重要组件,与控制/预测模块协同。
  • NLP 解码:在巨大搜索图中寻找最优序列(本质上仍是'最优路径'问题)。

9. 总结

1968 年这篇论文的价值,不在于'提出了一个算法',而在于它用极其简洁的结构统一了两种长期对立的方法:严谨的 $g$ 与导向性的 $h$,并把启发式搜索从'经验技巧'提升到'可证明的理论框架'。

A* 留给今天的启示可以用一句话收束:

真正强大的算法,不是更复杂,而是把直觉压缩成一个可以被证明的结构。

目录

  1. 1. 执行摘要:通俗解读 A* 算法
  2. 1.1 “盲目地毯式搜索”(类似 Dijkstra)
  3. 1.2 “凭直觉冲刺”(类似贪婪最佳优先)
  4. 1.3 A*:严谨与直觉的统一
  5. 2. 历史背景与起源:赋予机器人“直觉”
  6. 2.1 斯坦福研究所与 Shakey 机器人
  7. 2.2 当时的困境:数学与启发式的鸿沟
  8. 2.3 融合与突破:把两种排序准则“加起来”
  9. 3. 形式化定义与问题建模
  10. 3.1 图与成本结构
  11. 3.2 路径、目标集与“真实最优代价”
  12. 3.3 评估函数
  13. 4. A* 算法详解:机制与流程
  14. 4.1 标准流程(叙述版)
  15. 4.2 可视化直觉
  16. 4.3 与经典搜索的定位对照
  17. 5. 可采纳性(Admissibility):最优路径的保证
  18. 5.1 核心条件:低估假设
  19. 5.2 证明逻辑(定理 1)——关键链条
  20. 6. 最优性与一致性假设(Consistency / Monotonicity)
  21. 6.1 一致性假设的形式(论文式三角不等式)
  22. 6.2 一致性带来的工程后果
  23. 7. 1972 年修正:追求完美的理论补丁
  24. 7.1 纠错要点
  25. 7.2 修正后的清晰结论
  26. 8. 算法的深层洞察与现代影响
  27. 8.1 领域知识的量化
  28. 8.2 典型变体(简述)
  29. 8.3 工业应用
  30. 9. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • ToClaw:不是更会炫技的 AI,而是更容易上手的桌面工具
  • 前后端无感 Token 刷新:原理与 Spring Boot 实战
  • 时序数据库选型指南:Apache IoTDB 核心优势与实践
  • Llama-2-7B 昇腾 NPU 测评:性能数据、场景适配与硬件选型
  • 七大 AIGC 测试工具横向评测:选型指南与实战分析
  • MediaPipe 与 ROS 集成:机器人动作交互系统部署
  • Kimi K2.5 多模态与编程能力实测
  • 大模型混战时代互联网企业的转型与应对策略
  • 基于 MINGW 的跨平台 C++ 应用开发实战技巧
  • OpenClaw 开源 AI Agent 框架技术解析与实战指南
  • Web 聊天室消息加解密方案详解
  • Rust 异步代码测试与调试实战指南
  • AI 大模型基础与前端开发面试准备指南
  • OpenClaw 实战:基于 Rust+Tauri 构建安全沙箱清理 Skill
  • VS Code 远程连接服务器后 GitHub Copilot 无法使用的解决方案
  • Whisper.cpp 本地离线语音识别实战指南
  • Oracle 迁移至 MySQL 的关键差异与注意事项
  • JavaScript 中的赋值与相等操作符:=、== 和 === 详解
  • DALL·E 3 绘图功能与 API 探索
  • C# ImageSharp 与 JavaScript Canvas 图像处理性能对比

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online