gym中env的unwrapped

在看一些示例程序代码时,一般从gym中引用环境只需要用gym.make就可以了,比如

env=gym.make('CartPole-v0')

但在很多程序中(如莫烦pytorch的DQN程序),还有这样一句

env = env.unwrapped

关于这个unwrapped的含义,文章gym中env的unwrapped中是这么解释的:

Open AI gym提供了许多不同的环境。每一个环境都有一套自己的参数和方法。然而,他们通常由一个类Env包装(就像这是面向对象编程语言(OOPLs)的一个接口)。这个类暴露了任一环境的最常用的,最本质的方法,比如step,reset,seed。拥有这个“接口”类非常好,因为它允许您的代码不受环境限制。如果您希望在不同的环境中测试单个代理,那么它还使事情变得更简单。
然而,如果你想访问一个特定环境的场景动态后面的东西,需要使用unwrapped属性。

但这个解释并不是很清楚,后来又从知乎文章OpenAI gym——一款开发和比较RL算法的工具包中看到了这样的解释

#还原env的原始设置,env外包了一层防作弊层

之后在文章深度强化学习DQN详解CartPole(1)中看到了比较详细的解释。

创建环境:

env = gym.make('CartPole-v0')

返回的这个env其实并非CartPole类本身,而是一个经过包装的环境:

env

<TimeLimit<CartPoleEnv>>

据说gym的多数环境都用TimeLimit(源码)包装了,以限制Epoch,就是step的次数限制,比如限定为200次。所以小车保持平衡200步后,就会失败。

env._max_episode_steps

200

用env.unwrapped可以得到原始的类,原始类想step多久就多久,不会200步后失败:

env.unwrapped

gym.envs.classic_control.cartpole.CartPoleEnv

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值