最新版gym-0.26.2下Atari环境的安装以及环境版本v0,v4,v5的说明
强化学习的游戏仿真环境可以分为连续控制和非连续控制两类,其中连续控制的以mujoco为主,而非连续控制的以Atari游戏为主,本文对gym下的Atari环境的游戏环境版本进行一定的介绍。
参考:【转载】【重磅】Gym发布 8 年后,迎来第一个完整环境文档,强化学习入门更加简单化!我们知道gym官方给出的gym说明地址为:
从官方的说明中知道gym的Atari环境在V0,V4的基础上增加了V5版本。虽然V5版本是2022年gym才正式整合进gym的Atari环境并推出使用的,但是该方法在2017年就已经被正式发表并使用,V5版本的原始论文地址:
Revisiting the Arcade Learning Environment: Evaluation Protocols and Open Problems for General Agents

---------------------------------------------------------------------------------------
首先看下在之前版本的gym中V0,V4之间的区别:
从(续) gym atari游戏的环境设置问题:Breakout-v0, Breakout-v4, BreakoutNoFrameskip-v4和BreakoutDeterministic-v4的区别中可以知道:
1. 首先是v0和v4的区别:带有v0的env表示会有25%的概率执行上一次执行的action,而v4表示只执行agent给出的action,不会重复之前env所执行的action。
2. 带有Deterministic的env表示固定跳4帧,否则跳帧数随机从 (2, 5) (2,3,4) 中采样。
3. 带有NoFrameskip的env表示没有跳帧。
新版本的gym中虽然依旧保留了老版本gym中的v0,v4的版本功能,但是这里已经不建议使用了,新版本中建议在gym.make的时候使用参数来指定Frameskip的具体数值(Deterministic Fameskip、NoFrameskip、Random Frameskip)和repeat_action_probability(sticky probability)的数值,具体参数设置:

可以看到新版本gym中不像旧版本中那样不允许修改frameskip和repeat_action_probability的数值,新版本中不仅在gym.make的同时对frameskip和repeat_action_probability进行设置也可以通过指定版本V0,V4,V5的方式使用各版本中默认的frameskip和repeat_action_probability数值,这里需要注意,如果在gym.make中指定了游戏版本(v0,v4,v5)的同时也手动设定了frameskip和repeat_action_probability的数值,但是最终生效的frameskip和repeat_action_probability数值以手动设置的参数(common arguments)数值为准。
新版本的gym也将第一款DRL框架baselines中的game preprocessing的代码融合进来了,我们可以通过指定obs_type参数的方式获得灰度图(grayscale),同时也可以通过指定full_action_space的方式来指定action space的空间(Atari游戏默认有18个动作,但是实际中每个游戏都可以使用较少的动作空间来实现同样的效果,简单的来理解就是DOWNRIGHT、DOWN、RIGHT这三个动作完全可以用DOWN、RIGHT这两个动作来表示,因为DOWN+RIGHT=DOWNRIGHT,连续执行DOWN、RIGHT动作就可以实现DOWNRIGHT动作的相同效果)。
在旧版本gym中如果想绘制人类可以观看的游戏画面需要调用env.render()函数,但是在新版本的gym中可以在gym.make的时候将render_mode设置为“human”,这样再env.step(action)的时候就可以自动实现画面绘制和游戏音乐播放,该种方式可以获得更好的适合人类的游戏体验。
在新版本的gym中还提供了mode和difficulty的设置参数,具体的对应参数见官网文档:https://www.gymlibrary.dev/environments/atari/#flavors

这里需要重点说一下,在老版本的gym中是不支持Atari游戏的mode/difficulty设置的,但是Atari游戏本身是支持这个困难度设置的,由于这个困难度的设置是为迁移学习等方向使用的,因此使用度并不是很高,但是有这方面需要的researcher就可以在新版本gym中得到便利。另外需要注意的一点是同个游戏的不同困难mode下,所对应的reduce action space可能会不同,为了保证同个游戏在不同困难度下action_space保持一致可以在gym.make的时候设置full_action_space=True 。
-------------------------------------------------------------------------------------------------
关于v0,v4,v5的说明:
如同前面对v0,v4的说明:
1. 首先是v0和v4的区别:带有v0的env表示会有25%的概率执行上一次执行的action,而v4表示只执行agent给出的action,不会重复之前env所执行的action。
2. 带有Deterministic的env表示固定跳4帧,否则跳帧数随机从 (2, 5) (2,3,4) 中采样。
3. 带有NoFrameskip的env表示没有跳帧。
官网文档给出了关于v0,v4的说明表格,该表格与前面的文字说明是一致的,但是看起来更加的直观,表格如下:

说白了,在老版本的gym中,v0和v4的区别在于是否设置sticky probability,也就是这里的repeat_action_probability;而不论v0还是v4所对应的frameskip都是(2,3,4)中随机选,不论v0还是v4,如果后缀为Deterministic则代表frameskip=4(space_invaders比较特殊,在不是随机frameskip的情况下其数值不能超过3,因此在Deterministic时该游戏的frameskip=3而不是4),如果后缀为NoFrameskip则意味着frameskip=1。
注意:在论文《Human-level control through deep reinforcement learning》中指出space_invaders游戏中如果将frameskip设置为4则无法捕捉到激光发射的画面,因而不能正常的训练。
而新版本gym中所推出的V5版本则是根据论文Revisiting the Arcade Learning Environment: Evaluation Protocols and Open Problems for General Agents所来的,在该论文中经过实验及分析认为repeat_action_probability=0.25对算法训练更加公平,因为这样可以减少Atari游戏非随机的游戏环境所造成的对算法训练不公平的问题(Atari游戏在游戏状态确定和动作确定的情况下其下个状态也是确定的,这是由于Atari游戏中的dynamic是非随机的,有些算法通过对固定游戏序列的记忆就可以获得到很好的result,加入sticky probability可以很好的增加随机性,对训练算法更加公平),同时由于在该论文中将frameskip与repeat_action_probability相结合并且设置frameskip=5,因此这里的v5也采用了同样的设置。
需要注意的是,即使在v5中,space_invaders游戏的默认frameskip依旧等于3。
在ale_py/gym.py的代码中查看源码:



从源码中可以看到与官方文档中不同的是,V5中所对应的frameskip的默认值不是5而是4,也就是不特殊指定v5的话frameskip=4,而不是文档和论文中所说的5,为此我只能说文档和论文都是参考所用,最终的数值还是应该以源码中的为准。而且在源代码中可以看到full_action_space默认在v5中为false,而不是文档中说给的True。
还有,从源码中的信息:


可以知道,"max_num_frames_per_episode"中的数值并不是一个episode中算法传给env的动作次数,而是底层的游戏引擎真实执行的步数,因此这里再frameskip=4的情况下得到一个episode最多可以接受的动作次数为108k/4=27000 。
官方文档通过游戏Amidar做了进一步的解释:

可以看到在v5中是不可以使用后缀Deterministic和NoFrameskip的,但是需要注意的是v5下的游戏环境需要使用"ALE"作为命名空间,并且后缀“-ram”依旧可以使用,不过由于新版本中提供了obs_type的设置参数,这里后缀“-ram”的意义也不是很大了。
--------------------------------------------------------------------------------------------
附录:
gym的Atari环境安装命令:
pip install gym[atari]
pip install gym[accept-rom-license]
=========================================================
参考:
windows系统下最新版gym[atari]中的游戏环境(此时最新版的gym为0.24.0,gym==0.24.0)
(续) gym atari游戏的环境设置问题:Breakout-v0, Breakout-v4, BreakoutNoFrameskip-v4和BreakoutDeterministic-v4的区别
https://github.com/mgbellemare/Arcade-Learning-Environment
https://gitee.com/devilmaycry812839668/baselines
最新版gym-0.26.2下Atari环境的安装以及环境版本v0,v4,v5的说明的更多相关文章
- Windows10下JDK8的下载安装与环境变量的配置
Windows10下JDK8的下载安装与环境变量的配置 下载JDK8(64位) 链接:https://pan.baidu.com/s/10ZMK7NB68kPORZsPOhivog 提取码:agsa ...
- Windows下MongoDB的下载安装、环境配置
下载MongoDB 1.进入MongoDB官网,Products -> 选择SOFTWARE下的MongoDB Server 2.选择下载最新版 3.选择对应的版本下载 msi安装包形式安装Mo ...
- 实践详细篇-Windows下使用VS2015编译安装Caffe环境(CPU ONLY)
学习深度学习背景 最近在做一款抢票软件,由于12306经常检测账号状态,抢票抢着抢着就需要重新登录了,然后登录是需要验证码的.所以我最开始是想到了使用java基于感知哈希算法pHash做相似度匹配识别 ...
- Linux CentOS7 下无图形界面安装Oracle11G R2版本
01,系统 Centos7 数据库版本 Oracle_11gR2 ,以及硬件要求 内存不能小于 1G,可用硬盘不小于8G Swap分区空间不小于2G grep MemTotal /proc/memin ...
- linux下JDK,tomcat的安装与环境变量配置
先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm) ,下载后放在/home目录中,当然其它地方也行. 进入安装目录#cd /home#cp jdk-1_5_0_02-linu ...
- win10 下JDK10的下载安装与环境变量配置
一.下载 首先,要在win10 操作系统上安装jdk,就要去oracle官网下载合适的jdk版本,在这里以jdk10进行安装 下载链接:http://www.oracle.com/technetwor ...
- Linux下通过二进制方式安装mysql5.7版本和系统优化
本文主要介绍MySQL二进制软件包的安装/启动/关闭过程. 也许有人要问为什么要选择二进制的安装方式呢? 其实答案很简单,官方版本中已经把所有功能都配置好了,我们可以很方便地拿来使用. 官方MySQL ...
- linux centos 7.5下 源码编译安装 lua环境
lua 5.3.5 下载安装时发现缺少库 readline 需要添加依赖 yum search readline 看有哪些包 安装带有 devel 字样的 安装无 devel 的非开发包,通常不会自动 ...
- ubuntu下使用sdk manager 安装sdk 其他版本
在终端运行SDK Manager 的脚本 sdk目录下的tools目录下的 android 脚本 就能打开sdk manager界面进行选择安装了.
- Linux(CentOS)下的JDK的安装和环境配置
下载对应版本JDK,如jdk-6u45-linux-i586-rpm.bin添加执行权限:#chmod +x jdk-6u45-linux-i586-rpm.bin安装:#./jdk-6u45-lin ...
随机推荐
- MySQL插入中文数据时发生错误或者乱码的一些坑
最近新入职的工作,火急火燎就下了个mysql,没想到安装时配置没弄好.今天在测试数据时,插入中文数据到mysql都是问号,先后查了半天修改表结构,数据库编码,my.ini文件都没有用. 首先第一步,打 ...
- CNN --Inception Module
Smiling & Weeping ---- 祝你想我 在平静的湖面 不止在失控的雪山之前 说明:Inception Module 1. 卷积核超参数选择困难,自动找到卷积的最佳组合 2. 1 ...
- Java面试知识点(一)多态
多态概述 1. 定义 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的 ...
- 在Linux驱动中使用LED子系统
在Linux驱动中使用LED子系统 原文:https://blog.csdn.net/hanp_linux/article/details/79037684 前提配置device driver下面的L ...
- Vue 处理异步加载顺序问题:在Konva中确保文本在图片之上显示
Vue 处理异步加载顺序问题:在Konva中确保文本在Konva之上显示 在使用Konva开发应用时,我们经常会遇到需要将文本绘制在图片之上的情况.一个常见的问题是,由于图像加载是异步的,文本有时会显 ...
- 全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法
全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法 摘要: 本文主要介绍了 Python 中创建自定义类时不同实例属性保存的基本原理和缺点,介绍了__s ...
- oeasy教您玩转vim - 7 - # 从头插入
另存与保存 回忆上节课内容 上次我们学会了另存为命令 : saveas {file} 还有这个直接保存命令 : w 真的可以把修改存了 下面我们来研究插入命令的细节. 插入命令 首先我们可以查询这个插 ...
- [rCore学习笔记 014]批处理系统
写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 本章目 ...
- Django 处理http请求之使用session
Django 处理http请求之使用session by:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 测试环境 Win7 Django 1.11 Django提供 ...
- 题解:P7482 不条理狂诗曲
题解:P7482 不条理狂诗曲 本题解借鉴 blossom_j 大佬思路,但这位大佬的题解似乎没放正确代码. 题意 对于每一个 \(a\) 的子区间 \(a_{l\dots r}\),求选择若干个不连 ...