本节摘要:Agent 含策略与学习目标;Environment 含转移与奖励。完全可观测 vs 部分可观测(POMDP)。轨迹 τ=(s_0,a_0,r_0,s_1,...)。
Agent 输入:观测 o_t(完全可观测时 o_t=s_t)
Agent 输出:动作 a_t ~ π(·|s_t)
Environment:(s_t, a_t) → (s_{t+1}, r_t)
τ = s_0, a_0, r_0, s_1, a_1, r_1, ...
| 类型 | 说明 | 例子 |
|---|---|---|
| 完全可观测 | s 已知 | GridWorld |
| 部分可观测 | 需历史/估计 | 机器人激光局部 |
| Episodic | 有终止 | 游戏一局 |
| Continuing | 无终止 | 库存控制 |
工程上「环境」常包含:仿真器、奖励函数、终止条件。换 reward 等于换任务——Agent 会 exploit 你写的公式。
⚠️ 常见坑:把应属于 Agent 的预处理放进 Environment——导致算法不可迁移。
💡 关键直觉:先固定接口 (obs, action, reward, done),再换算法。
"先固定接口 (obs, action, reward, done),再换算法"是深度强化学习工程里最实用的建议。原因很简单:强化学习环境库的生态都是围绕这套统一接口设计的,只要你的环境满足它,第 4 章的 Q-learning、第 5 章的 DQN 都能直接套上去。下面是一个符合该接口的最小环境示意:
# 概念:一个符合通用接口的最小环境 class TinyEnv: def reset(self): # 返回初始观测 return self.state def step(self, action): # 执行动作,返回 (next_state, reward, done) next_state = self.state + action reward = 1 if next_state == self.goal else 0 done = (next_state == self.goal) return next_state, reward, done
接口背后四个量的职责:obs 是智能体看到的世界(可能只是真实状态的一部分);action 是智能体唯一能影响世界的方式;reward 是任务目标的唯一信号——改 reward 就等于改任务;done 标记一局结束,决定算法在何处重置与结算。四者合起来就是算法的全部"视野",算法不需要也不应该知道环境内部的更多细节。
POMDP 的现实性:真实环境几乎都是部分可观测的——自动驾驶的车只知道传感器范围内的道路,看不到整个地图;扫地机器人只知道当前位置局部的障碍。部分可观测下,最优策略往往要依赖历史信息(之前走过哪些房间)或维护一个对真实状态的后验估计(belief state)。把 POMDP 简化成 MDP(假装观测就是状态)在简单场景可行,复杂场景就出问题——这也是"智能体与环境交互"这一节专门提醒 POMDP 的原因。
为什么预处理不该放进环境:有人习惯在环境里做图像缩放、归一化、状态拼接,这会让环境与算法耦合。规范做法是:环境只负责"世界如何响应动作",观测的加工(特征工程、图像处理)属于智能体一侧的"感知管线"。这样同一套环境可以配不同感知管线的算法,同一套算法也可以在多个环境间迁移,工程上可维护性完全不同。
用最常见的猜数字游戏检验你对接口的理解。规则:系统想好一个 1~100 的整数,玩家每次猜一个数,系统反馈"大了/小了/猜中",最多 7 次。请按通用接口建模:状态 obs 是什么?(每次猜测后可以更新的区间,比如"剩余候选区间 [1,50]")动作 action 是什么?(猜区间内的一个整数)奖励 reward 怎么给?(猜中给 +10,每猜一次给 -1,逼玩家少猜几次)终止条件 done 是什么?(猜中或猜满 7 次)。
写完后回答两个问题:一,这个环境里观测是"完全可观测"还是"部分可观测"?——答案是完全可观测,因为玩家掌握的候选区间就是全部信息;如果改成"系统不告诉你大了还是小了,只告诉你错",就变成了部分可观测(POMDP),最优策略必须靠记录历史来推理。二,若奖励改为"猜中才给 +1、其余全 0",这个任务会变难多少?——答案是探索成本剧增,因为中间没有梯度信号。把这两个问题想清楚,"接口四件套(obs、action、reward、done)"和"任务定义由奖励决定"就真正落地了。
智能体与环境交互的常见误区:一是把"观测"当"状态"——真实环境几乎都是部分可观测的,观测只是状态的一部分;把 POMDP 当 MDP 处理,策略会在信息不足时做出糟糕决策,识别"缺哪些信息"是设计的第一步。二是把预处理、策略逻辑塞进环境——环境只该描述"世界如何响应动作",观测加工和决策逻辑属于智能体一侧;耦合会让环境无法复用、算法无法迁移。三是忽略 done 的语义——done 既可能是"任务完成"也可能是"回合提前终止",两者的学习信号含义不同,处理错会导致价值估计错误。四是奖励只给"过程分"不给"结果分"——reward 是任务定义本身,设计奖励前先想清楚"最终要什么结果",否则智能体学会的是刷中间分而非达成目标。