2301_77920694 2023-05-08 18:37 采纳率: 100%
浏览 31
已结题

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

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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-09 08:54
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自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 环境。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 创建了问题 5月8日