reinforcement-learning - 如何在OpenAI的体育馆中注册自定义环境?

标签 reinforcement-learning openai-gym

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

最佳答案

您不需要修改基准存储库。

这是一个最小的示例。假设您拥有myenv.py,具有所有必需的功能(stepreset,...)。类环境的名称是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(如果您的类带有一些参数)。
    您也可以在将要运行的脚本(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')
    

    关于reinforcement-learning - 如何在OpenAI的体育馆中注册自定义环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52727233/

    相关文章:

    tensorflow:为什么collect_nd是可区分的?

    python - 如何在稳定基线 3 中获取 DQN 中的 Q 值?

    machine-learning - 在 PDF 文本挖掘中使用 AI/ML

    python - 尽管出现以下错误,我如何安装gym[box2d]?

    python - Matplotlib 绘制比例三角形

    python - 多智能体健身房环境中的随机智能体

    reinforcement-learning - 使用新 Action /扩展 Action 集强化学习

    machine-learning - 有关使用神经网络进行 Q-Learning 的问题

    python - mujoco_py.MjModel(<filepath>) 在哪里定义?

    openai-gym - 有没有一种方法可以实现 OpenAI 的环境,其中每一步的 Action 空间都会发生变化?