GridWorld 示例
在小网格中观察状态、动作、障碍、终点和奖励。
学习目标
- 先用可手算的小环境核对边界、终止与更新,再增加算法复杂度。
- 独立复核“边界动作与目标奖励的明确约定”的输入、计算和解释。
- 撞墙规则和奖励时机是环境定义的一部分。
为什么重要
先用可手算的小环境核对边界、终止与更新,再增加算法复杂度。
学习前需要掌握
背景与问题
深度强化学习的失败可能来自网络,也可能只是坐标轴写反或目标格没有终止。GridWorld 将这些因素缩小到能完整打印的状态表,使学习器和环境可以分别验证。
概念定义
GridWorld 用格子、方向与转移规则构造有限决策环境。状态可包含位置、钥匙或剩余时间;上下左右等是动作。它是一类环境而不是单个算法,同一网格可以用 DP、MC、TD 或策略方法求解。
直观理解
像在方格纸上推演路线:先明确撞墙是否原地停留、到终点何时拿奖励,再讨论策略。不同规则即使图看起来一样,也可能是不同 MDP。
核心原理
必须定义坐标顺序、地图边界、障碍、起点分布、转移随机性和奖励时机。撞墙保持原地与允许越界不是小实现差异,会改变状态转移和最优路线。
终点可约定为进入时给奖励并立即终止;此后不再叠加终点自身价值。若终点仍可循环领取奖励,任务会从“到达目标”变成“持续刷分”,策略目标已经不同。
可先验证一条固定动作序列的状态、奖励和终止,再比较学得策略与已知最短路径。最短路径只在确定环境且奖励按步长等条件下对应最优回报,带滑动概率或风险时未必如此。
数学表达
本页网格的转移奖励
这是本页 2×2 构造环境的奖励规则;进入 g 后真正终止,不再重复领取奖励。
变量含义
s、s′当前与下一格子位置a移动动作g终点格子
计算步骤
- 1从起点向上后仍为 (0,0),奖励 −1。
- 2随后向右到 (0,1),奖励 −1。
- 3再向下到终点 (1,1),奖励 +5 并终止。
代码对应位置
示例 1边界动作与目标奖励的明确约定:固定三步得到奖励 −1、−1、5,总和为 3;边界动作消耗一步。
变量解释
| 变量 | 含义 |
|---|---|
s、s′ | 当前与下一格子位置 |
a | 移动动作 |
g | 终点格子 |
完整数值示例
边界动作与目标奖励的明确约定
已知条件
- 2×2 网格,起点 (0,0),终点 (1,1)。
- 向上越界时原地停留,普通步奖励 −1,进入终点奖励 +5。
计算步骤
- 从起点向上后仍为 (0,0),奖励 −1。
- 随后向右到 (0,1),奖励 −1。
- 再向下到终点 (1,1),奖励 +5 并终止。
计算结果
固定三步得到奖励 −1、−1、5,总和为 3;边界动作消耗一步。
处理前后对比
- 撞墙规则和奖励时机是环境定义的一部分。
- 本例用不折扣有限轨迹求和,未进行策略训练。
计算与实现步骤
- reset 起点
- epsilon-greedy 选动作
- 执行移动
- 更新 Q
- 到终点结束
代码实现
示例 1
边界动作与目标奖励的明确约定
example_01.py用途:固定三步得到奖励 −1、−1、5,总和为 3;边界动作消耗一步。
state, goal = (0, 0), (1, 1)
total = 0
for dr, dc in [(-1, 0), (0, 1), (1, 0)]:
row, column = state[0] + dr, state[1] + dc
if 0 <= row < 2 and 0 <= column < 2:
state = (row, column)
terminal = state == goal
reward = 5 if terminal else -1
total += reward
print(f"state={state} reward={reward} terminal={terminal}")
if terminal:
break
print(f"total={total}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
固定三步得到奖励 −1、−1、5,总和为 3;边界动作消耗一步。
Step 1 · 1–13 行
按学习率和梯度更新参数。步长过小会缓慢,过大会越过最低点并震荡或发散。
state, goal = (0, 0), (1, 1)
total = 0
for dr, dc in [(-1, 0), (0, 1), (1, 0)]:
row, column = state[0] + dr, state[1] + dc
if 0 <= row < 2 and 0 <= column < 2:
state = (row, column)
terminal = state == goal
reward = 5 if terminal else -1
total += reward
print(f"state={state} reward={reward} terminal={terminal}")
if terminal:
break
print(f"total={total}")预期输出或运行结果
state=(0, 0) reward=-1 terminal=False state=(0, 1) reward=-1 terminal=False state=(1, 1) reward=5 terminal=True total=3
常见错误 · 3 条
- 行列坐标与上下方向符号混用。
- 进入终点后继续领取正奖励。
- 有随机陷阱时仍把几何最短路径当唯一正确答案。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 行列坐标与上下方向符号混用。
- 进入终点后继续领取正奖励。
- 有随机陷阱时仍把几何最短路径当唯一正确答案。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Sutton 与 Barto《Reinforcement Learning: An Introduction》(第 3、4、6 章)。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 行列坐标与上下方向符号混用。
- 进入终点后继续领取正奖励。
- 有随机陷阱时仍把几何最短路径当唯一正确答案。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
GridWorld 太简单,还有验证价值吗?
有。完整可见的状态表适合定位转移、终止与目标构造错误,但在网格上正确不等于能解决高维视觉或真实控制问题。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。