- 深度強化學習算法與實踐:基于PyTorch的實現
- 張校捷編著
- 1281字
- 2022-05-06 17:08:40
3.2.5 自定義Gym強化學習環境
在某些情況下可能需要自定義強化學習環境,這時可以遵循Gym的類和函數接口規范來自定義強化學習環境,方便后續的算法調用。下面以一個具體的例子來介紹如何自定義Gym強化學習環境。
這里把3.1.3節中介紹的井字棋作為自定義Gym強化學習環境的具體例子,這個例子放在本書的代碼Ex_3_7文件夾中。首先明確一下自定義Gym強化學習環境的工程文件。代碼3.4中列舉了自定義Gym強化學習環境中需要的一些文件和目錄,下面簡單介紹這些文件的具體意義。首先是README.md,這是一個Markdown格式的說明文件,主要用來描述強化學習環境的一些特性,包括強化學習環境具體的任務、觀測值、智能體的狀態、獎勵相關的信息等。另外,可能還包含強化學習環境如何安裝的信息(比如如何安裝強化學習環境有的外部依賴庫等)??傊?,所有關于自定義的強化學習環境的說明信息都應該放在這個文件里。
接下來是setup.py,這是一個Python安裝文件,包含當前強化學習環境的所有安裝信息,具體如代碼3.5所示。實際上只需要用到Python自帶的setuptools庫里面的setup函數。在這個函數里,需要傳入強化學習環境的名字、版本,以及安裝包的相關信息,并且定義當前包的依賴,即Gym強化學習環境。
代碼3.5 自定義Gym強化學習環境的文件目錄。
然后是gym_tictactoe目錄下的__init__.py文件,在這個文件中,我們會把當前自定義的強化學習環境注冊到Gym強化學習環境集合中,這樣就能使用Gym相關的函數接口來調用這個強化學習環境。具體示例如代碼3.6所示,從這個代碼中可以看到,需要定義當前強化學習的id,這里設置為'tictactore-v0',而且需要指定代碼的具體入口,也就是強化學習環境中相關類的實現。根據Python的PEP-328里面的規則,以gym_tictactoe目錄為根目錄,從這個目錄出發,可以得到具體實現的文件應該在gym_tictactoe.envs路徑下,而且當前強化學習環境代碼的類名應該為TicTacToe。有了對應的強化學習id和具體的實現,就能通過前面類似的代碼來調用這個自定義的強化學習環境,具體可以參考本書附贈的文件ex_3_8.py。
代碼3.6 自定義Gym強化學習環境中setup.py代碼示例。
有了前面文件的鋪墊,接下來就是具體的強化學習類的實現。我們把主要的實現放在代碼3.7中,細心的讀者觀察可以發現,這段代碼其實和代碼3.3大同小異,只是這里為了適配Gym的相應接口做了一定的修改,更加具體的細節可以查看Ex_3_7中的相關代碼。
代碼3.7 自定義Gym強化學習環境的注冊代碼示例。
從代碼3.7中可以看到,實際的強化學習環境實現需要幾個方法,__init__方法用于初始化環境的一些內置屬性,比如action_space和observation_space,這兩個變量在前面已介紹過,這里不再贅述;reset方法用于重置強化學習環境,把環境的狀態和一些變量置于初始的狀態;step方法通過輸入一個動作來執行一個決策,并且改變對應的環境狀態,同時獲取對應的獎勵;render方法則負責渲染這個環境,讓這個環境的描述能被人們理解。如果讀者需要自定義一個強化學習環境,只需要考慮這四個方法如何實現(當然實現過程中可能需要一系列復雜的中間函數),即可完成強化學習的定義。
在定義了這個強化學習環境之后,可以在setup.py所在的目錄下運行這個命令:python setup.py install,這樣就能在gym環境中安裝強化學習環境,具體的使用方法和前面其他的Gym環境類似,有興趣的讀者可以參考ex_3_8.py了解如何使用這個自定義的強化學習環境。
代碼3.8 自定義Gym強化學習環境類的實現。
- Visual C++程序設計學習筆記
- Mastering JavaScript Object-Oriented Programming
- Visual C++串口通信開發入門與編程實踐
- Effective C#:改善C#代碼的50個有效方法(原書第3版)
- iOS開發實戰:從零基礎到App Store上架
- Mastering PHP Design Patterns
- Learning Hunk
- Gradle for Android
- Getting Started with Hazelcast(Second Edition)
- Python深度學習:模型、方法與實現
- Getting Started with Nano Server
- Node.js 12實戰
- Bootstrap for Rails
- Mastering Python
- 打造流暢的Android App