【四】gym搭建自己的环境,全网最详细版本,3分钟你就学会了!
相关文章:
【四】gym搭建自己的环境,全网最详细版本,3分钟你就学会了!
【五】gym搭建自己的环境____详细定义自己myenv.py文件
【六】gym搭建自己环境升级版设计,动态障碍------强化学习
gym搭建自己的环境
1.获取了解环境
可以通过
gym.make(环境名)
的方式获取gym中的环境,anaconda配置的环境,环境在Anaconda3\envs\环境名\Lib\site-packages\gym\envs\__init__.py
中获得gym中所有注册的环境信息
Gym是一个包含各种各样强化学习仿真环境的大集合,并且封装成通用的接口暴露给用户,查看所有环境的代码如下:
from gym import envs print(envs.registry.all()) #> [EnvSpec(DoubleDunk-v0), EnvSpec(InvertedDoublePendulum-v0), EnvSpec(BeamRider-v0), EnvSpec(Phoenix-ram-v0), EnvSpec(Asterix-v0), EnvSpec(TimePilot-v0), EnvSpec(Alien-v0), EnvSpec(Robotank-ram-v0), EnvSpec(CartPole-v0), EnvSpec(Berzerk-v0), EnvSpec(Berzerk-ram-v0), EnvSpec(Gopher-ram-v0), ...
Gym支持将用户制作的环境写入到注册表中,需要执行 gym.make()和在启动时注册register,同时我们可以通过写入新的注册表实现对环境中的某些参数设置进行修改:【这是个demo】
form gym.envs.registration import register register( id='CartPole-v2', entry_point='gym.envs.classic_control:CartPoleEnv', max_episode_steps=200*4, reward_threshold=195.0*4, ) env = gym.make('CartPole-v2')
2.编写文件放置
- 首先找到自己的环境下面的gym环境包envs:
我的文件路径:H:\Anaconda3-2020.02\envs\tf2\Lib\site-packages\gym\envs
打开后可以看到下面的文件:
- 之后我们要创建自己的myenv.py文件,这一步很关键,很多教程在这里解释的不清楚,下面我讲详细讲述:
我们下一步要做的就是确保自己创建的环境可以在gym里使用,那么我建议我们可以选择classic_control文件里的cartpole.py来作为我们的myenv.py,简单方便。
只需要把文件复制一下重新命名,然后再把类的名称改一下【CartPoleEnv-----→MyEnv】保存一下即可
class CartPoleEnv(gym.Env):
class MyEnv(gym.Env):
- 再者,我们需要放置文件了,文件放置有很多种方法
- 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的时候要加。
重要事情说三遍!!!
![]()