购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 强化学习仿真环境构建

学习算法的共同点是从数据中学习,因此数据是学习算法最基本的组成元素。监督学习的数据独立于算法本身,而强化学习不同。强化学习的数据是智能体与环境的交互数据,在交互中智能体逐渐地改善行为,产生更好的数据,从而学会技能。也就是说强化学习的数据跟算法是交互的,而非独立的。因此,相比于监督学习只构建一个学习算法,强化学习还需要构建一个用于与智能体进行交互的环境。

原则上来说,凡是能提供智能体与环境进行交互的软件都可以用来作为训练强化学习的仿真环境。如各种游戏软件,各种机器人仿真软件。这些仿真环境必备的两个要素是物理引擎和图像引擎。物理引擎用来计算仿真环境中物体是如何运动的,其背后的原理是物理定律,如刚体动力学,流体力学和柔性体动力学等。常用的开源物理引擎有ODE(Open Dynamics Engine)、Bullet、Physx和Havok等。图像引擎则用来显示仿真环境中的物体,包括绘图、渲染等。常用的图像引擎大都基于OpenGL(Open Graphics Library)。

本书中,我们使用的仿真环境为OpenAI 的gym(https://github.com/openai/gym)。选用gym平台的原因有三:

首先,gym 是 OpenAI 开发的通用强化学习算法测试平台,背后有大神 Pieter Abbeel、Sergey Levine 等人率领的强大团队的支持。

其次,学会了gym的基本应用,可以自己学习使用OpenAI的其他开源强化学习软件,如universe、roboschool 和baselines等。

再次,gym本身集成了很多仿真环境,如经典控制中的车摆环境,小车爬山环境、雅达利游戏、棋盘环境等。利用这些写好的环境,可以学习强化学习算法的基本原理。另外,gym是用Python语言写的,可以和深度学习的开源软件如TensorFlow等无缝衔接。

下面,我们看一下gym在Linux系统下的安装。

1.5.1 gym安装及简单的demo示例

(1)为了便于管理,需要先装Anaconda,下载和安装步骤如下。

① 下载Anaconda安装包(推荐利用清华镜像来下载),下载地址:

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive.

笔者安装的是Anaconda3-4.3.0版本。

② 安装Anaconda。下载完成Anaconda后,安装包会在Downloads文件夹下(在终端用 Ctrl+Alt+T 组合键打开终端),键入 cd downloads,然后键入 bash anaconda3_4.3.0-linux-x86_64.sh(小技巧:键入bash an然后按Tab键,Linux系统会自动补全后面的名字)

③ 安装过程会询问是否将路径安装到环境变量中,键入yes,至此Anaconda安装完成。你会在目录/home/你的用户名文件夹下看到Anaconda 3。关掉终端,再开一个,这样环境变量才起作用。

(2)利用Anaconda建一个虚拟环境。

Anaconda创建虚拟环境的格式为:conda create--name 你要创建的名字 Python=版本号。比如我创建的虚拟环境名字为gymlab,用的Python版本号为3.5,可这样写:

conda create--name gymlab python=3.5

操作完此步之后,会在anaconda3/envs文件夹下多一个gymlab。Python3.5就在gymlab下的lib文件夹中。

(3)安装gym。

上一步已经装了一个虚拟环境gymlab,在这一步要开始应用。先开一个新的终端,然后用命令source activate gymlab激活虚拟环境,再装gym。具体步骤如下。

① 键入git clone https://github.com/openai/gym.git,将gym克隆到计算机中。如果你的计算机中没有安装git,那么可以键入:sudo apt install git,先安装git。

② cd gym 进入gym文件夹。

③ pip install-e ‘.[all]’进行完全安装。等待,这个过程会装一系列的库,装完后可以将 gym 安装文件的目录写到环境变量中;一种方法是打开.bashrc 文件,在末尾加入语句:

export PYTHONPATH=你的gym目录:$PYTHONPATH。

不出意外的话,你就可以开始享用gym了。

对于③,如果报错可以先安装依赖项,键入命令 sudo apt-get install-y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig

下面给出一个最简单的例子。

① 开一个终端(ctr+alt+t),然后激活用Anaconda建立的虚拟环境;source activate Gymlab;

② 运行Python:python;

③ 导入Gym模块:import gym;

④ 创建一个小车倒立摆模型:env=gym.make(‘CartPole-v0’);

⑤ 初始化环境:env.reset;

⑥ 刷新当前环境,并显示:env.render()。

通过这6步,我们可以看到一个小车倒立摆系统,如图1.4所示。

图1.4

1.5.2 深入剖析gym环境构建

本节我们将从上一小节的末尾开始讲三个重要的函数:

第一个函数是创建环境,我们会在第2章具体介绍如何创建自己的环境,所以这个函数暂时不讲。第二个函数 env.reset()和第三个函数 env.render()是每个环境文件都包含的函数。我们以Cartpole为例,讲解这两个函数。

Cartpole的环境文件位置:你的gym目录/gym/envs/classic_control/cartpole.py.

该文件定义了一个CartPoleEnv的环境类,该类的成员函数有:seed()、step()、reset()和render()。上一小节末尾demo中调用的就是CartPoleEnv的两个成员函数reset()和render(),我们先讲讲这两个函数,再介绍step()函数。

1.reset()函数详解

reset()为重新初始化函数,它有什么作用呢?

在强化学习算法中,智能体需要一次次地尝试并累积经验,然后从经验中学到好的动作。每一次尝试我们称之为一条轨迹或一个episode,每次尝试都要到达终止状态。一次尝试结束后,智能体需要从头开始,这就需要智能体具有重新初始化的功能。函数reset()就是用来做这个的。

reset()的源代码:

第2行代码是利用均匀随机分布初试化环境的状态,第3行代码是设置当前步数为None。第4行,返回环境的初始化状态。

2.render()函数详解

render()函数在这里扮演图像引擎的角色。我们知道一个仿真环境必不可少的两部分是物理引擎和图像引擎。物理引擎模拟环境中物体的运动规律;图像引擎用来显示环境中的物体图像,其实,对于强化学习算法而言,可以没有 render()函数,但是,为了便于直观显示当前环境中物体的状态,图像引擎还是有必要的。另外,加入图像引擎可以方便我们调试代码。下面具体介绍gym如何利用图像引擎来创建图像。

我们直接看源代码:

….#省略,直接看关键代码部分:

其中rendering.FilledPolygon为填充一个矩形。

创建完cart的形状,接下来给cart添加平移属性和旋转属性。将车的位移设置到cart 的平移属性中,cart 就会根据系统的状态变化左右运动。笔者已将具体代码解释上传至github:https://github.com/gxnk/reinforcement-learning-code,想深入了解的同学可去下载学习。

3.step()函数详解

本函数在仿真器中扮演物理引擎的角色。其输入是动作a,输出是:下一步状态、立即回报、是否终止、调试项。它描述了智能体与环境交互的所有信息,是环境文件中最重要的函数。在本函数中,一般利用智能体的运动学模型和动力学模型计算下一步的状态和立即回报,并判断是否达到终止状态。

我们直接看源代码:

了解了gym环境的构建过程,就可以构建自己的仿真环境了。我们会在第2章向大家展示一个完整的基于gym的新环境构建过程。 n1xeS9PWGoyl1avxH+uo5dHq+Th2p/0jbkEh7hk6g7w/RSZsarXcBfmzJGWFZO96

点击中间区域
呼出菜单
上一章
目录
下一章
×