上篇博客介绍了OpenAI Gym、OpenAI Gym与强化学习以及OpenAI Gym的安装,接下来运行一个demo体验一下OpenAI Gym这个平台,以CartPole(倒立摆)为例,在工作目录下建立一个python模块,代码如下:
import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
env.render()
env.step(env.action_space.sample()) # take a random action
- 1
- 2
- 3
- 4
- 5
- 6
其中env.reset()重置环境的状态,、env.render()重绘环境的一帧
由动画结果可以看出随机控制算法发散,系统很快失去稳定。如果想查看其他一些环境,请尝试用MountainCar-v0,MsPacman-v0(需要Atari依赖关系)或Hopper-v1(需要MuJoCo依赖项)替换上述CartPole-v0,这些环境都来自Env基类。
最近在学习强化学习,在师兄的推荐下,自学了一款用于研发和比较强化学习算法的工具包——OpenAI Gym,它支持训练智能体(agent)做任何事——从行走到玩Pong或围棋之类的游戏都在范围中。
OpenAI Gym 是一个用于开发和比较RL 算法的工具包,与其他的数值计算库兼容,如tensorflow 或者theano 库。现在主要支持的是python 语言,以后将支持其他语言。官方提供的gym文档。
1.OpenAI Gym组成
Openai gym 包含2 部:
- gym 开源
包含一个测试问题集,每个问题成为环境(environment),可以用于自己的强化学习算法开发,这些环境有共享的接口,允许用户设计通用的
算法,例如:Atari、CartPole等。 - OpenAI Gym 服务
提供一个站点和api ,允许用户对他们训练的算法进行性能比较。
2.强化学习与OpenAI Gym
强化学习(reinforcement learning,RL)是机器学习的一个分支,考虑的是做出一系列的决策。它假定有一个智能体(agent)存在于环境中。在每一步中,智能体(agent)采取一个行动,随后从环境中收到观察与回报。一个RL算法寻求的是,在一个原先毫无了解的环境中通过一段学习过程——通常包括许多试错——让智能体(agent)收到的总体回报最大化。
在强化学习中有2 个基本概念,一个是环境(environment),称为外部世界,另一个为智能体agent(写的算法)。agent 发送action 至environment,environment返回观察和回报。而OpenAI Gym 的核心接口是Env,作为统一的环境接口。Env 包含以下核心方法:
- env.reset(self):重置环境的状态,返回观察
- env.step(self,action):推进一个时间步长,返回observation,reward,done,info
- env.render(self,mode=’human’,close=False):重绘环境的一帧。默认模式一般比较友好,如弹出一个窗口
3.OpenAI Gym安装
- 安装依赖包
$ 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
- 1
- git安装
$ git clone https://github.com/openai/gym
$ cd gym
$ pip install -e . # minimal install
or
$ pip install -e .[all] # full install (this requires cmake and a recent pip version)
- 1
- 2
- 3
- 4
- 5
- pip安装
$ pip install gym #minimal install
or
$ pip install gym[all] #full install, fetch gym as a package
import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
env.render()
env.step(env.action_space.sample()) # take a random action
- 1
- 2
- 3
- 4
- 5
- 6
其中env.reset()重置环境的状态,、env.render()重绘环境的一帧
由动画结果可以看出随机控制算法发散,系统很快失去稳定。如果想查看其他一些环境,请尝试用MountainCar-v0,MsPacman-v0(需要Atari依赖关系)或Hopper-v1(需要MuJoCo依赖项)替换上述CartPole-v0,这些环境都来自Env基类。