https://cloud.tencent.com/developer/article/2183273?from_column=20421&from=20421
- 再者,我们需要放置文件了,文件放置有很多种方法
- H:\Anaconda3-2020.02\envs\tf2\Lib\site-packages\gym\envs\classic_control 可以直接放到文件夹里和别的py程序在一起
- H:\Anaconda3-2020.02\envs\tf2\Lib\site-packages\gym\envs\classic_control\myenv也可以单独创建一个文件夹放置【推荐这样。不容易以后混淆】
这里文件放置的目录会影响到之后gym注册情况代码添加
注意:这里不推荐把文件放到robotics、mujoco文件夹里,因为这里是gym机器人环境的编辑文件,我们放进去后在运行调试会出错{mujoco_py、mujoco提示未安装,搞搞这个就会挺麻烦的,不符合我们简单教学,之后会在补充这块创建}
3.注册自己的模拟器
再次确认我们的文件放置位置:H:\Anaconda3-2020.02\envs\tf2\Lib\site-packages\gym\envs\classic_control\myenv
- 注册环境第一步

打开__init__.py文件 添加from gym.envs.classic_control.myenv.myenv import MyEnv
from gym.envs.classic_control.cartpole import CartPoleEnv
from gym.envs.classic_control.mountain_car import MountainCarEnv
from gym.envs.classic_control.continuous_mountain_car import Continuous_MountainCarEnv
from gym.envs.classic_control.pendulum import PendulumEnv
from gym.envs.classic_control.acrobot import AcrobotEnv
#下面一句是我们自己添加的
from gym.envs.classic_control.myenv.myenv import MyEnv
这里解释一下为什么这么添加:第一个:myenv是文件夹名字 第二个:myenv是py文件的文件名 第三个:MyEnv是在文件中定义的环境类名字
{再举个例子,如果你添加方式是H:\Anaconda3-2020.02\envs\tf2\Lib\site-packages\gym\envs\classic_control ,那么你在__init__.py文件添加如下
from gym.envs.classic_control.myenv import MyEnv}
- 注册环境第二步
返回gym/envs目录,在该目录的__init__.py中注册环境:

添加自己环境,只需要把类命改成自己的即可,放置位置任意,建议放在# Classic下面,方面以后查找不混淆。如果需要调整参数也可以调整像我开头说的那样
#自己创建的环境
register(
id='MyEnv-v0',
entry_point='gym.envs.classic_control:MyEnv',
max_episode_steps=200,
reward_threshold=195.0,
)
register(
id='CartPole-v0',
entry_point='gym.envs.classic_control:CartPoleEnv',
max_episode_steps=200,
reward_threshold=195.0,
)
注意:MyEnv-v0中v0代表环境类的版本号,在定义类的的时候名字里可以不加,但是在id注册的时候要加,后面import的时候要加。
至此,就完成了环境的注册,就可以使用自定义的环境了!
4.测试环境
新建一个py文件,简单测试一下
import gym
env = gym.make('MyEnv-v0')
env.reset()
for _ in range(1000):
env.render()
env.step(env.action_space.sample()) # take a random action
结果如下:

平衡小车环境成功。
5.注意事项
注意:MyEnv-v0中v0代表环境类的版本号,在定义类的的时候名字里可以不加,但是在id注册的时候要加,后面import的时候要加。 注意:MyEnv-v0中v0代表环境类的版本号,在定义类的的时候名字里可以不加,但是在id注册的时候要加,后面import的时候要加。 注意:MyEnv-v0中v0代表环境类的版本号,在定义类的的时候名字里可以不加,但是在id注册的时候要加,后面import的时候要加。 重要事情说三遍!!!




在classic_control文件夹下的__init__.py文件中的内容如下:

浙公网安备 33010602011771号