迷雾探险11 | Gym简介

2019-02-15  本文已影响19人  臻甄

参考博客: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)

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

此外,还有「块空间」和「离散空间」

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

image.png

目的
在大多数环境中,你的目标是用最少的步数达到性能的要求(有一个阈值)。而在一些特别复杂的环境中,阈值是什么还不清楚,因此,你的目标是最优化性能。

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/

上一篇下一篇

猜你喜欢

热点阅读