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

(一)“Pendulum-v0”

  • 倒立摆问题是控制文献中的经典问题。这里钟摆以随机位置开始,目标是将其向上摆动,使其保持直立。
  • 类型:连续控制
    在这里插入图片描述

Observation & State

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

Action

nActionMinMax
0Joint effort-2.02.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 DDPGA3C 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曲线:
    在这里插入图片描述

  • 4000 Episodes时(其他参数未变,如上),Total Moving Reward曲线:
    在这里插入图片描述
    可以看到总奖励2000-4000episodes收敛趋于稳定

Test 2

  • 尝试改变ENTROPY_BETA = 0.01,将其设置为比0.01小的0.001。(其他参数未变)
  • Larger entropy means more stochastic actions
  • 可以发现奖励曲线的变化,该算法在这里的表现没有之前理想,进行4000episode也没有稳定:
    在这里插入图片描述
    在这里插入图片描述

Test 3

  • 这里尝试修改学习率参数为:LR_A = 0.001LR_C = 0.001,结果如下:
    在这里插入图片描述
  • 尝试修改为:LR_A = 0.001LR_C = 0.002,结果如下(表现可能优于上图,不过这两种尝试的表现都未优于LR_A = 0.0001LR_C = 0.001):
    在这里插入图片描述

Test 4

  • 最后尝试对比不同更新主网络参数的频率
  • 修改参数:UPDATE_GLOBAL_ITER = 100(其他参数不变)
    在这里插入图片描述在这里插入图片描述
    各位可以尝试一些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秒,结果如下:
    在这里插入图片描述
    可以看出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-Demo

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值