强化学习Gym入门

Getting Started with Gym

Gym 是一个用于开发和比较强化学习算法的工具包。它不假设您的代理的结构,并且与任何数值计算库兼容,例如 TensorFlow 或 Theano。

该体育馆库的测试问题收集-环境-你可以用它来计算出你的强化学习算法。这些环境具有共享接口,允许您编写通用算法。

安装

首先,您需要安装 Python 3.5+。只需gym使用pip以下方法安装:

pip install gym

一切顺利!

从源头构建
如果您愿意,也可以gym直接克隆Git 存储库。这在您修改 Gym 本身或添加环境时特别有用。下载并安装使用:

git clone https://github.com/openai/gym
cd gym
pip install -e .

您可以稍后运行pip install -e .[all]以执行包含所有环境的完整安装。这需要安装更多涉及的依赖项,包括cmake最新pip版本。

环境

这是一个让某些东西运行的最低限度的例子。这将运行CartPole-v01000 个时间步长的环境实例,在每一步渲染环境。您应该会看到一个弹出窗口,呈现经典的推车杆问题:

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()

它应该是这样的:

通常,我们会在推车杆离开屏幕之前结束模拟。稍后再谈。现在,请忽略有关调用的警告,step()即使此环境已经返回done = True.

如果您想查看其他一些运行环境,请尝试将CartPole-v0上面的内容替换为MountainCar-v0, MsPacman-v0(需要Atari 依赖项)或Hopper-v1(需要MuJoCo依赖项)。环境都来自Env基类。

请注意,如果您缺少任何依赖项,您应该会收到一条有用的错误消息,告诉您缺少什么。(如果某个依赖项在没有明确的修复说明的情况下给您带来麻烦,请告诉我们。)安装缺少的依赖项通常非常简单。您还需要一个MuJoCo许可证的Hopper-v1。

观察 Observations

如果我们想做得比在每一步都采取随机行动更好,那么实际上知道我们的行动对环境做了什么可能会很好。

环境step函数返回的正是我们需要的。实际上,step返回四个值。这些是:

observation( object ):一个特定于环境的对象,代表您对环境的观察。例如,来自相机的像素数据、机器人的关节角度和关节速度,或棋盘游戏中的棋盘状态。
reward( float ): 前一个动作获得的奖励量。规模因环境而异,但目标始终是增加您的总回报。
done( boolean ): 是否是时候reset再次进入环境了。大多数(但不是全部)任务被划分为明确定义的剧集,并且done正在True表示剧集已终止。(例如,也许杆子倾斜得太远,或者你失去了你的上一世。)
info( dict ):对调试有用的诊断信息。它有时对学习很有用(例如,它可能包含环境最后状态变化背后的原始概率)。但是,您的代理的官方评估不允许将此用于学习。
这只是经典的“代理-环境循环”的一个实现。每个时间步长,代理选择一个action,环境返回一个observation和一个reward。

该过程通过调用 开始reset(),它返回一个初始observation. 因此,编写先前代码的更正确方法是尊重done标志:

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()

这应该提供如下所示的视频和输出。您应该能够看到重置发生的位置。

[-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]
集成品在 14 个时间步长后
[-0.02786724 0.00361763 -0.03938967 -0.01611184]
[-0.02779488 -0.19091794 -0.03971191 0.263867040]
-0.02779488 -0.03971191 0.263860404040404040404040407

空间

在上面的例子中,我们一直在从环境的动作空间中采样随机动作。但这些行为究竟是什么?每个环境都带有一个action_space和observation_space。这些属性是 type Space,它们描述了有效操作和观察的格式:

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

该Discrete空间允许非负数的固定范围内,所以在这种情况下,有效的actions为0或1的Box空间表示n维框,以便有效observations将是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是最常见的Spaces。您可以从 a 中取样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

因为CartPole-v0其中一个动作向左施力,其中一个动作向右施力。(你能找出哪个是哪个吗?)

幸运的是,您的学习算法越好,您自己尝试解释这些数字的次数就越少。

可用环境

Gym 提供了一套多样化的环境,从简单到困难,涉及许多不同类型的数据。查看完整的环境列表以获得鸟瞰图。

经典控件和玩具文本:完成小规模任务,主要来自 RL 文献。他们是来帮助您入门的。
算法:执行计算,例如添加多位数字和反转序列。有人可能会反对这些任务对计算机来说很容易。挑战在于纯粹从示例中学习这些算法。这些任务有一个很好的特性,即通过改变序列长度很容易改变难度。
Atari:玩经典的 Atari 游戏。我们以易于安装的形式集成了Arcade 学习环境(它对强化学习研究产生了重大影响)。
2D 和 3D 机器人:在模拟中控制机器人。这些任务使用MuJoCo物理引擎,该引擎专为快速准确的机器人模拟而设计。包括来自加州大学伯克利分校研究人员(他们将在今年夏天偶然加入我们)的最新基准测试中的一些环境。MuJoCo 是专有软件,但提供免费试用许可证。
注册表
gym的主要目的是提供大量环境,这些环境公开一个公共接口并进行版本控制以允许进行比较。要列出安装中可用的环境,只需询问gym.envs.registry:

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)在 9x9 棋盘上定义围棋游戏。

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

将您自己的环境添加到注册表中非常容易,从而使它们可用于gym.make():register()在加载时仅使用它们。

背景:为什么是Gym?(2016)

强化学习 (RL) 是机器学习的子领域,涉及决策制定和运动控制。它研究代理如何学习如何在复杂、不确定的环境中实现目标。令人兴奋的原因有两个:

强化学习非常笼统,涵盖了所有涉及做出一系列决策的问题:例如,控制机器人的电机使其能够跑和跳,做出定价和库存管理等商业决策,或者玩电子游戏和棋盘游戏。RL 甚至可以应用于具有顺序 或 结构化输出的监督学习问题。
RL 算法已经开始在许多困难的环境中取得良好的效果。RL 历史悠久,但直到最近深度学习取得进展,它才需要大量针对特定问题的工程。DeepMind的雅达利结果,BRETT从彼得Abbeel的组,AlphaGo全部采用深RL算法,这并没有使他们的环境,太多的假设,从而可以在其他设置中应用。
然而,RL 研究也因两个因素而放缓:

需要更好的基准。在监督学习中,进步是由像ImageNet这样的大型标记数据集推动的。在 RL 中,最接近的等价物是大量多样的环境集合。然而,现有的 RL 环境开源集合并没有足够的多样性,而且它们往往甚至难以设置和使用。
出版物中使用的环境缺乏标准化。问题定义中的细微差别,例如奖励函数或一组动作,可以极大地改变任务的难度。这个问题使得重现已发表的研究和比较不同论文的结果变得困难。
Gym 试图解决这两个问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AiFool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值