0 專欄介紹
本專欄重點介紹強化學習技術的數(shù)學原理,并且采用Pytorch框架對常見的強化學習算法、案例進行實現(xiàn),幫助讀者理解并快速上手開發(fā)。同時,輔以各種機器學習、數(shù)據(jù)處理技術,擴充人工智能的底層知識。
??詳情:《Pytorch深度強化學習》
1 Gym介紹
強化學習是在潛在的不確定復雜環(huán)境中,訓練一個最優(yōu)決策指導一系列行動實現(xiàn)目標最優(yōu)化的機器學習方法。自從AlphaGo的橫空出世之后,確定了強化學習在人工智能領域的重要地位,越來越多的人加入到強化學習的研究和學習中。
OpenAI Gym
是一個研究和比較強化學習相關算法的開源工具包,包含了許多經(jīng)典的仿真環(huán)境(各種游戲),兼容常見的數(shù)值運算庫,使用戶無需過多了解游戲的內(nèi)部實現(xiàn),通過簡單地調(diào)用就可以用來測試和仿真。OpenAI Gym
由以下兩部分組成:
-
Gym
開源庫:測試仿真環(huán)境,這些環(huán)境有一個公共的接口且允許用戶設計通用的算法 -
OpenAI Gym
服務:提供一個站點和API,允許用戶對他們的測試結果進行比較
2 Gym安裝
gym
中從簡單到復雜,包含了許多經(jīng)典的仿真環(huán)境:
- 入門級:經(jīng)典控制和文字游戲
- 雅達利游戲:是雅達利游戲公司出品的小游戲合集,比入門游戲難度更高
-
2D/3D的機器人:機器人仿真環(huán)境,需要利用第三方的物理引擎如
MuJoCo
。
建議在虛擬環(huán)境中安裝,虛擬環(huán)境相關知識請看:Anaconda安裝與Python虛擬環(huán)境配置保姆級圖文教程(附速查字典)
-
激活虛擬環(huán)境
conda activate pytorch
-
安裝
gym
相關庫# 安裝基本gym庫,只含有入門級環(huán)境 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gym # 安裝Box2D環(huán)境支持組件 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gym[box2d]
-
安裝
gym
雅達利環(huán)境庫pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gym[atari] pip install -i https://pypi.tuna.tsinghua.edu.cn/simple autorom AutoROM --accept-license
需要注意,這里執(zhí)行
AutoROM --accept-license
時可能較慢,是因為要進入外網(wǎng)下載游戲包,建議到atarimania.com直接下載Roms.rar
并移動到路徑~\Anaconda\envs\pytorch\Lib\site-packages\AutoROM\roms
中,顯示AutoROM will download the Atari 2600 ROMs. They will be installed to: ~\Anaconda\envs\pytorch\Lib\site-packages\AutoROM\roms Existing ROMs will be overwritten. Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\adventure.bin Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\air_raid.bin Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\alien.bin Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\amidar.bin Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\assault.bin ... Done!
說明安裝完成
-
測試環(huán)境
import gym env = gym.make('Tennis-v4', render_mode="human") print("Observation Space: ", env.observation_space) print("Action Space ", env.action_space) obs = env.reset() for i in range(1000): env.render() action = env.action_space.sample() obs, reward, done, info, _ = env.step(action) env.close() print(gym.envs.registry.keys())
3 基本指令
gym
中最核心的接口就是env
環(huán)境類,智能體與環(huán)境的交互如圖所示,這就是強化學習的基本流程:在每個時間點上,智能體選擇一個動作(action),環(huán)境返回上一次action的觀測(Observation)和獎勵(Reward)
常用指令如下:
3.1 make()
作用:生成環(huán)境對象
'''
* @breif: 生成環(huán)境對象
* @param[in]: id -> 啟用環(huán)境的名稱
* @param[in]: render_mode -> 渲染模式
* @retval: 環(huán)境對象
'''
env = gym.make(id:str, render_mode:str)
通過make()創(chuàng)建完環(huán)境對象后,可以查看環(huán)境的屬性和當前狀態(tài)
env = gym.make('Tennis-v4', render_mode="human")
print('觀測空間:', env.observation_space)
print('動作空間:', env.action_space)
print('動作數(shù):', env.action_space.n)
>>> 觀測空間: Box(0, 255, (210, 160, 3), uint8)
>>> 動作空間: Discrete(18)
>>> 動作數(shù): 18
在gym
的仿真環(huán)境中,有運動空間action_space
和觀測空間observation_space
兩個Space類型接口,用于描述有效的運動和觀測的格式和范圍
渲染模式支持:
human
:在顯示器或終端上渲染rgb_array
:返回像素圖像的RGB陣列作為返回值ansi
:將文本作為返回值返回
3.2 reset()
作用:重置環(huán)境的狀態(tài),返回初始觀測狀態(tài)
'''
* @breif: 重置環(huán)境,回到初始狀態(tài)
* @param[in]: seed -> 隨機種子
* @retval: 環(huán)境初始觀測狀態(tài)
'''
state = env.reset(seed=None)
查看reset()
的狀態(tài)信息
state = env.reset()
print("初始狀態(tài):", state)
print("當前狀態(tài):", env.state)
>>> 初始狀態(tài): (array([ 0.03745903, -0.02521806, -0.01444992, -0.01588714], dtype=float32), {})
>>> 當前狀態(tài): [ 0.03745903 -0.02521806 -0.01444992 -0.01588714]
在仿真開始前必須調(diào)用reset()
以初始化環(huán)境。 seed可以指定環(huán)境的隨機數(shù)種子,如果想要訓練的再現(xiàn)性,或者想要根據(jù)不同的環(huán)境使用不同的隨機數(shù)種子,可以使用該參數(shù)
3.3 step()
作用:單步執(zhí)行環(huán)境動力學過程
'''
* @breif: 單步執(zhí)行環(huán)境動力學過程
* @param[in]: 動作
* @retval: 五元組(當前狀態(tài), 獎勵, 是否結束, 額外限制, 日志)
'''
state, reward, done, truncated, info = env.step(action)
查看五元組
for i in range(5):
action = env.action_space.sample()
state, reward, done, truncated, info = env.step(action)
print('動作:', action, '當前狀態(tài):', state, '獎勵:', reward, '是否結束:', done, '額外限制:', truncated, '日志:', info)
>>> 動作: 1 當前狀態(tài): [-0.01200642 0.18693487 0.02998236 -0.23828246] 獎勵: 1.0 是否結束: False 額外限制: False 日志: {}
>>> 動作: 1 當前狀態(tài): [-0.00826773 0.38161597 0.02521671 -0.5213593 ] 獎勵: 1.0 是否結束: False 額外限制: False 日志: {}
>>> 動作: 0 當前狀態(tài): [-0.00063541 0.18614829 0.01478953 -0.22083813] 獎勵: 1.0 是否結束: False 額外限制: False 日志: {}
>>> 動作: 0 當前狀態(tài): [ 0.00308756 -0.00918191 0.01037276 0.07647308] 獎勵: 1.0 是否結束: False 額外限制: False 日志: {}
>>> 動作: 0 當前狀態(tài): [ 0.00290392 -0.20445101 0.01190223 0.3724105 ] 獎勵: 1.0 是否結束: False 額外限制: False 日志: {}
具體而言,五元組的含義如下:
- 狀態(tài)
state
:執(zhí)行當前動作后環(huán)境轉(zhuǎn)移到的狀態(tài),例如從相機獲取的像素點,機器人各個關節(jié)的角度或棋盤游戲當前的狀態(tài)等;- 獎勵
reward
: 執(zhí)行當前動作后智能體獲得的獎勵,不同環(huán)境中獎勵值變化范圍也不相同,但強化學習的目標就是使得總獎勵值最大;- 是否完成
done
:表示是否需要將環(huán)境重置env.reset()
。大多數(shù)情況下,當done == true
時就表明當前幕結束,例如當機器人摔倒或者掉出臺面,就應當及時終止;- 額外限制
truncated
:表示是否滿足額外的截斷條件,通常是一個時間限制,但也可用于指示代理物理上超出界限,可用于在達到終端狀態(tài)之前提前結束該幕- 信息
info
: 針對仿真調(diào)試過程的診斷信息
此外env.sample_space.sample()
表示對動作空間進行隨機采樣,隨機采樣是gym
內(nèi)嵌的baseline策略,強化學習算法中的策略至少要比這個baseline效果好
3.4 close()
作用:關閉環(huán)境
4 常見問題
-
ImportError: cannot import name 'NotRequired' from 'typing_extensions'
解決方案:終端運行文章來源:http://www.zghlxwxcb.cn/news/detail-448663.html
pip install typing-extensions --upgrade
參考資料
- OpenAI Gym官方文檔
?? 更多精彩專欄:文章來源地址http://www.zghlxwxcb.cn/news/detail-448663.html
- 《ROS從入門到精通》
- 《Pytorch深度學習實戰(zhàn)》
- 《機器學習強基計劃》
- 《運動規(guī)劃實戰(zhàn)精講》
- …
到了這里,關于Pytorch深度強化學習:Gym安裝與環(huán)境搭建教程(附基本指令表)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!