《人工智能现代方法(第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在"大概"、"可能"、"也许"中做出理性决策。

相关推荐
老蒋新思维2 小时前
创客匠人万人峰会启示:AI+IP 生态重构,知识变现进入 “共生增长” 时代
网络·人工智能·网络协议·tcp/ip·重构·创始人ip·创客匠人
nwsuaf_huasir2 小时前
深度学习1.4-pytorch安装
人工智能·pytorch·深度学习
MobotStone2 小时前
AI使用的10种最佳实践:提高你的工作效率和输出质量
人工智能·架构
沫儿笙2 小时前
安川焊接机器人氩气节气秘诀
人工智能·机器人
AI浩2 小时前
通过因果视觉提示实现单源域泛化目标检测
人工智能·目标检测·目标跟踪
说私域2 小时前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的线上向线下导流运营研究
人工智能·小程序·开源
AI营销资讯站2 小时前
2025社群运营AI工具TOP榜:从自动化话术到AI CRM系统的终极演进
大数据·人工智能
中国胖子风清扬2 小时前
Spring AI 深度实践:在 Java 项目中统一 Chat、RAG、Tools 与 MCP 能力
java·人工智能·spring boot·后端·spring·spring cloud·ai