本文就只是关于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
。
所以官方文档是最重要的啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!
转眼就到新年了,希望虎年的我能记住这教训。
也祝大家新年快乐,也希望大家别像我一样想当然的各种操作,结果还不如查一次官方文档来的快。