Пользовательские среды для Gym Error: невозможно перерегистрировать идентификатор - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу создать собственную среду Gym. Я выполнил шаги, описанные здесь: https://github.com/openai/gym/blob/master/docs/creating-environments.md. Основываясь на их предложении, я создал среду (ссылка: https://drive.google.com/open?id=1RmcSBZYKCARaNsdlOsACrk9ls8snqxlj). После установки и запуска среда создастся и отобразится распечатка «Created, Step». Но когда я снова нажал кнопку «Выполнить» (spyder ide: python3 .7), он показал мне «Ошибка: невозможно перерегистрировать id: foo-v0». Проблема временно исчезнет, ​​если я нажму кнопку «Перезагрузить ядро». Но снова «Выполнить» будет отображать ту же ошибку. Пожалуйста, помогите мне решить эту проблему.

runfile('F:/gym-foo/a.py', wdir='F:/gym-foo')
Created
Step

runfile('F:/gym-foo/a.py', wdir='F:/gym-foo')
Reloaded modules: gym_foo, gym_foo.envs, gym_foo.envs.foo_env
Traceback (most recent call last):

  File "F:\gym-foo\a.py", line 3, in <module>
    env = gym.make('gym_foo:foo-v0')

  File "C:\Users\nasif\anaconda3\lib\site-packages\gym\envs\registration.py", line 142, in make
    return registry.make(id, **kwargs)

  File "C:\Users\nasif\anaconda3\lib\site-packages\gym\envs\registration.py", line 86, in make
    spec = self.spec(path)

  File "C:\Users\nasif\anaconda3\lib\site-packages\gym\envs\registration.py", line 106, in spec
    importlib.import_module(mod_name)

  File "C:\Users\nasif\anaconda3\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)

  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import

  File "<frozen importlib._bootstrap>", line 983, in _find_and_load

  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked

  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked

  File "<frozen importlib._bootstrap_external>", line 728, in exec_module

  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed

  File "F:\gym-foo\gym_foo\__init__.py", line 5, in <module>
    entry_point='gym_foo.envs:FooEnv',

  File "C:\Users\nasif\anaconda3\lib\site-packages\gym\envs\registration.py", line 139, in register
    return registry.register(id, **kwargs)

  File "C:\Users\nasif\anaconda3\lib\site-packages\gym\envs\registration.py", line 132, in register
    raise error.Error('Cannot re-register id: {}'.format(id))

Error: Cannot re-register id: foo-v0

1 Ответ

0 голосов
/ 07 мая 2020

У меня была такая же проблема сегодня. Я примерно на 90% уверен, что вы уже нашли ответ в Интернете, но в случае, если другому парню понадобится помощь:

import gym
env_dict = gym.envs.registration.registry.env_specs.copy()
for env in env_dict:
    if 'foo' in env:
        print("Remove {} from registry".format(env))
        del gym.envs.registration.registry.env_specs[env]
import foo_env

Это избавит от исходного foo_env из вашего текущего сеанса python в лабораториях Jupyter или в терминал

...