-
以立火柴棒的环境为例
效果如下
-
获取环境
env = gym.make('CartPole-v0') # 定义使用gym库中的某一个环境,'CartPole-v0'可以改为其它环境 env = env.unwrapped # 据说不做这个动作会有很多限制,unwrapped是打开限制的意思
可以通过
gym.make(id)
的方式获取gym中的环境,gym中都有些什么样的环境呢,如果你是用anaconda配置的环境,你可以在Anaconda3\envs\环境名\Lib\site-packages\gym\envs\__init__.py
中获得gym中所有注册的环境信息。如果你用的是原生的python环境,大概也可以在你的python环境位置\Lib\site-packages\gym\envs\__init__.py
找到这个文件,不过这个我就没有测试了,它是这样一个文件make方法中就是根据这个id获取的,还可以根据entry_point属性找到环境的位置,(我试过通过 Ctrl+左键单击 的方式找到这个环境,但是失败了),不如就这个CartPole-v0的环境,它是这样的
可以查看到环境的相关信息
-
获取环境参数
gym中的环境都继承自gym.Env这个父类
至少其中这几个属性和函数在gym的环境中都是有的,当然基于需要各个环境中也有它们独有的环境
下面这几个是常用的gym属性
-
状态空间env.observation_space
其状态空间是这样一个类型
在自定义环境时可以这样构造状态空间,其中
方法/属性 作用 shape 尺寸/规格/形状,通过用 .shape[0] 的方式获取状态向量的维度 sample() 从空间中随机取一个值,在回合重置时常用到 seed() 设定随机种子,效果就是定死其内部生成随机数的机制,是每次生成的结果不变 contains(obj) 判断空间中是否包含obj high 上届 low 下界 -
动作空间env.action_space
其动作空间是这样一个类型
在自定义环境时可以这样构造动作空间,其中
属性/方法 作用 sample() 从空间中随机取一个值,在回合重置时常用到 seed() 设定随机种子,效果就是定死其内部生成随机数的机制,是每次生成的结果不变 contains(obj) 判断空间中是否包含obj n 动作空间中的动作个数(连续空间中就没有这个了) -
使用实例
print(env.action_space) print(env.observation_space) print(env.observation_space.low) print(env.observation_space.high) print(env.observation_space.shape) print(env.observation_space.sample()) # Discrete(2) # Box(4,) # [-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38] # [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38] # (4,) # [-4.1981392e+00 1.1287736e+38 -3.8320544e-01 -2.4842601e+38]
-
-
环境中的方法
环境中一般都会有上面说到的父类中的方法,其中
-
step():用于编写智能体与环境交互的逻辑;它接受一个动作(action)的输入,根据action给出下一时刻的状态(state)、当前动作的回报(reward)、探索是否结束(done)及调试帮助信息信息。
observation_, reward, done, info = env.step(action)
-
reset():用于在每轮开始之前重置并返回智能体的状态,这个状态通常会随机获得
observation = env.reset()
-
render():可视化的关键部分,用来绘制画面
env.render()
我的大概理解就是根据当前状态刷新一帧
-
close():用来在程序结束时清理画布
env.close()
-
-
这里把关键部分放在这,更多的参见 本文全部代码
# 训练
for i_episode in range(2000):
observation = env.reset()
ep_r = 0
while True:
# env.render() # 不进行可视化可以加速训练过程,取消注释可以观察训练过程
action = RL.choose_action(observation) # 选择动作
observation_, reward, done, info = env.step(action) # 执行动作
RL.store_transition(observation, action, reward, observation_) # 存储 一步 的信息到记忆库
ep_r += reward # ep_r用来计算总回报
if total_steps > 500: # 待到记忆库中存有一些信息后,从里面抽取样本进行训练
RL.learn()
if done: # 达到结束条件,结束本轮(跳出循环)
if i_episode%20==0:
print('episode: ', i_episode,
'ep_r: ', round(ep_r, 2),
)
break
observation = observation_ # 更新当前状态
total_steps += 1
-
相关内容
什么是gym
gym自定义可视化环境绘制
gym自定义可视化环境实例
强化学习:gym环境解读及使用
从Q_Learning看强化学习
一个Q_Learning强化学习自定义gym环境可视化实例
tkinter绘制强化学习可视化环境
-
参考文献