并行化强化学习 —— 最终版本 —— 并行reinforce算法的尝试
本文代码地址:
https://gitee.com/devilmaycry812839668/final_-version_-parallelism_-reinforce_-cart-pole
结合了前面几个版本的并行化强化学习的设计,给出了最终版本。gym下简单的CarlPole环境作为仿真环境,以reinforce算法作为实例算法,讨论了强化学习在多仿真环境下并行化设计的可行性,并给出了几种个人设计的架构,同时对各架构的性能进行了一定的分析。
----------------------------------------------------------------------
本文是前面几篇 并行化强化学习 系统的终结版,与前面博文内容一样都是探索强化学习中并行化数据生成部分的设计,也就是说仿真环境下的多actoer的设计。
在 i7-9700k CPU上进行测试,mode=0为多进程多环境多actoer的设计:
/home/devilmaycry/anaconda3/envs/tf-14.0/bin/python -u /home/guojun/processes_8/analysis.py
运行时间对比:(单位:秒)
mode_0/batch_size_1/envs_number_1: mean: 110.8548 std: 26.2095 共解决任务数: 100
mode_0/batch_size_1/envs_number_10: mean: 40.4805 std: 13.6989 共解决任务数: 100
mode_0/batch_size_1/envs_number_50: mean: 33.5501 std: 13.4313 共解决任务数: 100
mode_0/batch_size_1/envs_number_100: mean: 32.2314 std: 13.7917 共解决任务数: 100
mode_0/batch_size_10/envs_number_10: mean: 85.9817 std: 15.7383 共解决任务数: 100
mode_0/batch_size_10/envs_number_50: mean: 50.7907 std: 10.0255 共解决任务数: 100
mode_0/batch_size_10/envs_number_100: mean: 46.8095 std: 9.9488 共解决任务数: 100
mode_0/batch_size_50/envs_number_50: mean: 129.4553 std: 24.8015 共解决任务数: 100
mode_0/batch_size_50/envs_number_100: mean: 121.1552 std: 24.2361 共解决任务数: 100
mode_0/batch_size_100/envs_number_100: mean: 208.7799 std: 33.8209 共解决任务数: 100 训练episodes个数对比:
mode_0/batch_size_1/envs_number_1: mean: 23098.9900 std: 3845.4610 共解决任务数: 100
mode_0/batch_size_1/envs_number_10: mean: 24354.6500 std: 3633.7029 共解决任务数: 100
mode_0/batch_size_1/envs_number_50: mean: 24067.5600 std: 3775.5455 共解决任务数: 100
mode_0/batch_size_1/envs_number_100: mean: 23560.0300 std: 3527.6414 共解决任务数: 100
mode_0/batch_size_10/envs_number_10: mean: 108013.2000 std: 10650.0248 共解决任务数: 100
mode_0/batch_size_10/envs_number_50: mean: 107977.0000 std: 10925.4044 共解决任务数: 100
mode_0/batch_size_10/envs_number_100: mean: 107824.1000 std: 10528.4118 共解决任务数: 100
mode_0/batch_size_50/envs_number_50: mean: 317360.5000 std: 29690.2015 共解决任务数: 100
mode_0/batch_size_50/envs_number_100: mean: 318677.5000 std: 29337.6783 共解决任务数: 100
mode_0/batch_size_100/envs_number_100: mean: 591602.0000 std: 56874.5162 共解决任务数: 100
可以看到相同batch_size的情况下,需要迭代计算的次数时相当的,这里可以近似的看做是相同的,也就是说batch_size相同的情况下迭代计算的次数是大致相同的。
在所有的设置中当batch_size=1的时候可以取得最快的运算速度。由于测试环境中CPU只有8个核心,单batch_size设置过大时会导致单进程计算时间大幅增加,导致总的计算时间增加。同时我们还可以看到单环境数增加到一定程度后并不能继续的明显加快计算速度,考虑过多的环境数设置会拉大训练数据的分布与当前训练的策略分布间的差距造成不收敛等问题,因此环境数的设置不可过大。
mode=2 与 mode=0 的区别是多了一个syn_number的变量设置,syn_number是指更新策略网络时并不是根据数据生成进程的batch_size个数据来更新,而是使用syn_number*batch_size个数据(episodes数)来进行网络更新。
下面的进程数设置为20, syn_number设置为10。
/home/devilmaycry/anaconda3/envs/tf-14.0/bin/python -u /home/guojun/syn_number_10/analysis.py
运行时间对比:(单位:秒)
mode_2/batch_size_1/envs_number_1: mean: 572.9724 std: 216.5407 共解决任务数: 60
mode_2/batch_size_1/envs_number_10: mean: 100.5657 std: 20.1504 共解决任务数: 60
mode_2/batch_size_1/envs_number_50: mean: 63.2425 std: 11.3395 共解决任务数: 60
mode_2/batch_size_1/envs_number_100: mean: 61.7588 std: 11.2458 共解决任务数: 60
mode_2/batch_size_10/envs_number_10: mean: 447.1827 std: 54.0549 共解决任务数: 60
mode_2/batch_size_10/envs_number_50: mean: 256.4208 std: 40.9562 共解决任务数: 60
mode_2/batch_size_10/envs_number_100: mean: 224.5368 std: 32.1574 共解决任务数: 60 训练episodes个数对比:
mode_2/batch_size_1/envs_number_1: mean: 110634.1667 std: 12701.9469 共解决任务数: 60
mode_2/batch_size_1/envs_number_10: mean: 108515.6667 std: 13535.9810 共解决任务数: 60
mode_2/batch_size_1/envs_number_50: mean: 109601.6667 std: 10526.0392 共解决任务数: 60
mode_2/batch_size_1/envs_number_100: mean: 113161.0000 std: 10476.2331 共解决任务数: 60
mode_2/batch_size_10/envs_number_10: mean: 598626.6667 std: 51433.0499 共解决任务数: 60
mode_2/batch_size_10/envs_number_50: mean: 599633.3333 std: 61596.5845 共解决任务数: 60
mode_2/batch_size_10/envs_number_100: mean: 584906.6667 std: 51631.8308 共解决任务数: 60
考虑到运算时间过久,每个试验设置只重复了60次。
可以看到mode=0时,batch_size的大小如果等于mode=2时的batch_size*syn_number,那么所需要进行的迭代计算测试是相同的。
==================================================
在服务器上同样进行测试(48核心CPU,96线程)
需要说明的是
mode_0/batch_size_10/envs_number_100 设置的情况下只进行了12次,其中只有2次没有退化取得了收敛成功解决任务。
其他设置的情况下均进行了100次测试。进程数为100。mode=2时syn_number=10。
@dell:~/CartPole/processes_100$ python analysis.py
运行时间对比:(单位:秒)
mode_0/batch_size_1/envs_number_1: mean: 41.5676 std: 17.0772 共解决任务数: 100
mode_0/batch_size_1/envs_number_10: mean: 52.8947 std: 21.5473 共解决任务数: 100
mode_0/batch_size_10/envs_number_10: mean: 27.1356 std: 7.7008 共解决任务数: 100
mode_0/batch_size_10/envs_number_50: mean: 97.3411 std: 45.9895 共解决任务数: 92
mode_0/batch_size_10/envs_number_100: mean: 37.2552 std: 13.6073 共解决任务数: 2
mode_0/batch_size_50/envs_number_50: mean: 42.3190 std: 14.5006 共解决任务数: 100
mode_0/batch_size_50/envs_number_100: mean: 49.6597 std: 24.4256 共解决任务数: 100
mode_0/batch_size_100/envs_number_100: mean: 80.3257 std: 27.3363 共解决任务数: 100
mode_2/batch_size_1/envs_number_1: mean: 145.4394 std: 42.9837 共解决任务数: 100
mode_2/batch_size_1/envs_number_10: mean: 55.6879 std: 15.1581 共解决任务数: 100
mode_2/batch_size_1/envs_number_50: mean: 55.9464 std: 11.0121 共解决任务数: 100
mode_2/batch_size_1/envs_number_100: mean: 54.8919 std: 11.3577 共解决任务数: 100
mode_2/batch_size_10/envs_number_10: mean: 124.2350 std: 24.4815 共解决任务数: 100
mode_2/batch_size_10/envs_number_50: mean: 132.5511 std: 31.4319 共解决任务数: 100
mode_2/batch_size_10/envs_number_100: mean: 112.4246 std: 27.4696 共解决任务数: 100
mode_2/batch_size_50/envs_number_50: mean: 347.4872 std: 97.2112 共解决任务数: 100
mode_2/batch_size_100/envs_number_100: mean: 553.0840 std: 133.7190 共解决任务数: 100 训练episodes个数对比:
mode_0/batch_size_1/envs_number_1: mean: 19470.9300 std: 4547.3130 共解决任务数: 100
mode_0/batch_size_1/envs_number_10: mean: 21345.2800 std: 3092.1525 共解决任务数: 100
mode_0/batch_size_10/envs_number_10: mean: 91189.7000 std: 12853.2599 共解决任务数: 100
mode_0/batch_size_10/envs_number_50: mean: 430032.5000 std: 217660.4413 共解决任务数: 92
mode_0/batch_size_10/envs_number_100: mean: 142700.0000 std: 26350.0000 共解决任务数: 2
mode_0/batch_size_50/envs_number_50: mean: 338171.0000 std: 60333.3864 共解决任务数: 100
mode_0/batch_size_50/envs_number_100: mean: 416868.0000 std: 112301.0560 共解决任务数: 100
mode_0/batch_size_100/envs_number_100: mean: 655517.0000 std: 114255.4367 共解决任务数: 100
mode_2/batch_size_1/envs_number_1: mean: 121952.7000 std: 22296.7720 共解决任务数: 100
mode_2/batch_size_1/envs_number_10: mean: 113760.5000 std: 13674.6070 共解决任务数: 100
mode_2/batch_size_1/envs_number_50: mean: 120268.4000 std: 12937.5188 共解决任务数: 100
mode_2/batch_size_1/envs_number_100: mean: 120851.2000 std: 21023.7702 共解决任务数: 100
mode_2/batch_size_10/envs_number_10: mean: 587406.0000 std: 52296.7892 共解决任务数: 100
mode_2/batch_size_10/envs_number_50: mean: 590872.0000 std: 58802.3504 共解决任务数: 100
mode_2/batch_size_10/envs_number_100: mean: 607046.0000 std: 57616.7882 共解决任务数: 100
mode_2/batch_size_50/envs_number_50: mean: 2633605.0000 std: 264646.4840 共解决任务数: 100
mode_2/batch_size_100/envs_number_100: mean: 5172810.0000 std: 520523.4422 共解决任务数: 100
可以看到进程数为100时对算法性能提升(运算时间的缩短)并没有很明显,同时发现环境数的设置对运行时间(迭代更新次数)影响关系不确定(环境数过大导致训练数据与当前训练策略分布差距过大,训练陷入退化中),不过环境数设置过大对性能没有太多好处,尤其对于mode=0的情况下,batch_size等于环境数envs_number在提升算法性能的同时又能很好的保证算法稳定性,因此对于mode=0的情况下建议使用batch_size=envs_number的设置。
可以看到,当环境数envs_number远大于batch_size时,mode=2可以很好的避免算法退化,这一点要优于mode=0,不过对于mode=0,我们可以通过减少envs_number与batch_size的大小的差距,也或者使用batch_size=envs_number的设置,同样可以使mode=0得到很好的性能,因此综合考虑,还是建议使用batch_size=envs_number的设置下的mode=0算法。
-------------------------------------------------------------------
并行化强化学习 —— 最终版本 —— 并行reinforce算法的尝试的更多相关文章
- 强化学习策略梯度方法之: REINFORCE 算法(从原理到代码实现)
强化学习策略梯度方法之: REINFORCE 算法 (从原理到代码实现) 2018-04-01 15:15:42 最近在看policy gradient algorithm, 其中一种比较经典的 ...
- 强化学习-MDP(马尔可夫决策过程)算法原理
1. 前言 前面的强化学习基础知识介绍了强化学习中的一些基本元素和整体概念.今天讲解强化学习里面最最基础的MDP(马尔可夫决策过程). 2. MDP定义 MDP是当前强化学习理论推导的基石,通过这套框 ...
- 基于深度强化学习(DQN)的迷宫寻路算法
QLearning方法有着明显的局限性,当状态和动作空间是离散的且维数不高时可使用Q-Table存储每个状态动作的Q值,而当状态和动作时高维连续时,该方法便不太适用.可以将Q-Table的更新问题变成 ...
- ICML论文|阿尔法狗CTO讲座: AI如何用新型强化学习玩转围棋扑克游戏
今年8月,Demis Hassabis等人工智能技术先驱们将来到雷锋网“人工智能与机器人创新大会”.在此,我们为大家分享David Silver的论文<不完美信息游戏中的深度强化学习自我对战&g ...
- 强化学习之Q-learning简介
https://blog.csdn.net/Young_Gy/article/details/73485518 强化学习在alphago中大放异彩,本文将简要介绍强化学习的一种q-learning.先 ...
- 强化学习读书笔记 - 02 - 多臂老O虎O机问题
# 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...
- <强化学习>开门帖
(本系列只用作本人笔记,如果看官是以新手开始学习RL,不建议看我写的笔记昂) 今天是2020年2月7日,开始二刷david silver ulc课程.https://www.youtube.com/w ...
- 强化学习(五)—— 策略梯度及reinforce算法
1 概述 在该系列上一篇中介绍的基于价值的深度强化学习方法有它自身的缺点,主要有以下三点: 1)基于价值的强化学习无法很好的处理连续空间的动作问题,或者时高维度的离散动作空间,因为通过价值更新策略时是 ...
- 机器学习&深度学习基础(tensorflow版本实现的算法概述0)
tensorflow集成和实现了各种机器学习基础的算法,可以直接调用. 代码集:https://github.com/ageron/handson-ml 监督学习 1)决策树(Decision Tre ...
- 【算法总结】强化学习部分基础算法总结(Q-learning DQN PG AC DDPG TD3)
总结回顾一下近期学习的RL算法,并给部分实现算法整理了流程图.贴了代码. 1. value-based 基于价值的算法 基于价值算法是通过对agent所属的environment的状态或者状态动作对进 ...
随机推荐
- 彻底解决C盘不够用的问题(Windows 10)- 常规方法——清垃圾、转虚拟内存、挪大文件
1.清垃圾 2.转虚拟内存 3.挪大文件
- Mybatis、Mybatis Generator、Mybatis-Plus、Mybatis Plus Generator
1.介绍 Mybatis Mybatis 是操作数据库的框架:提供一种Mapper类,支持用Java代码对数据库进行增删改查. 缺点:需要先在xml中写好SQL语句: Mybatis Generato ...
- EthernetIP IO从站设备数据 转 Modbus RTU TCP项目案例
1 案例说明 1. 设置网关采集EthernetIP IO设备数据 2. 把采集的数据转成Modbus协议转发给其他系统. 2 VFBOX网关工作原理 VFBOX ...
- QT学习:00 介绍
--- title: framework-cpp-qt-00-介绍 date: 2020-04-08 15:41:54 categories: tags: - c/c++ - qt --- 章节描述: ...
- rsync 的使用
背景 原文地址:Rsync参数说明及使用文档(给我自己看的) 一.前言 最近发现rsync挺好用的--不过参数有点多,所以这儿写一篇给自己以后要用的时候做个参考. 二.参数说明 这儿全是我翻资料连蒙带 ...
- 中台框架模块开发实践-用 Admin.Core 代码生成器生成通用代码生成器的模块代码
前言 之前分享中台 Admin.Core 的模块代码生成器,陆续也结合群友们的反馈,完善了一些功能和模板上的优化,而本篇将基于此代码生成器生成一个通用代码生成器模块的基本代码 后续再在此代码的基础上进 ...
- SqlCel 和MySQL for Excel在批量处理数据上的优劣
先放MySQL for Excel编辑数据的界面, 理论上可以批量修改数据....但是: 百度翻译如下: 更改不被允许.....[经测试,64位的Excel出现同样的情况] 转换思路:不使用公式去匹配 ...
- P5327 题解
考虑把贡献摊到每个点上计算,每个点带来的贡献实际上是经过它的路径并大小,算完求和之后在除以 \(2\) 就得到了答案. 考虑怎么计算路径并大小. 考虑这样一个办法,将所有路径的起始点和终点按照 DFS ...
- mobaXterm 查看密码
参考:MobaXterm中密码的查看方式 检查是否把密码保存到了注册表中 然后从https://github.com/HyperSine/how-does-MobaXterm-encrypt-pass ...
- win11 vmware16 启动虚拟机引起蓝屏
前言 在win11 上安装 vmware16, 之后安装ubuntu16时,一打开ubuntu虚拟机就触发系统蓝屏. 正文 我改了两个地方: 控制面板->程序->启用或关闭Windows功 ...