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

在使用gym对自定义环境进行封装后,在强化学习过程中遇到NotImplementedError。问题出在ActionWrapper类的step方法中的self.action(action)调用。修改为self.env.step(action)后错误消失。尽管stablebaselines3能够兼容自定义环境,但仍然存在action格式不匹配的疑虑。
摘要由CSDN通过智能技术生成

问题描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NathanWu7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值