gym自定义迷宫环境,注册后报错

AttributeError: module 'gym.envs.classic_control' has no attribute 'GridWorld'

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    回答:

    根据错误提示,在运行注册自定义的gym迷宫环境时出现了 "AttributeError: module 'gym.envs.classic_control' has no attribute 'GridWorld'" 的错误,说明该模块 'gym.envs.classic_control' 中并没有包含名为 'GridWorld' 的属性。要解决该问题,我们需要定位该错误的来源并进行修改。

    步骤如下:

    1. 检查代码中是否存在正确的导入语句,即“ from gym.envs.classic_control.文件名 import 类名 ”的格式,其中“文件名”指迷宫所在的.py文件名,“类名”指自定义的环境类名。

    2. 确保自定义环境类中继承了 'gym.Env' 类,并正确实现该类所需要的方法,如 'init()', 'reset()', 'step()', 'render()', 'close()' 等。

    3. 若在自定义环境类中调用了其他包的方法或类,请确认该包已正确导入并可以使用。

    4. 检查是否在命令行中正确运行了环境注册代码,并将其放置在主函数的前面。

    示例代码如下:

    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 环境。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^