前言
前段时间各大新闻媒体都在报道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基础与应用等技术干货文章,同时也经常推荐高质量软件工具、网站和书籍。