如何在 OpenAI 的健身房注册自定义环境?

How can I register a custom environment in OpenAI's gym?

我已经根据 OpenAI Gym 框架创建了自定义环境;包含 stepresetactionreward 函数。我的目标是在这个自定义环境上 运行 OpenAI 基线。但在此之前,环境必须在 OpenAI gym 上注册。我想知道如何在 OpenAI gym 上注册自定义环境?另外,我是否应该修改 OpenAI 基线代码以将其合并?

环境注册流程可以参考here.

如果您还有其他问题,请查看 this 示例自定义环境。

请参阅 Whosebug 问题了解更多信息。

您不需要修改 baselines repo。

这是一个最小的例子。假设您有 myenv.py,具有所有需要的功能(stepreset、...)。 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_thresholdkwargs(如果您的 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')

该问题与健身房版本有关,请尝试升级您的健身房环境。