文章目录

  • (一)"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”

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

Observation & State

n Observation Min Max
0 cos⁡(theta)\cos(theta)cos(theta) -1.0 1.0
1 sin⁡(theta)\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)
  • 这是代价,而Reward=−costReward=-costReward=−cost,即:
    −(θ2+0.1×θdt2+0.001×action2)-\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×82+0.001×22)=−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是000
    • 实质上,目标是保持零角度(垂直),旋转速度最小,力度最小

参考文档: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 explorationLR_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

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

  1. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  2. 【强化学习】grid_mdp创建自己的gym环境

    一.参考资料 强化学习实战 第一讲 gym学习及二次开发 [深入浅出强化学习原理入门]grid_mdp.py运行几个问题的解决方法] reinforcement-learning-code源代码 二. ...

  3. 如何在Linux环境中使用USB存储器(转)

    如何在Linux环境中使用USB存储器(转) 如何在Linux环境中使用USB接口的存储设备?这是各大电脑论坛上出现得比较多的一个问题,同此可见这也是摆在许多电脑玩家面前的一道难题.本文就为您提供一套 ...

  4. [环境] OpenAI gym经典控制环境CartPole-v0 介绍

    [环境]CartPole-v0 聊一聊我对强化学习的理解 对应的代码请访问我的GitHub:fxyang-bupt(可能你进去之后发现什么都没有,那是因为我注册了新的账号还在整理,这并不影响你先fol ...

  5. OpenAI Gym 经典控制环境介绍——CartPole(倒立摆)

    摘要:OpenAI Gym是一款用于研发和比较强化学习算法的工具包,本文主要介绍Gym仿真环境的功能和工具包的使用方法,并详细介绍其中的经典控制问题中的倒立摆(CartPole-v0/1)问题.最后针 ...

  6. centos7 搭建本地git_本地服务调用K8S环境中的SpringCloud微服务实战

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创文章分类汇总及配套源码,涉及Java.Docker.K8S.Devops等 下图是典型的微 ...

  7. (23/24) webpack实战技巧:如何在webpack环境中使用Json

    (23/24) webpack实战技巧:如何在webpack环境中使用Json 在webpack1或者webpack2版本中,若想在webpack环境中加载Json文件,则需要加载一个json-loa ...

  8. 重磅福利!《Apache Flink 十大技术难点实战》发布,帮你从容应对生产环境中的技术难题...

    精选30+云产品,助力企业轻松上云!>>> 简介: 总结生产环境十大常见难点,10篇技术实战文章帮你完成故障识别.问题定位.性能优化等全链路过程,实现从基础概念的准确理解到上手实操的 ...

  9. SIP语音环境中十大经典问题及解决办法

    在VOIP的环境中,特别是基于SIP通信的环境中,我们经常会遇到一些非常常见的问题,例如,单通,30秒就断线,注册问题,回声等.这些问题事实上都有非常直接的排查方式和解决办法,用户可以按照一定的排查方 ...

最新文章

  1. pandas dataframe 删除带空值的行 各种空值 (dropna()、isna()、isnull()、fillna())
  2. 7 环境变量 立即生效_MySQL5.7升级到8.0过程详解
  3. 第4章javascript变量、作用域和内存回收
  4. android开发日历库,Android SDK开发范例大全--5.5自制日历手机数据库笔记
  5. 基于visual Studio2013解决算法导论之011快排改良
  6. Python成长之路_装饰器
  7. 宝塔 + 百度BCC + centos + vue + 搭建nginx服务器
  8. “迭代期内无变更”与敏捷开发产品版本规划
  9. windows10 查看端口占用
  10. shell学习资料:shell十三问
  11. Windows Terminal美化教程
  12. ubuntu查看 固态硬盘位置_在Ubuntu(Linux)中启用固态硬盘(固态硬盘)TRIM | MOS86...
  13. win10管理员权限怎么获得_实用技巧:如何在win10中安装没有管理员权限的软件...
  14. excel的合并和分开and转为在线文档
  15. 互联网时代用什么来拯救你的眼睛?
  16. FTP文件传输协议与部署,包括Linux系统、Windows系统和H3C路由交换设备部署
  17. Sicily 1048. Inverso
  18. caffe-ristretto:定点方案
  19. CSS设置背景图片满屏
  20. Java时间戳与日期格式转换工具类

热门文章

  1. Gin框架组合(Zap、lumberjack、ini)使用手册
  2. 在线获取外链的php源码,y.qq.com-php获取QQ音乐外链源码
  3. 暗影格斗3显示无服务器,暗影格斗3总是显示无法连接网络
  4. python爬虫初步学习
  5. 微信公众平台SDK JAVA实现WeChat-SDK
  6. android studio查看源码
  7. 安装ecshop php,PHPstudy和ecshop的安装和使用
  8. 机器学习之逐次下降法(机器学习算法原理与实践)郑捷 (P159-p163)
  9. 《算法导论》CLRS算法C++实现(十一)P163 红黑树
  10. 值得收藏的6个OCR文字识别软件,帮你提升10倍工作效率