在openai/gym中使用自己的環境

  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, )) # 狀態空間
		# 其他成員
	
	def reset(self):
		...
		obs = self.get_observation()
		return obs
	
	def step(self):
		...
		reward = self.get_reward()
		done = self.get_done()
		obs = self.get_observation()
		info = {} # 用於記錄訓練過程中的環境信息,便於觀察訓練狀態
		return obs, reward, done, info
	
	def get_observation(self):
		...
		return obs
	
	def get_reward(self):
		...
		return reward

	def get_done(self):
		...
		return done

  定義好自己的環境後,必須將其註冊到gym中去,才能使用。下面介紹如何註冊環境:
  首先建立一個文件夾myenv,將定義好的環境myenv.py放入其中,並在該目錄下再新建一個文件__init__.py,文件內容如下:

from gym.envs.registration import register

register(
	id = 'env_name-v0' # 環境名,版本號v0必須有
	entry_point = 'myenv.myenv:MyEnv' # 文件夾名.文件名:類名
	# 根據需要定義其他參數
)

上一步完成後,有兩種方法完成環境的註冊:
方法一:(較爲方便,推薦)
在定義環境的py文件中加上:

import myenv # 上一步的文件夾名

例如:

import gym
import myenv

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/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 = 'myenv.myenv:MyEnv' # 文件夾名.文件名:類名
	# 根據需要定義其他參數
)

至此,就完成了環境的註冊,就可以使用自定義的環境了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章