如何在 OpenAI 的健身房注册自定义环境?
How can I register a custom environment in OpenAI's gym?
我已经根据 OpenAI Gym 框架创建了自定义环境;包含 step
、reset
、action
和 reward
函数。我的目标是在这个自定义环境上 运行 OpenAI 基线。但在此之前,环境必须在 OpenAI gym 上注册。我想知道如何在 OpenAI gym 上注册自定义环境?另外,我是否应该修改 OpenAI 基线代码以将其合并?
环境注册流程可以参考here.
如果您还有其他问题,请查看 this 示例自定义环境。
请参阅 Whosebug 问题了解更多信息。
您不需要修改 baselines repo。
这是一个最小的例子。假设您有 myenv.py
,具有所有需要的功能(step
、reset
、...)。 class 环境的名称是 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
(如果您的 class 需要一些参数)。
您也可以直接在脚本中注册环境 运行(TRPO、PPO 或其他),而不是在 gym/gym/envs/__init__.py
.
中注册
编辑
这是创建 LQR 环境的最小示例。
将下面的代码保存在lqr_env.py
中,并将其放入gym的classic_control文件夹中。
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')
该问题与健身房版本有关,请尝试升级您的健身房环境。
我已经根据 OpenAI Gym 框架创建了自定义环境;包含 step
、reset
、action
和 reward
函数。我的目标是在这个自定义环境上 运行 OpenAI 基线。但在此之前,环境必须在 OpenAI gym 上注册。我想知道如何在 OpenAI gym 上注册自定义环境?另外,我是否应该修改 OpenAI 基线代码以将其合并?
环境注册流程可以参考here.
如果您还有其他问题,请查看 this 示例自定义环境。
请参阅
您不需要修改 baselines repo。
这是一个最小的例子。假设您有 myenv.py
,具有所有需要的功能(step
、reset
、...)。 class 环境的名称是 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
(如果您的 class 需要一些参数)。
您也可以直接在脚本中注册环境 运行(TRPO、PPO 或其他),而不是在 gym/gym/envs/__init__.py
.
编辑
这是创建 LQR 环境的最小示例。
将下面的代码保存在lqr_env.py
中,并将其放入gym的classic_control文件夹中。
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')
该问题与健身房版本有关,请尝试升级您的健身房环境。