📑 本页目录(点开跳转)
03 · 任务环境
⏱ 34 分钟 | ⭐⭐ PEAS 加六个维度:任务描述清楚了,该用哪类算法基本就定了
🎯 一句话
换算法之前先换描述。 把任务写成 PEAS(性能度量 / 环境 / 执行器 / 传感器)再按六个维度打勾, 你会发现算法的选择几乎完全由环境类型决定,而不是由「你会哪个」决定。
🧩 一、为什么不能直接冲上去写算法
同样一句「找一条路」,在三种环境里是三套完全不同的东西:
| 环境 | 该用什么 |
|---|---|
| 地图已知、不会变 | 一次性搜出最优路径(第 5–6 章的 A*) |
| 地图已知、路况随时在变 | 走一段重规划一段,算法必须随时能给出当前最好答案 |
| 地图未知、要边走边猜 | 先靠感知推断,或者干脆用强化学习试出来 |
⚠️ 三种情形下目标一模一样、代码完全不同。所以正式开工前,先把任务描述成一个统一的、可比较的形式。
📋 二、PEAS:一个 agent 的四件事
⭐ PEAS = Performance measure(性能度量)· Environment(环境)· Actuators(执行器)· Sensors(传感器)。 写清这四样,一个任务就算定义完了。
| P 性能度量 | E 环境 | A 执行器 | S 传感器 | |
|---|---|---|---|---|
| 国际象棋 | 胜 1 / 和 ½ / 负 0 | 棋盘、棋子 | 把某子移到某格 | 每格上是什么子 |
| 自动驾驶出租车 | 安全、准点到达、利润、守法、乘客舒适 | 街道、高速、车流、行人、天气、乘客 | 转向、加速、刹车、喇叭、语音提示 | 摄像头、雷达、加速度计、GPS、里程表 |
| Wumpus World | 带金子回起点 +1000、死亡 −1000、每走一步 −1、射箭 −10 | 4×4 网格,含坑、金子、Wumpus | 左转、右转、前进、抓取、射箭、爬出 | 微风、闪光、臭味、撞墙、惨叫 |
⭐ 四个里面 P 最难写,因为它定义了「赢」
看 Wumpus 那行的 −1 每步。它看着是个小数字,其实决定了整个 agent 的性格:
- 没有它:agent 可以无限磨蹭、把 16 格全探一遍再动手,反正不花钱 —— 最优策略变成「穷举地图」。
- 有了它:多探一格能降低风险,但要付 1 分。⭐ 这一个数字就把「探索还是利用」写进了问题定义里, agent 必须自己权衡「我对这格有多确定」和「我还剩多少分」。
💀 性能度量写歪了,agent 就会一丝不苟地优化歪的东西。 OpenAI 在 2016 年报告过一个赛船游戏的例子:奖励给的是分数而不是名次, 结果 agent 学会了在一个小水湾里绕圈撞可重生的道具刷分,得分比人类玩家高约 20%, 却一次终点都没到过,还不停撞船起火。 ⚠️ 它没有出 bug,它精确地做到了你要求的事。 这正是上一章 ELIZA 那个坑的现代版本。
🕳️ 三、Wumpus World:把一个任务真正形式化
这个 4×4 的小世界是全课程贯穿的例子,后面讲逻辑、讲不确定性都会回到它。规则很短:
- 格子记作 (列, 行),(1,1) 是左下角起点,agent 初始朝右,带 1 支箭。
- 洞里有 Wumpus(不动,碰到就死)、若干 坑(掉下去就死)、1 块金子。
- 感知只有三条:坑的上下左右四格有微风;Wumpus 的上下左右四格有臭味;金子所在的那一格有闪光。 ⚠️ 注意是四邻,不含对角线;也不告诉你是哪个方向。
- 动作:左转、右转、前进(朝当前朝向走一格)、抓取、射箭(沿朝向射穿一整行/列)、在 (1,1) 爬出。
⭐ 因为有朝向,agent 的位置状态是 16 格 × 4 个朝向 = 64 种,再乘上「金子拿没拿」「箭射没射」。
🔨 纸上推一遍:三步定位一个你从没见过的格子
⭐ 这一段是本板块的招牌。不用任何数据、不用任何训练,只靠三条感知规则做交叉推理。
| 步 | 你在哪 | 感知到 | 能推出什么 |
|---|---|---|---|
| 1 | (1,1) | 没有微风、没有臭味 | 四邻里的 (2,1) 和 (1,2) 既没坑也没怪 → 两格都安全 |
| 2 | (2,1) | 有微风、没有臭味 | 微风说 (2,2) 或 (3,1) 里有坑(先都标上问号);没臭味说 (2,2)、(3,1) 都没有 Wumpus |
| 3 | 退回去走 (1,2) | 没有微风、有臭味 | 没微风 → (2,2)、(1,3) 都没坑;有臭味 → Wumpus 在 (1,1)、(2,2)、(1,3) 三者之一 |
现在把三步的结论并起来:
- Wumpus 的三个候选里,(1,1) 你自己站过(排除),(2,2) 第 2 步已排除 → ⭐ Wumpus 必在 (1,3)。
- 坑的两个候选里,(2,2) 第 3 步已排除 → ⭐ (3,1) 必是坑。
- 于是 (2,2) 既没坑也没怪 —— 可以放心走进去,⭐⭐ 而你从来没去过那一格,也没有任何一条感知直接告诉过你它安全。
⭐⭐ 这就是这个板块存在的理由。 三条规则加三次观察,把两个看不见的东西的位置证明了出来 —— 不是估计,不是概率,是证明。 换成「学一个模型来预测哪格有坑」,你需要成千上万局带标注的历史数据,而且仍然只能给概率。
⚠️ 但请注意这条推理链必须记住第 1 步和第 2 步的感知。 一个只看当前感知的 agent 走到 (1,2) 时,手上只有「没风、有臭味」,推不出任何东西。 这就是下一章第一种 agent 的死穴。
🎚️ 四、环境的六个维度
| 维度 | 分界线在哪 | ⭐ 这决定了你能用什么 |
|---|---|---|
| 完全可观测 / 部分可观测 | 感知是否包含所有相关信息 | 部分可观测 ⇒ agent 必须有内部状态(记忆),否则连上面那条推理都做不了 |
| 确定性 / 随机 | 当前状态是否唯一决定下一状态 | 确定性 ⇒ 可以规划一条动作序列;随机 ⇒ 必须规划一个策略(每个状态该干嘛) |
| 片段式 / 序贯 | 每个动作是否被独立评价 | 片段式 ⇒ 每次决策互不影响,分类问题就是片段式的;序贯 ⇒ 必须往前看 |
| 静态 / 动态 | 你思考的时候环境会不会变 | 动态 ⇒ 有实时约束,算法必须随时能交出当前最好的答案 |
| 离散 / 连续 | 状态、感知、动作是否可数 | 连续 ⇒ 没法枚举后继,要么离散化成栅格、要么用连续方法(第 7 章运动规划) |
| 单 agent / 多 agent | 有没有别的决策者 | 多 agent ⇒ 对方会针对你调整,需要博弈树和极小化极大(第 10、11 章) |
还有两个也很常用,其中第一个直接划出了本板块的边界:
| 维度 | 说明 |
|---|---|
| ⭐⭐ 已知 / 未知 | 游戏规则、环境的物理规律,你知不知道。搜索假设你知道,强化学习假设你不知道、要试出来。 这就是本板块和《强化学习基础》的分界线 |
| 模拟 / 具身 | 环境是另一个程序喂给你感知,还是你有个真身体、要处理重力和噪声 |
⚠️ 三个最容易搞混的地方
- 「随机」和「部分可观测」不是一回事。 骰子是真随机但大家都看得见;扑克里别人的牌早就定死了、只是你看不见。 ⭐ 用固定种子的伪随机数发生器掷骰子,严格说是确定性 + 部分可观测。
- 「多 agent」的判据是:对方的行为会不会依赖你的行为。 高速上的其他车会;下雨不会(只是随机环境)。
- 半动态:环境不变但你的分数在变 —— 带时钟的比赛棋。
📊 五、把几个任务按维度打一遍勾
⭐ 这张表是本章的重点。从上往下读,你会看到难度是怎么一格一格加上去的。
| 任务 | 可观测 | 确定性 | 片段/序贯 | 静态/动态 | 离散/连续 | 单/多 agent |
|---|---|---|---|---|---|---|
| 数独 / N 皇后 | 完全 | 确定 | 序贯 | 静态 | 离散 | 单 |
| 图像分类 | 完全 | 确定 | ⭐ 片段式 | 静态 | 连续 | 单 |
| 国际象棋 | 完全 | 确定 | 序贯 | 半动态 | 离散 | 多 |
| 西洋双陆棋 | 完全 | 随机 | 序贯 | 静态 | 离散 | 多 |
| Wumpus World | 部分 | 确定 | 序贯 | 静态 | 离散 | 单 |
| 自动驾驶 | 部分 | 随机 | 序贯 | 动态 | 连续 | 多 |
| 推荐系统 | 部分 | 随机 | 序贯 | 动态 | 混合 | 多 |
每加一项「难」的,就得换一类方法:
- 数独全在「好」的一侧 → 纯约束求解就够(第 13 章的 CSP)。
- 图像分类是全表唯一的片段式 → 每张图独立评分、不用往前看,⭐ 这正是监督学习最舒服的形状。
- 国际象棋加了「多 agent」→ 极小化极大和剪枝(第 10、11 章);双陆棋再加「随机」→ 还要对随机层取期望。
- Wumpus 加了「部分可观测」→ 内部状态和逻辑推理(第 4、16 章);自动驾驶再加「动态 + 连续」→ 运动规划和实时性(第 7 章)。
⭐ 最后一行值得单独说:推荐系统为什么比下棋难得多
| 维度 | 推荐系统的实际情况 |
|---|---|
| 部分可观测 | 你看不见用户的真实意图,只看得见点击。⚠️ 更糟的是没被曝光的物品你永远拿不到反馈 |
| 随机 | 同一个人、同一个位置、同一个物品,点不点是概率性的 |
| 序贯 | 今天推什么会改变明天用户的兴趣,⚠️ 短期指标涨不代表长期好 |
| 动态 | 你在算的时候候选池在变、热点在变、库存在变 |
| 多 agent | ⭐ 广告位上有别的广告主在竞价;内容侧有创作者在针对推荐算法调整发布策略 |
⭐⭐ 六个维度里,推荐系统占了五个「难」的一侧,国际象棋一个都不占。 这就是为什么一套能下赢世界冠军的算法,搬到推荐系统上一点用都没有 —— 它们根本不是同一类问题,尽管两者都叫「AI」。
🧊 六、⚠️ 维度是你选的描述层,不是客观事实
同一个任务,换个抽象层就换一组勾:
- 国际象棋在真棋盘上下是具身的,但我们故意抽象掉「把手伸过去挪棋子」,只留选步。
- Wumpus 通常算确定性 + 单 agent,因为它不动、不做选择,被当成「自然特征」。 ⭐ 一旦让它会追人,同一个世界立刻变成动态 + 多 agent,整套解法都得换。
- ⚠️ 出租车遇到的天气是「随机」还是「我们没建模」?「随机」往往只是「我们决定不去建模的那部分」的另一个名字。
⭐ 所以正确的问法不是「这个环境是什么类型的」,而是「我打算在哪一层描述它」。 描述层选定了,能用的算法也就定了 —— 这是你在整个项目里最早、也最便宜的一个决策。
🔗 这一章连到哪里
| 去哪 | 为什么 |
|---|---|
| 04 · 四种 Agent 架构 | 第三节那条三步推理要求记住之前的感知,而下一章第一种 agent 恰好没有记忆。⭐ 它的失败就是第二种 agent 的理由 |
| ../强化学习基础/02-MDP.html | ⭐⭐ 本章「已知 / 未知」那一维就是两个板块的分界:搜索假设转移和代价都已知,RL 假设你不知道、要试出来。那一章的 MDP 是「随机 + 序贯」环境的标准形式化 |
| ../推荐算法/13-冷启动与探索利用.html | ⭐ 本章说推荐系统「没被曝光的物品永远拿不到反馈」,那一章就是专门解这个问题的 |
| ../推荐算法/15b-广告-从推荐到竞价.html | ⭐ 推荐系统「多 agent」那一格的实证:广告位上真的有别人在同时出价 |
| ../模型上线之后/15-长期效应与代理指标.html | ⭐ 本章 💀 那个赛船刷分的工业版本 —— 序贯环境里短期指标涨不代表长期好 |
✅ 检查点
- PEAS 是哪四个词?为什么说四个里面 P 最难写?
- Wumpus World 的「每步 −1」去掉会怎样?这一个数字把什么概念写进了问题定义?
- Wumpus World 的三条感知规则分别是什么?「相邻」指几格、含不含对角线?
- 在 (1,1) 无感知、(2,1) 有微风、(1,2) 有臭味之后,你能确定哪三件事?这条链为什么必须有记忆?
- 环境的六个维度是什么?「部分可观测」和「动态」各自逼出了什么算法要求?
- 「随机」和「部分可观测」的区别是什么?固定种子掷骰子的游戏属于哪一类?判断多 agent 的判据是什么?
- 推荐系统在六个维度里占了几个「难」的一侧、国际象棋占几个?为什么说「维度是你选的描述层,不是客观事实」?
👀 答案
- Performance measure、Environment、Actuators、Sensors。⭐ P 最难写是因为它定义了「赢」,写歪了 agent 会一丝不苟地优化歪的东西(💀 赛船:奖励给分数不给名次,得分比人类高约 20% 却从没到过终点)。
- 没有它,agent 可以无限磨蹭、把 16 格全探一遍再动手。⭐ 有了它,多探一格降风险但要付 1 分 —— 这一个数字把「探索还是利用」写进了问题定义。
- 坑的上下左右四格有微风;Wumpus 的上下左右四格有臭味;金子所在那一格有闪光。⚠️ 相邻指上下左右四格、不含对角线,而且不告诉你方向。
- ⭐ Wumpus 在 (1,3)、(3,1) 是坑、(2,2) 安全:(2,1) 有风无臭 → 坑在 (2,2) 或 (3,1)、两格都没怪;(1,2) 无风有臭 → (2,2)(1,3) 没坑、怪在 (1,1)/(2,2)/(1,3) 之一;合并后 (1,1) 站过、(2,2) 两边都被排除,两个位置就都钉死了。⭐⭐ 必须有记忆,是因为结论要同时用到三步的感知 —— 只看当前感知的 agent 站在 (1,2) 手上只有「没风、有臭味」,什么都推不出。
- 完全/部分可观测、确定性/随机、片段式/序贯、静态/动态、离散/连续、单/多 agent。⭐ 部分可观测 ⇒ 必须有内部状态(记忆);动态 ⇒ 随时要能交出当前最好的答案。
- 随机是「当前状态不唯一决定下一状态」(骰子大家都看得见);部分可观测是「信息早定死了但你看不见」(扑克里别人的牌)。⭐ 固定种子掷骰子严格说是确定性 + 部分可观测。多 agent 的判据是 ⭐ 对方的行为会不会依赖你的行为 —— 其他车会,下雨不会。
- ⭐⭐ 推荐系统占五个,国际象棋占零个:部分可观测(⚠️ 没曝光的物品永远拿不到反馈)、随机、序贯、动态、多 agent(广告主竞价、创作者针对算法调整)。说维度是描述层,是因为换个抽象层就换一组勾:Wumpus 不动才算确定性 + 单 agent,⭐ 让它会追人就变成动态 + 多 agent。⚠️ 「随机」往往只是「我们决定不去建模的那部分」的另一个名字。
🛑 可以停在这里
⚡ 走神救援
⭐⭐ 这一章的口号是「换算法之前先换描述」。 ⭐ PEAS = 性能度量 / 环境 / 执行器 / 传感器,写清这四样,一个任务就定义完了。⭐ 四个里 P 最难写,因为它定义了「赢」:Wumpus 的 每步 −1 看着微不足道,去掉它 agent 就会无限磨蹭把 16 格全探一遍再动手 —— 这一个数字把「探索还是利用」写进了问题定义(其余是带金子回起点 +1000、死亡 −1000、射箭 −10)。💀 OpenAI 2016 那个赛船游戏:奖励给分数不给名次,agent 学会绕圈撞可重生道具,得分比人类高约 20% 却一次终点都没到 —— 它没出 bug,它精确地做到了你要求的事。Wumpus World:4×4,(1,1) 左下角起点,1 支箭;坑的上下左右有微风、Wumpus 的上下左右有臭味、金子同格有闪光(⚠️ 四邻不含对角线,也不告诉你方向)。⭐⭐ 招牌手推:(1,1) 没风没臭 → (2,1)(1,2) 安全;(2,1) 有风没臭 → 坑在 (2,2) 或 (3,1)、两格都没怪;(1,2) 没风有臭 → (2,2)(1,3) 没坑、怪在 (1,1)/(2,2)/(1,3) 之一。合起来:Wumpus 必在 (1,3)、(3,1) 必是坑、(2,2) 安全 —— ⭐ 你从没去过 (2,2),也没有任何一条感知直接说过它安全,这是证出来的不是估出来的。⚠️ 但这条链必须记住前两步的感知,只看当前感知的 agent 在 (1,2) 什么都推不出 —— 这就是下一章反应式 agent 的死穴。六个维度:完全/部分可观测(部分 ⇒ 必须有记忆)、确定性/随机(确定 ⇒ 规划动作序列,随机 ⇒ 规划策略)、片段式/序贯(分类问题就是片段式的)、静态/动态(动态 ⇒ 随时要能交出当前最好答案)、离散/连续、单/多 agent(多 ⇒ 对方会针对你调整)。另加 ⭐⭐ 已知/未知 —— 这就是本板块和强化学习的分界。⚠️ 易混:固定种子掷骰子严格说是确定性 + 部分可观测;多 agent 的判据是「对方行为会不会依赖你的行为」(其他车会,下雨不会)。⭐⭐ 打勾表最关键的一行是推荐系统:它占了五个「难」的一侧,国际象棋一个都不占 —— 部分可观测(没曝光的物品永远拿不到反馈)、随机、序贯、动态、多 agent。这就是为什么能下赢世界冠军的算法搬到推荐系统上一点用都没有。 最后:⚠️ 维度是你选的描述层,不是客观事实 —— 让 Wumpus 会追人,同一个世界立刻变成动态 + 多 agent。
下一节 👉 04-四种Agent架构.md