0Pricing
Learn AI with Python · 课时

自定义 Gymnasium 环境

gym.Env 子类、观测空间与动作空间、step/reset/render,以及注册自定义环境。

自定义 Gymnasium 环境 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

什么是 Gymnasium

Gymnasium(维护中的 OpenAI Gym 后继者)是 RL 环境的标准应用程序接口。任何遵循其接口的智能体都能与任何兼容环境配合使用,因此构建自己的环境就能将 RL 应用于自定义问题。

pip install gymnasium

import gymnasium as gym

继承 gymnasium.Env

自定义环境继承 gymnasium.Env,并实现四项内容:动作空间和观测空间,以及 reset 和 step。这份契约就是智能体所需的全部内容。

class GridWorld(gym.Env):
    def __init__(self):
        super().__init__()

动作空间

action_space 声明哪些动作有效。Discrete(n) 表示有 n 个选择(例如上、下、左、右);Box 定义动作的连续取值范围,例如转向范围。

self.action_space = gym.spaces.Discrete(4)  # 4 moves

观测空间

observation_space 描述智能体能够看到的内容。Box 空间设置观测向量的形状和值范围,使算法知道输入维度。

self.observation_space = gym.spaces.Box(
    low=0, high=10, shape=(2,), dtype=float
)  # agent (x, y) position

reset 方法

reset 开始新的回合,并返回一个元组 (observation, info)。它接受用于保证可复现性的 seed。请始终在这里返回初始观测。

def reset(self, seed=None, options=None):
    super().reset(seed=seed)
    self.pos = [0, 0]
    obs = self._get_obs()
    info = {}
    return obs, info

step 方法

step(action) 让环境前进一个时间步。它会返回五个值:(obs, reward, terminated, truncated, info)。正确实现这一签名对于兼容性至关重要。

def step(self, action):
    self._move(action)
    obs = self._get_obs()
    ...

自然结束与被截断

这里有两个独立的标志:terminated 表示任务自然结束(达到目标或失败);truncated 表示任务被提前截断(例如达到时间限制)。将二者分开,算法就能分别正确处理它们。

    terminated = (self.pos == self.goal)
    truncated = (self.steps >= self.max_steps)
    reward = 1.0 if terminated else -0.01
    return obs, reward, terminated, truncated, {}

设计奖励

奖励函数定义目标。请谨慎设计奖励:少量的每步惩罚加上目标奖励,可以鼓励智能体快速到达目标。糟糕的奖励设计是 RL 失败最常见的原因。

注册环境

请为您的环境注册一个 ID,这样就能通过 gym.make 创建它,并遵循内置环境的惯例。

gym.register(id="GridWorld-v0", entry_point=GridWorld)
env = gym.make("GridWorld-v0")

与智能体一起使用

由于它遵循标准应用程序接口,您的自定义环境可以直接接入 Stable-Baselines3 等库,无需额外的适配代码。

from stable_baselines3 import PPO

env = gym.make("GridWorld-v0")
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=50_000)

标准交互循环

每个 RL 循环看起来都一样:先执行 reset 获取第一个观测,然后反复选择动作、调用 step,并在 terminated 或 truncated 时停止。这种统一性正是 Gymnasium 的全部意义。

obs, info = env.reset()
done = False
while not done:
    action = env.action_space.sample()
    obs, reward, terminated, truncated, info = env.step(action)
    done = terminated or truncated

快速检查

请测试您对 Gymnasium 的理解。

回顾:自定义 Gymnasium 环境

您通过继承 gymnasium.Env 构建了自定义环境,定义了 action_space 和 observation_space,实现了 reset()(返回观测值和信息)与 step()(返回观测值、奖励、自然结束标志、截断标志和信息),并设计了奖励。遵循标准应用程序接口后,任何 RL 库都可以在这个环境上进行训练。

常见问题解答

「自定义 Gymnasium 环境」课时是免费的吗?

是的 — 「自定义 Gymnasium 环境」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「自定义 Gymnasium 环境」这节课中我会学到什么?

gym.Env 子类、观测空间与动作空间、step/reset/render,以及注册自定义环境。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「自定义 Gymnasium 环境」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 策略梯度方法:REINFORCE
  2. Actor-Critic 方法(A2C)
  3. 近端策略优化(PPO)
  4. 自定义 Gymnasium 环境
← 返回 Learn AI with Python