问题描述
搭建自定义环境后,用gym对环境进行了封装,之后在强化学习过程中报了如下错误:
File “/home/nathan/anaconda3/envs/py38/lib/python3.8/site-packages/gym/core.py”, line 349, in step
return self.env.step(self.action(action))
File “/home/nathan/anaconda3/envs/py38/lib/python3.8/site-packages/gym/core.py”, line 353, in action
raise NotImplementedError
此时,env.step的输出经检查没有问题,但gym的源码始终有报错。按照提示进入core.py文件中,如下的代码段
class ActionWrapper(Wrapper):
def reset(self, **kwargs):
return self.env.reset(**kwargs)
def step(self, action):
return self.env.step(self.action(action))
@abstractmethod
def action(self, action):
raise NotImplementedError
@abstractmethod
def reverse_action(self, action):
raise NotImplementedError
发现,在step时会进入self.action(action)这个函数,并进行报错,但将返回值改为self.env.step(action)后就不会报错。
可能的原因:
猜测原因为自定义环境的action可能与gym标准的action格式不一致。但测试发现stablebaselines3这个强化学习库却能直接接入自定义环境,说明格式能够兼容,但理论上确定与action的格式有关,目前还不清楚是什么原因。