jieye の 数字花园

Search

Search IconIcon to open search

GYM

Last updated May 26, 2022

# Env

首先我们可以通过如下代码调用并展示(可视化)一个环境:

1
2
3
4
5
6
7
import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render() # 可视化环境
    env.step(env.action_space.sample()) # 选择随机动作
env.close()

该代码创建了一个著名的 CartPole 环境,用于控制小车使上面的杆保持竖直不倒,如下图所示。在每一次迭代中,我们从动作空间中采样了一个随机动作(本环境中只有**「向左」「向右」**两个动作)并执行。

img

# Pendulum

https://blog.csdn.net/u013745804/article/details/78397106

gym学习及二次开发 https://zhuanlan.zhihu.com/p/26985029

# Observation

为了做出更加合适的动作,我们需要先了解环境的反馈。环境的 step 函数可以返回我们想要的值,其总共返回如下四个值:

通过上述函数,我们可以实现经典的**「代理-环境循环」**,在每个时间步,代理选择一个动作,环境返回一个观察(状态)和一个奖励:

image-20220526174712742

# Space

在 Gym 中,状态和动作都是通过 Space 类型来表示的,其可以定义连续或离散的子空间。最常用的两种 SpaceBoxDiscrete,在 CartPole 环境中状态空间和动作空间就分别对应这两种 Space

1
2
3
4
5
6
import gym
env = gym.make('CartPole-v0')
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,) # 注意其第二维未指定

Discrete 定义了一个从 0 开始取值的离散空间,而 Box 则可以表示一个 m*n 维的连续空间,需要为每个维度设置上下界。我们可以通过如下方式新建空间:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from gym import spaces
space = spaces.Discrete(8) # 包含 {0, 1, 2, ..., 7} 八个元素的集合

# 每一维相同的上下界
space_box_1 = Box(low=-1.0, high=2.0, shape=(3, 4), dtype=np.float32)
# Box(3, 4)

# 每一维不同的上下界
space_box_2 = Box(low=np.array([-1.0, -2.0]), high=np.array([2.0, 4.0]), dtype=np.float32)
# Box(2,)