參考博客: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
****************************************************
【Attention:現在Gym平臺好像不支持在線評估了,可能是評估的人太多= = 】
可以將你的結果提交到在線網站上進行評估,你的結果會被自動評分,并且會產生一個漂亮的界面。【怎么提交的】
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/
附錄
- 申請MuJoCo試用賬號
通過MuJoCo官方鏈接注冊使用即可,目的是安裝mujoco-py,使用普通郵箱可試用30天,一個郵箱在試用期30天內可為3臺機器申請注冊碼。學生郵箱可以使用一年。
mujoco下載頁面:https://www.roboti.us/
如果沒注冊過的郵箱顯示錯誤,可能是這個IP地址注冊過了,可以換個baidu wifi重新申請。