本文代码地址:

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算法的尝试的更多相关文章

  1. 强化学习策略梯度方法之: REINFORCE 算法(从原理到代码实现)

    强化学习策略梯度方法之: REINFORCE 算法 (从原理到代码实现) 2018-04-01  15:15:42   最近在看policy gradient algorithm, 其中一种比较经典的 ...

  2. 强化学习-MDP(马尔可夫决策过程)算法原理

    1. 前言 前面的强化学习基础知识介绍了强化学习中的一些基本元素和整体概念.今天讲解强化学习里面最最基础的MDP(马尔可夫决策过程). 2. MDP定义 MDP是当前强化学习理论推导的基石,通过这套框 ...

  3. 基于深度强化学习(DQN)的迷宫寻路算法

    QLearning方法有着明显的局限性,当状态和动作空间是离散的且维数不高时可使用Q-Table存储每个状态动作的Q值,而当状态和动作时高维连续时,该方法便不太适用.可以将Q-Table的更新问题变成 ...

  4. ICML论文|阿尔法狗CTO讲座: AI如何用新型强化学习玩转围棋扑克游戏

    今年8月,Demis Hassabis等人工智能技术先驱们将来到雷锋网“人工智能与机器人创新大会”.在此,我们为大家分享David Silver的论文<不完美信息游戏中的深度强化学习自我对战&g ...

  5. 强化学习之Q-learning简介

    https://blog.csdn.net/Young_Gy/article/details/73485518 强化学习在alphago中大放异彩,本文将简要介绍强化学习的一种q-learning.先 ...

  6. 强化学习读书笔记 - 02 - 多臂老O虎O机问题

    # 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...

  7. <强化学习>开门帖

    (本系列只用作本人笔记,如果看官是以新手开始学习RL,不建议看我写的笔记昂) 今天是2020年2月7日,开始二刷david silver ulc课程.https://www.youtube.com/w ...

  8. 强化学习(五)—— 策略梯度及reinforce算法

    1 概述 在该系列上一篇中介绍的基于价值的深度强化学习方法有它自身的缺点,主要有以下三点: 1)基于价值的强化学习无法很好的处理连续空间的动作问题,或者时高维度的离散动作空间,因为通过价值更新策略时是 ...

  9. 机器学习&深度学习基础(tensorflow版本实现的算法概述0)

    tensorflow集成和实现了各种机器学习基础的算法,可以直接调用. 代码集:https://github.com/ageron/handson-ml 监督学习 1)决策树(Decision Tre ...

  10. 【算法总结】强化学习部分基础算法总结(Q-learning DQN PG AC DDPG TD3)

    总结回顾一下近期学习的RL算法,并给部分实现算法整理了流程图.贴了代码. 1. value-based 基于价值的算法 基于价值算法是通过对agent所属的environment的状态或者状态动作对进 ...

随机推荐

  1. 通过 Canal 将 MySQL 数据实时同步到 Easysearch

    Canal 是阿里巴巴集团提供的一个开源产品,能够通过解析数据库的增量日志,提供增量数据的订阅和消费功能.使用 Canal 模拟成 MySQL 的 Slave,实时接收 MySQL 的增量数据 bin ...

  2. 配置系统未能初始化。“System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。

    配置系统未能初始化."System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 1.是检查当前程序的 App.c ...

  3. LNMP集群架构

    网站集群拆分 上一节我们是部署了单机的LNMP,再往下,要进行拆分了,无论是性能.还是安全性,都务必要拆分. 拆分的内容有 nginx集群 mysql nfs共享存储 等 拆分思路 情况1 当前的单机 ...

  4. rsync备份

    备份工具rsync 备份是太常见.且太重要的一个日常工作了. 备份源码.文档.数据库.等等. 类似cp命令拷贝,但是支持服务器之间的网络拷贝,且保证安全性. 学习背景 超哥游戏公司要每天都要对代码备份 ...

  5. Codeforces 1868C/1869E Travel Plan 题解 | 巧妙思路与 dp

    为了更好的阅读体验,请点击这里 题目链接:Travel Plan 题目大意:\(n\) 个点的完全二叉树,每个点可以分配 \(1 \sim m\) 的点权,定义路径价值为路径中最大的点权,求所有路径的 ...

  6. 我又学会了使用Range实现网络文件下载的断点续传

    目录 前言 1.Range请求头 1.1.概述 1.2.使用限制 1.3.范围请求 1.4.预防资源变更 2.断点续传下载实现 2.1.流程设计 2.2.代码实现 2.3.运行结果 3.RandomA ...

  7. FFMpeg 中的数据结构

    FFMpeg 中比较重要的函数以及数据结构如下: 数据结构: (1) AVFormatContext (2) AVOutputFormat (3) AVInputFormat (4) AVCodecC ...

  8. power bi创建切片器导航

    现在很多报告使用的是按钮导航,今天分享另外一种方式:切片器导航. 第一步: 新建一个页面导航表,主页-输入数据-[填写列名,每页报表的表名] 如图: [页面导航表] 第二步: 添加一个切片器,将页面导 ...

  9. python3 socket 获取域名信息

    可以当ping用,应用场景可以在一些没有安装ping工具的镜像容器中,诊断dns或域名的可用性. #-*- coding:utf-8 -*- import socket import tracebac ...

  10. 3款C#开源且实用的工具类库,工作效率提升利器!

    前言 在日常工作开发中工具类库是软件开发中不可或缺的一部分,它们通过提供代码重用.通用功能.隐藏复杂性.提高代码质量.扩展性等方面的优势,帮助开发者更高效.更稳定地构建软件应用程序.今天大姚给大家分享 ...