Я создал настраиваемую среду в соответствии с платформой OpenAI Gym; содержащие функции step
, reset
, action
и reward
. Я стремлюсь запустить базовые версии OpenAI в этой настраиваемой среде. Но перед этим среда должна быть зарегистрирована в спортзале OpenAI. Я хотел бы знать, как пользовательскую среду можно зарегистрировать в тренажерном зале OpenAI? Кроме того, следует ли мне изменять базовые коды OpenAI, чтобы включить это?
Как я могу зарегистрировать настраиваемую среду в тренажерном зале OpenAI?
Ответы (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')
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