最近看了一篇研究方向相关的文章,介绍了一种DQN的应用,感觉还挺新鲜的。想着把这篇文章复现出来,就开始学习强化学习的相关知识,作为一名小白,这一路走的可是真的十分艰难(我太菜了啊!)

看了莫烦Python的教程介绍,了解到有一个用于构造强化学习环境的库叫做gym,我就跑去学习了,还处于慢慢摸索中吧,一点一点来,把学习过程记录在这里。

这篇文章主要会记录以下两点:

  • Gym库的官网,在我电脑上是gym支持windows10了,安装很简单,就是pip3 install gym/gym[all],后者gym[all]我也是后来知道的,就是更加完整的gym库,但是前者就够用了
  • Gym库中几个最重要的基类的源代码的介绍

一、Gym库的"Hello World"

现在开始介绍Gym库,它的官网上的文档说明在这:

https://gym.openai.com/docs/​gym.openai.com

这段代码被称为gym库的Hello World,但是说实话,作为小白的我看到这些是懵逼的。尤其是这句:

env=gym.make('CartPole-v0')

这行代码是生成了一个已经在gym中注册的环境,这个环境名叫做CartPole,这个环境的代码在这里:

https://github.com/openai/gym/blob/master/gym/envs/classic_control/cartpole.py​github.com

在知乎上有一位前辈写了一个格子世界环境,github上有源代码,对这个CartPole的源代码进行了注释,他的文章链接和github代码链接在这里,感谢他:

Orion Nebula:强化学习快速上手:编写自定义通用gym环境类+主流开源强化学习框架调用​zhuanlan.zhihu.com

https://github.com/gxnk/reinforcement-learning-code/blob/master/%E7%AC%AC%E4%B8%80%E8%AE%B2%20%20gym%20%E5%AD%A6%E4%B9%A0%E5%8F%8A%E4%BA%8C%E6%AC%A1%E5%BC%80%E5%8F%91/cartpole_notes.py​github.com

这个环境是gym库中写好的一个Env类,就是环境的基类。此处插播小白必备,如果你跟我一样不熟悉Python的类与继承的语法,这边请:

Python 面向对象 | 菜鸟教程​www.runoob.com

我们都知道强化学习中最基本的模型是马尔可夫过程,其中最核心的过程就是智能体与环境的交互,所以在实现强化学习算法时的第一步就是构造环境,这也是gym库的最大优势:

我们只需要继承基类,重写其中的方法就可以。

二、环境基类Env源代码介绍

Env基类的代码在这里:

https://github.com/openai/gym/blob/0cd9266d986d470ed9c0dd87a41cd680b65cfe1c/gym/core.py​github.com

现在我就把源码读一遍,然后把重要的部分放到这里来:

它介绍说这是主要的一个类,它可以覆盖拥有任意动态特性的环境,这些环境可以是完全观测的(MDP),也可以是部分观测的。(POMDP)

主要的5个方法,也是我们构建环境时要重写的几个方法

环境基类中的几个可以设置的属性,主要是前两个吧,动作空间action_space与状态空间observation_space,这个还需要了解另一个重要的基类Spaces的源代码,后面会做介绍。第三个是reward_range,默认是[负无穷,正无穷],需要的话再修改。

前者是在需要可视化的时候用到的元组数据,需要选择render中的模式,后面看了render的源代码我会再补充过来。然后spec我不知道是什么。

第二个就是在所有的子类中都要去设定的,default值的None

几个函数的说明

因为我的使用过程中不太会涉及到可视化的内容,所以我这里只讲Env类中最直接相关的三个方法:Reset() Step() 与 _init_()

Reset() 是初始化函数,在每一个训练episode之后都要对环境进行初始化,功能很简单,就是回到初始状态

reset方法的说明

Step() 是用来描述智能体与环境的交互过程的函数,也是我们在编写自己的环境的时候重点要重写的。用大白话讲就是我们要在这里定义我们的环境里的游戏规则

Step方法的说明

此方法的输入是智能体可以产生的动作,输出是四个,分别是:

Observation:智能体观测到的当前环境的状态

Reward: 由上一个动作产生的奖励值

done:一个指示位,表示这一训练周期是否结束,True or False

info:包含一些其余信息,结构是字典

最后一行的raise是我新学到的知识,可以看这篇博客,目的是防止step方法在继承的子类中未被声明却被调用。

https://blog.csdn.net/grey_csdn/article/details/77074707​blog.csdn.net

_Init_() 环境的初始化函数

我在源代码里第一次看到初始化函数是在这里

Wrapper子类的说明

原谅我的水平不够,我只能理解到Wrapper的作用是一种包装,可以在不改动源代码的情况下重写某些方法来改变环境的属性,也就是改变强化学习的游戏规则。

简单的理解就是要在初始化函数中声明动作空间,状态空间,奖励值范围,元组数据(如果需要)。

Subclass GoalEnv()

Gym库还提供了一种环境子类叫做GoalEnv

在这个子类中 ,会有一个desired_goal的变量,大概理解就是一种目的性很强的强化学习吧,有需要的各位可以去看看。

三、空间基类Space源代码介绍

另外一个很重要的基类就是Space类

在这里在介绍两个常用的子类 : Discrete类 与 Box类

简单理解的话Discrete类是一个一维离散空间

Box类是一个多维空间,不同维度的上下界可以是不同的,如下图所示:

关于空间的这部分之后后面还要补充,把几个基本的方法的功能介绍一下,今天累了就先写到这里。两个基本方法有:

Sample()

Contains()

在编写自己的环境的时候只要 from gym import spaces就可以使用Box 和 Discrete啦,因为他们都在spaces这个文件夹下:

openai/gym​github.com

下一篇文章里我会先学习gym库中的官方环境和前辈们写的环境,然后尝试编写自己的一个无线网络资源调度问题的强化学习环境。

四、感谢各位前辈

感谢各位知乎的前辈们的文章对我的帮助,他们的文章是我学习路上不可或缺的助力(都是大佬,太强了,膜拜!)

强化学习知识大讲堂

天津包子馅儿:强化学习实战 第一讲 gym学习及二次开发​zhuanlan.zhihu.com

叶强:强化学习实践二 理解gym的建模思想​zhuanlan.zhihu.com

沫凡大神的系列教程

https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/​morvanzhou.github.io

安装gym库_强化学习Gym库学习实践(一)相关推荐

  1. python机器人库_机器人之实战深度学习(上)OpenCV库

    本文主要向大家介绍了机器人之实战深度学习(上)OpenCV库,通过具体的内容向大家展现,希望对大家学习机器人有所帮助. 在如今人工智能的浪潮下,无数模拟机器学习和深度学习的开发者工具倍出,其中在计算机 ...

  2. python语音库_绝佳的ASR学习方案:这是一套开源的中文语音识别系统

    ASRT 是一套基于深度学习实现的系统,全称为 Auto Speech Recognition Tool,由 AI 柠檬博主开发并在 GitHub 上开源(GPL 3.0 协议).本项目声学模型通过采 ...

  3. mfc140dll 丢失 微软常用运行库_集成最新运行库、一键安装、一键到位,运行库操作简单!...

    背景有很多童鞋在安装诸如PS.vc++等软件总会提示缺少关键组件或者运行框架,也有在后台问我的,所以今天就给大家分享一下一些电脑安装软软件或者游戏常用的运行库,号主找了一些并且写了批处理直接运行就可以 ...

  4. python3.8安装pyinstaller库_模块:pyinstaller库的安装与使用

    PyInstaller库的安装 (cmd命令行) pip install pyinstaller 如果安装失败 python 3.8 不兼容. 解决方案:安装和使用pyinstaller 4.0 de ...

  5. 小样本点云深度学习库_基于点云深度学习的点云数据集制作系统及方法与流程...

    本发明涉及测控技术领域,尤其涉及一种基于点云深度学习的点云数据集制作系统及方法. 背景技术: 深度学习网络模型一般都是基于64线单帧激光数据集进行.但64线激光器和单帧的限定,造成了工程应用中点云数据 ...

  6. python安装itchat库_操作微信-itchat库的安装

    基于pyCharm开发环境,在CMD控制台输入:pip install itchat      等待安装...... Microsoft Windows [版本 6.1.7601] 版权所有 (c) ...

  7. 信息系统监理师题库_信息系统监理题库

    信息系统监理题库app是专门针对信息系统监理师考试的应用软件,在这个应用软件中拥有着全面的考试大纲资源,同时还有着海量的历年真题以及模拟试题供用户进行学习.该软件会自动的为用户记录错题,便于用户可以对 ...

  8. python 人工智能库_人工智能与Python库的关系

    目前人工智能技术发展速度很快,也很吸引眼球.但是对于各种多如牛毛的方法,目前并米有一个可靠的精准的基准来衡量各项硬件在不同算法训练和推理的性能. 现在,不用愁了.国外的一个哥们, Andrey Ign ...

  9. 优秀的python库_一个优秀Python库,轻松吟诗作对写文章!

    公众号:深度学习视觉 前言 该工具追求着这样的一个目标,几行代码调用最先进的模型,加载训练好的模型参数,来完成自然语言项目,比如机器翻译.文本摘要.问答系统等.Transformers 同时支持 Py ...

最新文章

  1. Google经典面试题解析
  2. C语言 | 基于MPU605(六轴传感器)的I2C实现LCD1602显示(代码类)
  3. Android EditText密码框的可见性设置
  4. python接口自动化测试(二)-requests.get()
  5. 在MVC项目中使用Ninject
  6. 原子自增_小学妹教你并发编程的三大特性:原子性、可见性、有序性
  7. 宝洁侮辱女性?其公众号发文 “女人脚臭是男人的5倍”,官方回应了...
  8. 【clickhouse】ClickHouse之DBA运维宝典
  9. MATLAB实战Sobel边缘检测(Edge Detection)
  10. CoAP协议 libcoap API
  11. nginx在Linux系统安装
  12. 对不同角色用户设置不同的系统首页
  13. NS3_Tutorial 中文版: 第四章 NS3 概念概述
  14. MAXON宣布任命高级领导人员
  15. python画图心形_通过matplotlib绘制心形
  16. 使用C# 创建windows 服务
  17. ARC120E - 1D Party
  18. 期刊论文发表的格式要求是什么
  19. t3软件怎么生成报表_t3财务报表怎么生成
  20. 论文翻译解读:Translating Embeddings for Modeling Multi-relational Data【TransE】

热门文章

  1. Yii2.0 RESTful API 之版本控制
  2. GitBook本地的安装与查看
  3. C/C++利用三元组实现稀疏矩阵运算
  4. 【vivado】debug hub时钟不匹配
  5. 环形动画加载视图AnimatedCircleLoadingView​​​​​​​
  6. Wink发布Wink Hub2家庭物联网控制中心
  7. 解决 The mysql extension is deprecated and will be r
  8. 九、数据库群集部署、配置 (二)
  9. 经典算法题每日演练——第六题 协同推荐SlopeOne 算法
  10. 领域驱动设计_软件核心复杂性应对之道