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”
- 倒立摆问题是控制文献中的经典问题。这里钟摆以随机位置开始,目标是将其向上摆动,使其保持直立。
- 类型:连续控制
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.001
、LR_C = 0.001
,结果如下:
- 尝试修改为:
LR_A = 0.001
、LR_C = 0.002
,结果如下(表现可能优于上图,不过这两种尝试的表现都未优于LR_A = 0.0001
、LR_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
- 可以看出,在Pendulum问题上,DDPG的收敛性优于A3C;
- 不过,需要注意的是,训练2000episode,DDPG用时在800秒左右,而A3C仅用时140秒(A3C在4000episode也仅用时270秒)。
- 总的来说,通过这次对比,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相关推荐
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
- 【强化学习】grid_mdp创建自己的gym环境
一.参考资料 强化学习实战 第一讲 gym学习及二次开发 [深入浅出强化学习原理入门]grid_mdp.py运行几个问题的解决方法] reinforcement-learning-code源代码 二. ...
- 如何在Linux环境中使用USB存储器(转)
如何在Linux环境中使用USB存储器(转) 如何在Linux环境中使用USB接口的存储设备?这是各大电脑论坛上出现得比较多的一个问题,同此可见这也是摆在许多电脑玩家面前的一道难题.本文就为您提供一套 ...
- [环境] OpenAI gym经典控制环境CartPole-v0 介绍
[环境]CartPole-v0 聊一聊我对强化学习的理解 对应的代码请访问我的GitHub:fxyang-bupt(可能你进去之后发现什么都没有,那是因为我注册了新的账号还在整理,这并不影响你先fol ...
- OpenAI Gym 经典控制环境介绍——CartPole(倒立摆)
摘要:OpenAI Gym是一款用于研发和比较强化学习算法的工具包,本文主要介绍Gym仿真环境的功能和工具包的使用方法,并详细介绍其中的经典控制问题中的倒立摆(CartPole-v0/1)问题.最后针 ...
- centos7 搭建本地git_本地服务调用K8S环境中的SpringCloud微服务实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创文章分类汇总及配套源码,涉及Java.Docker.K8S.Devops等 下图是典型的微 ...
- (23/24) webpack实战技巧:如何在webpack环境中使用Json
(23/24) webpack实战技巧:如何在webpack环境中使用Json 在webpack1或者webpack2版本中,若想在webpack环境中加载Json文件,则需要加载一个json-loa ...
- 重磅福利!《Apache Flink 十大技术难点实战》发布,帮你从容应对生产环境中的技术难题...
精选30+云产品,助力企业轻松上云!>>> 简介: 总结生产环境十大常见难点,10篇技术实战文章帮你完成故障识别.问题定位.性能优化等全链路过程,实现从基础概念的准确理解到上手实操的 ...
- SIP语音环境中十大经典问题及解决办法
在VOIP的环境中,特别是基于SIP通信的环境中,我们经常会遇到一些非常常见的问题,例如,单通,30秒就断线,注册问题,回声等.这些问题事实上都有非常直接的排查方式和解决办法,用户可以按照一定的排查方 ...
最新文章
- pandas dataframe 删除带空值的行 各种空值 (dropna()、isna()、isnull()、fillna())
- 7 环境变量 立即生效_MySQL5.7升级到8.0过程详解
- 第4章javascript变量、作用域和内存回收
- android开发日历库,Android SDK开发范例大全--5.5自制日历手机数据库笔记
- 基于visual Studio2013解决算法导论之011快排改良
- Python成长之路_装饰器
- 宝塔 + 百度BCC + centos + vue + 搭建nginx服务器
- “迭代期内无变更”与敏捷开发产品版本规划
- windows10 查看端口占用
- shell学习资料:shell十三问
- Windows Terminal美化教程
- ubuntu查看 固态硬盘位置_在Ubuntu(Linux)中启用固态硬盘(固态硬盘)TRIM | MOS86...
- win10管理员权限怎么获得_实用技巧:如何在win10中安装没有管理员权限的软件...
- excel的合并和分开and转为在线文档
- 互联网时代用什么来拯救你的眼睛?
- FTP文件传输协议与部署,包括Linux系统、Windows系统和H3C路由交换设备部署
- Sicily 1048. Inverso
- caffe-ristretto:定点方案
- CSS设置背景图片满屏
- Java时间戳与日期格式转换工具类
热门文章
- Gin框架组合(Zap、lumberjack、ini)使用手册
- 在线获取外链的php源码,y.qq.com-php获取QQ音乐外链源码
- 暗影格斗3显示无服务器,暗影格斗3总是显示无法连接网络
- python爬虫初步学习
- 微信公众平台SDK JAVA实现WeChat-SDK
- android studio查看源码
- 安装ecshop php,PHPstudy和ecshop的安装和使用
- 机器学习之逐次下降法(机器学习算法原理与实践)郑捷 (P159-p163)
- 《算法导论》CLRS算法C++实现(十一)P163 红黑树
- 值得收藏的6个OCR文字识别软件,帮你提升10倍工作效率