首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OpenAI的健身房中注册自定义环境?

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

Stack Overflow用户
提问于 2018-10-10 02:28:19
回答 3查看 15.3K关注 0票数 11

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-10 20:11:20

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

下面是一个最小的例子。假设您有myenv.py,其中包含所有需要的函数(stepreset等)。类环境的名称是MyEnv,您希望将其添加到classic_control文件夹中。你不得不

gym/gym/envs/classic_control

  • Add中的
  • myenv.py文件放置到__init__.py (位于同一文件夹中)

通过添加以下内容在gym/gym/envs/__init__.pyfrom gym.envs.classic_control.myenv import MyEnv

  • Register环境

经典控制( id='MyEnv-v0',entry_point=‘GAM.envs.Classic_gym.envs.register:MyEnv’,max_episode_steps=1000,)

在注册时,您还可以添加reward_thresholdkwargs (如果您的类带有一些参数)。

您还可以在将要运行的脚本(TRPO、PPO等)中直接注册环境,而不是在gym/gym/envs/__init__.py中进行注册。

编辑

这是创建LQR环境的最小示例。

将下面的代码保存在lqr_env.py中,并将其放在gym的classic_control文件夹中。

代码语言:javascript
复制
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中)。

在脚本中创建环境时,请执行以下操作

代码语言:javascript
复制
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')
票数 14
EN

Stack Overflow用户

发布于 2018-10-10 19:41:24

环境注册过程可以在here上找到。

如果您有更多的问题,请查看this示例自定义环境。

有关详细信息,请参阅this堆栈溢出问题。

票数 2
EN

Stack Overflow用户

发布于 2022-02-21 14:18:08

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52727233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档