DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0

文章目录

  • (一)"Pendulum-v0"
      • Observation & State
      • Action
      • Reward
  • (二)A3C & DDPG
    • A3C
      • Test 1
      • Test 2
      • Test 3
      • Test 4
    • DDPG
      • Test 1
    • 总结:DDPG vs A3C

(一)“Pendulum-v0”

  • 倒立摆问题是控制文献中的经典问题。这里钟摆以随机位置开始,目标是将其向上摆动,使其保持直立。
  • 类型:连续控制
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第1张图片

Observation & State

n Observation Min Max
0 cos ⁡ ( t h e t a ) \cos(theta) cos(theta) -1.0 1.0
1 sin ⁡ ( t h e t a ) \sin(theta) sin(theta) -1.0 1.0
2 theta dot -8.0 8.0
  • State是Pendulum的角度和角速度(theta和thetadot)
  • State是最原始的环境内部的表示,Observation则是State的函数。

Action

n Action Min Max
0 Joint effort -2.0 2.0
self.action_space = spaces.Box(
            low=-self.max_torque,
            high=self.max_torque, shape=(1,),
            dtype=np.float32
        )
  • 这是Action的定义,对于Pendulum问题来说,动作空间只有一个维度,就是电机的控制力矩,且有最大值和最小值的限制。

Reward

costs = angle_normalize(th) ** 2 + .1 * thdot ** 2 + .001 * (u ** 2)
  • 这是代价,而 R e w a r d = − c o s t Reward=-cost Reward=cost,即:
    − ( θ 2 + 0.1 × θ d t 2 + 0.001 × a c t i o n 2 ) -\left( \theta^2+0.1\times\theta^2_{dt}+0.001\times action^2\right) (θ2+0.1×θdt2+0.001×action2)
    • θ \theta θ − π -\pi π π \pi π之间归一化
    • 因此,The lowest reward是 − ( π 2 + 0.1 × 8 2 + 0.001 × 2 2 ) = − 16.2736044 -\left( \pi^2 + 0.1 \times8^2 + 0.001\times 2^2\right)=-16.2736044 (π2+0.1×82+0.001×22)=16.2736044
    • The highest reward是 0 0 0
    • 实质上,目标是保持零角度(垂直),旋转速度最小,力度最小

参考文档:https://github.com/openai/gym/wiki/Pendulum-v0


(二)A3C & DDPG

  • 两种算法使用的架构都是actor-critic架构,不同的在于A3C的提出引入了并发的思想,通过多个线程独立地与环境交互,同时异步也打破了数据的相关性;而DDPG则是将DQN从离散动作空间扩展至连续动作空间,并借鉴了DQN的两个技巧:经验回放、目标网络。(See DDPG 、A3C for more details.)

A3C

Hyper Parameters:

GAME = 'Pendulum-v0'
N_WORKERS = multiprocessing.cpu_count() # number of threads
MAX_EP_STEP = 200 # steps for one episode
MAX_GLOBAL_EP = 2000  # total episodes
GAMMA = 0.9 # reward discount
UPDATE_GLOBAL_ITER = 10 # update global network per 10 steps
ENTROPY_BETA = 0.01  # for exploration

LR_A = 0.0001  # learning rate for actor
LR_C = 0.001  # learning rate for critic

Test 1

  • 2000 Episodes时(其他参数未变,如上),Total Moving Reward曲线:
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第2张图片

  • 4000 Episodes时(其他参数未变,如上),Total Moving Reward曲线:
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第3张图片
    可以看到总奖励2000-4000episodes收敛趋于稳定

Test 2

  • 尝试改变ENTROPY_BETA = 0.01,将其设置为比0.01小的0.001。(其他参数未变)
  • Larger entropy means more stochastic actions
  • 可以发现奖励曲线的变化,该算法在这里的表现没有之前理想,进行4000episode也没有稳定:
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第4张图片
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第5张图片

Test 3

  • 这里尝试修改学习率参数为:LR_A = 0.001LR_C = 0.001,结果如下:
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第6张图片
  • 尝试修改为:LR_A = 0.001LR_C = 0.002,结果如下(表现可能优于上图,不过这两种尝试的表现都未优于LR_A = 0.0001LR_C = 0.001):
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第7张图片

Test 4

  • 最后尝试对比不同更新主网络参数的频率
  • 修改参数:UPDATE_GLOBAL_ITER = 100(其他参数不变)
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第8张图片DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第9张图片
    各位可以尝试一些10到100之间的值。

DDPG

Test 1

Hyper Parameters:

ENV_NAME = 'Pendulum-v0'
MAX_EPISODES = 2000
MAX_EP_STEPS = 200
LR_A = 0.001  # learning rate for actor
LR_C = 0.002  # learning rate for critic
GAMMA = 0.9  # reward discount
TAU = 0.01  # soft replacement
MEMORY_CAPACITY = 10000
BATCH_SIZE = 32
  • 训练时长近800秒,结果如下:
    DRL实战:DDPG & A3C | Gym环境中经典控制问题Pendulum-v0_第10张图片
    可以看出500-1000episode左右总奖励就趋于稳定。

总结:DDPG vs A3C

  1. 可以看出,在Pendulum问题上,DDPG的收敛性优于A3C;
  2. 不过,需要注意的是,训练2000episode,DDPG用时在800秒左右,而A3C仅用时140秒(A3C在4000episode也仅用时270秒)。
  3. 总的来说,通过这次对比,A3C和DDPG各有优势。不同的问题上2个算法的表现互有优劣(后面将在不同的问题进行对比学习),不能因为一个问题上的表现下结论哪个更好。当问题的规模中等或者偏小的时候,DDPG效果更佳。但是当问题的规模很大,DDPG训练较慢的时候,A3C会更有优势,因为A3C天生就是可以并行的

My Code:
https://github.com/catchy666/Reinforcement-Learning

相关参考:
https://www.cnblogs.com/pinard/p/10345762.html
https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow

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