强化学习的游戏仿真环境可以分为连续控制和非连续控制两类,其中连续控制的以mujoco为主,而非连续控制的以Atari游戏为主,本文对gym下的Atari环境的游戏环境版本进行一定的介绍。

参考:【转载】【重磅】Gym发布 8 年后,迎来第一个完整环境文档,强化学习入门更加简单化!我们知道gym官方给出的gym说明地址为:

https://www.gymlibrary.dev/

从官方的说明中知道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

Revisiting the Arcade Learning Environment: Evaluation Protocols and Open Problems for General Agents

 
 

最新版gym-0.26.2下Atari环境的安装以及环境版本v0,v4,v5的说明的更多相关文章

  1. Windows10下JDK8的下载安装与环境变量的配置

    Windows10下JDK8的下载安装与环境变量的配置 下载JDK8(64位) 链接:https://pan.baidu.com/s/10ZMK7NB68kPORZsPOhivog 提取码:agsa ...

  2. Windows下MongoDB的下载安装、环境配置

    下载MongoDB 1.进入MongoDB官网,Products -> 选择SOFTWARE下的MongoDB Server 2.选择下载最新版 3.选择对应的版本下载 msi安装包形式安装Mo ...

  3. 实践详细篇-Windows下使用VS2015编译安装Caffe环境(CPU ONLY)

    学习深度学习背景 最近在做一款抢票软件,由于12306经常检测账号状态,抢票抢着抢着就需要重新登录了,然后登录是需要验证码的.所以我最开始是想到了使用java基于感知哈希算法pHash做相似度匹配识别 ...

  4. Linux CentOS7 下无图形界面安装Oracle11G R2版本

    01,系统 Centos7 数据库版本 Oracle_11gR2 ,以及硬件要求 内存不能小于 1G,可用硬盘不小于8G Swap分区空间不小于2G grep MemTotal /proc/memin ...

  5. linux下JDK,tomcat的安装与环境变量配置

    先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm) ,下载后放在/home目录中,当然其它地方也行. 进入安装目录#cd /home#cp jdk-1_5_0_02-linu ...

  6. win10 下JDK10的下载安装与环境变量配置

    一.下载 首先,要在win10 操作系统上安装jdk,就要去oracle官网下载合适的jdk版本,在这里以jdk10进行安装 下载链接:http://www.oracle.com/technetwor ...

  7. Linux下通过二进制方式安装mysql5.7版本和系统优化

    本文主要介绍MySQL二进制软件包的安装/启动/关闭过程. 也许有人要问为什么要选择二进制的安装方式呢? 其实答案很简单,官方版本中已经把所有功能都配置好了,我们可以很方便地拿来使用. 官方MySQL ...

  8. linux centos 7.5下 源码编译安装 lua环境

    lua 5.3.5 下载安装时发现缺少库 readline 需要添加依赖 yum search readline 看有哪些包 安装带有 devel 字样的 安装无 devel 的非开发包,通常不会自动 ...

  9. ubuntu下使用sdk manager 安装sdk 其他版本

    在终端运行SDK Manager 的脚本 sdk目录下的tools目录下的 android 脚本 就能打开sdk manager界面进行选择安装了.

  10. Linux(CentOS)下的JDK的安装和环境配置

    下载对应版本JDK,如jdk-6u45-linux-i586-rpm.bin添加执行权限:#chmod +x jdk-6u45-linux-i586-rpm.bin安装:#./jdk-6u45-lin ...

随机推荐

  1. Spring事务隔离级别和传播机制

    引言 什么是事务? 在理解事务之前,我们要先了解事务的基本作用 比如在生活中有这样一个场景----取钱,每个人应该都干过的事 在ATM机上取钱,1.输入密码----2.输入金额----3.银行扣钱-- ...

  2. Flink状态(一)

    key状态和算子状态 key状态 key状态总是与key有关,只能被用于keyedStream类型的函数与算子.你可以认为key状态是一种被分区的算子状态,每一个key有一个状态分区.每一个key状态 ...

  3. OSI七层网络模型和TCP/IP四层模型

    OSI七层网络模型 OSI: 开放系统互连参考模型是ISO制定的一个用于计算机或通信系统间互联的标准体系 OSI七层模型功能: 物理层: 七层模型的最底层,主要是物理介质传输媒介(网线或者无线),在不 ...

  4. 架构师必知的11种API性能优化方法

    前言 接口性能优化是后端开发人员经常碰到的一道面试题,因为它是一个跟开发语言无关的公共问题. 这个问题既可以很简单,也可以相当复杂. 有时候,只需要添加一个索引就能解决. 有时候,代码需要进行重构. ...

  5. Java面试知识点(六)hashmap深度理解

    1.hashmap 的数据结构 要知道 hashmap 是什么,首先要搞清楚它的数据结构,在 java 编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用 ...

  6. 高通与At指令:ATFWD解析

    背景 本章的内容是适用于AP侧AT指令开发调试的有关人员. 主要是介绍高通实现的ATFWD框架.在这需要说明一下的是,或许你对AT Command很了解了,但是却貌似都不知道ATFWD,这很正常,严格 ...

  7. 从 Helm 到 Operator:Kubernetes应用管理的进化

    Helm 的作用 在开始前需要先对 kubernetes Operator 有个简单的认识. 以为我们在编写部署一些简单 Deployment 的时候只需要自己编写一个 yaml 文件然后 kubec ...

  8. SpringBoot 启动时报错Unable to start embedded Tomcat

    导读 最近公司有个gradle构建的工程,需要改造成maven方式构建(点我直达).转为maven后,启动时一直报tomcat错误,最终排查是因为servlet-api这个包导致的依赖冲突,将这个依赖 ...

  9. Mybatis面试题及答案

    Ibatis和Mybatis? Ibatis:2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis.从2010年后Ibatis在没更新过,彻底变成了 ...

  10. 使用Selenium爬取动态网页

    1.使用Selenium爬取动态网页 In [ ]: from selenium import webdriver driver = webdriver.Chrome() driver.get('ht ...