gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数
函数 可以 注意 覆盖 reset step gym 使用
2023-09-11 14:19:19 时间
记录一个刚学习到的gym使用的点,就是gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数。
给出代码:
import gym class Wrapper(gym.ObservationWrapper): def __init__(self, env): super(Wrapper, self).__init__(env) def reset(self): obs = self.env.reset() print(obs) return obs # return self.observation(obs) def step(self, action): obs, reward, is_done, info = self.env.step(action) print(obs) return obs, reward, is_done, info # return self.observation(obs), reward, is_done, info def observation(self, observation): observation += 100 return observation env=gym.make("CartPole-v0") env = Wrapper(env) print("reset:") print(env.reset()) print("step:") print(env.step(0)[0])
运行:
可以看到,继承gym.ObservationWrapper类后,如果重写reset函数或step函数,那么对应的返回的observation也不会被该类的observation函数所处理。
如果我们把reset函数和step函数注释掉,再次运行可以看到运行结果:
=======================================
那么在继承gym.ObservationWrapper类后,如果重写reset函数或step函数,同时又希望对应的返回的observation被该类的observation函数所处理,那么我们可以做如下的修改:
import gym class Wrapper(gym.ObservationWrapper): def __init__(self, env): super(Wrapper, self).__init__(env) def reset(self): obs = self.env.reset() print(obs) # return obs return self.observation(obs) def step(self, action): obs, reward, is_done, info = self.env.step(action) print(obs) # return obs, reward, is_done, info return self.observation(obs), reward, is_done, info def observation(self, observation): observation += 100 return observation env=gym.make("CartPole-v0") env = Wrapper(env) print("reset:") print(env.reset()) print("step:") print(env.step(0)[0])
运行结果:
---------------------------------------------------------------------------
继承gym.ObservationWrapper类后reset和step函数的使用可以具体看下ObservationWrapper类的实现:
相关文章
- C语言atoi()和itoa()函数的实现
- PHP数组常用函数
- Django url 标签和reverse()函数的使用(转)
- sql 常用函数
- ThinkPHP中:使用递归写node_merge()函数
- PromQL 分组与聚合函数/基于标签,时间聚合
- Django 3.2.5博客开发教程:URL与视图函数
- Qt 自适应图片之scaled()函数详解
- 练习 4-1 编写函数strindex(s, t),它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1。
- 练习 2-9 在求对二的补码时,表达式x &= (x – 1)可以删除x中最右边值为1的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数,以加快其执行速度。
- 003-正则的扩展、数值的扩展、函数的扩展、数组的扩展、对象的扩展
- sql 聚合函数 STRING_AGG 高阶
- ThinkPHP5 为什么取消了单字母函数?
- Windows API一日一练(61)GetDriveType函数
- 龙芯软件开发(19)-- C函数入口
- python __main__ 里的变量是全局变量 因此在函数里面可以访问到
- go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!
- 一个 Map 函数、一个 Reduce 函数和一个 main 函数
- JS 高级(一)RegExp、函数、重载、作用域和作用域链
- MySql中日期时间函数
- Matlab:Matlab中的bwmorph函数(对二值图像的形态学操作)的简介及其案例说明
- Pandas数据处理2、DataFrame的drop函数具体参数使用详情