官术网_书友最值得收藏!

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強化學習環境類的實現。

主站蜘蛛池模板: 台中县| 丰台区| 枣强县| 宜宾县| 固安县| 芮城县| 怀宁县| 峨眉山市| 绵阳市| 长葛市| 虞城县| 汝阳县| 来安县| 秦皇岛市| 遵化市| 当雄县| 佳木斯市| 双鸭山市| 新源县| 甘肃省| 县级市| 游戏| 朝阳县| 西青区| 大港区| 安阳县| 紫云| 新郑市| 海淀区| 连城县| 固原市| 谷城县| 峨山| 石首市| 峨山| 沙河市| 平乐县| 三原县| 肥乡县| 济南市| 迭部县|