在openai gym中使用自己的環境

2021-09-27 07:22:39 字數 2860 閱讀 6449

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...