最新版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 ...
随机推荐
- Spring扩展——BeanPostProcessor(BPP)
BeanPostProcess简介 在Spring中 BeanPostProcessor 是一个非常重要的接口,它用于在每个bean对象初始化前后修改Bean的属性信息,比如我们最常用的@Autowi ...
- Java邮件发送解决ssl javax.mail实现方式
package test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.activation.DataH ...
- fastadmin的导出到excel功能
正常的excel导出没什么问题,最近一直头疼的是怎么导出数据中包含图片,并且图片还是数组?????by user 悦悦 https://www.cnblogs.com/nuanai 1.导出的exce ...
- linux下后台运行程序
文章目录 背景 nohup命令 setsid命令 pm2 背景 后台运行程序的时候,如果退出当前的终端(session),你运行的所有程序(包括后台程序),都将被关闭. 原因是:你运行的程序都是你的终 ...
- .NET 个人博客-发送邮件优化🧐
个人博客-发送邮件优化 前言 之前的发送邮件就弄了个方法,比如回复评论会给评论的人发送邮件,留言回复也是,而且2者的代码有很多一样的地方,比较冗余.然后也是抽空优化一下,思路也是比较常用的工厂+策略模 ...
- zip-zip(子函数调用)
题目 监听服务器端口,得到题目如下: 源码解析 主函数 主函数中是题目界面的逻辑,对应于用户的选择做出相应的操作,其中需要注意的是选项2,解压操作需要获得root权限(uid==0). 选项1,2:文 ...
- WIN 11 共享设置
我的电脑 -> 管理 -> 用户 -> 解除 GUEST 禁用 gpedit.msc -> 计算机管理 -> 本地 -> 从网络上访问本机 -> 允许GUES ...
- QT自定义右键菜单
利用QMenu和QAction可以实现非常实用的右键菜单功能.具体实现思路如下: 1.在xxx.h文件中添加如下头文件 #include <QMenu> #include <QCon ...
- Java Executors类的9种创建线程池的方法及应用场景分析
在Java中,Executors 类提供了多种静态工厂方法来创建不同类型的线程池.在学习线程池的过程中,一定避不开Executors类,掌握这个类的使用.原理.使用场景,对于实际项目开发时,运用自如, ...
- javaweb上传图片存到本地,并存储地址到数据库
前端使用layui的图片上传,将文件base64编码,然后在后端使用转码类来操作base64编码,并保存图片到本地,继而获取文件地址,将文件地址保存到数据库中 1.使用layui的图片上传 infos ...