GYM 强化学习 文档 (一)

一、安装 Installationpip install gym

二、环境 Environments

以下是让强化学习运行的最小化的原始案例,首先,我们会初始化一个CartPole-v0(即手推车-杆子游戏的初始化环境) 环境,并渲染他的行为1000次,具体代码如下:[具体运行案例,放到本地环境运行]

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample()) # take a random action
env.close()

推荐您可以使用如: MountainCar-v0MsPacman-v0 代替上文的CartPole-v0,去尝试更多好玩的样例。

更多问题,请查验:https://github.com/openai/gym

三、观测量 Observations:

如果你想要的结果并不是每次都采用随机化的行动,你想要的agent是想让他从环境中得到一些反馈的,那么环境的 Step 函数可以精确的帮助我们做到这个功能,Step 函数返回四个值:

  • observation (object), 一个具体的环境对象,代表着你能观测的环境。就好像 相机中的像素数据,棋盘游戏中的棋盘状态等;
  • reward (float),一些对于先前行为的奖励,这个奖励的尺度取决与您游戏的环境,当然,所有的游戏的目标都是一样的,就是最大最小化代价,也就是最大化游戏中的奖励函数;
  • done (boolean),表示是否该重新启动新的一轮环境,大多数的任务都是有明确划分的,即一轮(episode)任务的完成是well-defined,当done的值取true的时候,则代表着这一轮的训练过程结束了;
  • info (dict),对调试有用的诊断信息,当然这只是诊断的信息,并不能帮助你训练;

标准的agent-environment循环如下所示,他可能可以帮助你理解上述的四个值:

在这个循环中,agent都会选择一个action,然后环境返回一个obseration与reward

每个这样的过程循环,需要用 reset() 函数进行设置(然后返回一个初始化的obseration),所以经过介绍后,我们可以将最初的代码写成如下的样子:

import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break
env.close()

四、空间 Spaces:

在上面的样例中,我们从环境的动作空间(environment action space)进行随机行为的抽样,但是这些action到底是什么呢?每一个环境都有一个action_space与一个obseration_space,他们都是Space类型的;

import gym
env = gym.make('CartPole-v0')
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)

(1)这个Discrete的空间是一个连续的定长的非负数字,如Discrete(2) = 0 and 1;

(2)这个Box的空间代表这 n-D 的框,所以有效的obseration是一个四个数字的数组,就像下面一样

print(env.observation_space.high)
#> array([ 2.4       ,         inf,  0.20943951,         inf])
print(env.observation_space.low)
#> array([-2.4       ,        -inf, -0.20943951,        -inf])

以上两个Space都是最常用的空间,所以你可以通过以下代码来进行检查

from gym import spaces
space = spaces.Discrete(8) # Set with 8 elements {0, 1, 2, ..., 7}
x = space.sample()
assert space.contains(x)
assert space.n == 8

For CartPole-v0 one of the actions applies force to the left, and one of them applies force to the right. (Can you figure out which is which?)

猜你喜欢

转载自blog.csdn.net/qq_36336522/article/details/106996213