强化学习环境gymnasium的搭建

news/2024/5/19 0:53:09 标签: python, 深度学习, 人工智能, 强化学习, gymnasium

强化学习环境gymnasium的搭建

  • 0. 前言
  • 1. 环境搭建
  • 1.1 虚拟环境配置
  • 1.2 安装gymnasium
  • 2. 代码测试
  • 3. 版本变化
    • 3.1 `reset`和`step`方法
    • 3.2 `wrappers.Monitor`
  • 参考链接

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

gymnasium_23">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:

python">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()方法返回环境的观察值以及一些信息:
python">gymnasium.Env.reset(self, *, seed: int | None = None, options: dict[str, Any] | None = None)tuple[ObsType, dict[str, Any]]
  • 在旧版中,step()方法返回下一个观察、即时奖励、是否结束和附加信息,而新版的step()方法返回下一个观察、即时奖励、是否结束、是否超时和附加信息,多了一个是否超时的返回值:
python">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来提供录视频功能:

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


http://www.niftyadmin.cn/n/303507.html

相关文章

电脑开关机-第14届蓝桥杯省赛Scratch初级组真题第1题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第130讲。 电脑开关机,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程初级组真题第1题&#…

监控基础入门

5.3 创建配置文件将账户密码写入 [root@mysql_23 mysqld_exporter]# vim .my.cnf [root@mysql_23 mysqld_exporter]# cat .my.cnf [client] user=mysql_monitor password=GUANzhu123// 5.4 启动mysqld_exporter [root@mysql_23 mysqld_exporter]# nohup ./mysqld_exporter --co…

【Java】实现UDP通信

🎈博客主页:🌈我的主页🌈 🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏 🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩&#x1f…

李沐论文精度系列之十:GPT-4

文章目录 一、AIGC资讯速览1.1 Toolformer(2023.2.9)1.2 ChatGPT plugin1.3 LLaMA(2023.2.24)1.4 Visual ChatGPT(2023.3.8)1.5 GigaGAN(2023.3.9)1.6 Stanford Alpaca(2…

NVIDIA CUDA驱动安装

1 引言 因为笔记本电脑上运行Milvus图像检索代码,需要安装CUDA驱动。电脑显卡型号是NVIDIA GeForce GTX 1050 Ti Mobile, 操作系统是Ubuntu 20.04,内核版本为Linux 5.15.0-72-generic。 2 CUDA驱动测试 参考网上的资料:https://blog.csdn.…

flutter系列之:做一个修改组件属性的动画

文章目录 简介flutter中的动画widgetAnimatedContainers使用举例总结 简介 什么是动画呢?动画实际上就是不同的图片连续起来形成的。flutter为我们提供了一个AnimationController来对动画进行详尽的控制,不过直接是用AnimationController是比较复杂的&a…

Line Renderer组件

介绍 Line Renderer 是 Unity 中的一个组件,它可以在场景中绘制直线、曲线或者折线等形状。它通常用于绘制轨迹、路径、线段等图形。Line Renderer 可以通过调整不同的属性来控制线的宽度、颜色、材质、坐标等方面,从而实现各种不同的效果。 方法 Set…

openEuler 社区 2023 年 4 月运作报告

概述 过去一个月,openEuler社区全员参与openEuler Developer Day 2023,通过SIG组开放工作会议完成了下个版本的规划。openEuler社区也参加了在新加坡举办的FOSSASIA SUMMIT。 在技术层面,社区不断推进创新,发布新项目&#xff0…