python 笔记 :Gym库 (官方文档笔记)
Posted UQI-LIUWJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 笔记 :Gym库 (官方文档笔记)相关的知识,希望对你有一定的参考价值。
Gym是一个开发和比较强化学习算法的工具箱。它不依赖强化学习算法结构,并且可以使用很多方法对它进行调用。
1 Gym环境
这是一个让某种小游戏运行的简单例子。
这将运行 CartPole-v0 环境实例 1000 个时间步,在每次迭代的时候都会将环境初始化(env.render)。运行之后你将会看到一个经典的推车杆问题
import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(100):
env.render()
#提供环境
env.step(env.action_space.sample())
#env.action_space.sample() 会在动作空间中随机选择一个
#env.step会顺着这个动作进入下一个状态
env.close()
1.1 动作是如何和环境交互的
与环境交互过程中,每一步环境都会返回四个值
observation (object) | 一个特定的环境对象,代表了你从环境中得到的观测值。 例如从摄像头获得的像素数据,机器人的关节角度和关节速度,或者棋盘游戏的棋盘。 |
reward (float) | 由于之前采取的动作所获得的奖励总和。 |
done (boolean) | 决定是否重置环境,大多数,但不是所有的任务都被定义好了什么情况该结束这个回合。(举个例子,前面所展示的这个倒立摆的小车离开地太远了就结束了这个回合) |
info (dict) | 调试过程中将会产生的有用信息,有时它会对我们的强化学习学习过程很有用 |
程序的开始被叫做reset()
,它会返回一个初始的观测值,因此像比于前面的代码,一个改良版的方式编写代码如下所示:
import gym
env = gym.make('CartPole-v1')
for i_episode in range(2):
observation = env.reset()
#初始话环境
for t in range(100):
env.render()
#提供环境
action = env.action_space.sample()
#在可行的动作空间中随机选择一个
observation, reward, done, info = env.step(action)
#顺着这个动作进入下一个状态
print(observation, reward, done, info)
if done:
print("Episode finished after timesteps".format(t+1))
break
env.close()
'''
[-0.02344513 -0.17659043 0.0043245 0.27116755] 1.0 False
[-0.02697694 -0.37177384 0.00974786 0.5652113 ] 1.0 False
[-0.03441242 -0.56703115 0.02105208 0.8609492 ] 1.0 False
[-0.04575304 -0.7624334 0.03827107 1.1601765 ] 1.0 False
[-0.06100171 -0.9580325 0.0614746 1.4646091 ] 1.0 False
[-0.08016236 -1.1538512 0.09076678 1.7758446 ] 1.0 False
[-0.10323939 -0.9598616 0.12628368 1.5127068 ] 1.0 False
[-0.12243662 -1.1562663 0.1565378 1.8419967 ] 1.0 False
[-0.14556195 -0.9631801 0.19337773 1.6017431 ] 1.0 False
[-0.16482554 -0.7708017 0.2254126 1.3750535 ] 1.0 True
Episode finished after 10 timesteps
'''
2 空间
在上面的例子中,我们一直在从环境的动作空间中采样随机动作。
【”action = env.action_space.sample()’】
每个环境都带有一个 动作空间和一个观察空间。 这些属性属于 Space 类型,它们描述了有效操作和观察的格式:
import gym env = gym.make('CartPole-v1') print(env.action_space) print(env.observation_space) ''' Discrete(2) Box([-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,), float32) '''
离散空间允许固定范围的非负数,在'CartPole-v1'中,有效动作是 0 或 1。
print(env.action_space.start) #0 #离散动作空间的开始值 print(env.action_space.n) #2 #离散动作空间中一共有几个值
框Box空间表示一个 n 维框,因此有效观察值将是一个包含 n个数字的数组。
我们还可以检查 Box 的边界:
print(env.observation_space.low) print(env.observation_space.high) ''' [-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38] [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38] '''
Box 和 Discrete 是最常见的空间。 您可以从 它们中采样或检查某些东西是否属于它:
from gym import spaces space = spaces.Discrete(8) # Set with 8 elements 0, 1, 2, ..., 7 x = space.sample() print(x) print(space.contains(x)) ''' 5 True '''
参考资料 Gym (openai.com)
以上是关于python 笔记 :Gym库 (官方文档笔记)的主要内容,如果未能解决你的问题,请参考以下文章