首页 > 其他分享 >gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数

gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数

时间:2022-10-02 14:41:39浏览次数:64  
标签:reset observation gym obs step env self 函数

记录一个刚学习到的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函数_杂谈

 

 

可以看到,继承gym.ObservationWrapper类后,如果重写reset函数或step函数,那么对应的返回的observation也不会被该类的observation函数所处理。

如果我们把reset函数和step函数注释掉,再次运行可以看到运行结果:

gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数_杂谈_02

 

 

 

 

 

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

 

那么在继承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函数可以覆盖observation函数_杂谈_03

 

 

 

---------------------------------------------------------------------------

 

 

 

继承gym.ObservationWrapper类后reset和step函数的使用可以具体看下ObservationWrapper类的实现:

 

gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数_杂谈_04

 

标签:reset,observation,gym,obs,step,env,self,函数
From: https://blog.51cto.com/u_15642578/5729297

相关文章

  • 函数进阶
    一、多函数程序执行流程(一)共用全局变量#定义全局变量num=0deftest1():globalnum#修改全局变量num=100deftest2():#调用test1函数中修......
  • 构造函数初始化列表的基本形式
    https://blog.csdn.net/m0_63783532/article/details/123833512?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-12383......
  • 【数据库】常用时间日期函数-日期加减、格式化、取指定部分、与字符串转换、取系统当
    一、日期格式化DATE_FORMAT(date,format):根据参数对date进行格式化format的格式: %Y年,数字,4位 %y年,数字,2位 %m月,数字(01……12) %d月份中的天数,数......
  • 使用printf函数输出变量的值
    1.使用变量的值常见的方式是将变量的值输出。2.输出变量的值使用printf函数打印出来格式 a.格式一 printf("输出信息");双引号中的内容直接输出,例最简单的代码#include<......
  • C语言常用函数
    数据类型:整数:char、unsignedchar(0-255)、signedchar(-128-127)、short、unsignedshort(0-65535)、int、unsignedint、long、unsignedlong小数:float(6位):单精度,eg:2.5fdouble......
  • lambda表达式(匿名函数)
    1、lambda的应用场景如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化。2、lambda语法lambda参数列表:表达式注意:lambda表达式参数可有可无,函......
  • 创建和初始化对象、构造函数详解
    创建和初始化对象、构造函数详解使用new关键字创建对象使用new关键字创建的时候,不仅会分配内存空间,还会进行默认的初始化以及调用类中的构造器packageoop.subject;......
  • hook函数——react——同步获取useState的最新状态值
    简介在React的世界中,有容器组件和UI组件之分,在ReactHooks出现之前,UI组件我们可以使用函数组件,无状态组件来展示UI,而对于容器组件,函数组件就显得无能为力,我们依赖于......
  • 函数入门
    摘要:函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这叫做用户自定义函数。一、函数的使用步骤......
  • 【C语言初级】使用函数求闰年
    想求闰年,首先得了解闰年的规则:普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如19......