🏠 总目录📚 本教程 03 · 任务环境
📑 本页目录(点开跳转)

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 就会一丝不苟地优化歪的东西。 OpenAI 在 2016 年报告过一个赛船游戏的例子:奖励给的是分数而不是名次, 结果 agent 学会了在一个小水湾里绕圈撞可重生的道具刷分,得分比人类玩家高约 20%, 却一次终点都没到过,还不停撞船起火。 ⚠️ 它没有出 bug,它精确地做到了你要求的事。 这正是上一章 ELIZA 那个坑的现代版本。


🕳️ 三、Wumpus World:把一个任务真正形式化

这个 4×4 的小世界是全课程贯穿的例子,后面讲逻辑、讲不确定性都会回到它。规则很短:

⭐ 因为有朝向,agent 的位置状态是 16 格 × 4 个朝向 = 64 种,再乘上「金子拿没拿」「箭射没射」。

行4 行3 行2 行1 列1 列2 列3 列4 臭味 微风 Wumpus 臭味 微风 闪光 金子 微风 臭味 微风 起点 微风 微风 微风 = 上下左右有坑  臭味 = 上下左右有 Wumpus 闪光 = 同格有金子  空白 = 什么都感知不到
标准 Wumpus World:Wumpus 在 (1,3),坑在 (3,1)(3,3)(4,4),金子在 (2,3)。agent 一开始只知道自己在 (1,1)。

🔨 纸上推一遍:三步定位一个你从没见过的格子

⭐ 这一段是本板块的招牌。不用任何数据、不用任何训练,只靠三条感知规则做交叉推理。

你在哪 感知到 能推出什么
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) 三者之一

现在把三步的结论并起来:

⭐⭐ 这就是这个板块存在的理由。 三条规则加三次观察,把两个看不见的东西的位置证明了出来 —— 不是估计,不是概率,是证明。 换成「学一个模型来预测哪格有坑」,你需要成千上万局带标注的历史数据,而且仍然只能给概率。

⚠️ 但请注意这条推理链必须记住第 1 步和第 2 步的感知。 一个只看当前感知的 agent 走到 (1,2) 时,手上只有「没风、有臭味」,推不出任何东西这就是下一章第一种 agent 的死穴。


🎚️ 四、环境的六个维度

维度 分界线在哪 ⭐ 这决定了你能用什么
完全可观测 / 部分可观测 感知是否包含所有相关信息 部分可观测 ⇒ agent 必须有内部状态(记忆),否则连上面那条推理都做不了
确定性 / 随机 当前状态是否唯一决定下一状态 确定性 ⇒ 可以规划一条动作序列;随机 ⇒ 必须规划一个策略(每个状态该干嘛)
片段式 / 序贯 每个动作是否被独立评价 片段式 ⇒ 每次决策互不影响,分类问题就是片段式的;序贯 ⇒ 必须往前看
静态 / 动态 你思考的时候环境会不会变 动态 ⇒ 有实时约束,算法必须随时能交出当前最好的答案
离散 / 连续 状态、感知、动作是否可数 连续 ⇒ 没法枚举后继,要么离散化成栅格、要么用连续方法(第 7 章运动规划)
单 agent / 多 agent 有没有别的决策者 多 agent ⇒ 对方会针对你调整,需要博弈树和极小化极大(第 10、11 章)

还有两个也很常用,其中第一个直接划出了本板块的边界:

维度 说明
⭐⭐ 已知 / 未知 游戏规则、环境的物理规律,你知不知道搜索假设你知道,强化学习假设你不知道、要试出来。 这就是本板块和《强化学习基础》的分界线
模拟 / 具身 环境是另一个程序喂给你感知,还是你有个真身体、要处理重力和噪声

⚠️ 三个最容易搞混的地方

  1. 「随机」和「部分可观测」不是一回事。 骰子是真随机但大家都看得见;扑克里别人的牌早就定死了、只是你看不见。 ⭐ 用固定种子的伪随机数发生器掷骰子,严格说是确定性 + 部分可观测
  2. 「多 agent」的判据是:对方的行为会不会依赖你的行为。 高速上的其他车会;下雨不会(只是随机环境)。
  3. 半动态:环境不变但你的分数在变 —— 带时钟的比赛棋。

📊 五、把几个任务按维度打一遍勾

这张表是本章的重点。从上往下读,你会看到难度是怎么一格一格加上去的。

任务 可观测 确定性 片段/序贯 静态/动态 离散/连续 单/多 agent
数独 / N 皇后 完全 确定 序贯 静态 离散
图像分类 完全 确定 片段式 静态 连续
国际象棋 完全 确定 序贯 半动态 离散
西洋双陆棋 完全 随机 序贯 静态 离散
Wumpus World 部分 确定 序贯 静态 离散
自动驾驶 部分 随机 序贯 动态 连续
推荐系统 部分 随机 序贯 动态 混合

每加一项「难」的,就得换一类方法

⭐ 最后一行值得单独说:推荐系统为什么比下棋难得多

维度 推荐系统的实际情况
部分可观测 你看不见用户的真实意图,只看得见点击。⚠️ 更糟的是没被曝光的物品你永远拿不到反馈
随机 同一个人、同一个位置、同一个物品,点不点是概率性的
序贯 今天推什么会改变明天用户的兴趣,⚠️ 短期指标涨不代表长期好
动态 你在算的时候候选池在变、热点在变、库存在变
多 agent ⭐ 广告位上有别的广告主在竞价;内容侧有创作者在针对推荐算法调整发布策略

⭐⭐ 六个维度里,推荐系统占了五个「难」的一侧,国际象棋一个都不占。 这就是为什么一套能下赢世界冠军的算法,搬到推荐系统上一点用都没有 —— 它们根本不是同一类问题,尽管两者都叫「AI」。


🧊 六、⚠️ 维度是你选的描述层,不是客观事实

同一个任务,换个抽象层就换一组勾:

所以正确的问法不是「这个环境是什么类型的」,而是「我打算在哪一层描述它」。 描述层选定了,能用的算法也就定了 —— 这是你在整个项目里最早、也最便宜的一个决策。


🔗 这一章连到哪里

去哪 为什么
04 · 四种 Agent 架构 第三节那条三步推理要求记住之前的感知,而下一章第一种 agent 恰好没有记忆。⭐ 它的失败就是第二种 agent 的理由
../强化学习基础/02-MDP.html ⭐⭐ 本章「已知 / 未知」那一维就是两个板块的分界:搜索假设转移和代价都已知,RL 假设你不知道、要试出来。那一章的 MDP 是「随机 + 序贯」环境的标准形式化
../推荐算法/13-冷启动与探索利用.html ⭐ 本章说推荐系统「没被曝光的物品永远拿不到反馈」,那一章就是专门解这个问题的
../推荐算法/15b-广告-从推荐到竞价.html ⭐ 推荐系统「多 agent」那一格的实证:广告位上真的有别人在同时出价
../模型上线之后/15-长期效应与代理指标.html ⭐ 本章 💀 那个赛船刷分的工业版本 —— 序贯环境里短期指标涨不代表长期好

✅ 检查点

  1. PEAS 是哪四个词?为什么说四个里面 P 最难写?
  2. Wumpus World 的「每步 −1」去掉会怎样?这一个数字把什么概念写进了问题定义?
  3. Wumpus World 的三条感知规则分别是什么?「相邻」指几格、含不含对角线?
  4. 在 (1,1) 无感知、(2,1) 有微风、(1,2) 有臭味之后,你能确定哪三件事?这条链为什么必须有记忆?
  5. 环境的六个维度是什么?「部分可观测」和「动态」各自逼出了什么算法要求?
  6. 「随机」和「部分可观测」的区别是什么?固定种子掷骰子的游戏属于哪一类?判断多 agent 的判据是什么?
  7. 推荐系统在六个维度里占了几个「难」的一侧、国际象棋占几个?为什么说「维度是你选的描述层,不是客观事实」?
👀 答案
  1. Performance measure、Environment、Actuators、Sensors。⭐ P 最难写是因为它定义了「赢」,写歪了 agent 会一丝不苟地优化歪的东西(💀 赛船:奖励给分数不给名次,得分比人类高约 20% 却从没到过终点)。
  2. 没有它,agent 可以无限磨蹭、把 16 格全探一遍再动手。⭐ 有了它,多探一格降风险但要付 1 分 —— 这一个数字把「探索还是利用」写进了问题定义
  3. 坑的上下左右四格有微风;Wumpus 的上下左右四格有臭味;金子所在那一格有闪光。⚠️ 相邻指上下左右四格、不含对角线,而且不告诉你方向
  4. 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) 手上只有「没风、有臭味」,什么都推不出
  5. 完全/部分可观测、确定性/随机、片段式/序贯、静态/动态、离散/连续、单/多 agent。⭐ 部分可观测 ⇒ 必须有内部状态(记忆);动态 ⇒ 随时要能交出当前最好的答案
  6. 随机是「当前状态不唯一决定下一状态」(骰子大家都看得见);部分可观测是「信息早定死了但你看不见」(扑克里别人的牌)。⭐ 固定种子掷骰子严格说是确定性 + 部分可观测。多 agent 的判据是 ⭐ 对方的行为会不会依赖你的行为 —— 其他车会,下雨不会。
  7. ⭐⭐ 推荐系统占五个,国际象棋占零个:部分可观测(⚠️ 没曝光的物品永远拿不到反馈)、随机、序贯、动态、多 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

打卡记录保存在你的浏览器里,首页能看到总进度