无模型自适应ILC原理及代码实现

这里学习的是很老的一篇论文《基于无模型自适应控制的反馈-前馈迭代学习控制系统收敛性研究》,作者是晏静文和侯忠生,大家有兴趣可以找来看看。这里主要介绍的无模型自适应的控制率的matlab代码仿真实现和结果分析。
首先数值给出了问题定义,给出m维输入q维输入的非线性系统:
yn(k+1)=f(un(k),yn)(k),ξ(k),k)y_{n}(k+1)=f(u_{n}(k),y_{n})(k),\xi(k),k) yn​(k+1)=f(un​(k),yn​)(k),ξ(k),k)
两个假设是为了收敛性证明提出的,这里不详细讲(其实收敛性推导我也没推),然后对于该系统设计了前馈和反馈控制律如下:
un(k)=unf(k)+ukb(k)u_{n}(k)=u^{f}_{n}(k)+u^{b}_{k}(k) un​(k)=unf​(k)+ukb​(k)
unf(k)=un−1f(k)+βen−1(k+1)u^{f}_{n}(k)=u^{f}_{n-1}(k)+\beta e_{n-1}(k+1) unf​(k)=un−1f​(k)+βen−1​(k+1)
unb(k)=unb(k−1)+ρ∗ϕn(k)λ+∣ϕn^(k)∣2∗[yd(k+1)−yn(k)]u^{b}_{n}(k)=u^{b}_{n}(k-1)+\frac{\rho *\phi_{n}(k)}{\lambda+|\hat{\phi_{n}}(k)|^{2}}*[y_{d}(k+1)-y_{n}(k)] unb​(k)=unb​(k−1)+λ+∣ϕn​^​(k)∣2ρ∗ϕn​(k)​∗[yd​(k+1)−yn​(k)]
ϕn^(k)=ϕn^(k−1)+ηΔuk−1bμ+∣Δuk−1b∣2∗[Δyn(k)−ϕ^n(k−1)Δunb(k−1)]\hat{\phi_{n}}(k)=\hat{\phi_{n}}(k-1)+\frac{\eta \Delta u^{b}_{k-1} }{\mu +|\Delta u^{b}_{k-1}|^2}*[\Delta y_{n}(k)-\hat\phi_{n}(k-1)\Delta u^{b}_{n}(k-1)] ϕn​^​(k)=ϕn​^​(k−1)+μ+∣Δuk−1b​∣2ηΔuk−1b​​∗[Δyn​(k)−ϕ^​n​(k−1)Δunb​(k−1)]
ϕ^n(k)=ϕ^(1),若ϕ^n(k)≤ϵ或∣Δunb(k−1)≤ϵ∣\hat\phi_{n}(k)=\hat \phi(1), 若\hat\phi_{n}(k)\leq\epsilon 或|\Delta u^{b}_{n}(k-1)\leq\epsilon| ϕ^​n​(k)=ϕ^​(1),若ϕ^​n​(k)≤ϵ或∣Δunb​(k−1)≤ϵ∣
终于把公式打完了,latex真麻烦(对于第一次用的人来说)。可以看到控制部分有两部分组成,前馈和反馈,外加伪偏导迭代公式。
仿真系统如下:

期望曲线:

基于控制律和系统编写matlab代码如下:

% 期望轨迹
for k = 1:1:500if k < 250yd(k+1) = 0.5*(-1).^(round(k/100));else yd(k+1) = 0.5*sin((k*pi)/100) + 0.3*cos((k*pi)/50);end
end% 参数设置
epsilon = 0.01;
eta = 1;
rho = 0.2;
lamda = 1;
mu = 2;% 控制过程
i_n = 60;  %迭代次数
y(1:i_n,1:500) = 0;
for i = 1:1:i_nfor k = 1:1:500if k == 1phi(i,k) = 0.4;elseif k == 2phi(i,k) = phi(i,k-1) + (eta*(ub(i,k-1) - 0)/(mu + norm(ub(i,k-1) - 0)^2))*(y(i,k) - 0 - phi(i,k-1)*(ub(i,k-1) - 0));else phi(i,k) = phi(i,k-1) + (eta*(ub(i,k-1) - ub(i,k-2))/(mu + norm(ub(i,k-1) - ub(i,k-2))^2))*(y(i,k) - y(i,k-1) - phi(i,k-1)*(ub(i,k-1) - ub(i,k-2)));endif i == 1uf(i,k) = 0;else uf(i,k) = uf(i-1,k) + 0.4*e(i-1,k+1);endif k == 1ub(i,k) = 0;else ub(i,k) = ub(i,k-1) + (rho*phi(i,k)/(lamda + norm(phi(i,k))^2))*(yd(k+1) - y(i,k));endif k>2 && (phi(i,k) <= epsilon || (abs(ub(i,k-1) - ub(i,k-2)) <= epsilon))phi(i,k) = phi(i,1);endu(i,k) = uf(i,k) + ub(i,k);%系统函数if k <250 y(i,k+1) = y(i,k)*u(i,k)/(1 + norm(y(i,k))^2) + (u(i,k) + 0.1*round(k/500)*sin(y(i,k)))^3;elsey(i,k+1) = y(i,k)*u(i,k)^3/(1 + norm(y(i,k))^2) + u(i,k)^3;ende(i,k+1) = yd(k+1) - y(i,k+1);end
end
%误差
for i =1:1:i_n
e_min(i) = max(abs(e(i,:)));
endfigure(1)
plot(yd,'r'); hold on;
plot(y(i_n,:),'b'); title('µü´ú10´Î');
figure(2)
plot(e_min);title('error of time k');

代码就是按照控制律来写的,还是自己敲一下印象深刻。
仿真结果:迭代10次结果:

50次迭代:

100次迭代:

100次迭代 最大误差和最下误差收敛结果:


结束。

无模型自适应迭代学习控制原理和matlab代码仿真学习记录相关推荐

  1. 高阶无模型自适应迭代学习控制学习记录

    高阶无模型自适应迭代学习控制 参考文献 "High-Order Model-Free Adaptive Iterative Learning Control of Pneumatic Art ...

  2. TOPSIS模型原理和MATLAB代码实现

    IMMC2020:熵权TOPSIS 笔记整理来自清风老师的数学建模课程:TOPSIS教程 目录 1. 层次分析法的局限性(主观求权重方法) 2. TOPSIS法引入 2.1 一个指标的情况 2.2 2 ...

  3. [论文]基于强化学习的无模型水下机器人深度控制

    基于强化学习的无模型水下机器人深度控制 摘要 介绍 问题公式 A.水下机器人的坐标框架 B.深度控制问题 马尔科夫模型 A.马尔科夫决策 B.恒定深度控制MDP C.弯曲深度控制MDP D.海底追踪的 ...

  4. 车道检测、自适应巡航控制和编队matlab simulink仿真建模模型

    车道检测.自适应巡航控制和编队matlab simulink仿真建模模型 ID:8630672358957146一無所有`

  5. 单链表反转的原理和python代码实现

    链表是一种基础的数据结构,也是算法学习的重中之重.其中单链表反转是一个经常会被考察到的知识点. 单链表反转是将一个给定顺序的单链表通过算法转为逆序排列,尽管听起来很简单,但要通过算法实现也并不是非常容 ...

  6. 深度强化学习控制六足机器人移动个人学习笔记(一)

    深度强化学习控制六足机器人移动个人学习笔记(一) 注意事项 ubuntu18对应的ros版本不是Kinect gym算法执行中部分包要求Python不低于3.6 conda虚拟环境安装gym-gaze ...

  7. DS1320原理和C51代码实现解读

    DS1320原理和C51代码实现解读 DS封装 引脚介绍 VCC2 V_{CC2}为主电源, VCC1 V_{CC1}为备用电源,当 VCC2 V_{CC2}> VCC1 V_{CC1} + 0 ...

  8. 多智能体系统MASs,编队控制,自适应理论,基于干扰观测器的控制DOBC,Matlab数值仿真实验

    61.多智能体系统MASs,编队控制,自适应理论,基于干扰观测器的控制DOBC,Matlab数值仿真实验 ID:561999679279244881

  9. 迭代学习控制方式Simulink建模与仿真

    1 什么是迭代学习控制 迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大.1984年,Ari ...

最新文章

  1. 近世代数--子环--怎么判断是不是子环?
  2. 部署在ABAP Netweaver上的UI5应用,UI5库那些JavaScript的具体位置
  3. Commvault发布V11版数据管理平台 优化数据资源
  4. Class的getName、getSimpleName与getCanonicalName的区别
  5. PHP新手上路(十)
  6. v-model数据绑定分析
  7. 语言程序设计 郭有强_「概念篇8」程序语言如何被计算机理解?靠猜?那就搞笑了...
  8. UI实用素材| 工作管理、日程日历 专辑,总有一款符合设计师风格
  9. 收到邮件怎么升级鸿蒙,鸿蒙2.0怎么升级 鸿蒙2.0升级方法
  10. FZU 2129 子序列个数(DP)题解
  11. Python巨型文字游戏开发(带源码(1))
  12. Java—网络编程相关概念
  13. Codeblock 美化字体和主题
  14. 活动预告 | 伍鸣博士受邀参加深链财经“2020非共识大会”
  15. H5APP WEB 支付开发 (银联 微信 支付宝)流程
  16. ORA-00933:SQL 命令未正确结束(1)
  17. 地球气候系统模式cesm的基本运行流程
  18. Java中的多态,引用类型的转换
  19. Flink-clickhousesink
  20. 《代码大全2》读书笔记

热门文章

  1. hexo之next主题添加分类
  2. NVIDIA驱动本来好好的,过几天就无法连接NVIDIA,出现NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA
  3. Bristol的第18篇密码学
  4. 前端入门14-JavaScript进阶之继承
  5. 微软Office Online服务安装部署(二)
  6. Mysql 监控性能状态 QPS/TPS
  7. 软件测试之图覆盖(作业3)
  8. 关于JAVA自带MD5的方法
  9. Spring中注入List,Set,Map,Properties的xml文件配置方法
  10. Linux Kernel 多个本地安全绕过漏洞