精华内容
下载资源
问答
  • 2021-07-21 09:43:46

    相关文章:

    【一】最新多智能体强化学习方法【总结】

    【二】最新多智能体强化学习文章如何查阅{顶会:AAAI、 ICML }

    【三】多智能体强化学习(MARL)近年研究概览 {Analysis of emergent behaviors(行为分析)_、Learning communication(通信学习)}

    【四】多智能体强化学习(MARL)近年研究概览 {Learning cooperation(协作学习)、Agents modeling agents(智能体建模)}

    1.连续动作状态空间算法

    1.1 MADDPG

    Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments

    这是OpenAI团队和McGill大学、UC Berkeley于2017合作发表在NIPS(现在称NeurIPS)上,关于多智能体强化学习(Multi-agent reinforcement learning, MARL)特别经典的一篇文章。本文不仅给出了MADDPG (Multi-agent deep deterministic policy gradient) 这种针对连续动作确定性策略学习的普适性算法,还开源了其仿真环境,包括了合作、竞争以及通信等不同场景,十分方便研究人员在该环境上验证算法性能[1]

    原论文链接:https://proceedings.neurips.cc/paper/2017/file/68a9750337a418a86fe06c1991a1d64c-Paper.pdf

    具体分析可以参考以下文章:

    本人:多智能体强化学习算法【二】【MADDPG、QMIX、MAPPO】

    Papers的知乎专栏:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments

    np.random知乎专栏:多智能体连续行为空间问题求解——MADDPG

    1.1.1 总结

    本文以比较直接的形式将DDPG[2]算法扩展到多智能体强化学习中,通过“集中式训练分布式执行”的思路,计算出每个智能体的最优策略。个人觉得在论文贡献上,其仿真实验的重要性远大于算法设计的本身。

    此外,当智能体数量比较大的时候,该算法的计算规模将会非常大。因为每个智能体都对应两个actor网络(另一个是target actor网络)和两个critic网络(另一个是target critic网络)。如果再加上对其它智能体策略的估计,或者策略集合的训练,更是如此

    1.2 COMA算法解析

    :Counterfactual Multi-Agent Policy Gradients

    基于策略梯度的MARL算法——COMA[1],全称为counterfactual multi-agent (COMA) policy gradients。论文发表在2018年的AAAI上,由牛津大学Shimon Whiteson教授领导的Whiteson Research Lab团队成员合作发表。这个团队我们在后面会经常提起,因为他们在MARL领域做出了很多相当有影响力的工作。相关链接如下:

    http://whirl.cs.ox.ac.uk/

    论文链接:

    https://link.zhihu.com/?target=https%3A//ojs.aaai.org/index.php/AAAI/article/download/11794/11653

    这篇paper基于三个主要的想法:

    1. 使用一个集中式critic网络,在训练的过程中可以获取所有智能体的信息;
    2. 采用反事实基线(counterfactual baseline)来解决信用分配的问题;
    3. Critic网络要能够对反事实基线进行高效的计算。

    具体分析可以参考以下文章:

    Papers的知乎专栏:COMA算法解析: Counterfactual Multi-Agent Policy Gradients

    Handsome Wu的知乎专栏:【文章精读 -- 多智能体3】COMA

    天津包子馅儿知乎:多智能体强化学习笔记04 COMA算法原理介绍

    np.random知乎专栏:多智能体强化学习论文——COMA讲解

    【COMA】一种将团队回报拆分为独立回报的多智能体算法

    1.2.1 总结

    COMA同MADDPG算法[4]一样,都是基于策略梯度的算法。它们都是基于“集中式训练分布式执行”的学习算法,不同的地方在于:

    a. COMA针对离散动作,学习的是 随机策略。而MADDPG针对连续动作,学习的是确定性策略。这在它们策略梯度函数的表达式上能够体现出区别。
    b. COMA主要针对多智能体 协作任务,因此只有一个critic评价团队整体的回报。MADDPG既可以做协作任务,也可以做竞争任务,每个智能体都对应一个奖励函数,因此每个智能体对应一个critic。
    c. 在原文中,COMA使用了 历史观测、动作序列作为网络的输入,而MADDPG没有使用历史序列。因此COMA的网络结构中包含了GRU层,而MADDPG的网络均为2-3个隐层的MLP。当然,这个不是特别重要,针对实际问题时,可以比较灵活一些;
    d. COMA中所有智能体的actor网络 共享参数,输入端加上智能体ID以示区别。而MADDPG则没有共享参数;
    d. COMA使用 反事实基线作为actor网络的优化目标,而MADDPG直接使用Q函数作为每个智能体actor网路的优化目标。

    2.连续离散并存动作状态空间算法

    2.1 MAPPO

    来自清华大学与 UC 伯克利的研究者在一篇论文中针对这一传统认知提出了不同的观点:MARL 算法需要综合考虑数据样本效率(sample efficiency)和算法运行效率(wall-clock runtime efficiency)。在有限计算资源的条件下,与 off-policy 算法相比,on-policy 算法 --MAPPO(Multi-Agent PPO)具有显著高的算法运行效率和与之相当(甚至更高)的数据样本效率。有趣的是,研究者发现只需要对 MAPPO 进行极小的超参搜索,在不进行任何算法或者网络架构变动的情况下就可以取得与 SOTA 算法相当的性能。更进一步地,还贴心地给出了 5 条可以提升 MAPPO 性能的重要建议,并且开源了一套优化后的 MARL 算法源码

    具体分析可以参考以下文章:

    小小何先生的知乎专栏:多智能体强化学习(二) MAPPO算法详解

    本人:多智能体强化学习算法【一】【MAPPO、MADDPG、QMIX】

    3. 离散动作状态空间算法

    3.1 VDN算法解析

     Value-Decomposition Networks For Cooperative Multi-Agent Learning

    VDN (Value Decomposition Networks) 算法[1]。本来打算将此算法和QMIX[2]放到一起介绍的,但是考虑到VDN在MARL领域的知名度和影响力,还是决定先单独介绍此篇。此外,作为QMIX前身,对VDN算法的剖析应该有助于我们更加充分地理解QMIX算法。这样,我们也能够对这两种算法的优势和弊端有着更加全面的认识。

    先说说这篇论文吧,完整版于17年6月份挂在arXiv上。后来在AAMAS 2018上正式发表了一个mini版,只有三页,由DeepMind团队完成。论文PDF链接如下:

    https://arxiv.org/pdf/1706.05296.pdf

    http://ifaamas.org/Proceedings/aamas2018/pdfs/p2085.pdf

    具体分析可以参考以下文章:

    Papers的知乎专栏:VDN算法解析: Value-Decomposition Networks For Cooperative Multi-Agent Learning

    Handsome Wu的知乎专栏:【文章精读 -- 多智能体2】VDN

    3.1.1 总结

    VDN算法结构简洁,通过它分解得到的  可以让智能体根据自己的局部观测选择贪婪动作,从而执行分布式策略。其集中式训练方式能够在一定程度上保证整体Q函数的最优性。此外,VDN的“端到端训练”和“参数共享”使得算法收敛速度非常快,针对一些简单的任务,该算法可以说既快速又有效。

    但是对于一些比较大规模的多智能体优化问题,它的学习能力将会大打折扣。其根本限制在于缺少值函数分解有效性的理论支持。VDN以简单的求和方式将整体Q函数完全分解开,使得多智能体Q网络的拟合能力很受限制。

    QMIX[2]算法中,这种端到端训练的思路被继续沿用。作者改善了值函数分解的网络结构,考虑了系统全局状态  以及分布式策略的单调性约束,有效地增强了网络对整体Q函数的拟合能力。

    3.2 QMIX

     Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning

    提到了QMIX。虽然它是VDN算法的进阶版本,但它们不是由同一个团队发表的。QMIX算法由牛津大学的Whiteson Research Lab团队俄罗斯-亚美尼亚大学(共同一作)合作完成,发表于ICML 2018,是多智能体强化学习领域广为人知的算法。论文链接如下[1]

    https://link.zhihu.com/?target=http%3A//proceedings.mlr.press/v80/rashid18a/rashid18a.pdf

    具体分析可以参考以下文章:

    本人:多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】

    Papers的知乎专栏从 VDN 到 QMIX: Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning

    Handsome Wu知乎:【文章精读 -- 多智能体1】QMIX

    np.random知乎专栏:【QMIX】一种基于Value-Based多智能体算法

    3.2.1 总结

    QMIX算法的设计在理论上和实验验证上,都比VDN有更多的优势。作为基于值函数的MARL算法,广受研究人员的欢迎。

    但是正如作者指出的那样,QMIX在执行策略的时候并不考虑其它智能体的动作。在实际场景中,这是不太合理的。针对合作任务的多智能体场景,只有充分考虑其它智能体可能对自己决策产生的影响,才能更好地进行合作。因此,考虑智能体之间更复杂的关系,例如任务/角色分配、智能体通信等,也是QMIX算法扩展的重要方向。

    3.3 QTRAN

    论文全称为:QTRAN: Learning to Factorize with Transformation for Cooperative Multi-Agent Reinforcement learning

    这篇论文发表于ICML 2019,由韩国技术学院 (KAIST) 的 LANADA (LAboratory of Network Architecture, Design, and Analysis) 实验室成员合作发表,在对比实验的分析部分提到过QTRAN,它在非单调任务上 (合作围捕任务) 的性能表现直接碾压QMIX、MADDPG等经典算法,仅次于WQMIX。相关链接请点击:

    https://link.zhihu.com/?target=http%3A//lanada.kaist.ac.kr/

    https://link.zhihu.com/?target=http%3A//proceedings.mlr.press/v97/son19a.html

    具体分析可以参考以下文章:

    Papers的知乎专栏:QTRAN 算法详解(VDN和QMIX的升级版本)

    小小何先生知乎:多智能体强化学习(一) IQL、VDN、QMIX、QTRAN算法详解

    3.3.1总结

    QTRAN算法其实和VDN更加相似一些,因为它学习  的过程和VDN没有什么区别。但是,QTRAN比VDN多出一个  函数,它可以帮助算法找到合适的  使其和  在最优动作的选择上是等价的。这是QTRAN算法的基本思路。

    但是在实际操作过程中,  并不是那么好学的。为了使  能够随着  的更新而同步更新,作者在原始版本QTRAN-base的基础上提出了QTRAN-alt。

    QTRAN作为VDN和QMIX的改进算法,被大量的MARL相关论文引用并作为baseline,例如前面介绍的WQMIX算法

    虽然现在已经有了VDN,QMIX,QTRAN,WQMIX等,但是关于值函数分解的研究仍然在继续进行着,因为它们都不是最完美的解决方案

    3.4MAVEN算法

    全称为 Multi-Agent Variational Exploration[1],也是基于值函数的多智能体强化学习方法。它是在QMIX算法基础上,为解决多智能体探索效率低而提出的改进算法。这篇论文发表在NeurIPS 2019上,由相同的团队完成:论文链接

    https://link.zhihu.com/?target=http%3A//whirl.cs.ox.ac.uk/

    论文链接:

    https://link.zhihu.com/?target=https%3A//proceedings.neurips.cc/paper/2019/hash/f816dc0acface7498e10496222e9db10-Abstract.html

    在前面曾提到过,QMIX算法是一种满足单调性约束的Q值拟合器。这种约束能够解决大部分MARL问题,但是对于一些非单调性的任务,QMIX的函数拟合能力就会受到比较大的限制。这种限制也体现在智能体在联合动作空间中的探索上,由于智能体的策略总是满足单调性约束,因此探索也就被限制在一个特定的流形上,而不是整个联合动作空间。最后,算法就只能找到局部最优解。针对这样的问题,作者结合policy-based和value-based方法,基于QMIX框架提出了一个新的分层学习算法——MAVEN (Multi-agent variational exploration)

    具体分析可以参考以下文章:

    Papers的知乎专栏:多智能体高效探索 —— MAVEN 算法

    3.4.1总结

    总的来说,该算法借鉴了bootstrapped DQN的思想,考虑了一个隐策略来生成隐变量。这种思想经常在因果推断中用到,即变量X和变量Y之间,在不同场景下它们的联合概率分布P(X, Y)是不一样的。这样就导致我用现有的样本学不出来从X到Y之间的映射。出现这样的原因往往是没有从不同场景的样本中找到它们共同的隐变量Z。

    在bootstrapped DQN中,也考虑隐变量z,将不同的Q值和隐变量关联起来。这样我就能扩大值函数的探索方向和范围,也就能帮助算法收集更多不一样的数据。数据越具有多样性,就越有可能学习到全局最优解。

    因此,MAVEN继续发扬这种思想,将每个智能体的值函数或策略都赋予该隐变量。这种隐变量能够使智能体的策略和轨迹数据更加多样化,不会受到单调性的严格限制。因此,这样的算法就容易找到非单调的最优解。

    3.5 Weighted QMIX

    :Expanding Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning

    基于值函数的多智能体强化学习 (MARL) 算法——WQMIX[1]。一听这名字就知道这个算法是QMIX[2]的改进版本,WQMIX算法同样是由牛津大学的Whiteson Research Lab团队成员合作完成,发表在NeurIPS 2020,论文链接如下:

    https://link.zhihu.com/?target=https%3A//proceedings.neurips.cc/paper/2020/hash/73a427badebe0e32caa2e1fc7530b7f3-Abstract.html

    具体分析可以参考以下文章:

    Papers的知乎专栏:从 QMIX 到 WQMIX —— Weighted QMIX 算法详解

    3.5.1总结

    本文是针对QMIX算法函数表达能力上的限制,通过理想形式下对QMIX的分析,提出了加权QMIX算法。该算法在理论上能够保证将QMIX输出的满足“单调性”约束的函数,经过权重函数对每个联合动作的加权,映射到非单调值函数,并得到对应的最优策略,从而避免QMIX算法得到的策略陷入局部最优。

    为了学习权重函数,WQMIX算法还要学习一个不受“单调性”约束的  函数,并保证其能收敛至  。但是在实际学习的过程中,由于各种近似关系,对  结构的设计,反而会导致整体性能的下降。

    作者指出,WQMIX还有更多的改进空间,例如权重函数的选择。本文中的权重函数比较简单,只考虑了全局状态和联合动作信息,并且取值要么是1,要么是  。因此,更复杂的权重函数应该是未来针对该算法的研究方向。

    更多相关内容
  • 由于通信行业的快速发展,对各种射频组件的需求量很大并已投入...此外,我们提出了一种基于强化学习算法的智能调整方法,该算法可在调整过程中动态提取人的策略。实验结果证明了强化学习在掌握人类技能方面的强大表现。
  • 数据中心的绿色可靠运行具有重大的社会经济价值。综述了面向数据中心绿色可靠运行的优化与控制方法,提出一种事件驱动的强化学习方法,用于提升运行能效;提出一种电池寿命预测方法,提升了预测精度。
  • 面向智能通信的深度强化学习方法.pdf
  • 基于双深度网络的安全深度强化学习方法.pdf
  • 强化学习方法和教程
  • 仿生机器人运动步态控制:强化学习方法综述
  • 强化学习方法汇总_(Reinforcement_Learning)
  • 为解决分层强化学习中现有的自动分层方法对环境和状态空间特性依赖过强的问题,提出了一种基于免疫聚类的自动分层强化学习方法。该方法以Sutton提出的Option框架为基础,在学习的初始阶段,每个Option仅包含一个入口...
  • 提出了一种优化任何给定数学函数的新颖方法,称为“强化学习算法”(MORELA)。 尽管强化学习(RL)最初是为解决马尔可夫决策问题而开发的,但可以与某些改进一起使用以优化数学函数。 在MORELA的核心处,围绕在可行...
  • 使用聚类算法对连续状态空间进行自适应离散化,得到了基于K-均值聚类的强化学习方法.该方法的学习过程分为两部分:对连续状态空间进行自适应离散化的状态空间学习,使用K-均值聚类算法;寻找最优策略的策略学习,使用替代...
  • 问题,即状态空间的大小随着特征数量的增加而发生指数级的增长,以及收敛速度过慢的问题,提出了一种基于启发式奖赏函数的分层强化学习方法.该方法不仅能够大幅度减少环境状态空间,还能加快学习的收敛速度.将此算法应用...
  • 数据驱动的人群疏散:一种强化学习方法
  • Q学习是一种重要的强化学习算法。本文针对Q学习和Q(λ)算法的不足,提出了一种具有...理论分析和数值试验均表明,该算法具有较强的预见能力,同时能降低计算复杂度,是一种有效平衡更新速度和复杂度的强化学习方法
  • 一种基于深度强化学习的通信抗干扰智能决策方法.pdf
  • 强化学习方法在高峰时段协调城市轨道交通的客流控制
  • 连续状态自适应离散化基于K-均值聚类的强化学习方法.pdf
  • 深度强化学习对比,对比了DDPG,PG以及TD3三种方法+含代码操作演示视频 运行注意事项:使用matlab2021a或者更高版本测试,运行里面的Runme.m文件,不要直接运行子函数文件。运行时注意matlab左侧的当前文件夹窗口...
  • 基于自回归预测模型的深度注意力强化学习方法.pdf
  • 基于强化学习方法的PID参数整定

    千次阅读 2021-04-21 08:23:45
    这里我们采用强化学习方法来调节PID参数。 这个例子展示了如何使用双延迟深度确定性策略梯度(TD3:twin-delayed deep deterministic policy gradient)强化学习算法来调整PI控制器。整定控制器的性能与使用Control ...

    前言

    PID控制器在工业界应用非常广泛,但是PID的参数调节一般需要人工根据经验法来试。对于有经验的工程师来说,一般试几次就可以获得满足调节的参数。然而对于新手工程师却很难确定一套比较好的参数。

    这里我们采用强化学习的方法来调节PID参数。

    这个例子展示了如何使用双延迟深度确定性策略梯度(TD3:twin-delayed deep deterministic policy gradient)强化学习算法来调整PI控制器。整定控制器的性能与使用Control System Tuner app整定的控制器的性能进行了比较。在SIMULINK中使用Control System Tuner app来整定控制器需要Simulink Control Design软件。

    对于具有少量可调参数的相对简单的控制任务,基于模型的整定技术与基于无模型的RL方法相比,具有更快的整定过程,可以获得较好的结果。然而,RL方法更适合于高度非线性系统或自适应控制器整定。

    为了便于控制器比较,两种整定方法都使用线性二次型高斯(LQG)目标函数。

    此示例使用强化学习(RL) agent来计算PI控制器的增益。并使用神经网络控制器替换PI控制器。

    环境模型

    环境模型是water tank模型,该控制系统的目标是保持水箱中的水位与参考值相匹配。

    打开模型

    open_system('watertankLQG');
    

    在这里插入图片描述
    该模型考虑了具有方差 E ( n 2 ( t ) ) = 1 E\left(n^2 \left(t\right)\right)=1 E(n2(t))=1的过程噪声。

    为了在保持水位的同时最大限度地减少控制力u,本例中的控制器使用以下LQG标准。

    J = l i m T ⇒ ∞ E ( 1 T ∫ 0 T ( ( r e f − y ) 2 ( t ) + 0 . 01 u 2 ( t ) ) d t ) J=\underset{T\Rightarrow \infty }{\mathrm{lim}} E\left(\frac{1}{T}\int_0^T \left({\left(\mathrm{ref}-y\right)}^2 \left(t\right)+0\ldotp 01u^2 \left(t\right)\right)\mathrm{dt}\right) J=TlimE(T10T((refy)2(t)+0.01u2(t))dt)

    要在此模型中模拟控制器,必须以秒为单位指定模拟时间Tf和控制器采样时间Ts。

    Ts = 0.1;
    Tf = 10;
    

    利用控制系统调节器整定PI控制器

    要使用Control System Tuner(控制系统整定器)在Simulink中调整控制器,必须将控制器块指定为调整块,并定义调整过程的目标。

    在本例中,使用Control System Tuner打开保存的会话ControlSystemTunerSession.mat。本例子将WatertankLQG模型中的PID控制器块指定为调整块,并包含一个LQG整定目标。

    controlSystemTuner("ControlSystemTunerSession")
    

    在Tuning条上,点击Tune,来整定控制器。

    分别把比例和微分参数调到9.8和1e-6

    Kp_CST = 9.80199999804512;
    Ki_CST = 1.00019996230706e-06;
    

    创建环境以训练agent

    定义模型来训练强化学习的agent,并改进water tank模型,需要以下步骤:

    1. 除去PID控制器
    2. 加入强化学习agent的模块
    3. 创建观测向量 [ ∫ e    d t e ] T    {\left\lbrack \begin{array}{ccc} \int e\;\mathrm{dt} & e & \end{array}\right\rbrack }^{T\;} [edte]T e = r − h e=r-h e=rh h h h是水箱的高度, r r r是参考高度。把观测信号和强化学习agent模块连接起来。
    4. 定义强化学习的回报函数为LQG cost的负值,即 R e w a r d = − ( ( r e f − h ) 2 ( t ) + 0 . 01 u 2 ( t ) ) \mathrm{Reward}=-\left({\left(\mathrm{ref}-h\right)}^2 \left(t\right)+0\ldotp 01u^2 \left(t\right)\right) Reward=((refh)2(t)+0.01u2(t))。强化学习的agent最大化回报,即是最小化LQG cost。

    符合上述描述的模型是 rlwatertankPIDTune.slx。

    mdl = 'rlwatertankPIDTune';
    open_system(mdl)
    

    在这里插入图片描述
    创建环境接口对象。为此,请使用本例末尾定义的localCreatePIDEnv函数:

    [env,obsInfo,actInfo] = localCreatePIDEnv(mdl);
    

    输出环境的观测量和动作量的维度值:

    numObservations = obsInfo.Dimension(1);
    numActions = prod(actInfo.Dimension);
    

    修复随机种子以保证结果复现:

    rng(0)
    

    创建TD3 agent

    给定观察结果,TD3 agent决定使用参与者表示采取哪个操作。要创建执行元,首先使用观察输入和动作输出创建深度神经网络。

    可以将PI控制器建模为具有一个具有误差和误差积分观测的完全连接层的神经网络。
    u =    [ ∫ e    d t e ] ∗ [ K i K p ] T    u=\;\left\lbrack \begin{array}{ccc} \int e\;\mathrm{dt} & e & \end{array}\right\rbrack *{\left\lbrack \begin{array}{ccc} K_i & K_p & \end{array}\right\rbrack }^{T\;} u=[edte][KiKp]T
    注:

    • u 是actor neural network的输出
    • K p Kp Kp K i Ki Ki神经网络权重的绝对值
    • e = r − h e=r-h e=rh h h h是水箱的高度, r r r是水箱的参考高度

    梯度下降优化可以使权值变为负值。若要避免负权重,可以将普通的fullyConnectedLayer替换为fullyConnectedPILayer。

    initialGain = single([1e-3 2]);
    actorNetwork = [
        featureInputLayer(numObservations,'Normalization','none','Name','state')
        fullyConnectedPILayer(initialGain, 'Action')];
    actorOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
    actor = rlDeterministicActorRepresentation(actorNetwork,obsInfo,actInfo,...
        'Observation',{'state'},'Action',{'Action'},actorOptions);
    

    TD3 agent使用两个批评值函数表示来近似给定观察和行动的长期奖励。要创建批评者,首先创建一个具有两个输入(观察和动作)和一个输出的深度神经网络。
    要创建批评者,请使用本例末尾定义的localCreateCriticNetwork函数。对这两种批评表示使用相同的网络结构。

    criticNetwork = localCreateCriticNetwork(numObservations,numActions);
    criticOpts = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
    
    critic1 = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
        'Observation','state','Action','action',criticOpts);
    critic2 = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
        'Observation','state','Action','action',criticOpts);
    critic = [critic1 critic2];
    

    使用以下选项配置agent:

    1. 设置agent使用控制器的取样时间Ts
    2. 设置mini-batch大小为128
    3. 设置经验buffer长度为1e6
    4. 将exploration model和目标策略平滑模型设置为使用方差为0.1的高斯噪声。

    使用rlTD3AgentOptions指定TD3 agent选项:

    agentOpts = rlTD3AgentOptions(...
        'SampleTime',Ts,...
        'MiniBatchSize',128, ...
        'ExperienceBufferLength',1e6);
    agentOpts.ExplorationModel.Variance = 0.1;
    agentOpts.TargetPolicySmoothModel.Variance = 0.1;
    

    使用指定的actor representation、critic repesention和agent创建TD3 agent:

    agent = rlTD3Agent(actor,critic,agentOpts);
    

    训练agent

    要训练agent,首先指定以下训练条件:

    1. 每个训练的episode最多1000个,每个episode最多100个时间步长。
    2. 在Episode Manager中显示训练进度(设置Plots选项),并禁用命令行显示(设置Verbose选项)。
    3. 当agent在连续100个episode中获得的平均累计奖励大于-355时,停止训练。则可以认为agent可以控制水箱中的水位。
    maxepisodes = 1000;
    maxsteps = ceil(Tf/Ts);
    trainOpts = rlTrainingOptions(...
        'MaxEpisodes',maxepisodes, ...
        'MaxStepsPerEpisode',maxsteps, ...
        'ScoreAveragingWindowLength',100, ...
        'Verbose',false, ...
        'Plots','training-progress',...
        'StopTrainingCriteria','AverageReward',...
        'StopTrainingValue',-355);
    

    使用train函数训练agent是一个计算量很大的过程,需要几分钟才能完成。要在运行此例子时节省时间,可以通过将doTraining设置为false来加载预先训练的agent。要自己训练agent,请将doTraining设置为true。

    
    if doTraining
        % Train the agent.
        trainingStats = train(agent,env,trainOpts);
    else
        % Load pretrained agent for the example.
        load('WaterTankPIDtd3.mat','agent')
    end
    

    在这里插入图片描述

    验证训练好的Agent

    通过仿真验证学习到的Agent与模型的一致性:

    simOpts = rlSimulationOptions('MaxSteps',maxsteps);
    experiences = sim(env,agent,simOpts);
    

    PI控制器的积分和比例增益是执行器表示的绝对值权重。要获得权重,首先从actor中提取可学习的参数。

    actor = getActor(agent);
    parameters = getLearnableParameters(actor);
    

    获得控制器增益:

    Ki = abs(parameters{1}(1));
    Kp = abs(parameters{1}(2));
    

    将从RL agent中获得的增益应用于原始PI控制块,并运行阶跃响应仿真。

    mdlTest = 'watertankLQG';
    open_system(mdlTest);
    set_param([mdlTest '/PID Controller'],'P',num2str(Kp))
    set_param([mdlTest '/PID Controller'],'I',num2str(Ki))
    sim(mdlTest)
    

    提取用于仿真的阶跃响应信息、LQG cost和稳定裕度:

    rlStep = simout;
    rlCost = cost;
    rlStabilityMargin = localStabilityAnalysis(mdlTest);
    

    将使用控制系统调节器获得的增益应用于原始PI控制块,并运行阶跃响应仿真:

    set_param([mdlTest '/PID Controller'],'P',num2str(Kp_CST))
    set_param([mdlTest '/PID Controller'],'I',num2str(Ki_CST))
    sim(mdlTest)
    cstStep = simout;
    cstCost = cost;
    cstStabilityMargin = localStabilityAnalysis(mdlTest);
    

    比较控制器的控制效果

    绘制各系统的阶跃响应:

    figure
    plot(cstStep)
    hold on
    plot(rlStep)
    grid on
    legend('Control System Tuner','RL','Location','southeast')
    title('Step Response')
    

    在这里插入图片描述
    分析两个系统的阶跃响应仿真结果:

    rlStepInfo = stepinfo(rlStep.Data,rlStep.Time);
    cstStepInfo = stepinfo(cstStep.Data,cstStep.Time);
    stepInfoTable = struct2table([cstStepInfo rlStepInfo]);
    stepInfoTable = removevars(stepInfoTable,{...
        'SettlingMin','SettlingMax','Undershoot','PeakTime'});
    stepInfoTable.Properties.RowNames = {'Control System Tuner','RL'};
    stepInfoTable
    

    在这里插入图片描述
    分析两个仿真结果的稳定性:

    stabilityMarginTable = struct2table([cstStabilityMargin rlStabilityMargin]);
    stabilityMarginTable = removevars(stabilityMarginTable,{...
        'GMFrequency','PMFrequency','DelayMargin','DMFrequency'});
    stabilityMarginTable.Properties.RowNames = {'Control System Tuner','RL'};
    stabilityMarginTable
    

    在这里插入图片描述
    比较两个控制器的累积LQG cost。RL调整的控制器产生稍微更优的解决方案。

    rlCumulativeCost  = sum(rlCost.Data)
    

    得到:rlCumulativeCost=-375.9135

    cstCumulativeCost = sum(cstCost.Data)
    

    cstCumulativeCost=-376.9373

    两个控制器都会产生稳定的响应,控制器使用Control System Tuner进行调整会产生更快的响应。然而,RL整定方法产生更高的增益容限和更优化的解决方案。

    一些函数的定义

    创建water tank强化学习agent的函数:

    function [env,obsInfo,actInfo] = localCreatePIDEnv(mdl)
    
    % Define the observation specification obsInfo and action specification actInfo.
    obsInfo = rlNumericSpec([2 1]);
    obsInfo.Name = 'observations';
    obsInfo.Description = 'integrated error and error';
    
    actInfo = rlNumericSpec([1 1]);
    actInfo.Name = 'PID output';
    
    % Build the environment interface object.
    env = rlSimulinkEnv(mdl,[mdl '/RL Agent'],obsInfo,actInfo);
    
    % Set a cutom reset function that randomizes the reference values for the model.
    env.ResetFcn = @(in)localResetFcn(in,mdl);
    end
    

    在每个episode开始时随机化参考信号和水箱的初始高度:

    function in = localResetFcn(in,mdl)
    
    % randomize reference signal
    blk = sprintf([mdl '/Desired \nWater Level']);
    hRef = 10 + 4*(rand-0.5);
    in = setBlockParameter(in,blk,'Value',num2str(hRef));
    
    % randomize initial height
    hInit = 0;
    blk = [mdl '/Water-Tank System/H'];
    in = setBlockParameter(in,blk,'InitialCondition',num2str(hInit));
    
    end
    

    用于线性化和计算SISO水箱系统的稳定裕度的函数:

    function margin = localStabilityAnalysis(mdl)
    
    io(1) = linio([mdl '/Sum1'],1,'input');
    io(2) = linio([mdl '/Water-Tank System'],1,'openoutput');
    op = operpoint(mdl);
    op.Time = 5;
    linsys = linearize(mdl,io,op);
    
    margin = allmargin(linsys);
    end
    

    创建critic网络的函数:

    function criticNetwork = localCreateCriticNetwork(numObservations,numActions)
    statePath = [
        featureInputLayer(numObservations,'Normalization','none','Name','state')
        fullyConnectedLayer(32,'Name','fc1')];
    actionPath = [
        featureInputLayer(numActions,'Normalization','none','Name','action')
        fullyConnectedLayer(32,'Name','fc2')];
    commonPath = [
        concatenationLayer(1,2,'Name','concat')
        reluLayer('Name','reluBody1')
        fullyConnectedLayer(32,'Name','fcBody')
        reluLayer('Name','reluBody2')
        fullyConnectedLayer(1,'Name','qvalue')];
    
    criticNetwork = layerGraph();
    criticNetwork = addLayers(criticNetwork,statePath);
    criticNetwork = addLayers(criticNetwork,actionPath);
    criticNetwork = addLayers(criticNetwork,commonPath);
    
    criticNetwork = connectLayers(criticNetwork,'fc1','concat/in1');
    criticNetwork = connectLayers(criticNetwork,'fc2','concat/in2');
    end
    
    展开全文
  • 水下声干扰信道中的自适应资源分配:一种强化学习方法
  • 之前介绍的方法也有一个前提条件即状态和行为是离散的,状态空间和行为空间有限,状态值函数为一个索引,状态-行为值函数为二维表格,因此也被成为表格型强化学习。 如果状态或者状态-行为的维度多大,比如状态为...

    值函数

    动态规划,蒙特卡洛和时间差分的强化学习,均遵循基本的步骤:先评估值函数,然后根据值函数改进策略。之前介绍的方法也有一个前提条件即状态和行为是离散的,状态空间和行为空间有限,状态值函数为一个索引,状态-行为值函数为二维表格,因此也被成为表格型强化学习。

    如果状态或者状态-行为的维度多大,比如状态为连续空间,那么就需要考虑逼近值函数了,之后仍然采用策略迭代或者值迭代的方法进行强化学习。

    逼近值函数的话,那么就是监督学习了,需要确定学习的目标。重新看一下蒙特卡洛和时间差分法的公式:
    蒙特卡洛方法: ν ( s t ) = ν ( s t ) + α ( G t − ν ( s t ) ) \nu(s_t)= \nu(s_t) + \alpha \big(G_t - \nu(s_t)\big) ν(st)=ν(st)+α(Gtν(st))
    时间差分法: ν ( s t ) = ν ( s t ) + α ( R t + 1 + γ ν ( s t + 1 ) − ν ( s t ) ) \nu(s_t)= \nu(s_t) + \alpha \big(R_{t+1} + \gamma \nu(s_{t+1}) - \nu(s_t)\big) ν(st)=ν(st)+α(Rt+1+γν(st+1)ν(st))
    迭代过程都是朝着一个目标更新的,在蒙特卡洛方法中是 G t G_t Gt,在时间差分法中是 R t + 1 + γ v ( s t + 1 ) R_{t+1} + \gamma v(s_{t+1}) Rt+1+γv(st+1). 因此逼近值函数的输入输出数据对就是 < S t , U t > <S_t, U_t> <St,Ut>,对应训练的目标函数是:
    a r g m i n θ ( U t − ν ^ ( S t , θ ) ) 2 arg min_{\theta} \big( U_t - \hat{\nu}(S_t, \theta) \big)^2 argminθ(Utν^(St,θ))2

    线性逼近

    ν ^ ( s , θ ) = θ T ϕ ( s ) \hat{\nu}(s, \theta) = \theta^T \phi(s) ν^(s,θ)=θTϕ(s),其中 ϕ ( s ) \phi(s) ϕ(s)为基函数
    常用的基函数有:
    多项式函数,如 ( 1 , s 1 , s 2 , s 1 s 2 , s 1 2 , s 2 2 , . . . . ) \big(1, s_1, s_2, s_1s_2, s_1^2, s_2^2,....) (1,s1,s2,s1s2,s12,s22,....)
    傅里叶函数,如 ϕ i ( s ) = c o s ( i π s ) , s ∈ [ 0 , 1 ] \phi_i(s)=cos(i\pi s),s \in [0,1] ϕi(s)=cos(iπs),s[0,1]
    径向基函数,如 ϕ i ( s ) = e x p ( − ∣ ∣ s − c i ∣ ∣ 2 2 σ i 2 ) , s ∈ [ 0 , 1 ] \phi_i(s)=exp \big(-\frac{||s-c_i||^2}{2\sigma_i^2} \big),s \in [0,1] ϕi(s)=exp(2σi2sci2),s[0,1]
    代码实现见【强化学习笔记】6.2 基于值函数逼近的强化学习方法-蒙特卡洛线性逼近代码实现
    代码实现见【强化学习笔记】6.3 基于值函数逼近的强化学习方法-TD Sarsa算法线性逼近代码实现
    代码实现见【强化学习笔记】6.4 基于值函数逼近的强化学习方法-TD Q-learning线性逼近代码实现

    非线性逼近

    常用神经网络等。
    代码实现见【强化学习笔记】6.5 基于值函数逼近的强化学习方法-TD Q-learning非线性逼近代码实现

    增量式学习方法

    随机梯度法(SDG)是常用的增量式学习方法。参数更新的方式为:
    θ t + 1 = θ t + α [ U t − ν ^ ( S t , θ ) ] ∇ θ ν ^ ( S t , θ ) \theta_{t+1} = \theta_t + \alpha \big[U_t - \hat{\nu}(S_t, \theta) \big] \nabla_{\theta} \hat{\nu}(S_t, \theta) θt+1=θt+α[Utν^(St,θ)]θν^(St,θ)

    对于蒙特卡洛方法, θ t + 1 = θ t + α [ G t − ν ^ ( S t , θ ) ] ∇ θ ν ^ ( S t , θ ) \theta_{t+1} = \theta_t + \alpha \big[G_t - \hat{\nu}(S_t, \theta) \big] \nabla_{\theta} \hat{\nu}(S_t, \theta) θt+1=θt+α[Gtν^(St,θ)]θν^(St,θ)
    对于时间差分方法, θ t + 1 = θ t + α [ R t + 1 + γ ν ^ ( S t + 1 , θ ) − ν ^ ( S t , θ ) ] ∇ θ ν ^ ( S t , θ ) \theta_{t+1} = \theta_t + \alpha \big[R_{t+1} + \gamma \hat{\nu}(S_{t+1}, \theta)- \hat{\nu}(S_t, \theta) \big] \nabla_{\theta} \hat{\nu}(S_t, \theta) θt+1=θt+α[Rt+1+γν^(St+1,θ)ν^(St,θ)]θν^(St,θ)
    注意在时间差分法中目标值中也含有参数 θ \theta θ,在这里忽略其影响,这种方法称之为半梯度方法。
    当采用线性逼近函数 ν ^ ( s , θ ) = θ T ϕ ( s ) \hat{\nu}(s, \theta) = \theta^T \phi(s) ν^(s,θ)=θTϕ(s)时, ν ^ ( S t , θ ) = ϕ ( S t ) \hat{\nu}(S_t, \theta)=\phi(S_t) ν^(St,θ)=ϕ(St)

    增量式学习方法

    可以提高计算效率,但是计算复杂。相关知识可以参看机器学习,不再赘述。

    参考书籍:

    1. 深入浅出强化学习原理入门

    欢迎关注微信公众号:AITBOOK
    在这里插入图片描述

    展开全文
  • 为克服已有控制方法需要系统模型的弊端,提出一个基于系统数据的强化学习算法,使输出同步控制器也可以被应用于模型未知的情况。此外,通过调节价值函数中的权重矩阵,可以减少每个智能体的控制成本。最后,通过一个...
  • 文章提出一种基于强化学习的 HEVC 帧内预测速率控制算法,通过对 encoder 端帧内预测的决策过程分析与建模最终通过强化学习解决问题。
  • 基于改进深度强化学习方法的单交叉口信号控制.pdf
  • 基于BP神经网络的双层启发式强化学习方法.pdf
  • 自组织映射神经网络量化机器人强化学习方法研究.pdf
  • 基于加权密集连接卷积的深度强化学习方法总结.pdf
  • 基于加权密集连接卷积网络的深度强化学习方法.pdf
  • 面向数据中心绿色可靠运行的强化学习方法.docx

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 86,971
精华内容 34,788
关键字:

强化学习方法