强化学习自定义环境中,env.step的报错问题

问题描述

搭建自定义环境后,用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的格式有关,目前还不清楚是什么原因。

猜你喜欢

转载自blog.csdn.net/DejaWu33/article/details/129149209