🚀 从"知道"到"做到"的关键一跃
回顾第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在"大概"、"可能"、"也许"中做出理性决策。