强化学习——环境库OpenAI Gym

前言

前段时间各大新闻媒体都在报道SpaceX的马斯克,因为其公司成功发射“猎鹰9号”火箭。马斯克是一个极具传奇色彩的人物,其成就也足以让他名垂青史。但今天我们要讨论的不是马斯克这个人,而是马斯克牵头建立的人工智能非营利组织OpenAI下一个强化学习工具库Gym,它可以被用来开发和比较强化学习算法。

简单的说,gym就是提供了强化学习中与agent交互的environments,gym中的环境都留出了供我们设计算法的相应接口,这为我们节省了不少事。下面就来看看这个gym库里有哪些东西吧~

安装

要求Python版本大于3.5,使用pip可以简单安装。

pip install gym

这种安装方法并没有安装gym中的全部环境,只包括了

  • algorithmic
  • toy_text
  • classic_control

这三种类型的环境,另外还有Atari,Box2d和MuJoCo。按照自己的需要可以按照github上的指导进行安装。

环境(Environments)

下面是一个CarPole的例子,运行下面的代码就可以完成1000步:

import gym
env = gym.make('CartPole-v1')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample()) # take a random action


当我们需要使用别的环境时,只需将第二行代码中的CartPole-v1替换成别的,不知道有哪些可供选择?看看这里的环境列表

观测(Observations)

上面的例子中,我们采取的是随机选取的动作(action),但实际中我们肯定希望更为合理的动作,所以我们希望知道动作作用以后会对环境造成上面影响,即需要一个反馈。环境的step函数正是我们所需要的,它执行以后会返回四个参数:

  • Observations(object):代表您对特定环境的观测值。 例如,来自相机的像素数据,机器人的关节角度和关节速度,或棋盘游戏中的棋盘状态。
  • reward (float):前一次行动所获得的奖励值。其范围在不同的环境中有所不同,但目标总是提高总奖励。
  • done (boolean):一个布尔型数据,表示是否需要reset环境,即是否完成一个episode。比如上一个例子中我们杆是不是偏的太远,玩游戏时是不是丧命等
  • info (dict): 用于调试的诊断信息。 它有时对学习有用(例如,它可能包含环境最后状态变化的原始概率)。 但是,agent的评估不能用这个信息去学习。

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


空间(Spaces)

在上面的CarPole的例子中,我们使用了随机的action,这些随机的action就来自环境的动作空间(action space)。每一个环境都有一个动作空间(action space)和观测空间(observation space)。具体是什么情况可以查看属性action_space和observation_space,至于其含义就要去看代码注释和官网的一些说明啦。

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

参考

Gym: A toolkit for developing and comparing reinforcement learning algorithms


《Reinforcement Learning: An Introduction 第二版》PDF书籍与David Silver课程,欢迎关注我的公众号“野风同学”,回复“RL”即可获取。
一个程序员的自我成长之路,持续分享机器学习基础与应用、LeetCode面试算法和Python基础与应用等技术干货文章,同时也经常推荐高质量软件工具、网站和书籍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章