健身房的自定义环境错误:无法重新注册 ID

use*_*484 3 python-3.x openai-gym

我想创建自己的健身房环境。我已按照此处解释的步骤进行操作: https: //github.com/openai/gym/blob/master/docs/creating-environments.md。根据他们的建议,我创建了环境(链接:https://drive.google.com/open? id=1RmcSBZYKCARaNsdlOsACrk9ls8snqxlj )。安装并运行后,将创建环境并显示打印输出“已创建,步骤”。但是,当我再次按下“运行”按钮(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
Run Code Online (Sandbox Code Playgroud)

小智 5

我今天也遇到了同样的问题。我是这样解决的:

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
Run Code Online (Sandbox Code Playgroud)

这将消除foo_env当前 python 会话中的原始内容,无论是在 Jupyter 实验室还是在终端中。