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. ↩︎

Logo

更多推荐