IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> ‘GridEnv‘ object has no attribute ‘unwrapped‘问题的解决 -> 正文阅读

[Python知识库]‘GridEnv‘ object has no attribute ‘unwrapped‘问题的解决

目录

背景:

如何解决:

思路:

后记:


背景:

????????在郭宪老师的《深入浅出强化学习:原理入门》的学习中,在编写机器人找金币环境的最后一步中,出现了这样的问题:AttributeError: 'GridEnv' object has no attribute 'unwrapped'

????????以下是错误报告:

Traceback (most recent call last):
  File "Z:\DQN\02\ending.py", line 5, in <module>
    env = gym.make('GridWorld-v0')
  File "Z:\Anaconda3\envs\my_env\lib\site-packages\gym\envs\registration.py", line 235, in make
    return registry.make(id, **kwargs)
  File "Z:\Anaconda3\envs\my_env\lib\site-packages\gym\envs\registration.py", line 129, in make
    env = spec.make(**kwargs)
  File "Z:\Anaconda3\envs\my_env\lib\site-packages\gym\envs\registration.py", line 95, in make
    env.unwrapped.spec = spec
AttributeError: 'GridEnv' object has no attribute 'unwrapped'

Process finished with exit code 1

如何解决:

????????先说我是怎么解决的,再说解决的思路

????????问题出在

class GridEnv:

????????这个类的定义处,将他改成

class GridEnv(gym.Env):

????????就可以了

思路:

????????首先报错的翻译:'GridEnv'类没有对象'unwrapped'。这边python太久没有用,很多语法都不记得了。

????????在看到这个问题的第一反应,是去看出错位置的代码,registration.py的95行定义的是make函数(在这里的第22行)

def make(self, **kwargs):
    """Instantiates an instance of the environment with appropriate kwargs"""
    if self.entry_point is None:
        raise error.Error(
            "Attempting to make deprecated env {}. (HINT: is there a newer registered version of this env?)".format(
                self.id
            )
        )

    _kwargs = self._kwargs.copy()
    _kwargs.update(kwargs)

    if callable(self.entry_point):
        env = self.entry_point(**_kwargs)
    else:
        cls = load(self.entry_point)
        env = cls(**_kwargs)

    # Make the environment aware of which spec it came from.
    spec = copy.deepcopy(self)
    spec._kwargs = _kwargs
    env.unwrapped.spec = spec#这里是95行
    if env.spec.max_episode_steps is not None:
        from gym.wrappers.time_limit import TimeLimit

        env = TimeLimit(env, max_episode_steps=env.spec.max_episode_steps)
    else:
        if self.order_enforce:
            from gym.wrappers.order_enforcing import OrderEnforcing

            env = OrderEnforcing(env)
    return env

????????从上往下看到95行,发现这是make函数第一次调用env.unwrapped,而这也是整个程序第一次调用env。那么问题来了,是env没有这个对象还是说有其他问题呢?于是我去看了env的定义:

@property
def unwrapped(self):
    return self.env.unwrapped

????????在三百多行代码中,我找到了这个,env是有unwrapped这个对象的,那么就不是这个问题了,那其他问题从哪里找起呢?陷入了僵局。

????????灵机一动,还有其他样例代码,去看看其他环境是如何写出来的不就知道了吗?然后我发现了这个

class CartPoleEnv(gym.Env):

????????原来是我自己定义错了,在狠狠的抽了自己两巴掌之后,结束了这次的debug,之后虽然有一些小bug,但都很快解决了。

后记:

????????除了这个bug,还有一些配置环境的时候出现的问题,但是在足够多的网页的查找下,最终还是找到了解决方案,总结主要有三点:

  1. 书上参考的资料(GitHub)一定要去看,看了很快就能知道问题所在。
  2. 各种步骤要循规蹈矩的来,最好不要跳步骤或和在其他教程一起串着看,早晚出问题。
  3. 外网解决资源很丰富,可以尝试在StackOverflow上寻找答案(中间有一个很重要的启发点就是来自StackOverflow)

????????看了gym的一些东西的内部实现之后,感觉功力大涨,下次也可以试试看一些东西的内部实现。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:32:27  更:2022-01-25 10:34:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:25:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码