Gym是用于开发和比较强化学习算法的工具包。它支持教学人员,从步行到玩Pong或Pinball等游戏。
1. Gym入门
Gym是用于开发和比较强化学习算法的工具包。它不对代理的结构做任何假设,并且与任何数字计算库(例如TensorFlow或Theano)兼容。
gym库是测试问题(环境)的集合,您可以用来制定强化学习算法。这些环境具有共享的接口,使您可以编写常规算法。
1.1 安装
- 方法一:您需要安装Python 3.5+。只需使用
pip 安装gym :
1 | pip install gym |
- 方法二:如果愿意,还可以直接克隆
gym Git存储库。当您要修改Gym本身或添加环境时,此功能特别有用。使用以下方法下载并安装:
1 2 3 | git clone https://github.com/openai/gym cd gym pip install -e . |
您稍后可以运行
1.2 Environments
这是运行某件事的最低限度示例。这将在1000个时间步中运行
1 2 3 4 5 6 7 | 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 env.close() |
它看起来应该像这样:
cartpole-no-reset
通常,我们会在允许球杆离开屏幕之前结束模拟。以后再说。现在,即使此环境已经返回
如果您希望看到其他运行环境,请尝试将上面的
请注意,如果您缺少任何依赖项,则应该收到一条有用的错误消息,告诉您所缺少的内容。 (如果没有明确的修复说明,请让我们知道依赖是否给您带来麻烦。)安装缺少的依赖通常很简单。您还需要
1.3 Observations
如果我们想做的比在每个步骤中都采取随机行动要好,那么最好了解一下我们的行动对环境的影响。
环境的
-
observation (object):特定于环境的对象,代表您对环境的观察。例如,来自摄像机的像素数据,机器人的关节角度和关节速度或棋盘游戏中的棋盘状态。 -
reward (float):上一操作获得的奖励金额。规模因环境而异,但目标始终是增加总奖励。 -
done (boolean):是否需要再次重置 环境。大多数(但不是全部)任务被分为定义明确的情节,并且如果done 为True ,则表示情节已终止。 (例如,也许杆子倾斜得太远,或者你失去了你的最后一条生命。) -
info (dict):诊断信息,可用于调试。它有时对学习很有用(例如,它可能包含环境上次状态更改背后的原始概率)。但是,您的代理人的官方评估不允许将其用于学习。
这只是经典“agent-environment loop
每个时间步,代理选择一个action
该过程通过调用
因此,编写前面的代码的一种更合适的方法是遵循
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 env.close() |
这应该提供视频和类似以下的输出。您应该能够看到重置发生的位置。
cartpole-yes-reset
1 2 3 4 5 6 7 8 9 10 | [-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] |
1.4 Spaces
在上面的例子中,我们从环境的动作空间中取样随机的动作。但这些行动到底是什么呢?每个环境都有一个
1 2 3 4 5 6 | import gym env = gym.make('CartPole-v0') print(env.action_space) #> Discrete(2) print(env.observation_space) #> Box(4,) |
1 2 3 4 | print(env.observation_space.high) #> array([ 2.4 , inf, 0.20943951, inf]) print(env.observation_space.low) #> array([-2.4 , -inf, -0.20943951, -inf]) |
这种自省有助于编写适用于许多不同环境的通用代码。
1 2 3 4 5 | 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 |
对于
幸运的是,您的学习算法越好,您自己尝试解释这些数字的次数就越少。
2. 可用环境
Gym拥有各种环境,从容易到困难,涉及许多不同种类的数据。查看完整的环境列表。
-
Classic control和toy text:完成小规模任务,大部分来自RL文献。
他们是来帮你开始的。 -
Algorithmic:执行计算,如添加多位数和反转序列。
有人可能会反对这些任务对于计算机来说很容易。挑战在于纯粹从示例中学习这些算法。这些任务具有很好的性质,通过改变序列长度很容易改变难度。 -
Atari:玩经典的Atari游戏。我们已经将Arade学习环境(它对强化学习研究产生了很大的影响)集成在一个易于安装的表单中。
-
2D和3D机器人:在模拟中控制机器人。这些任务使用MuJoCo物理引擎,该引擎专为快速和准确的机器人仿真而设计。其中包括加州大学伯克利分校研究人员(顺便说一句,今年夏天将加入我们)最近的基准测试中的一些环境。MuJoCo是专有软件,但提供免费试用许可证。
2.1 注册表
1 2 3 | 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), ... |
这将为您提供
这些环境ID被视为不透明字符串。为了确保将来进行有效的比较,绝不会以影响性能的方式更改环境,而只能用较新的版本来替换。目前,我们为每个环境添加
将您自己的环境添加到注册表中非常容易,从而使它们可用于
3. 背景:为什么要Gym? (2016年)
强化学习(RL)是机器学习的子领域,涉及
-
RL非常一般化,涵盖了涉及一系列决策的所有问题:例如,控制机器人的电动机使其能够运行和跳跃,制定价格,库存管理等商业决策,或者玩
视频游戏 和棋盘游戏 。 RL甚至可以应用于具有顺序或结构化 输出的监督学习问题。 -
RL算法已开始在许多困难的环境中取得良好的效果。 RL历史悠久,但在深度学习方面取得新进展之前,它需要大量针对特定问题的工程。 DeepMind的Atari结果,Pieter Abbeel小组的BRETT和AlphaGo都使用了深度RL算法,该算法并未对其环境做太多假设,因此可以应用于其他环境。
但是,RL研究也因两个因素而减慢了速度:
-
需要更好的基准。在监督学习中,像ImageNet这样的大型标签数据集推动了进步。在RL中,最接近的等效项是各种各样的环境。但是,现有的RL环境的开放源代码集合种类繁多,并且通常甚至很难设置和使用。
-
问题定义上的细微差异(例如奖励功能或一组动作)会大大改变任务的难度。这个问题使得很难复制已发表的研究成果并比较不同论文的结果。