OpenAI教程

英文版:https://gym.openai.com/docs

2016年 5 月 4日,OpenAI发布了人工智能研究工具集 OpenAI Gym。OpenAI Gym是一款用于研发和比较学习算法的工具包。它与很多数值计算库兼容,比如tensorflow和theano。现在支持的语言主要是python。

openai gym 是一个增强学习(reinforcement learning,RL)算法的测试床(testbed)。增强学习和有监督学习的评测不一样。有监督学习的评测工具是数据。只要提供一批有标注的数据18:34:13就能进行有监督学习的评测。增强学习的评测工具是环境。需要提供一个环境给 Agent 运行,才能评测 Agent 的策略的优劣。OpenAI Gym 是提供各种环境的开源工具包。

增强学习有几个基本概念:

(1)     agent:智能体,也就是机器人,你的代码本身。

(2)     environment:环境,也就是游戏本身,openai gym提供了多款游戏,也就是提供了多个环境。

(3)     action:行动,比如玩超级玛丽,向上向下等动作。

(4)     state:状态,每次智能体做出行动,环境会相应地做出反应,返回一个状态和奖励。

(5)     reward:奖励:根据游戏规则的得分。智能体不知道怎么才能得分,它通过不断地尝试来理解游戏规则,比如它在这个状态做出向上的动作,得分,那么下一次它处于这个环境状态,就倾向于做出向上的动作。

OpenAI Gym由两部分组成:

  1. gym开源库:测试问题的集合。当你测试增强学习的时候,测试问题就是环境,比如机器人玩游戏,环境的集合就是游戏的画面。这些环境有一个公共的接口,允许用户设计通用的算法。
  2. OpenAI Gym服务。提供一个站点(比如对于游戏cartpole-v0:https://gym.openai.com/envs/CartPole-v0)和api,允许用户对他们的测试结果进行比较。

gym的代码在这上面:https://github.com/openai/gym

gym的核心接口是Env,作为统一的环境接口。Env包含下面几个核心方法:

1、reset(self):重置环境的状态,返回观察。

2、step(self,action):推进一个时间步长,返回observation,reward,done,info

3、render(self,mode=’human’,close=False):重绘环境的一帧。默认模式一般比较友好,如弹出一个窗口。

安装

1.Linux(没试过):

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

  2.Windows(有两种方法):

(1)使用pip:

pip install gym

(2)使用git:

git clone https://github.com/openai/gym
cd gym
pip install -e . # minimal install
pip install -e .[all] # full install (this requires cmake and a recent pip version)

接下来以cartpole-v0(https://gym.openai.com/envs/CartPole-v0)举例。

这个游戏的规则是让杆不倒。Openai gym提供了行动的集合,环境的集合等等。Cartpole-v0来说,动作空间包括向左拉和向右拉两个动作。其实你并不需要关心它的动作空间是什么,当你的学习算法越好,你就越不需要解释这些动作。

运行环境

运行CartPole-v0环境1000个时间步(timestep)。

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

可以看到随机控制算法发散,游戏很快结束。

观察

如果我们想做得好一点,观察周围的环境是必须的。环境的step函数返回四个值:

  • Observation(object):返回一个特定环境的对象,描述对环境的观察。比如,来自相机的像素数据,机器人的关节角度和关节速度,或棋盘游戏中的棋盘状态。
  • Reward(float):返回之前动作收获的总的奖励值。不同的环境计算方式不一样,但总体的目标是增加总奖励。
  • Done(boolean):返回是否应该重新设置(reset)环境。大多数游戏任务分为多个环节(episode),当done=true的时候,表示这个环节结束了。
  • Info(dict):用于调试的诊断信息(一般没用)。

这是一个典型的“智能体-环境循环”的实现。每个时间步长(timestep),智能体选择一个行动,环境返回一个观察和奖励值。

过程一开始调用reset,返回一个初始的观察。并根据done判断是否再次reset。

import gym
env = gym.make(‘CartPole-v0‘)
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break

以上代码有20个episode,打印每次的环境观察值,随机采取行动,返回环境的观察值、奖励、done和调试信息。当done为true时,该episode结束,开始下一个episode。可以看到,观察了环境,每次坚持的时间好像稍微长了一点。

运行结果如下:

[-0.061586   -0.75893141  0.05793238  1.15547541]
[-0.07676463 -0.95475889  0.08104189  1.46574644]
[-0.0958598  -1.15077434  0.11035682  1.78260485]
[-0.11887529 -0.95705275  0.14600892  1.5261692 ]
[-0.13801635 -0.7639636   0.1765323   1.28239155]
[-0.15329562 -0.57147373  0.20218013  1.04977545]
Episode finished after 14 timesteps
[-0.02786724  0.00361763 -0.03938967 -0.01611184]
[-0.02779488 -0.19091794 -0.03971191  0.26388759]
[-0.03161324  0.00474768 -0.03443415 -0.04105167]

空间

以上,我们都是从环境的动作空间中随机选择动作。每个环境都有一个space对象,用来描述有效的动作和观察:

import gym
env = gym.make(‘CartPole-v0‘)
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)

在上面这个例子中,action取非负整数0或1。Box表示一个n维的盒子,因此observation是一个4维的数组。我们可以试试box的上下限。

print(env.observation_space.high)
#> array([ 2.4       ,         inf,  0.20943951,         inf])
print(env.observation_space.low)
#> array([-2.4       ,        -inf, -0.20943951,        -inf])

Box和discrete是最常见的space。你可以从space中取样或者验证是否属于它。

from gym import spaces
space = spaces.Discrete(8) # Set with 8 elements {0, 1, 2, ..., 7}
x = space.sample()
assert space.contains(x)
assert space.n == 8

环境

Gym的主要目的是提供一个大环境集合,具有一个公共接口,并且允许比较算法。你可以列出这些环境。

from gym import envs
print(envs.registry.all())
#> [EnvSpec(DoubleDunk-v0), EnvSpec(InvertedDoublePendulum-v0), EnvSpec(BeamRider-v0), EnvSpec(Phoenix-ram-v0), EnvSpec(Asterix-v0), EnvSpec(TimePilot-v0), EnvSpec(Alien-v0), EnvSpec(Robotank-ram-v0), EnvSpec(CartPole-v0), EnvSpec(Berzerk-v0), EnvSpec(Berzerk-ram-v0), EnvSpec(Gopher-ram-v0), ...

这列出了一系列的EnvSpec。它们为特定任务定义特定参数,包括运行的实验数目和最多的步数。比如,EnvSpec(Hopper-v1)定义了一个环境,环境的目标是让一个2D的模拟机器跳跃。EnvSpec(Go9x9-v0)定义了9*9棋盘上的围棋游戏。

这些环境ID被视为不透明字符串。为了确保与未来的有效比较,环境永远不会以影响性能的方式更改,只能由较新的版本替代。 我们目前使用v0为每个环境添加后缀,以便将来的替换可以自然地称为v1,v2等。

记录和加载结果

Gym使得记录算法在环境中的性能变得简单,同时能记录学习过程的视频。只要使用monitor如下:

import gym
env = gym.make(‘CartPole-v0‘)
env.monitor.start(‘/tmp/cartpole-experiment-1‘)
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break
env.monitor.close()

跑了一下发现有错:

env.monitor is deprecated. Wrap your env with gym.wrappers.Monitor to record data.

改为如下:

from gym.wrappers import Monitor
env = Monitor(directory=‘/tmp/cartpole-experiment-0201‘,video_callable=False, write_upon_reset=True)(env)
env.close()

(mark一下找bug思路,gym\monitoring\tests里面有测试的案例,参考test_monitor.py写代码。)

产生的结果放到‘/tmp/cartpole-experiment-1‘这个文件夹中,你可以加载到评分板。

monitor支持将一个环境的多个案例写入一个单独的目录。

然后你可以把你的结果加载到OpenAI Gym:

import gym
gym.upload(‘/tmp/cartpole-experiment-1‘, api_key=‘ sk_FYp0Gc1dQU69epifs7ZE6w‘)

输出应该是这样:

[2016-04-22 23:16:03,123] Uploading 20 episodes of training data
[2016-04-22 23:16:04,194] Uploading videos of 2 training episodes (6306 bytes)
[2016-04-22 23:16:04,437] Creating evaluation object on the server with learning curve and training video
[2016-04-22 23:16:04,677]
****************************************************
You successfully uploaded your agent evaluation to
OpenAI Gym! You can find it at:

    https://gym.openai.com/evaluations/eval_tmX7tssiRVtYzZk0PlWhKA

估值

每次加载会产生一个估值对象。官方文件说,应该创建一个Gist(被墙了)显示怎么复制你的结果。估值页会有一个如下方框:

你还可以在加载的时候提供你的gist,通过一个writeup参数

import gym
gym.upload(‘/tmp/cartpole-experiment-1‘, writeup=‘https://gist.github.com/gdb/b6365e79be6052e7531e7ba6ea8caf23‘, api_key=‘ sk_FYp0Gc1dQU69epifs7ZE6w‘)

这一步是将你的结果提交到在线网站上进行评估,你的结果会被自动评分,并且会产生一个漂亮的界面,如:

https://gym.openai.com/evaluations/eval_Ir5NHkdNRGqvmpBDcdNNNw

在大多数环境中,你的目标是用最少的步数达到性能的要求(有一个阈值)。而在一些特别复杂的环境中,阈值是什么还不清楚,因此,你的目标是最优化性能。

注意,现在writeup被舍弃了,所以不需要writeup。

另外,api_key是指

再mark一个错误:

raise error.Error("[%s] You didn‘t have any recorded training data in {}. Once you‘ve used ‘env.monitor.start(training_dir)‘ to start recording, you need to actually run some rollouts. Please join the community chat on https://gym.openai.com if you have any issues.".format(env_id, training_dir))

这是由于之前更改monitor,改成调用wrappers里面的文件时候出的错。将结果放到‘/tmp/cartpole-experiment-1‘这个文件夹的时候出错,也就是在monitor这一步出错,通过查看文件夹里面的文件也可看到文件夹里面的文件大小都很小,内容也不对,如下:

因此从monitor入手更改。

改完之后产生的文件如下:

时间: 2024-10-11 21:52:38

OpenAI教程的相关文章

DRL 教程 | 如何保持运动小车上的旗杆屹立不倒?TensorFlow利用A3C算法训练智能体玩CartPole游戏

本教程讲解如何使用深度强化学习训练一个可以在 CartPole 游戏中获胜的模型.研究人员使用 tf.keras.OpenAI 训练了一个使用「异步优势动作评价」(Asynchronous Advantage Actor Critic,A3C)算法的智能体,通过 A3C 的实现解决了 CartPole 游戏问题,过程中使用了贪婪执行.模型子类和自定义训练循环. 该过程围绕以下概念运行: 贪婪执行--贪婪执行是一个必要的.由运行定义的接口,此处的运算一旦从 Python 调用,就要立刻执行.这使得

库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)

项目地址:https://github.com/bharathgs/Awesome-pytorch-list 列表结构: NLP 与语音处理 计算机视觉 概率/生成库 其他库 教程与示例 论文实现 PyTorch 其他项目 自然语言处理和语音处理 该部分项目涉及语音识别.多说话人语音处理.机器翻译.共指消解.情感分类.词嵌入/表征.语音生成.文本语音转换.视觉问答等任务,其中有一些是具体论文的 PyTorch 复现,此外还包括一些任务更广泛的库.工具集.框架. 这些项目有很多是官方的实现,其中

TensorFlow 2 / 2.0 入门教程实战案例

中文文档 TensorFlow 2 / 2.0 中文文档 知乎专栏 欢迎关注知乎专栏 https://zhuanlan.zhihu.com/geektutu 一.实战教程之强化学习 TensorFlow 2.0 (九) - 强化学习 70行代码实战 Policy Gradient TensorFlow 2.0 (八) - 强化学习 DQN 玩转 gym Mountain Car TensorFlow 2.0 (七) - 强化学习 Q-Learning 玩转 OpenAI gym TensorFl

TensorFlow2.0 入门教程实战案例

中文文档 TensorFlow 2 / 2.0 中文文档 知乎专栏 欢迎关注知乎专栏 https://zhuanlan.zhihu.com/geektutu 一.实战教程之强化学习 TensorFlow 2.0 (九) - 强化学习 70行代码实战 Policy Gradient TensorFlow 2.0 (八) - 强化学习 DQN 玩转 gym Mountain Car TensorFlow 2.0 (七) - 强化学习 Q-Learning 玩转 OpenAI gym TensorFl

强化学习环境OpenAi搭建,从虚拟机到Gym、Mujoco和mujoco-py的完整安装

平时不怎么写博客,这次是因为环境的配置花费了我大概一个星期的时间.所以简单的记录一下搭建的整个过程,其中有些部分我直接推荐别人的博客的基本教程,都是我亲自尝试过成功的.同时,也希望这篇博客可以帮到您. (一)VMware Wokestation Pro15安装CENTOS7和Ubuntu版本Linux系统 (1)Ubuntu16.04LTS的安装(强烈推荐) 这里我使用的是Ubuntu16.4版本,基本步骤按照这个教程来就可以https://blog.csdn.net/wang_624/arti

Windows Git+TortoiseGit简易使用教程

转载自 http://blog.csdn.net/jarelzhou/article/details/8256139 官方教程:http://tortoisegit.org/docs/tortoisegit/(英文版) 为什么选择Git 效率 很多人有一种习惯吧,什么软件都要最新的,最好的.其实吧,软件就是工具,生产力工具,为的是提高我们的生产力.如果现有的工具已经可以满足生产力要求了,就没有必要换了.生产效率高低应当是选择工具的第一位. 历史 开源世界的版本控制系统,经历了这么几代: 第一代,

微信公众号中添加外部链接地址的图文教程

2017-9-18,长沙,有点闷,有点热. 本教程教大家如何在微信公众号中,添加外部的链接,网络有很多教程,但由于表述不太清楚,出个教程吧.最终实现在微信后台管理平台"原文链接"处插入外部链接,用户点击发布好的图文文章底部左下角的"阅读原文",就可以跳转到您添加的外部链接页面中去. 第1步. 使用微信公众管理帐号登陆微信管理后台 > 素材管理 > 图文消息 >  新建图文消息或者编辑文章都可以,如下图所示: 第2步. 之后,将页面向下拉,看到底部&

win2003从组策略关闭端口(445/135/137/138/139/3389等)教程

一些恶劣的病毒会从某些端口入侵计算机,因此关闭某些用不到的而又具有高风险的端口就显得很有必要,是服务器管理员要做的基本的安全防范.本文将介绍win2003系统在组策略关闭某一个端口的教程,文章以关闭445端口为例. 首先要说明的是,此方法不仅仅适用于win2003,也适用于win7,且操作方法完全相同,所以win7用户也可以按照本文教程操作. 1.打开组策略编辑器 按组合键WIN+R打开运行窗口,然后输入gpedit.msc,按回车键,即可进入组策略编辑器. 2.创建 IP 安全策略 展开选项"

微信小程序实例教程(一)

序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开的页面中查看当前小程序的启动日志. 1. 获取微信小程序的 AppID 首先,我们需要拥有一个帐号,如果你能看到该文档,我们应当已经邀请并为你创建好一个帐号.注意不可直接使用服务号或订阅号的 AppID. 利用提供的帐号,登录https