强化学习实战二

这篇博客主要讲解强化学习中两种典型的问题:离散动作与连续动作,通过前面的学习我们知道离散动作问题可以用 Q-Learning算法 解决,而连续动作问题可以用 Policy Gradients算法 解决。

这篇博客使用的项目环境:

  1. MountainCar v0
  2. MountainCarContinuous v0

1. MountainCar v0

问题描述:将动力不足的汽车推到山顶

强化学习实战二_第1张图片 强化学习实战二_第2张图片

1.1 State、Observation、Action是什么?

根据 Gym环境源码 对环境进行分析,我们知道该项目中Observation是 汽车所处位置速度,State与Observation是相同的,而Action是离散的3个值(分别表示将汽车向左推、不推、向右推)。


语法1
Gym Environment 的 spaces 两种类型:Box 与 Discrete。
在这里插入图片描述Discrete类型比较容易理解,是离散的一维数组,比如:Discrete(3) -------》[0,1, 2]。

Box类型是一个有边界的连续数组(维度可指定),常用的形式是 spaces.Box(low, high),其中low / high 表示上下界,而Box的维度取决于low / high定义的维度,比如下面这个observation_space是一个3维数组,每个维度的区间分别是[-1.0, 1.0],[-2.0, 2.0],[0, 3.0]。

 self.observation_space = spaces.Box(np.array([-1.0, -2.0, 0.0]), np.array([1.0, -2.0, 3.0]), dtype=np.float32)
 # 

语法2
Observation 是 State 的函数,二者有时相同,有时不同,在此例中,二者是一样的(y=x),在 Pendulum-v0中,Observation 与 State 是不一样的 。


1.2 Reward是什么?

该项目中最重要的就是对 Reward 的理解,我们来看看环境中对 Reward 的定义。
强化学习实战二_第3张图片

根据 Gym环境源码 对 Reward 进行分析,我们发现 Reward 除了最终状态其余每一步都是 -1.0 。
强化学习不是应该对好的Action进行奖励,对不好的Action进行惩罚吗?为什么这里reward一直都是-1.0呢? 这就是 累积奖励 的理解!算法得根据当前episode持续多长时间来累积奖励,其实就是希望少的步数达到结束条件。
在这里插入图片描述

2. MountainCarContinuous v0

问题描述:动力不足的汽车必须爬一维山才能达到目标。 与MountainCar v0不同,动作(施加的引擎力)允许为连续值。(注:MountainCar v0中Action为施加的力的方向,而该项目中Action为施加的力的大小)

强化学习实战二_第4张图片 强化学习实战二_第5张图片

2.1 State、Observation、Action是什么?

根据 Gym环境源码 对环境进行分析,我们知道该项目中Observation是 汽车所处位置速度,State与Observation是相同的,而这里Action不再是离散值,而是连续的值(正号表示将车向右推,负号表示将车向左推)。

2.2 Reward是什么?

reward-= math.pow(action[0],2)*0.1

该项目的奖励是到达右侧山丘目标的100,减去从开始到目标的所有操作的平方和。(其实与前面的 reward = -1 是一样的原理。这个奖励功能提出了一个探索挑战,因为如果Agent没有足够快地到达目标,它就会发现最好不要移动,并且不再寻找目标。)
注:其他项目中 Reward 的作用可能是对好的Action进行奖励,对坏的Action进行惩罚,这里 Reward 的作用是尽快地达到目标,因此倾向于采用爆炸式策略。

你可能感兴趣的:(强化学习)