自定义 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) positionreset 方法
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, infostep 方法
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 反馈 — 无需本地设置。
此课程中的所有课时
- 策略梯度方法:REINFORCE
- Actor-Critic 方法(A2C)
- 近端策略优化(PPO)
- 自定义 Gymnasium 环境