(环境跳帧)OpenAI gym Atari游戏的环境设置

原文链接:https://blog.csdn.net/clksjx/article/details/104053216

Breakout-v0, Breakout-v4, BreakoutNoFrameskip-v4和BreakoutDeterministic-v4的区别

  • v0v4是环境执行输入action的区别(即env.step(action)):

    • 带有v0的环境会有25%的概率执行上一个action75%的概率执行输入的action
    • v4表示100%执行输入的action,不会重复上一个action
  • 注意:以上解释仅适用于atari环境。在普通的cart-pole等环境中,v0v1等后缀的含义是根据环境而变化的。


  • NoFrameskipDeterministic是环境输出下一帧画面时的区别(即obs, reward, done, info = env.step(action)):
    • 带有NoFrameskipenv表示没有跳帧,环境会顺序地输出游戏中的每一帧游戏画面。
    • 带有Deterministicenv表示每4帧才输出一张游戏中的画面(即跳过3帧)。
    • 游戏名后面什么都不带的(如Breakout-v0),会随机从(2, 5)中采样一个跳帧数量。

  • 在训练agent时,如果想让环境跳帧,建议直接使用make_atari()函数对环境进行包装 make_atari() 源代码

    env = gym.make(env_id)
    assert 'NoFrameskip' in env.spec.id
    env = NoopResetEnv(env, noop_max=30)
    env = MaxAndSkipEnv(env, skip=4)
    
         
         
    • 1
    • 2
    • 3
    • 4

    从源码中我们可以看出,该函数是先定义原始atari环境中带有NoFrameskip的环境,然后使用atari_wrappers中的MaxAndSkipEnv()进行包装 (MaxAndSkipEnv() 源代码),包装后的env便会执行跳帧操作。
    此时,使用MaxAndSkipEnv()包装后的环境在跳帧时,一个action会被执行多帧(取决于跳帧数量),并且每帧获取的reward也会被累加至下一次画面输出。
    此外,跳帧时,输出画面是从每n帧中的最后2帧的像素值中的最大值来组成一张图片(即比较最后2帧的每一个对应位置的像素值,然后取较大的那个像素)。因为在Atari游戏中,有些画面是仅在奇数帧出现的,因此要对最后两帧取最大值。
    个人总结:不要轻易使用带有跳帧操作的原始环境,尽量使用NoFrameskip的环境,然后使用make_atari()进行包装,实现跳帧操作。此外,尽量使用v4环境,减少执行action的随机性。
    参考链接


Atari游戏的图片预处理

Downsampling, FrameStack等技巧。

FrameStack 源代码 以及 英文原理讲解中文原理解释

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值