gym是目前强化学习最常用的工具之一,一直在迭代升级。2021年gym库不再更新,推出了gymnasium作为替代 1。
gymnasium与gym之间的主要不同在于reset
和step
的返回参数数目发生了变化,具体变化见版本变化。
本文所用环境为:
本文采用pipenv作为虚拟环境方案进行环境搭建,主要包含gymnasium(含atari)的配置。搭建完整强化学习环境后续还需安装CUDA、PyTorch、opencv等库。
安装pipenv:
pip install pipenv -i https://pypi.tuna.tsinghua.edu.cn/simple/
这里注意版本兼容性问题,据官方说法,pipenv适用于python 3.7及以上2。
在强化学习中,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的环境是无法成功建立的。
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]
reset
和step
方法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]]
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)
github/gym ↩︎
pypa/pipenv: Python Development Workflow for Humans. ↩︎