- 深度強化學習算法與實踐:基于PyTorch的實現
- 張校捷編著
- 1476字
- 2022-05-06 17:08:38
3.2.1 Gym環境的安裝和基本接口
OpenAI Gym環境本身基于的是一個通用的類,這個類包含了描述強化學習環境的一系列基本的要素,并且以類方法的形式(函數接口)供用戶調用。Gym環境本身可以很容易通過運行pip install gym命令,或者通過執行以下三步命令行來安裝:
● 首先運行git clone https://github.com/openai/gym。
● 然后運行cd gym命令。
● 最后運行pip install-e。
為了了解這個強化學習環境,首先要知道這個強化學習環境的一系列函數接口以及它們對應的功能。代碼3.3是Gym強化學習環境的類的一個簡單實例(為方便起見,我們并沒有在里面填充具有實際意義的代碼,后續會看到一個填充了代碼的具體實例)。在該代碼中可以看到一系列關鍵的方法。首先是__init__方法,該方法定義了環境的初始化參數,尤其是動作空間self.action_space和狀態(觀測)空間self.observation_space。前者定義的是智能體所有可能的動作集合,后者定義的是智能體所有可能的狀態集合。
代碼3.3 Gym強化學習環境示例。


一般來說,為了統一強化學習環境的相關函數接口,動作空間和狀態空間變量都是空間類的實例。在OpenAI Gym中,有幾類預先定義好的空間類,比如Box類包含一系列以區間范圍形式來描述的空間類,這種類適合用于描述連續的動作空間或者狀態空間,比如智能體的位置和速度;再如,Discrete類包含了一系列以離散變量來描述的空間類,這種類適合描述離散的動作或者狀態空間,比如智能體在多個可能的動作中選擇一個可能的動作。假如需要一個自定義的空間類,我們可以模仿代碼3.3中ExampleSpace類的繼承定義方法,繼承OpenAI Gym中的Space類,并且實現這個類中的兩個方法,其中第一個方法是sample方法,代表從該空間中進行一次采樣,獲得一個具體的動作或者狀態,第二個方法是contains方法,輸入一個動作或者狀態,并且驗證這個動作或者狀態是否有效。
通過實現具體的空間類的代碼,或者復用OpenAI Gym提供給我們的空間代碼,我們可以很容易地給一個強化學習環境定義對應的動作空間和狀態空間。一般來說,在__init__方法中還會定義當前強化學習環境中智能體所處的狀態,并且重置智能體所處的狀態。代碼3.3中的reset方法是重置強化學習環境的方法,其中包含了重置智能體所處的狀態和重置其他決定強化學習環境狀態的一系列動態參數的代碼。一般來說,重置的代碼除了執行重置行為,還會返回強化學習環境的初始狀態,我們用obs變量來代表這個返回的初始狀態。
接下來就是強化學習算法的執行過程,在實際的強化學習算法的執行過程中,智能體可以根據強化學習環境的狀態,通過決策過程來獲取執行的具體動作,有了這個動作之后,需要使用step方法來執行這個動作。往這個算法中傳入智能體的動作,這個方法會返回一個Python元組(Tuple),從代碼3.3中可以看到這個元組具體有四個變量,obs代表強化學習環境的狀態。reward對應智能體在執行動作后獲取的獎勵。done是一個布爾型變量,如果這個變量的值為True,則代表強化學習環境處于終止狀態,繼續往step方法里傳入動作不再具有實際意義;如果這個變量的值為False,則代表智能體可以繼續進行決策,根據當前環境的狀態往step方法傳入動作并獲取對應的獎勵。在算法運行的過程中需要時刻檢驗done變量,如果這個變量為True,就需要調用reset方法來重置強化學習環境。元組的第4個變量info代表強化學習環境的一些附加信息,一般情況下可以設置為空字典,如果有需要,則可以用這個變量記錄一些強化學習環境相關的參數,方便算法和環境的相關調試。
最后,為了顯示整個強化學習環境的狀態,我們需要定義一個render方法,其目的是渲染出一幅圖像(或者其他的表示,如終端上的字符表示)來顯示當前的強化學習環境的狀態。渲染這個函數的意義在于把強化學習環境顯示為人類能夠理解的形式。讀者可以根據具體的強化學習環境自定義特定的顯示方式,如用圖形界面來表示或者直接返回一個RGB的圖像數組等。
- Expert C++
- Cocos2D-X權威指南(第2版)
- Learning RxJava
- Magento 2 Theme Design(Second Edition)
- 實戰Java程序設計
- R語言游戲數據分析與挖掘
- EPLAN實戰設計
- ArcGIS By Example
- 高級語言程序設計(C語言版):基于計算思維能力培養
- R Data Analysis Cookbook(Second Edition)
- 執劍而舞:用代碼創作藝術
- The Professional ScrumMaster’s Handbook
- C++語言程序設計
- Learning iOS Security
- INSTANT JQuery Flot Visual Data Analysis