強化學習——環境庫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基礎與應用等技術乾貨文章,同時也經常推薦高質量軟件工具、網站和書籍。

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