根据前文(https://www.cnblogs.com/devilmaycry812839668/p/14665072.html)我们知道:

  1. 首先是v0和v4的区别:带有v0的env表示会有25%的概率执行上一个action,而v4表示只执行agent给出的action,不会重复之前的action。
  2. 带有Deterministic的env表示固定跳4帧,否则跳帧数随机从  (2, 5)  (2,4)   中采样。
  3. 带有NoFrameskip的env表示没有跳帧。

=========================================

看下主要的源代码的评论:

https://github.com/openai/gym/issues/1280

看下主要的源代码:

source code

v0   与     v4  版本:

Deterministic  下的    v0   与     v4  版本:

NoFrameskip  下的    v0   与     v4  版本:

 

============================================

可以看到在  Atari  游戏中, v0  v4 版本,与   Deterministic 下的  v0   v4 版本,  与   NoFrameskip 下的   v0   v4 版本  区别在于:

kwargs 字典中  键值     'frameskip'     ,      'repeat_action_probability'

frameskip 是指定是否跳帧(中间帧使用重复动作),   repeat_action_probability 是指每次执行动作时重复上次选择的动作的概率

可以看到   repeat_action_probability  主要用于区分 三类  v0  v4版本下的不同,  带有v0 的则是以概率0.25来选择上次执行的动作,  而v4则不设置该概率(以0概率执行上次动作,以1概率执行本次的动作)。

而  repeat_action_probability   只在  deterministic  和   NoFrameskip 下存在:

可以看到在所有游戏中frameskip默认设置为4,而只有在space_invaders中设置为3, 而这也是符合DeepMind原始论文中的设置的。

也就是说原始v0, v4版本是没有设置frameskip的,也就是说每次接收agent动作时都是随机从(2, 5)中选择跳帧数。

而Deterministic 下  除了space_invaders中frameskip设置为3其余的frameskip均设置为4。

而NoFrameskip 下所有游戏frameskip均设置为1。

注:frameskip均设置为1意味着每个帧都需要agent输入动作,不进行跳帧。跳帧的话,中间帧都是执行重复的动作。

举例:

fameskip=1

0帧时agent传入动作a0,         1帧时agent传入动作a1,         2帧时agent传入动作a2,         3帧时agent传入动作a3  。

fameskip=2

0帧时agent传入动作a0,         1帧时不需要agent传入动作而是继续执行动作a0,         2帧时agent传入动作a2,         3帧时不需要agent传入动作而是继续执行动作a2  。

fameskip=3

0帧时agent传入动作a0,         1帧时不需要agent传入动作而是继续执行动作a0,         2帧时不需要agent传入动作而是继续执行动作a0,         3帧时agent传入动作a3  。

fameskip=4

0帧时agent传入动作a0,         1帧时不需要agent传入动作而是继续执行动作a0,         2帧时不需要agent传入动作而是继续执行动作a0,         3帧时不需要agent传入动作而是继续执行动作a0 ,  4帧时agent传入动作a4。

============================================

为了更进一步了解    'frameskip'     ,      'repeat_action_probability'  的意义,

查看链接   here  :

在  https://github.com/openai/gym/blob/master/gym/envs/atari/atari_env.py#L24  中可以知道:

step 函数的具体设置:

AtariEnv 类的初始化:

从AtariEnv 类的初始化  及   step 函数的具体设置  可以看到    frameskip (跳帧) 确实为前面的分析一致。

但是很神奇的是在  step中并没有   repeat_action_probability   的设置。

但是在AtariEnv 类的初始化  中可以看到

也就是说,repeat_action_probability 的设置是对     self.ale   进行的。

而  step 中具体的操作也是传给    self.ale   进行的。

由此我们可以知道, 如果我们设置了  repeat_action_probability  ,那么对于frameskip的中间帧进行重复的动作依然进行  repeat_action_probability 操作。

举例:  (设置repeat_action_probability,即动作重复概率为0.25 )

fameskip=1

0帧时agent传入动作a0,传给ale的动作为a0,ale执行a0,   最终执行的动作记为b0;

1帧时agent传入动作a1,传给ale的动作为a1,但是ale以0.25的概率执行b0,  以0.75的概率执行a1, 最终执行的动作记为b1;

2帧时agent传入动作a2,传给ale的动作为a2,但是ale以0.25的概率执行b1,  以0.75的概率执行a2, 最终执行的动作记为b2;

3帧时agent传入动作a3,传给ale的动作为a3,但是ale以0.25的概率执行b2,  以0.75的概率执行a3, 最终执行的动作记为b3;

fameskip=2

0帧时agent传入动作a0,传给ale的动作为a0,ale执行a0,   最终执行的动作记为b0;

1帧时不需要agent传入动作,传给ale的动作为a0,但是ale以0.25的概率执行b0,  以0.75的概率执行a0, 最终执行的动作记为b1;

2帧时agent传入动作a2,传给ale的动作为a2,但是ale以0.25的概率执行b1,  以0.75的概率执行a2, 最终执行的动作记为b2;

3帧时不需要agent传入动作,传给ale的动作为a2,但是ale以0.25的概率执行b2,  以0.75的概率执行a2, 最终执行的动作记为b3;

fameskip=3

0帧时agent传入动作a0,传给ale的动作为a0,ale执行a0,   最终执行的动作记为b0;

1帧时不需要agent传入动作,传给ale的动作为a0,但是ale以0.25的概率执行b0,  以0.75的概率执行a0, 最终执行的动作记为b1;

2帧时不需要agent传入动作,传给ale的动作为a0,但是ale以0.25的概率执行b1,  以0.75的概率执行a0, 最终执行的动作记为b2;

3帧时agent传入动作a3,传给ale的动作为a3,但是ale以0.25的概率执行b2,  以0.75的概率执行a3, 最终执行的动作记为b3;

=====================================================

关于   repeat_action_probability  部分参考:

https://blog.csdn.net/qq_27008079/article/details/100126060

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

在论文revisiting the arcade中5.2解释的很清楚,里面图3很形象

=============================================

(续) gym atari游戏的环境设置问题:Breakout-v0, Breakout-v4, BreakoutNoFrameskip-v4和BreakoutDeterministic-v4的区别的更多相关文章

  1. 强化学习-linux安装gym、atari和box2d环境

    安装gym和atari环境 pip3 install gym pip3 install gym[atari] pip3 install gym[accept-rom-license] 安装box2d环 ...

  2. 强化学习-Windows安装gym、atari和box2d环境

    安装gym pip3 install gym pip3 install gym[accept-rom-license] 安装atari环境[可选] 下载安装VS build tools 如果出现 OS ...

  3. Cocos开发中Visual Studio下HttpClient开发环境设置

    Cocos2d-x 3.x将与网络通信相关的类集成到libNetwork类库工程中,这其中包括了HttpClient类.我们需要在Visual Studio解决方案中添加libNetwork类库工程. ...

  4. Cocos发育Visual Studio下一个HttpClient开发环境设置

    Cocos2d-x 3.x相关类集成到网络通信libNetwork图书馆project于.这其中包括:HttpClient分类. 我们需要在Visual Studio溶液中加入libNetwork图书 ...

  5. cocos2d-x 3.11 游戏开发环境搭建流程

    cocos2d-x 3.11.1 游戏开发环境搭建流程 1. 准备下面的软件 1) Windows7 64Bit+ VS2013 (VC++) 这个不用多说. 2) cocos2d-x-3.11.1. ...

  6. Google是如何教会机器玩Atari游戏的

    转自:http://blog.csdn.net/revolver/article/details/50177219 今年上半年(2015年2月),Google在Nature上发表了一篇论文:Human ...

  7. 强化学习 平台 openAI 的 gym 安装 (Ubuntu环境下如何安装Python的gym模块)

    openAI 公司给出了一个集成较多环境的强化学习平台  gym , 本篇博客主要是讲它怎么安装. openAI公司的主页: https://www.openai.com/systems/ 从主页上我 ...

  8. C语言/C++编程学习:C语言环境设置

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  9. 现代3D图形编程学习-环境设置

    本书系列 现代3D图形编程学习 环境设置 由于本书中的例子,均是基于OpenGL实现的,因此你的工作环境需要能够运行OpenGL,为了读者能够更好的运行原文中的示例,此处简单地介绍了linux和win ...

  10. Python 2/3 安装与运行环境设置

    Python 2/3 安装与运行环境设置: 1.Python 软件源:https://www.python.org/    下载Win版本 https://www.python.org/downloa ...

随机推荐

  1. 腾讯手游助手 WIN11 蓝屏 DPC_WATCHDOG_VIOLATION

    DPC_WATCHDOG_VIOLATION 退出QQ,或者下载最新版本QQ.

  2. SQL索引优化,菜单列表优化

    SQL索引优化,菜单列表优化 现象:在系统中几个数据量大的列表页面,首次进入页面未增加筛选条件,导致进入的列表查询速度非常慢.分析:通过SQL查看,是做了count求和查询,然后根据总的记录数来做分页 ...

  3. mysql case when使用

    ## mysql case when使用 SELECT order_no,case is_test when 0 then '否'when 1 then '是'end as '是否测试' from ` ...

  4. MATLAB神经网络工具箱使用介绍

      本文介绍MATLAB软件中神经网络拟合(Neural Net Fitting)工具箱的具体使用方法.   在MATLAB人工神经网络ANN代码这篇文章中,我们介绍了MATLAB软件中神经网络(AN ...

  5. Nuxt3 的生命周期和钩子函数(三)

    title: Nuxt3 的生命周期和钩子函数(三) date: 2024/6/27 updated: 2024/6/27 author: cmdragon excerpt: 摘要:概述了Nuxt3的 ...

  6. python爬虫-request模块

    1. requests 中的请求方法 HTTP 请求方法: requests.get(url, params=None, **kwargs) # GET 请求 requests.post(url, d ...

  7. P9196 题解

    来一份线性时间的题解. 考虑先解决前缀限制,显然可以直接把字符串和询问全部搬到 Trie 树上,问题就变成了查询一个子树内满足后缀限制的字符串数量. 接着考虑 Trie 树合并,具体地,把后缀限制以及 ...

  8. 动手学深度学习——CNN应用demo

    CNN应用demo CNN实现简单的手写数字识别 import torch import torch.nn.functional as F from torchvision import datase ...

  9. $Kruskal$ 算法的实现 | 最小生成树

    \(Kruskal\) 算法 以 Luogu P3366 为例题 实现方法:从小到大遍历每一条线,如果该线连接的两点已经都在树内则不处理,否则描出这条线 从小到大是一个贪心的实现方法,由于每描出一条线 ...

  10. Java-Request对象是用来回去请求信息,得到页面的请求

    1.Request 1.1 request对象和response对象的原理(了解) request对象和response对象是由服务器创建的,我们来使用他们即可 request对象是用来回去请求信息, ...