我创建了一个自定义环境,遵循OpenAI Gym框架,其中包含step
、reset
、action
和reward
函数。我想在这个自定义环境上运行OpenAI基线算法。但在此之前,这个环境必须在OpenAI gym上进行注册。我想知道如何在OpenAI gym上注册自定义环境?另外,我需要修改OpenAI基线代码来整合它吗?
我创建了一个自定义环境,遵循OpenAI Gym框架,其中包含step
、reset
、action
和reward
函数。我想在这个自定义环境上运行OpenAI基线算法。但在此之前,这个环境必须在OpenAI gym上进行注册。我想知道如何在OpenAI gym上注册自定义环境?另外,我需要修改OpenAI基线代码来整合它吗?
不需要修改基线存储库。
以下是一个最简例子。假设你有一个名为myenv.py
的文件,其中包含所有所需的函数(step
、reset
等)。环境类的名称为MyEnv
,你想将其添加到classic_control
文件夹中。你需要:
myenv.py
文件放置在gym/gym/envs/classic_control
文件夹中在相同的文件夹中的__init__.py
中添加
from gym.envs.classic_control.myenv import MyEnv
通过添加以下内容在gym/gym/envs/__init__.py
中注册该环境:
gym.envs.register(
id='MyEnv-v0',
entry_point='gym.envs.classic_control:MyEnv',
max_episode_steps=1000,
)
在注册时,您还可以添加`reward_threshold`和`kwargs`(如果您的类需要一些参数)。 您还可以直接在运行脚本(TRPO、PPO或其他)中注册环境,而不是在 `gym/gym/envs/__init__.py` 中进行注册。
编辑
这是一个创建LQR环境的最小示例。import gym
from gym import spaces
from gym.utils import seeding
import numpy as np
class LqrEnv(gym.Env):
def __init__(self, size, init_state, state_bound):
self.init_state = init_state
self.size = size
self.action_space = spaces.Box(low=-state_bound, high=state_bound, shape=(size,))
self.observation_space = spaces.Box(low=-state_bound, high=state_bound, shape=(size,))
self._seed()
def _seed(self, seed=None):
self.np_random, seed = seeding.np_random(seed)
return [seed]
def _step(self,u):
costs = np.sum(u**2) + np.sum(self.state**2)
self.state = np.clip(self.state + u, self.observation_space.low, self.observation_space.high)
return self._get_obs(), -costs, False, {}
def _reset(self):
high = self.init_state*np.ones((self.size,))
self.state = self.np_random.uniform(low=-high, high=high)
self.last_u = None
return self._get_obs()
def _get_obs(self):
return self.state
将from gym.envs.classic_control.lqr_env import LqrEnv
添加到__init__.py
中(同样在classic_control中)。
在您的脚本中创建环境时,请执行以下操作:
gym.envs.register(
id='Lqr-v0',
entry_point='gym.envs.classic_control:LqrEnv',
max_episode_steps=150,
kwargs={'size' : 1, 'init_state' : 10., 'state_bound' : np.inf},
)
env = gym.make('Lqr-v0')
那个问题与gym的版本有关,请尝试升级您的gym环境。
gym.error.Error: Attempted to look up malformed environment ID: b'hvac_Env'. (Currently all IDs must be of the form ^(?:[\w:-]+\/)?([\w:.-]+)-v(\d+)$.)
。 - bbartling