迷雾探险11 | Gym简介
参考博客:https://www.cnblogs.com/mandalalala/p/6227201.html
参考博客:http://darren1231.pixnet.net/blog/post/333261294-open-ai--gym-%E5%B9%B3%E5%8F%B0%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95
Gym Upload的example:https://www.programcreek.com/python/example/98664/gym.upload
参考文章:https://chenrudan.github.io/blog/2016/09/04/cartpole.html
官方文档:https://gym.openai.com/docs。
GYM Beta版本http://gym.openai.com/read-only.html
1 Openai gym 是什么
openai gym 是一个RL算法的测试床(testbed)
- gym开源库:包含一个测试问题集,每个问题成为环境(environment),可以用于自己的RL算法开发。这些环境有共享的接口,允许用户设计通用的算法。其包含了deep mind 使用的Atari游戏测试床。
- Openai gym服务:提供一个站点和api允许用户对他们训练的算法进行性能比较。
2 Openai gym是如何工作的
建议阅读博客https://zhuanlan.zhihu.com/p/26985029,简单讲解了内部原理,并举例说明。
增强学习中有2个基本概念
(1)环境(environment),称为外部世界。
(2)智能体agent(写的算法)。
agent发送action至environment,environment返回观察和回报。
所以gym有几个概念。
2.1 环境Env
gym的核心接口是environment。提供以下几个核心方法:
(1)reset(self)
:重置环境的状态,回到初始环境,方便开始下一次训练。
(2)step(self, action)
:推进一个时间步长,返回四个值:
① observation(object): 对环境的一次观察,比如摄像头里的一个像素,机器人的关节角和关节速度,或者木板游戏里的木板状态;
② reward(float):上次动作获得的奖励;
③ done(boolean):代表是否需要重置环境,大多数任务都要分成几个不同的训练回合结果,done代表子回合是否结束. (比较杆子翻得太远,或者主角死了);
④ info(dict):用于调试的诊段信息. 比如用来了解上一次状态改变的概率。但在正式的评估时不允许使用这样的知识。
(3)render(self,mode=’human’,close=False)
:重绘环境的一帧。默认模式一般比较友好,如弹出一个窗口。
2.2 空间Space
在代码中打印空间值,可以看到我们在环境的「动作空间」选择的动作,和「观察空间」观察到的值。
import gym
env = gym.make('CartPole-v0')
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)
此外,还有「块空间」和「离散空间」
- 离散空间:代表固定区间区间的正整数,为0或者1
- 块空间:表示N维盒子,有效的observations是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])
2.3 结果记录Monitor
Gym可以记录算法的性能数据,和学习过程的视频。monitor支持将一个环境的多个案例写入一个单独的目录。比如下面这个例子,运行前记得确保电脑安装了ffmpeg
模块,以MacOS为例brew install ffmpeg
,这样才能录制视频。
import gym
from gym import wrappers
env = gym.make('CartPole-v0')
env = wrappers.Monitor(env, directory='./tmp/cartpole-experiment-1', force=True) # force=True指的是每次执行前都清空输出目录
# 也可以设置一些参数
# env = Monitor(directory='./tmp/cartpole-experiment-1',video_callable=False, write_upon_reset=True)(env)
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.env.close() # 防止出现很烦人的报错
gym\monitoring\tests里面有测试的案例,参考test_monitor.py写代码
也可以把你的结果加载到OpenAI Gym,api_key怎么获取:
import gym
gym.upload('/tmp/cartpole-experiment-1', api_key=' sk_FYp0Gc1dQU69epifs7ZE6w')
输出应该是这样
[2017-05-11 00:11:13,592] [CartPole-v0] Uploading 20 episodes of > training data
[2017-05-11 00:11:21,614] [CartPole-v0] Uploading videos of 3 training episodes (8459 bytes)
[2017-05-11 00:11:33,060] [CartPole-v0] Creating evaluation object from /tmp/cartpole-experiment-1 with learning curve and training video
[2017-05-11 00:11:33,669]
****************************************************
You successfully uploaded your evaluation on CartPole-v0 to
OpenAI Gym! You can find it at:
https://gym.openai.com/evaluations/eval_mVPNxudETYOY9eCCwwWzw
****************************************************
可以将你的结果提交到在线网站上进行评估,你的结果会被自动评分,并且会产生一个漂亮的界面。【怎么提交的】
API key怎么获取
在官网注册账号后,可以在个人页面上看到自己的API_Key
目的
在大多数环境中,你的目标是用最少的步数达到性能的要求(有一个阈值)。而在一些特别复杂的环境中,阈值是什么还不清楚,因此,你的目标是最优化性能。
2.4 估值Gist
每次上传都会导致OpenAI Gym的服务器上的评估对象,然后,自己应该创建一个Gist,显示如何重现自己算法的结果,评估页面将具有如下您可以通过Gist网址的框:或者,也可以通过传递写入参数在上传时提供Gist:
gym.upload('/tmp/cartpole-experiment-1', writeup='https://gist.github.com/gdb/b6365e79be6052e7531e7ba6ea8caf23', api_key='sk_Gmo4wYBhRoeJ9shfSS8hvg')
也可以跟着莫烦大神来:https://morvanzhou.github.io/tutorials/machine-learning/ML-practice/RL-build-arm-from-scratch1/