# 智能体与环境

> 来源：https://dqn.cn/basics/agent-environment ｜ 作者：DQN.CN 编辑部 ｜ 发布：2026-10-29 ｜ 更新：2026-10-30 ｜ 许可：CC BY-NC-SA 4.0（文字）/ MIT（代码）

> **要点速览**
>
> - 在强化学习中，智能体在每个时间步观察状态 S_t、选择动作 A_t，环境返回奖励 R_{t+1} 和下一个状态 S_{t+1}，如此循环。
> - 状态是环境的完整描述，观测是智能体实际看到的部分信息；只能看到部分信息时问题变成部分可观测的（POMDP）。
> - 动作空间分为离散（如上下左右）和连续（如关节力矩）两类，它决定了可以使用哪些算法。
> - 奖励定义了“要做什么”，而不是“怎么做”；设计不当的奖励会被智能体钻空子（奖励欺骗）。

强化学习问题的基本框架是**智能体与环境之间的交互循环**。智能体观察环境、做出动作，环境据此改变状态并给出奖励，如此往复。本节把这个循环拆开来讲清楚，并介绍回合（episode）、观测与状态、动作空间、奖励设计等在写代码前必须理解的概念。

## 交互循环

在每个离散时间步 $t = 0, 1, 2, \dots$：

1. 智能体观察到环境的状态 $S_t$（或观测 $O_t$）；
2. 智能体根据策略 $\pi$ 选择动作 $A_t \sim \pi(\cdot \mid S_t)$；
3. 环境接收动作，转移到新状态 $S_{t+1}$，并返回奖励 $R_{t+1}$；
4. 进入下一个时间步。

由此产生一条**轨迹**（trajectory）：

$$
S_0, A_0, R_1, S_1, A_1, R_2, S_2, A_2, R_3, \dots
$$

```mermaid
flowchart LR
  Agent[智能体 Agent] -- 动作 A_t --> Env[环境 Environment]
  Env -- 状态 S_t+1、奖励 R_t+1 --> Agent
```

## 智能体与环境的边界

一个容易混淆的问题是：什么属于智能体，什么属于环境？Sutton 与 Barto 给出的原则是：**智能体不能任意改变的东西都属于环境**。例如机器人的电机和传感器虽然在物理上属于机器人，但在建模时通常被视为环境的一部分；奖励的计算也被视为在环境中进行，智能体无法直接修改它。

## 状态与观测

- **状态**（state）是对环境完整情况的描述。
- **观测**（observation）是智能体实际能感知到的信息，可能只是状态的一部分。

如果观测包含了做决策所需的全部信息，称为**完全可观测**，可以建模为 MDP；否则称为**部分可观测**，对应 POMDP（部分可观测马尔可夫决策过程）。例如 Atari 游戏单帧画面无法看出小球的速度方向，DQN 的做法是把最近 4 帧堆叠起来作为输入，以近似恢复马尔可夫性。

## 动作空间

- **离散动作空间**：动作数量有限，例如游戏手柄的上、下、左、右。适合 DQN 等基于价值的方法。
- **连续动作空间**：动作是实数向量，例如机械臂各关节的力矩。通常使用策略梯度类方法（PPO、DDPG、SAC 等）。

## 奖励与奖励设计

奖励 $R_t$ 是一个标量，是我们告诉智能体“想要什么”的唯一途径。**奖励假设**（reward hypothesis）认为：所有目标都可以表述为最大化累积标量奖励的期望。

奖励设计时要注意：

- 奖励应描述**要达到什么**，而不是**怎么达到**。例如下棋只应在赢棋时给奖励，而不应奖励“吃子”，否则智能体可能学会为了吃子而输掉整盘棋。
- 稀疏奖励（只在成功时给奖励）难以学习，常用奖励塑形（reward shaping）加速，但塑形不当会导致**奖励欺骗**（reward hacking）：智能体找到漏洞刷分，却没有完成真正的任务。

## 回合制任务与持续性任务

- **回合制任务**（episodic）：交互会在终止状态结束，例如一局游戏。每个回合从初始状态重新开始。
- **持续性任务**（continuing）：交互没有自然终点，例如持续运行的温控系统。此时必须使用 $\gamma < 1$ 来保证回报有限。

在 Gymnasium 中，回合结束分为两种情况：`terminated`（到达真正的终止状态，如游戏失败）和 `truncated`（因时间上限等原因被截断）。两者在计算目标值时处理方式不同：真正终止时未来价值为 0，被截断时仍应自举（bootstrap）下一状态的价值。

## 用代码表达交互循环

下面用 [Gymnasium](https://dqn.cn/basics/gymnasium) 的接口写出最基本的交互循环（这里智能体随机选择动作）：

```python
import gymnasium as gym

env = gym.make("CartPole-v1")
obs, info = env.reset(seed=42)
episode_return = 0.0

while True:
    action = env.action_space.sample()          # 智能体：随机策略
    obs, reward, terminated, truncated, info = env.step(action)  # 环境响应
    episode_return += reward
    if terminated or truncated:
        break

print(f"本回合回报: {episode_return}")
env.close()
```

## 小结与下一步

智能体与环境通过“状态—动作—奖励”循环交互，产生轨迹。下一节先看最简单的情形——只有一个状态的 [多臂老虎机](https://dqn.cn/basics/bandit)，专门研究探索与利用；然后用 [马尔可夫决策过程（MDP）](https://dqn.cn/basics/mdp) 这一形式化框架描述完整的强化学习问题。

## 练习题

1. 对于“扫地机器人”任务，设计一个奖励函数，并思考它可能被如何“钻空子”（奖励欺骗）。
2. 运行上面的随机策略代码 100 个回合，统计平均回报（参考结果见 [Gymnasium 上手](https://dqn.cn/basics/gymnasium)，约 24）。
3. 判断下列任务是回合制还是持续性的：下象棋、股票交易、空调温控、玩超级马里奥。
4. 为什么单帧 Atari 画面不满足马尔可夫性？除了堆叠帧，还有什么办法？（提示：循环神经网络。）
5. 一个回合因为达到 500 步上限而结束（`truncated=True`），此时 TD 目标应该怎么计算？为什么？

## 参考文献

- Sutton, R. S., & Barto, A. G. (2018). *Reinforcement Learning: An Introduction* (2nd ed.), 第 3 章.
- Ng, A. Y., Harada, D., & Russell, S. (1999). Policy invariance under reward transformations: Theory and application to reward shaping. *ICML*.
- Pardo, F., Tavakoli, A., Levdik, V., & Kormushev, P. (2018). Time limits in reinforcement learning. *ICML*.

## 常见问题速查（FAQ）

**问：状态和观测有什么区别？**

答：状态包含决定未来所需的全部信息；观测是智能体实际获得的信息，可能是状态的一部分或带噪声的版本。观测不完整时需要用历史信息或循环网络来弥补。

**问：什么是奖励欺骗（reward hacking）？**

答：智能体找到了让奖励变高、但并不符合设计者真实意图的行为，例如游戏中反复刷分而不完成任务。根源在于奖励函数没有准确表达目标。

**问：回合制任务和持续性任务有什么区别？**

答：回合制任务有明确的终止状态（如一局游戏），持续性任务没有终点（如长期运行的控制系统），通常需要折扣因子 γ<1 才能让回报有界。

## 如何引用本文

DQN.CN 编辑部. 智能体与环境[EB/OL]. DQN.CN, 2026-10-29（更新于 2026-10-30）. https://dqn.cn/basics/agent-environment.
