强化学习环境gymnasium的搭建

本文介绍了如何搭建强化学习环境gymnasium,包括使用pipenv创建虚拟环境,安装包含atari的游戏环境,以及新版gymnasium中reset和step方法的变化,并提到了wrappers.Monitor被替换为RecordVideo的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 前言

gym是目前强化学习最常用的工具之一,一直在迭代升级。2021年gym库不再更新,推出了gymnasium作为替代 1

gymnasium与gym之间的主要不同在于resetstep的返回参数数目发生了变化,具体变化见版本变化

本文所用环境为:

  • python: 3.9
  • pipenv: 2023.3.20
  • gymnasium: 0.28.1
  • 操作系统 Windows 10 和 LinuxMint 20.3 (Ubuntu 20.04)

1. 环境搭建

本文采用pipenv作为虚拟环境方案进行环境搭建,主要包含gymnasium(含atari)的配置。搭建完整强化学习环境后续还需安装CUDA、PyTorch、opencv等库。

1.1 虚拟环境配置

安装pipenv:

pip install pipenv -i https://pypi.tuna.tsinghua.edu.cn/simple/

这里注意版本兼容性问题,据官方说法,pipenv适用于python 3.7及以上2

1.2 安装gymnasium

在强化学习中,Atari游戏是经典的实验环境之一,gymnasium默认是不包含atari的,本文将安装包含atari的gymnasium版本。

新建虚拟环境并进入:

mkdir -p ~/rl
cd ~/rl
pipenv shell	# 在当前工作目录进入虚拟环境

此时会提示创建了新的虚拟环境,可以在该目录中发现多了名为Pipfile的虚拟环境配置文件。

接下来安装gymnasium:

pipenv install gymnasium[atari] gymnasium[accept-rom-license]

这里注意gymnasium[atari]gymnasium[accept-rom-license]都要安装,否则atari的环境是无法成功建立的。

2. 代码测试

gymnasium中包含的Atari列表可以在官网文档中找到,这里用Pong这个游戏举例,版本采用NoFrameskip-v4。

建立gym_test.py:

import gymnasium as gym

env_name= 'PongNoFrameskip-v4'
print(f'gymnasium version: {gym.__version__}')
env = gym.make(env_name)

运行脚本,如果出现类似以下结果说明包含atari的gymnasium安装成功。

(rl) aa@bb:~/rl$ python env_test.py
gymnasium version: 0.28.1
A.L.E: Arcade Learning Environment (version 0.8.1+53f58b7)
[Powered by Stella]

3. 版本变化

3.1 resetstep方法

  • 在旧版中,reset()方法只返回重置后的环境观察值,而新版的reset()方法返回环境的观察值以及一些信息:
gymnasium.Env.reset(self, *, seed: int | None = None, options: dict[str, Any] | None = None)tuple[ObsType, dict[str, Any]]
  • 在旧版中,step()方法返回下一个观察、即时奖励、是否结束和附加信息,而新版的step()方法返回下一个观察、即时奖励、是否结束、是否超时和附加信息,多了一个是否超时的返回值:
gymnasium.Env.step(self, action: ActType)tuple[ObsType, SupportsFloat, bool, bool, dict[str, Any]]

3.2 wrappers.Monitor

gymnasium.wrappers.Monitor被移除,直接调用会报以下错误:

AttributeError: module 'gymnasium.wrappers' has no attribute 'Monitor'

gymnasium提供了gymnasium.wrappers.RecordVideo来提供录视频功能:

class gymnasium.wrappers.RecordVideo(env: Env, video_folder: str, 
									episode_trigger: Callable[[int], bool] | None = None, 
									step_trigger: Callable[[int], bool] | None = None, 
									video_length: int = 0, name_prefix: str = 'rl-video', 
									disable_logger: bool = False)

参考链接

  1. 强化学习环境升级 - 从gym到Gymnasium
  2. Gym Atari: Gym no longer distributes ROMs.
  3. Atari
  4. AttributeError: module ‘gym.wrappers‘ has no attribute ‘Monitor‘_tooony_的博客-CSDN博客

  1. github/gym ↩︎

  2. pypa/pipenv: Python Development Workflow for Humans. ↩︎

### Gymnasium库简介 Gymnasium是一个用于开发和比较强化学习算法的工具包[^1]。它提供了一个简单易用的接口来定义环境,并允许研究人员快速迭代不同的策略。 ### 安装依赖项 为了使用Gymnasium,需要先安装必要的Python包: ```bash pip install gymnasium ``` 对于某些特定环境可能还需要额外安装其他依赖,比如Atari游戏模拟器或MuJoCo物理引擎等[^2]。 ### 创建自定义环境 可以继承`gym.Env`类创建自己的环境,在其中实现动作空间、观察空间以及奖励函数等功能模块。下面展示一个简单的迷宫探索环境的例子: ```python import numpy as np import gymnasium as gym from gymnasium import spaces class MazeEnv(gym.Env): metadata = {'render.modes': ['human']} def __init__(self, maze_size=(4, 4)): super(MazeEnv).__init__() self.action_space = spaces.Discrete(4) # 上下左右四个方向移动 low = np.zeros(maze_size) high = np.ones_like(low)*9 self.observation_space = spaces.Box(low=low, high=high, dtype=np.int8) self._reset() def _reset(self): """重置状态""" pass def step(self, action): """执行一步操作并返回新的观测值、即时回报和其他信息""" done = False reward = -0.1 if ... : # 判断是否到达终点或其他特殊情况 done = True reward += 1 observation_ = ... info = {} return observation_, reward, done, info def render(self, mode='console'): """可视化当前局面""" pass ``` ### 训练模型 有了上述准备之后就可以编写训练脚本了。这里给出一段基于随机策略进行交互采样的代码片段作为示范: ```python env = MazeEnv() for episode in range(10): # 进行多轮实验 obs = env.reset() # 初始化起始位置 total_rewards = 0 # 统计累积收益 while True: act = env.action_space.sample() # 随机选取行动方案 next_obs, rew, terminated, truncated, info = env.step(act) total_rewards += rew # 更新累计得分 if terminated or truncated: # 当回合结束条件满足时跳出循环 break print(f'Episode {episode}: Total rewards={total_rewards}') ``` 通过这种方式不断调整参数直至获得满意的结果即可完成整个流程的设计与实施工作[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值