gym是openai推出的強化學習框架,它提供了豐富的介面給開發者使用,再結合其開源的常見演算法實現openai/baselines,能夠使開發者方便地將各種強化學習演算法應用到自己的需求中。
環境是強化學習演算法中的重要一環,環境如何對agent的動作進行反饋,即state和reward的更新,直接影響了agent後續的動作。因此,針對不同的需求,我們需要定義自己的環境。下面就主要介紹如何在gym中使用自己的環境。
首先需要定義自己的環境myenv.py,其**框架如下:
from gym import spaces, core
# core.env是gym的環境基類,自定義的環境就是根據自己的需要重寫其中的方法;
# 必須要重寫的方法有:
# __init__():建構函式
# reset():初始化環境
# step():環境動作,即環境對agent的反饋
# render():如果要進行視覺化則實現
class
myenv
(core.env)
:def
__init__
(self)
: self.action_space = spaces.box(low=-1
, high=
1, shape=(1
,))# 動作空間
self.observation_space = spaces.box(low=-1
, high=
1, shape=(1
,))# 狀態空間
# 其他成員
defreset
(self):.
..obs = self.get_observation(
)return obs
defstep
(self, action):.
..reward = self._get_reward(
) done = self._get_done(
) obs = self._get_observation(action)
info =
# 用於記錄訓練過程中的環境資訊,便於觀察訓練狀態
return obs, reward, done, info
# 根據需要設計相關輔助函式
def_get_observation
(self, action):.
..return obs
def_get_reward
(self):.
..return reward
def_get_done
(self):.
..return done
定義好自己的環境後,必須將其註冊到gym中去,才能使用。下面介紹如何註冊環境:
首先建立乙個資料夾env,將定義好的環境myenv.py放入其中,並在該目錄下再新建乙個檔案__init__.py,檔案內容如下:
from gym.envs.registration import register
register(id=
'env_name-v0'
# 環境名,版本號v0必須有
entry_point =
'env.myenv:myenv'
# 資料夾名.檔名:類名
# 根據需要定義其他引數
)
注意,entry_point的路徑一定要在sys.path中,以便你在註冊環境時,gym能夠找到,如果該路徑不在系統路徑中,則會報錯。
import env # 上一步的資料夾名
例如:
import gym
import env
env = gym.make(
'env_name-v0'
)# 引數為環境的id
obs = env.reset(
)for i in
range
(1000):
action = agent(obs)
obs, reward, done, info = env.step(action)
if done:
break
若使用openai/baselines,即在baselines/common/cmd_util.py檔案中加上這一句。
若這一步之後,在新增環境時找不到相應的包,那就是因為gym找不到entry_point的路徑,則需要在新增環境的py檔案中:
import sys
'./'
)# 此時假設此py檔案和env資料夾在同一目錄下
方法二:
進入gym/envs在本地的安裝目錄,比如我的是/usr/local/miniconda3/lib/python3.6/site-packages/gym/gym/envs,在該目錄下找乙個與你的環境比較相似的環境型別(其實隨便選乙個就可以),比如classic_control,將myenv.py放在該目錄下,並在該目錄中的__init__.py中加上一句:
from gym.envs.classic_control.myenv import myenv
完成後,返回gym/envs目錄,在該目錄的__init__.py中註冊環境:
register(id=
'env_name-v0'
# 環境名,版本號v0必須有
entry_point =
'env.myenv:myenv'
# 資料夾名.檔名:類名
# 根據需要定義其他引數
)
至此,就完成了環境的註冊,就可以使用自定義的環境了!
官方的環境註冊方法:
在中使用SQLDMO
曾幾何時,夥伴們為的公升級傷透了腦筋.往往程式的公升級趕不上資料庫的公升級 版本控制的好,這也許不是什麼問題,但對於很大一部分中國公司來說這是無法避免的 而有些n久以前的資料庫要使用新程式的時候,資料庫的公升級簡直就是無從下手.所以對比資料庫公升級的緊要性就逐漸的凸現出來.對於表和字段的公升級按道理...
在Openfire中使用自己的資料表之修改系統屬性
通過修改openfire安裝目錄的conf openfire目錄下是openfire.xml檔案可以使用我們自定義的認證整合以及使用者資料整合。其實仔細觀察之後,在修改完配置檔案再次啟動openfire伺服器的時候,加的那些配置自己消失,登入openfire後台管理控制台,在 伺服器管理器 系統屬性...
在ClanLib中使用blend func
本文是對blend func完全沒有認識的人寫的,就好象一天前的我一樣。廢話我就留到後面才說吧。在clanlib庫中的cl su ce與cl sprite中都會有 這個函式 void set blend func cl blendfunc src,cl blendfunc dest 其cl blen...