深度强化学习(DRL)二:强化学习环境Gym

目录

    • 一、选择框架
    • 二、认识Gym
    • 三、从代码开始

一、选择框架

RL方面学习框架和平台很多,比较出名的有DeepMind的 Control Suite,OpenAI的 GymMuJoCo,以及Roboschool、PyBullet等等。

模型和算法依赖于后端使用的库有numpy, tensorflow, keras, pytorch等等。

作为一个初学者,我选则比较常用的OpenAI的 GymMuJoCo作为环境,Python 2.7 or 3.5以上都可以。在Linux上测试会比较稳定,Windows折腾一下也行。

安装Gym:

# 不可能速度会比较慢
pip install gym  
# 用清华镜像下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gym 

MuJoCo安装过程:mujoco win7下载安装

另外,OpenAI出品了强化学习 (RL) 入门教程,叫Spinning Up
完全没有机器学习基础的人类,也可以迅速上手强化学习。有实战,有论文,有习题,帮你从入门到精通。

地址:Spinning Up

二、认识Gym

Gym是OpenAI的开源测试平台,可以从官方文档了解一下gym

Gym主要有以下几个环境:

  1. 经典控制和玩具文字:完成小规模任务,大部分来自RL文献。 他们是来帮助您入门的。

  2. 算法:执行计算,例如添加多位数和反转顺序。 有人可能会反对说,这些任务对于计算机而言很容易。 挑战在于仅从示例中学习这些算法。 这些任务具有很好的特性,即可以通过改变序列长度来轻松地改变难度。

  3. Atari:玩经典的Atari游戏。 我们以易于安装的形式集成了Arcade学习环境(这对强化学习研究产生了重大影响)。

  4. 2D和3D机器人:在仿真中控制机器人。 这些任务使用了MuJoCo物理引擎,该引擎设计用于快速准确的机器人仿真。 其中包括加州大学伯克利分校研究人员的最新基准测试的一些环境(偶然会在今年夏天加入我们)。 MuJoCo是专有软件,但提供免费试用许可证。

我选择比较简单的CartPole-v1作为学习对象。
深度强化学习(DRL)二:强化学习环境Gym_第1张图片

一根杆子连接到一辆大车上,大车沿着无摩擦的轨道移动。通过对小车施加+1或-1的力来控制系统。钟摆开始是直立的,我们的目的是防止它倒下来。杆保持直立的每个时间步长都提供+1的奖励。当杆子与垂直线的夹角超过15度时,或者推车从中心移出2.4个单位以上时,一局结束。

三、从代码开始

直接开始学习Gym的用法

官网给出了示例代码:

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()

这段代码运行之后会出现小车以及车上得到杆子随机运动的图形,以及输出了很多组四个数字

深度强化学习(DRL)二:强化学习环境Gym_第2张图片

看到这行代码

observation, reward, done, info = env.step(action)

step()函数是关键,它返回了四个值:observation 、reward、done 、info 。

  1. observation (object): 一个环境特定的对象,代表你对环境的观察。例如,来自相机的像素数据、机器人的关节角度和关节速度,或者棋盘游戏中的棋盘状态。
  2. reward (float): 由先前行为获得的奖励。大小范围在不同的环境之间变化,但最终目标总是增加你的总奖励。
  3. done (boolean): 是否该重置环境了。大多数(但不是全部)任务被划分为明确定义的情节,并且done 是True 表明该事件已经终止。(比如,杆子倾斜太远,或者你失去了你的最后生命。)
  4. info (dict): 用于调试的诊断信息。它有时可以用于学习(例如,它可能包含在环境的最后状态改变背后的原始概率)。然而,官方评估你的算法时不允许使用这个来学习。

这里我们输出了observation ,知道它有四个数值,通过查看CartPole源码知道这四个数值的意义。

Num Observation Min Max
0 Cart Position 4.8 4.8
1 Cart Velocity -Inf Inf
2 Pole Angle -24 deg 24 deg
3 Pole Velocity At Tip -Inf Inf

就是说输出的值是:[车的位置,车的速度,杆子的角度,杆子顶端的速度]

除了observation以外,还有个action需要注意

Num Action
0 Push cart to the left
1 Push cart to the right

在这个游戏中action只有两个值:0或1。0将小车向左推,1将小车向右推。

这里我们采取的策略是随机action

action = env.action_space.sample()

这个游戏的奖励是木棒每保持平衡1个时间步,就得到1分。当杆子与垂直线的夹角超过15度时,或者推车从中心移出2.4个单位以上时,一局游戏结束。

你可能感兴趣的:(强化学习,python,机器学习)