Как я могу зарегистрировать настраиваемую среду в тренажерном зале OpenAI?

Я создал настраиваемую среду в соответствии с платформой OpenAI Gym; содержащие функции step, reset, action и reward. Я стремлюсь запустить базовые версии OpenAI в этой настраиваемой среде. Но перед этим среда должна быть зарегистрирована в спортзале OpenAI. Я хотел бы знать, как пользовательскую среду можно зарегистрировать в тренажерном зале OpenAI? Кроме того, следует ли мне изменять базовые коды OpenAI, чтобы включить это?


person Mad_Scientist    schedule 09.10.2018    source источник


Ответы (2)


Вам не нужно изменять репозиторий baselines.

Вот минимальный пример. Допустим, у вас есть 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.

Сохраните приведенный ниже код в lqr_env.py и поместите его в папку 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')
person Simon    schedule 10.10.2018
comment
есть ли у вас совет или пример того, как зарегистрировать среду в скрипте ((TRPO, PPO или что-то еще) вместо того, чтобы делать это в) ... - person HenryHub; 06.12.2018
comment
Я пытаюсь выполнить все описанные выше действия, но получаю сообщение об ошибке 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+)$.) - person HenryHub; 06.12.2018
comment
@HenryHub У меня никогда не было твоей ошибки. Я добавил минимальный пример, надеюсь, что это поможет. - person Simon; 06.12.2018
comment
Спасибо, что поделились этим @Simon ... Это сработало. LQR тоже кажется довольно интересным, сможете ли вы когда-нибудь поделиться контактной информацией для совместной работы? В противном случае я могу дать вам свой ... Я пытаюсь использовать этот специальный тренажерный зал для управления клапаном в системе трубопроводов к датчику температуры. У меня есть контактная информация о моем побочном проекте внизу этого сообщения в блоге: medium. ru / getting-reinforcement-learning-into-the-bas - person HenryHub; 06.12.2018
comment
Будет ли это все еще актуальным в 2020 году? Это кажется очень неудобной практикой, поскольку обычно не требуется изменять файлы в системе управления пакетами (pip / conda). - person Stanley F.; 25.03.2020
comment
Хорошо, я вижу, эта проблема была решена чисто чисто уже в 2017 году: stackoverflow.com/a/47132897/579698 - person Stanley F.; 25.03.2020

Процесс регистрации среды можно найти здесь.

Просмотрите этот пример настраиваемой среды, если у вас возникнут другие проблемы.

Обратитесь к этой проблеме переполнения стека для дальнейшая информация.

person Vishma Dias    schedule 10.10.2018