关于OpenAI的Gym中的step方法

2023-10-29

导读

本文就只是关于step方法的参数与返回值的一个小小的学习笔记这也是没有第一时间查官方文档而造成的时间消耗所以这篇博客就是逼自己查一下


Gym的step方法

既然都已经用pip下载了gym,那我们就来看看官方代码中有没有什么注释。

  • 如果你是Windows用户,可以使用文件管理器的搜索功能,或者下载Everything插件,以及华为电脑自带的智慧搜索功能,都能够查询到gym的安装位置
  • 如果你是Linux用户,或者以Linux为基础的各种魔改版本,甚至MacOS,你可以使用find命令搜索;如果你在多个环境下都安装了gym,可以使用后面的中括号里的内容添加搜索条件
find $(pwd) -name 'gym' [| grep 'env_name']

而最核心的顶层代码就是位于gym安装文件夹下的core.py。让我们来看看他是怎么说的。

"""
Run one timestep of the environment's dynamics. When end of episode is
reached, you are responsible for calling `reset()` to reset this
environment's state.

Accepts an action and returns a tuple (observation, reward, done, info).

Args:
  action (object): an action provided by the agent
  Returns:
    observation (object): agent's observation of the current environment
    reward (float) : amount of reward returned after previous action
    done (bool): whether the episode has ended
                 in which case further step() calls will return undefined results
    info (dict): contains auxiliary diagnostic information
                 (helpful for debugging, and sometimes learning)
"""

在这里给出了几个比较关键的点:

  • step方法是在环境中动态运行的一个时间步长,表示智能体决策前与决策后之间的其中一个改变逻辑
  • step方法会返回一个元组(observation, reward, done, info)
  • step方法的参数共四个,分别是
    • 智能体针对当前环境的观测,类型为float
    • 在上一个动作执行完毕后返回的reward总量,类型为bool
    • episode结束标志位;再执行step方法将会返回不确定的结果,类型为dict
    • 包含辅助诊断信息(有助于debug,有时也有助于强化学习过程),类型为object

好的,假设你并没有看官方文档,或者说你是接手了别人的代码进行修改。总之,就会遇到以下两个错误:

  • unhashable type: 'list'

  • 报错位于gym安装文件夹中的wrappers/time_limit.py下的:info["TimeLimit.truncated"] = not done,并提示KeyError

这都是没有将info字段赋值为dict的时候会报的错。

不过,当你看到第二条的时候,再怎么也该发现:info实际上就是个字典,因为这简直就是在告诉你,info里面有个属性叫TimeLimit.truncated

所以官方文档是最重要的啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!


最后的话

转眼就到新年了,希望虎年的我能记住这教训。

也祝大家新年快乐,也希望大家别像我一样想当然的各种操作,结果还不如查一次官方文档来的快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于OpenAI的Gym中的step方法 的相关文章

  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • 为什么 tkinter / window.update 在我的程序中随着时间的推移变得更慢?

    我发现当我调用 window update 时 当向窗口写入的内容较少时 它的运行速度会更快 但后来 当我向窗口写入更多元素时 window update 需要更长的时间 请参阅下面的我的代码 您可以看到它在更新窗口之前一次向屏幕 100
  • Python 中的安全解除引用

    Groovy 有一个很好的安全取消引用运算符 这有助于避免 NullPointerExceptions variable method The method仅当以下情况时才会被调用variable is not null 有没有办法在 Py
  • 如何从谷歌云存储桶读取音频文件并在datalab笔记本中使用ipd播放

    我想在数据实验室笔记本中播放我从谷歌云存储桶中读取的声音文件 这个怎么做 import numpy as np import IPython display as ipd import librosa import soundfile as
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • Pyspark 数据框逐行空列列表

    我有一个 Spark 数据框 我想创建一个新列 其中包含每行中具有 null 的列名称 例如 原始数据框是 col 1 col 2 col 3 62 45 null 62 49 56 45 null null null null null
  • Django 的 URL 覆盖率测试为 0%,为什么?

    使用姜戈鼻子 我对 URL 进行了测试 但 URL 覆盖率仍然为 0 为什么 python manage py 测试配置文件 这是我的报道 Name Stmts Miss Cover Missing profiles 0 0 100 pro
  • 如何使用循环将十进制转换为二进制?

    我想编写一个程序 将十进制数 0 到 9 转换为二进制数 我可以编写如何使用重复除法将十进制数转换为二进制数的代码 但是 我在创建一个以二进制格式打印十进制数字 0 到 9 的循环时遇到了麻烦 这是我的代码 number 0 remaind
  • 如何使用 Pandas 将巨大的 CSV 转换为 SQLite?

    我有一个巨大的表 大约 60 GB 采用存档的 CSV 文件形式 我想将其转换为 SQLite 文件 我现在所做的事情如下 import pandas import sqlite3 cnx sqlite3 connect db sqlite
  • 网页抓取 - 前往第 2 页

    如何访问数据集的第二页 无论我做什么 它都只返回第 1 页 import bs4 from urllib request import urlopen as uReq from bs4 import BeautifulSoup as sou
  • 一行Python和SQLite代码,为什么需要加“,”? [复制]

    这个问题在这里已经有答案了 c execute INSERT INTO numbers VALUES random randint 0 100 如果我将上面的代码更改为 c execute INSERT INTO numbers VALUE
  • 如何从 Python 中指定运行程序的输入文件?

    我正在编写一个外部脚本 以通过笔记本电脑上的 Python mrjob 模块 而不是在 Amazon Elastic Compute Cloud 或任何大型集群上 运行 mapreduce 作业 我读自mrjob文档 http packag
  • Python 视频框架

    我正在寻找一个 Python 框架 它将使我能够播放视频并在该视频上绘图 用于标记目的 我尝试过 Pyglet 但这似乎效果不是特别好 在现有视频上绘图时 会出现闪烁 即使使用双缓冲和所有这些好东西 而且似乎没有办法在每帧回调期间获取视频中
  • Python正则表达式从字符串中获取浮点数

    我正在使用正则表达式来解析字符串中的浮点数 re findall a zA Z d d t 是我使用的代码 这段代码有问题 如果数字和任何字符之间没有空格 则不会解析该数字 例如 0 1 2 3 4 5 6 7 8 9 的预期输出为 0 1
  • 参数验证,Python 中的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 让我们举一个 API 的例子 def get abs directory self path if os path isdir path ret
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • scipysolve_ivp() 中的访问时间步长

    我有一个常微分方程系统 正在使用 scipy 的solve ivp 函数求解 它运行良好 但我在访问每个步骤中使用的时间步时遇到问题 我知道solve ivp 将当前时间传递给用户定义的函数 但我需要使用的时间步长 而不是当前时间 为了解决
  • issubclass() 对从不同路径导入的同一类返回 False

    目的是实现某种插件框架 其中插件是同一基类 即 A 的子类 即 B 基类使用标准导入加载 而子类使用 imp load module 从众所周知的包 即 pkg 的路径加载 pkg init py mod1 py class A mod2
  • 在Python中从日期时间中减去秒

    我有一个 int 变量 它实际上是秒 让我们调用这个秒数X 我需要得到当前日期和时间 以日期时间格式 减去的结果X秒 Example If X是 65 当前日期是2014 06 03 15 45 00 那么我需要得到结果2014 06 03
  • 在Python 3.2中,我可以使用http.client打开并读取HTTPS网页,但urllib.request无法打开同一页面

    我想打开并阅读https yande re https yande re with urllib request 但我收到 SSL 错误 我可以使用以下方式打开并阅读页面http client用这个代码 import http client

随机推荐

  • 子集生成算法——增量构造法

    我的个人博客 逐步前行STEP 思路是一次选出一个元素放入集合中 生成0 n的子集 每次选出最小的值放入集合中 通过从0递增得到下一个位置的值 include
  • String常量池问题的几个例子

    String常量池问题的几个例子 示例1 Java代码 String s0 kvill String s1 kvill String s2 kv ill System out println s0 s1 System out println
  • 剑指Offer-40

    题目 一个整型数组里除了两个数字之外 其他的数字都出现了两次 找出只出现一次的数字 要求时间复杂度是 O n 空间复杂度是 O 1 实现 coding java public class Solution40 用 Hashmap 的方式 时
  • ES3~ES6数组的方法总结

    ES3数组的方法 push arr push 值 向数组的最后一个位置添加一个元素 语法 arr push 返回值 改变之后的数组的长度 改变原数组 var arr aa bb cc var res arr push dd console
  • day08-编程题

    每日作业 JavaSE第8天 题目1 训练 现已知工人 Worker 类 属性包含姓名 name 工龄 year 请编写该类 提供构造方法和get set方法 在测试类中 请查看键盘录入Scanner类的API 创建工人类对象 属性值由键盘
  • 基于STM32红外避障小车的设计(有代码)

    什么是避障小车 用红外光电传感器 探测到物体即输出脉冲 输入到单片机中处 理一下 再对电机驱动模块进行控制 实现壁障的功能 这样的避障小车又称为简单的避障机器人 各种避障方法 1 红外线避障 2 超声波避障 红外避障原理 基本硬件 红外发射
  • FATAL Port 4000 has been used. Try other port instead.

    我在另一个powershell也打开了hexo s 关掉另一个powshell就好了
  • vue移动端项目屏幕适配--flexible rem

    开始 首先 我们使用 vue 的脚手架 vue cli 来初始化一个 webpack 项目 没有安装过 vue cli 的请先安装 vue cli 安装所需依赖后安装 lib flexible 和 px2rem loader 1 下载lib
  • AOP的切入点Pointcut中的execution表达式详解

    在面向切面编程 AOP 中 切入点 Pointcut 用于定义在哪些方法或代码段上应该应用切面的逻辑 切入点使用表达式来匹配目标方法的签名和执行位置 在 Spring AOP 中 常用的切入点表达式是基于方法的 execution 表达式
  • 理解Vulkan中的各种对象

    学习Vulkan API的一个重要部分是了解其中定义了哪些类型的对象 它们代表了什么 以及它们如何相互关联 为了帮助解决这个问题 创建了一个图表 展示了所有vulkan对象及其一些关系 尤其是从另一个对象创建对象的顺序 每个vulkan对象
  • java中局部变量、全局变量和static的区别(简单易懂)

    java中的变量类型有 1 类变量 独立于方法之外的变量 用 static 修饰 2 实例变量 独立于方法之外的变量 不过没有 static 修饰 3 局部变量 类的方法中的变量 比如 Java 局部变量 局部变量声明在方法 构造方法或者语
  • 回调函数的原理及运用

    第一个问题 什么是回调函数 来看一下百度百科的定义为 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针 地址 作为参数传递给另一个函数 当这个指针被用来调用其所指向的函数时 我们就说这是回调函数 回调函数不是由该函数的实现方直接调
  • hadoop环境搭建之安装JDK

    判断是否安装了jdk 使用java version 和 javac命令判断是否安装了jdk root localhost ssh java version bash java command not found root localhost
  • 【重铸Java根基】为什么Java中只有值传递

    最近带应届新员工 教然后知不足 发现自己把很多基础知识已经还给了大学老师 因此开贴 温故而知新 从最基础的Java知识开始由浅入深 在某个知识点中遇到有疑惑的点会额外多写几句或者单独开帖子展开 先要搞清楚什么是形参 什么是实参 形参 定义方
  • 寄存器的映射过程

  • vue学习-02vue入门之组件

    删除Vue cli预设 在用户根目录下 C Users 你的用户名 这个地址里有一个 vuerc 文件 修改或删除配置 组件 Props 组件之间的数据传递 Prop 的大小写 camelCase vs kebab case 不敏感 Pro
  • 线程同步概念

    带着问题去思考 什么是线程同步 线程同步能解决哪些问题 如何实现线程同步 线程同步是指两个或多个线程协同步调 按预期的顺序执行代码 若两个或多个线程同时写同一块内存或访问同一资源时 需线程同步 若线程A的执行依赖线程B的结果 需线程同步 输
  • 在外部js文件中直接调用vue文件中自定义的方法

    1 在vue文件引入API import getCurrentInstance onMounted from vue onMounted 用于挂载数据 getCurrentInstance 用于获取实例后再使用 2 定义setup 方法 s
  • vue——组件中的样式改变方法

    一般我们自己封装的组件或者组件库 element vant antdesign 中的样式在页面中必要的时候需要改变时 解决方法如下 解决方法 在页面中重新写一个 不要改成局部的 scope 页面中全局修改 在上一部的中 改变组件样式时 要先
  • 关于OpenAI的Gym中的step方法

    文章目录 导读 Gym的step方法 最后的话 导读 本文就只是关于step方法的参数与返回值的一个小小的学习笔记 这也是没有第一时间查官方文档而造成的时间消耗 所以 这篇博客就是逼自己查一下 Gym的step方法 既然都已经用pip下载了