跟随着gym的教程,准备把自己写的环境注册在gym的envs上面,
过程如下:
第⼀步,将我们⾃⼰的环境⽂件(笔者创建的⽂件名为 Myenv.py,类名为ReEnv )
拷⻉到你的gym安装⽬录D:\annaconda\envs\Gym\Lib\site-packages\gym\envs\classic_control⽂件夹中(拷⻉在此
⽂件夹中是因为要使⽤rendering模块。当然本⽅法并不是唯⼀的,也可以
采⽤其他办法。)。
第⼆步,打开该⽂件夹(第⼀步中的⽂件夹)下的__init__.py⽂件,
在⽂件末尾加⼊语句:
from gym.envs.classic_control.Myenv import ReEnv
- 1
第三步,进⼊⽂件夹的gym安装⽬录D:\annaconda\envs\Gym\Lib\site-packages\gym\envs,打开该⽂件夹下
的__init__.py⽂件,添加代码:
register(
id='My_env',
entry_point='gym.envs.classic_control:ReEnv ',
)
- 1
- 2
- 3
- 4
反复对比官方文档发现并无纰漏,但是仍然import gym就报错:
Error: Attempted to register malformed environment ID: My_env. (Currently all IDs must be of the form ^(?:[\w:-]+\/)?([\w:.-]+)-v(\d+)$.)
- 1
后来经过一顿琢磨:
register这个id可以随便写,但是要注意的是,id中最后要带 -v() 括号里为数值,满足此格式才行,最终改为:
register(
id='My_env-v0',
entry_point='gym.envs.classic_control:ReEnv ',
)
- 1
- 2
- 3
- 4
成功!
此时又发现一个问题:
比如,注册一个环境是报错:
Error: Attempted to register malformed environment ID: My_env. (Currently all IDs must be of the form ^(?:[\w:-]+\/)?([\w:.-]+)-v(\d+)$.)
- 1
将注册相关代码注释掉,不重启控制台的话,会报错:
Error: Cannot re-register id: Copy-v0
- 1
其中Copy-v0是gym源码中默认的第一个环境,此时需要重启控制台,即可
这个问题反映了,对于python的一个包来说,一次import,后续再在控制台import 同名包,则实际不会将新改动的同名包加载进入内存,还是旧包,所以改动包的源码后,需要重启或打开新的控制台来导入