AttributeError: module 'gym.envs.classic_control' has no attribute 'GridWorld'
不知道你这个问题是否已经解决, 如果还没有解决的话:回答:
根据错误提示,在运行注册自定义的gym迷宫环境时出现了 "AttributeError: module 'gym.envs.classic_control' has no attribute 'GridWorld'" 的错误,说明该模块 'gym.envs.classic_control' 中并没有包含名为 'GridWorld' 的属性。要解决该问题,我们需要定位该错误的来源并进行修改。
步骤如下:
检查代码中是否存在正确的导入语句,即“ from gym.envs.classic_control.文件名 import 类名 ”的格式,其中“文件名”指迷宫所在的.py文件名,“类名”指自定义的环境类名。
确保自定义环境类中继承了 'gym.Env' 类,并正确实现该类所需要的方法,如 'init()', 'reset()', 'step()', 'render()', 'close()' 等。
若在自定义环境类中调用了其他包的方法或类,请确认该包已正确导入并可以使用。
检查是否在命令行中正确运行了环境注册代码,并将其放置在主函数的前面。
示例代码如下:
import gym
from gym.envs.registration import register
register(
id='GridWorld-v0',
entry_point='gym.envs.classic_control.grid_world:GridWorld',
max_episode_steps=1000,
reward_threshold=0.5,
)
class GridWorld(gym.Env):
def __init__(self):
# 环境初始化代码
pass
def reset(self):
# 环境重置代码
pass
def step(self, action):
# 环境步进代码
pass
def render(self, mode='human', close=False):
# 环境渲染代码
pass
def close(self):
# 环境关闭代码
pass
如果以上步骤都没有问题,那么该错误可能是环境注册文件中出现了错误,可以尝试使用以下代码进行注册:
import gym
from gym.envs.registration import EnvSpec
class GridWorld(gym.Env):
def __init__(self):
# 环境初始化代码
pass
def reset(self):
# 环境重置代码
pass
def step(self, action):
# 环境步进代码
pass
def render(self, mode='human', close=False):
# 环境渲染代码
pass
def close(self):
# 环境关闭代码
pass
gym.envs.register(
id='GridWorld-v0',
entry_point=GridWorld,
max_episode_steps=1000,
reward_threshold=0.5,
kwargs={}
)
如果以上尝试都没有解决问题,那么可能是 gym 的版本问题或者需要重新安装 gym 环境。