最近在看控制领域研究热门–强化学习相关的东西,跟着matlab官方强化学习教程一边看一边学,感觉需要补很多机器学习相关的知识,高数概率论那些,感觉现在只大概会用,原理啥的还没特别透彻。

1. 强化学习概述

  • obsinfo与actinfo:定义观测信号与控制信号的维度与范围。
  • env:观测向量与输出动作的定义以及eposide每次调用的resetfcn定义。
  • agent:智能体,强化学习控制器
  • reward:奖励函数,目前看来使用定性定量目标和使用连续可导的函数均比较合适
  • 强化学习算法
    – 基于价值函数求解:MD、DP、Q-Learning等
    – 基于策略梯度求解:DPG、SAC、TD3、DDPG等

  官方案例用的是DDPG算法,于是我对DDPG进行了一些了解,DDPG结合了深度神经网络和强化学习策略,通过神经网络来拟合策略函数和价值函数,包含两大部分:Critic和Actor,Critic输出当前状态下的价值函数,Actor输出智能体的动作,DDPG适用于连续动作空间的任务。DDPG原理的通俗理解==>深度确定性策略梯度 DDPG

2. 仿真示例

  考虑如下带外部扰动的二阶弹簧阻尼系统
m x ¨ + c x ˙ + k x = u + d m\ddot{x}+c\dot{x}+kx=u+d mx¨+cx˙+kx=u+d其中,x为位移;u为控制输入;m为质量;c为阻尼系数;k为弹簧刚度;d为加在控制输入端的外部扰动,设为d=0.5*sin(t)
目标:通过DDPG控制器,实现系统的常值或正弦信号跟踪控制

DDPG设计过程中需要注意:

  • 观测信号输入的有误差、误差微分、误差积分。目的是防止最终的跟踪控制存在稳态误差,因此需要尽可能输入较多的信息给控制器。如果想要精度更高可再输入误差的二阶导等信息。
  • 奖惩函数(非常重要):决定了是否能收敛,reward函数综合考虑误差、误差微分、误差积分以及控制输入的权重,当跟踪误差小于某个阈值给一个正向激励。
  • is done:这里不设置停止条件,当迭代满足最大次数时或者奖惩值满足某个阈值时停止迭代。
  • localResetFcn 设置不同的参考信号和初始条件(如常值 or 正弦),从而让 agent 学会应对不同类型的参考信号。

DDPG算法参数设置:

  • 最大迭代次数 600,仿真时长Ts 10s,采样时间 0.05s。
  • 其余超参数设为一般值。

基于 Simulink 环境(rlSimulinkEnv) + M 函数定义的训练脚本,搭建的simulink仿真框图如下所示:

2.1 训练过程

  观察整体训练过程,Episode rewardAverage reward 逐步上升,最终收敛,q0值也稳步上升,说明了训练是有效的。

2.2 仿真验证

训练完成后,分别对不同的参考信号进行仿真分析:
  1. 对正弦信号0.89*sin(0.905*t)的跟踪效果如下所示:

  模型的初始状态值为0.3,观察曲线可得,基本实现了正弦信号的跟踪,跟踪效果良好,稳态误差约为0.04,这个可通过(增加更多的观测信息、切换到更深的网络、使用TD3或SAC)来进一步缩小误差。

  2. 对常值信号的跟踪效果如下所示:

  总体来说,也基本实现了常值信号的跟踪,跟踪效果良好,稳态误差约为0.05左右。

总结

  综上所述,DDPG强化学习控制器基本实现了正弦信号与常值信号的跟踪,目前觉得强化学习:
  优点在于能够处理复杂系统、强非线性系统、模型的不确定性、多目标优化(考虑跟踪和能耗)
  缺点在于reward需要精细设计、设计复杂度需要调参的个数较多、在线计算量较高、安全场景下不能单独使用

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐