zoukankan      html  css  js  c++  java
  • (续) gym atari游戏的环境设置问题:Breakout-v0, Breakout-v4, BreakoutNoFrameskip-v4和BreakoutDeterministic-v4的区别

    根据前文(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很形象

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

    本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注者,如有侵权请与博主联系。
  • 相关阅读:
    SQL Server IF Exists 判断数据库对象是否存在的用法
    C# RDLC报表不出现预览窗体直接输出到打印机
    C# 未安装Office环境下使用NPOI导出Excel文件
    C# 键盘中的按键对应KeyValue
    微信小程序下可以使用的MD5以及AES加密(通用)
    SQL Server 根据树状结构表生成以/号分割的路由字符串
    C# Winform下一个热插拔的MIS/MRP/ERP框架16(窗体基类场景2)
    WEB H5 JS QRCode二维码快速自动生成
    C# Winform 小技巧(Datagridview某一列按状态显示不同图片)
    获取请求地址的IP地址
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/14665402.html
Copyright © 2011-2022 走看看