《人工智能现代方法(第4版)》 第11章 自动规划 学习笔记

🚀 从"知道"到"做到"的关键一跃

回顾第10章

我们给了AI一座精心搭建的知识大厦 ------

它知道"猫是动物"、"北京是首都"、"下雨要打伞"。

但新问题来了

复制代码
知道"饿了要吃饭",不代表知道:
1. 先打开冰箱
2. 拿出鸡蛋和番茄
3. 开火倒油
4. 先炒蛋还是先炒番茄?
5. 什么时候放盐?
...

这就是规划(Planning)要解决的

给智能体一张从"当前状态"到"目标状态"的"行动路线图"

生活比喻

  • 导航软件:从"Arad到Bucharest"的最佳路径
  • 菜谱:从"生食材"到"红烧肉"的步骤序列
  • 项目计划:从"想法"到"上线"的里程碑

一、经典规划:当世界"完全听话"时

🎯 经典规划的定义

复制代码
四个关键假设(理想实验室环境):
1. 完全可观测:智能体知道世界的全部状态
2. 确定性:每个动作的效果100%确定
3. 静态环境:智能体行动时,世界不会自己改变
4. 离散时间:动作一个一个执行,没有"同时发生"

简言之:"上帝视角 + 确定因果 + 回合制"

🔍 三个经典"练习题"

1. 航空货物运输(复杂版"快递调度")
复制代码
初始状态:
  货物C1在北京机场,目的地上海
  货物C2在上海机场,目的地广州
  飞机P1在北京,P2在上海
目标状态:
  C1在上海,C2在广州

动作类型:
  Load(货物, 飞机, 机场):装货
  Unload(货物, 飞机, 机场):卸货
  Fly(飞机, 从机场, 到机场):飞行

规划任务:
  找到一个动作序列,用最少航班完成运输
2. 备用轮胎问题(汽车版"华容道")
复制代码
初始状态:
  车上有4个好轮胎,后备箱有1个备用胎
  右后轮坏了(Flattire)
目标状态:
  坏胎被换下,备用胎装上

动作:
  Remove(轮胎, 轮轴):拆下轮胎
  PutOn(轮胎, 轮轴):装上轮胎
  约束:一次只能拆/装一个轮胎,需要千斤顶

看似简单,但动作有顺序依赖!
错误顺序:拆了坏胎→发现千斤顶被占→车倒了...
3. 积木世界(AI界的"Hello World")
复制代码
经典程度 ≈ 编程里的"打印Hello World"

初始:      目标:
  [C]        [A]
  [B]   →    [B]
  [A]        [C]
            (堆成塔)

动作:
  Move(x, From, To):
    - 前提:x顶部为空,From顶部是x,To顶部为空
    - 效果:x从From移到To

看似简单,但搜索空间巨大!
3个积木:约13种状态
10个积木:状态数比宇宙原子还多...

📝 规划的形式化定义

复制代码
一个规划问题 = 一个五元组 ⟨S, A, γ, s₀, G⟩

S:所有可能状态的集合
A:所有可能动作的集合
γ(s,a) → s':转移函数(在状态s做动作a,到状态s')
s₀:初始状态
G ⊆ S:目标状态集合

规划解:一个动作序列 [a₁, a₂, ..., aₙ]
          使得 γ(...γ(γ(s₀, a₁), a₂)..., aₙ) ∈ G

二、经典规划算法:不同的"寻路策略"

🧭 搜索空间的两种视角

复制代码
状态空间像一张"地图":
- 节点 = 状态(如"积木A在桌上,B在A上")
- 边 = 动作(Move(B, From=A, To=Table))
- 起点 = 初始状态
- 终点 = 目标状态

🔍 算法1:前向状态空间搜索("摸着石头过河")

复制代码
策略:从初始状态出发,尝试所有可能的动作,
      一步步向前探索,直到撞上目标。

过程:
  当前状态 = 初始状态
  循环:
    列出所有可行动作
    选一个执行,到达新状态
    检查是否到达目标
    没到就继续...

像:走进迷宫,每个岔路口都试试

优点 :直观,保证找到解(如果存在)
缺点:效率低下!可能探索大量无关状态

复制代码
想象找书:
从书房门口开始,检查每个角落、每本书...
而目标书可能就在书桌上显眼处

🔙 算法2:反向状态空间搜索("从终点倒推")

复制代码
策略:从目标状态出发,问:
      "要达到这个目标,上一步应该是什么状态?"
      一直倒推到初始状态。

过程:
  当前目标 = 最终目标
  循环:
    找出能到达当前目标的动作
    计算执行这些动作前需要的状态(子目标)
    如果子目标 = 初始状态,成功!
    否则,把子目标作为新当前目标

像:解数学题"要证C,需先证B;要证B,需先证A..."

优点 :更聚焦,常比前向搜索快
缺点:复杂时,子目标可能互相冲突

复制代码
"要同时拿起杯子和手机"
→ 需要两只手空闲(子目标1)
→ 但放下手中东西又会产生新目标...

💡 算法3:使用布尔可满足性(SAT)规划

复制代码
天才思路:把规划问题转化为"逻辑公式满足问题"

步骤:
1. 设定规划长度上限L(比如最多10步)
2. 编码:
   - 对于每个时间步t(0到L),每个命题变量
   - 动作前提条件、效果用逻辑公式表示
3. 提问:
   "是否存在一个长度为L的动作序列,使得:
    初始状态在t=0成立
    目标状态在t=L成立
    每个动作的前提在对应时刻满足?"
4. 扔给SAT求解器(专门解逻辑公式的引擎)
5. 如果有解,解码回动作序列

比喻

不是自己找路,而是把所有可能路径的约束 写成一张"超级考卷",

交给"解题高手"(SAT求解器)去解。

优势 :能利用高效SAT求解器,处理某些问题极快
局限:需要预设长度L,L太小可能无解,L太大会爆炸

📊 经典算法对比

算法 搜索方向 适合场景 中国式比喻
前向搜索 从起点向前推 目标明确,动作可逆 摸着石头过河
反向搜索 从终点倒推 目标状态简单,动作前提少 顺藤摸瓜
SAT规划 整体约束求解 中等规模,有高效SAT求解器 让"学霸"代考

三、规划的启发式方法:给搜索"装导航"

🤔 为什么需要启发式?

复制代码
不加引导的搜索像"无头苍蝇":
- 前向搜索:可能离目标越来越远
- 反向搜索:可能陷入子目标循环

启发式(Heuristic)= 经验法则
给出当前状态到目标的"估计代价"
帮助算法优先探索"更有希望"的方向

🎯 两种启发式思路

1. 忽略删除列表启发式(当个"乐观主义者")
复制代码
核心洞察:
动作通常有两类效果:
  - 增加效果(Add Effects):让某些命题变真
  - 删除效果(Delete Effects):让某些命题变假

"乐观估计"法:
  暂时忽略所有"删除效果"!
  假设动作只会添加好东西,不会破坏已有成果

计算:当前状态到目标的"最短路径长度"
      (在理想化世界中)

例子:搭积木塔
  真实:Move(A, Table, B)会"删除"A在桌上
  乐观:假装A还在桌上可用
  估计:更快搭好塔(实际上可能低估代价)

文档图11-6解读

底部平面是目标状态,高度代表启发式得分。 因为没有"局部极小值"(坑洼),

算法可以一路"下坡"滑到目标------搜索变得简单直接

2. 规划图启发式(画个"进度甘特图")
复制代码
更精细的方法:构建"规划图"
- 分层表示:第0层 = 初始状态
- 动作层:可执行的动作
- 状态层:执行动作后可达的状态
- 逐层扩展,直到目标全出现

启发值 = 目标首次全部出现的层数
("至少需要多少步")

像:项目进度图
  第1周:需求分析
  第2周:设计完成
  第3周:编码开始...
  目标"上线"最早出现在第8周 → 启发值=8

✂️ 领域无关剪枝(砍掉"死胡同分支")

复制代码
有些状态明显没希望,尽早放弃:
1. 不可达目标:
   "用普通汽车到达月球"
   → 物理上不可能,一开始就剪掉

2. 互斥动作:
   "同时向左转和向右转"
   → 逻辑矛盾,不探索

3. 对称状态:
   积木世界:[A在B上] vs [B在A上]
   在堆塔问题中是对称的,只探索一个

🔄 状态抽象("先看轮廓,再看细节")

复制代码
分层抽象思想:
1. 高层抽象:忽略细节
   导航:"从北京到上海"
   抽象:只考虑城市间连接

2. 找到抽象解:
   "北京→高铁→上海"

3. 细化:
   "北京→地铁到南站→高铁→上海地铁→目的地"

像:旅行计划
  先定"城市路线"
  再定"市内交通"
  最后"出站怎么走"

四、分层规划:从"战略"到"战术"

🏛️ 高层动作(HLA)

复制代码
现实动作有层次:
  高层动作(战略)         → 低层动作序列(战术)
  ---------------------    -----------------------
  "去上海出差"            [买票,去车站,上车...]
  "开发新功能"            [设计,编码,测试...]
  "做番茄炒蛋"            [洗番茄,打蛋,开火...]

关键思想

先在高层次找到"看起来可行"的动作序列,

再逐步细化,验证并实现。

🎯 可达集:HLA的"可能影响范围"

复制代码
一个HLA的效果不是确定的状态,
而是一个"可达集"------所有可能到达的状态集合。

文档图11-9解读:
- 紫色:目标状态集
- (a) 执行HLA h₁后,可能到达的状态区域
- (b) 执行[h₁, h₂]序列后,可达集与目标相交
  → 这个HLA序列"可能"实现目标

🔍 分层规划的搜索过程

复制代码
1. 高层搜索:
   只考虑HLA,找到"可能解"
   [去机场,乘飞机,到酒店]

2. 细化验证:
   对每个HLA,尝试用底层动作实现
   "去机场" = [叫车,上车,付钱,下车]

3. 乐观 vs 悲观可达集(文档图11-10):
   - 乐观:最好的可能结果(绿色虚线)
   - 悲观:最坏的可能结果(蓝色实线)
   
   如果悲观集与目标不相交 → 需要进一步细化
   如果乐观集与目标相交 → 还有希望

实际比喻

项目经理 (高层规划):

"Q3前上线新版本"

技术负责人 (细化):

"需要前端3周、后端4周、测试2周"

工程师 (底层实现):

"今天写登录模块,明天联调..."


五、当世界"不听话":非确定性规划

🌪️ 现实世界的挑战

复制代码
经典规划的假设经常崩塌:
1. 非确定性:动作效果不确定
   "按电梯按钮"→可能上来,可能没反应
2. 部分可观测:不知道完整状态
   "房间里有猫吗?"→没看见,可能有
3. 环境动态:世界自己会变
   "计划晴天外出"→突然下雨

🤖 三类"非完美"规划

1. 无传感器规划("盲人摸象"式)
复制代码
条件:动作效果不确定,但执行后能感知结果
策略:设计"条件分支"规划

例子:开多个门找钥匙
  规划:
   尝试开门1
   如果看到钥匙 → 拿钥匙(成功)
   否则 → 尝试开门2
   如果看到钥匙 → ...
   否则 → 尝试开门3...

像:故障排除手册
  "如果红灯亮,检查A;如果还亮,检查B..."
2. 应变规划("预案专家")
复制代码
更现实:执行时根据感知实时选择分支

文档图2-11到2-13的智能体模型演进:
  - 反射型:感知→直接动作(条件反射)
  - 基于模型:维护内部状态模型
  - 基于目标:+ 目标驱动

应变规划 = 基于目标 + 感知反馈

例子:自动驾驶
  主规划:直行到下一个路口
  应变分支:如果突然有行人 → 刹车
            如果绿灯变黄 → 决策加速或减速
3. 在线规划("走一步看一步")
复制代码
最灵活:不预先规划完整序列
        每走一步,重新规划下一步

适合:
  - 环境变化太快
  - 搜索空间太大无法预先计算
  - 目标可能动态改变

例子:实时战略游戏AI
  不知道对手下一步
  只能根据当前局势,决定造兵、进攻还是防守

🎮 与或搜索树

复制代码
非确定性规划的标准表示:
- 或节点(OR):智能体选择动作
  "我可以向左、向右或直行"
- 与节点(AND):环境选择结果
  "如果我直行,可能顺利通过,也可能撞到人"

解是一棵子树:
  覆盖所有可能环境反应
  每个叶子都是目标状态

文档图4-10示例

真空吸尘器世界,Suck动作可能:

  • 干净 → 脏(意外)
  • 脏 → 干净(正常)
  • 脏 → 还脏(失效)
    需要规划覆盖所有分支。

六、时间、调度和资源:现实世界的约束

⏰ 时间约束表示

复制代码
不仅仅是动作顺序,还有:
1. 持续时间:
   "煮面需要5分钟"
2. 时间窗口:
   "会议必须在14:00-15:00间举行"
3. 间隔要求:
   "吃药后至少2小时才能吃饭"
4. 截止时间:
   "快递必须在18:00前送达"

📊 资源约束

复制代码
资源 = 任何有限的东西:
1. 可重用资源(工具):
   "只有一把螺丝刀,不能两人同时用"
2. 消耗性资源(材料):
   "面粉只有500g,不能做10个蛋糕"
3. 空间资源:
   "会议室只能坐20人"
4. 能量资源:
   "无人机电池只能飞30分钟"

🧩 调度问题解决

复制代码
调度 = 规划 + 时间 + 资源约束

经典问题:
  "有3台机器,10个任务,
   每个任务需要特定机器和时间,
   任务间有先后顺序,
   最小化总完成时间"

实际应用:
- 工厂生产线调度
- 航天器任务规划(NASA的EUROPA系统)
- 医院手术室排班
- 网约车订单分配(Uber、滴滴)

🚀 实际案例:DART系统

复制代码
1991年海湾战争,美军部署DART系统:
- 任务:调度5万人员、物资、交通工具
- 约束:起点、路线、运输能力、港口容量...
- 时间:紧急战争需求
- 结果:自动化调度成功
- DARPA评价:"回报了过去30年AI投资"

证明:规划不仅是学术玩具,更是实用工具

🧠 第11章思想升华

规划在AI中的位置

复制代码
规划是"思考型"智能体的核心能力:

感知 → 世界模型 → 目标设定 → 规划 → 执行

连接:
- 第3-5章搜索:规划的基础技术
- 第10章知识:规划需要知识库支持
- 第12章不确定性:规划必须处理现实
- 第26章机器人:规划的物理体现

经典 vs 现代规划观

复制代码
符号主义经典规划:
  - 优点:可解释,严谨,可验证
  - 局限:需要完整模型,规模受限

现代混合方法:
1. 基于学习的规划:
   - 从经验学习动作效果模型
   - 用强化学习直接学策略

2. 分层深化:
   - 高层用符号规划(战略)
   - 底层用控制器/学习(战术)

3. 人机协作规划:
   - 人类定高层目标
   - AI细化并执行
   - 交互修正(如文档图26-30)

规划的哲学回响

有趣的历史脉络(来自文档最后补充):

复制代码
2300年前,亚里士多德在《尼各马可伦理学》中描述:
  "我们考虑的不是目的,而是实现目的的手段...
   如果有几种手段,他们考虑的就是哪种手段最能实现目的...
   分析的终点也就是起点。"

1958年,麦卡锡提出"建议接受者"程序设想:
  - 包含世界知识
  - 能推理出行动计划
  - 能接受新知识(无需重新编程)
  → 这正是现代规划系统的蓝图

1960年代,纽厄尔和西蒙的通用问题求解器
实现了亚里士多德的算法,称为"贪婪回归规划"

🚗 规划的未来:自主智能体

复制代码
从文档中的实际系统看趋势:

1. 机器人规划(图26-系列):
   - 蒙特卡罗定位:粒子滤波找位置
   - 轨迹优化:平滑机械臂动作
   - 人机交互:预测人类意图

2. 自动驾驶规划(图26-28):
   - 不只看当前状态
   - 预测他人反应
   - 考虑自身动作对环境的反作用
   → 形成"社交意识"规划

3. 终身规划:
   - 不是一次性计算
   - 持续学习、调整、优化
   - 适应环境变化

💎 本章总结

规划的本质 :在可能性的海洋 中,找到一条通往目标岛屿可行航线

好的规划不仅要知道"做什么",还要知道"何时做"、"用何资源做"、"如果...则..."。

从亚里士多德到NASA火星车,人类一直在教机器如何"有计划地行动"。

最终目标:让AI不仅能"灵机一动",更能"深谋远虑"。

下一章预告

规划假设世界是确定的,但现实充满不确定性。

第12章,我们将进入不确定性的量化------ 教AI在"大概"、"可能"、"也许"中做出理性决策。

相关推荐
世人万千丶6 小时前
鸿蒙日志体系高级应用:HiLog分级输出/隐私脱敏/远程日志采集/线上问题精准溯源方案
学习·harmonyos·鸿蒙
奔跑中的小象6 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南6 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang6 小时前
LangGraph 状态机实战
人工智能
刹那芳华19927 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作7 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门7 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜7 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟7 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦7 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能