GridWorld悬崖行走
经典 Cliff Walking 导航任务的 5×5 变体:随机起点、末行随机目标、中间悬崖、Dict 结构化观测与撞墙终止,用作自定义 Gymnasium 环境与 PPO 教学基准。
简介
悬崖行走(Cliff Walking) 是强化学习教科书中的标准格子世界:智能体需从起点走到终点,途中有高惩罚「悬崖」格。标准设定多为 4×12、固定起终点、一维状态索引。
本文档库中的 GridWorld 悬崖行走变体(掘金教程实现)刻意改成更接近机器人场景的约束:
- 网格 5×5,悬崖在第 4 行中间 3 格(列 1–3)
- 起点随机(排除悬崖与目标),目标在最后一行列随机
- 观测为 Dict(agent/target/cliff 归一化坐标 + boundary_flag)
- 撞墙追加惩罚并终止(硬失败)
- MAX_STEP = size² = 25,超时 truncated
任务示意:
. . . . .
. . . . .
. . . . .
. C C C G
. . . . A该实体记录的是任务定义与环境设计,算法侧见 PPO / Stable Baselines3,接口侧见 Gymnasium。
关键信息
- 类型:概念 / 仿真任务 / 示例环境
- 领域:强化学习
- 官方网站/地址:标准 Cliff Walking 见 Gymnasium 文档;本变体见教程完整代码
- 定价/开源状态:教程代码可复制(约 200 行)
- 相关概念:势能奖励塑形、PPO、Gymnasium
核心特性
与标准 Cliff Walking 对比
| 维度 | 标准 Cliff Walking | 本变体 |
|---|---|---|
| 网格 | 4×12 | 5×5 |
| 悬崖 | 底行中间 | 第 4 行中间 |
| 起点 | 固定左下 | 随机合法格 |
| 目标 | 固定右下 | 末行列随机 |
| 观测 | 一维索引 | Dict 多字段 |
| 边界 | 通常无出界 | 撞墙惩罚+终止 |
观测与动作
- 动作:Discrete(4) 上下左右;坐标约定 x 为行、y 为列
- 观测字段:
agent/target:Box(0,1)形状 (2,)cliff:(3,2)悬崖坐标boundary_flag:0 无贴边,1–4 上下左右贴边——显式边界感知,利于学「提前转弯」
奖励与终止语义
见 势能奖励塑形 表;info 含 termination_reason ∈ {running, goal, cliff, timeout} 与 is_success。
训练结果锚点(本实现)
- 60k PPO 步后
ep_rew_mean≈ 4.38(理论完美约 4.6) - 前期撞墙坠崖,中期学会规避,后期平台
不同素材中的观点
- 2026-07-19-juejin-gridworld-cliff-ppo:环境是文章主体——逐段拆
__init__/_obs/reset/step/ 双渲染;强调拒绝采样重置合法起点、防御性int(np.asarray(action).item())、ansi 服务器调试 + pygame 演示。拓展实验方向:连续动作(SAC/TD3)、随机风场、动态悬崖、部分可观测(3×3 + LSTM)、多目标。
实用信息
- 快速上手:复制教程
GridWorldEnv→check_env→ PPO MultiInputPolicy 60k → human 渲染验证 - 注意事项:
- 目标在代码中为「末行 + 随机列」,与示意图「固定右下 G」叙述略有教学简化,以实现代码为准
- cliff 用 set 做 O(1) 碰撞
- pygame 渲染不要在
step里引入副作用状态