当前位置: 首页 > article >正文

【MFAC】基于紧格式动态线性化的无模型自适应控制

例题来源:侯忠生教授的《无模型自适应控制:理论与应用》(2013年科学出版社)。

👉对应书本 3.2 单输入单输出系统(SISO)紧格式动态线性化(CFDL) 和 4.2 单输入单输出系统(SISO)紧格式动态线性化(CFDL)的无模型自适应控制(MFAC)

CFDL

紧格式动态线性化
(compact form dynamic linearization)

SISO离散时间非线性系统模型:
y ( k + 1 ) = f ( y ( k ) , … y ( k − n y ) , … u ( k ) , … u ( k − n u ) ) y\left( {k + 1} \right) = f\left( y(k),\ldots y\left( {k - n_{y}} \right),\ldots u(k),\ldots u\left( {k - n_{u}} \right) \right) y(k+1)=f(y(k),y(kny),u(k),u(knu))
其中, n y , n u n_y,n_u ny,nu为两个未知的正整数,分别表示系统输出和输入的阶数。

数据模型:
Δ y ( k + 1 ) = ϕ c ( k ) Δ u ( k ) \Delta y\left( {k + 1} \right) = \phi_{c}(k)\Delta u(k) Δy(k+1)=ϕc(k)Δu(k)

伪偏导(PPD) ϕ c ( k ) \phi_{c}(k) ϕc(k) 的下标 c 表示compact,Δu(k)=u(k)-u(k-1).

SISO-CFDL-MFAC

学习控制律

控制输入准则函数:
J [ u ( k ) ] = ∣ y ∗ ( k + 1 ) − y ( k + 1 ) ∣ 2 + λ ∣ u ( k ) − u ( k − 1 ) ∣ 2 J\left\lbrack {u(k)} \right\rbrack = \left| y^{*}\left( {k + 1} \right) - y(k + 1) \right|^{2} + \lambda\left| u(k) - u(k - 1) \right|^{2} J[u(k)]=y(k+1)y(k+1)2+λu(k)u(k1)2

其中,λ>0为权重因子,用来限制控制输入量的变化,从而限制了非线性系统式由动态线性系统式线性替代的范围,因此可以间接地限制伪偏导数值的变化。其二,它可以避免控制律算法式中分母可能为零的奇异情况。

将数据模型代入控制输入准则函数,可以得到:
J [ u ( k ) ] = ∣ y ∗ ( k + 1 ) − y ( k ) − ϕ c ( k ) Δ u ( k ) ∣ 2 + λ ∣ u ( k ) − u ( k − 1 ) ∣ 2 = [ y ∗ ( k + 1 ) − y ( k ) ] 2 + [ ϕ c ( k ) Δ u ( k ) ] 2 − 2 [ y ∗ ( k + 1 ) − y ( k ) ] ϕ c ( k ) Δ u ( k ) + λ [ u ( k ) − u ( k − 1 ) ] 2 J\left\lbrack {u(k)} \right\rbrack = \left| {y^{*}\left( {k + 1} \right) - y(k) - \phi_{c}(k)\Delta u(k)} \right|^{2} + \lambda\left| {u(k) - u\left( {k - 1} \right)} \right|^{2} = \left\lbrack {y^{*}\left( {k + 1} \right) - y(k)} \right\rbrack^{2} + \left\lbrack {\phi_{c}(k)\Delta u(k)} \right\rbrack^{2} - 2\left\lbrack y^{*}\left( {k + 1} \right) - y(k) \right\rbrack\phi_{c}(k)\Delta u(k) + \lambda\left\lbrack {u(k) - u\left( {k - 1} \right)} \right\rbrack^{2} J[u(k)]=y(k+1)y(k)ϕc(k)Δu(k)2+λu(k)u(k1)2=[y(k+1)y(k)]2+[ϕc(k)Δu(k)]22[y(k+1)y(k)]ϕc(k)Δu(k)+λ[u(k)u(k1)]2

J ( u ( k ) ) J(u(k)) J(u(k)) u ( k ) u(k) u(k) 求导,得:
d J [ u ( k ) ] d u ( k ) = 2 ∣ ϕ c ( k ) ∣ 2 Δ u ( k ) − 2 [ y ∗ ( k + 1 ) − y ( k ) ] ϕ c ( k ) + 2 λ [ u ( k ) − u ( k − 1 ) ] \frac{dJ\left\lbrack {u(k)} \right\rbrack}{du(k)} = 2\left| \phi_{c}(k) \right|^{2}\Delta u(k) - 2\left\lbrack y^{*}\left( {k + 1} \right) - y(k) \right\rbrack\phi_{c}(k) + 2\lambda\left\lbrack {u(k) - u\left( {k - 1} \right)} \right\rbrack du(k)dJ[u(k)]=2ϕc(k)2Δu(k)2[y(k+1)y(k)]ϕc(k)+2λ[u(k)u(k1)]

d J [ u ( k ) ] d u ( k ) = 0 \frac{dJ\left\lbrack {u(k)} \right\rbrack}{du(k)}=0 du(k)dJ[u(k)]=0,得
∣ ϕ c ( k ) ∣ 2 [ u ( k ) − u ( k − 1 ) ] − [ y ∗ ( k + 1 ) − y ( k ) ] ϕ c ( k ) + λ [ u ( k ) − u ( k − 1 ) ] = 0 \left| \phi_{c}(k) \right|^{2}\left\lbrack {u(k) - u\left( {k - 1} \right)} \right\rbrack - \left\lbrack {y^{*}\left( {k + 1} \right) - y(k)} \right\rbrack\phi_{c}(k) + \lambda\left\lbrack {u(k) - u\left( {k - 1} \right)} \right\rbrack = 0 ϕc(k)2[u(k)u(k1)][y(k+1)y(k)]ϕc(k)+λ[u(k)u(k1)]=0

整理可得:
u ( k ) = u ( k − 1 ) + ϕ c ( k ) ∣ ϕ c ( k ) ∣ 2 + λ [ y ∗ ( k + 1 ) − y ( k ) ] u(k) = u\left( {k - 1} \right) + \frac{\phi_{c}(k)}{\left| \phi_{c}(k) \right|^{2} + \lambda}\left\lbrack {y^{*}\left( {k + 1} \right) - y(k)} \right\rbrack u(k)=u(k1)+ϕc(k)2+λϕc(k)[y(k+1)y(k)]

为了让控制算法更具一般性,引入步长因子 ρ∈(0,1] :
u ( k ) = u ( k − 1 ) + ρ ϕ c ( k ) ∣ ϕ c ( k ) ∣ 2 + λ [ y ∗ ( k + 1 ) − y ( k ) ] u(k) = u\left( {k - 1} \right) + \frac{\rho\phi_{c}(k)}{\left| \phi_{c}(k) \right|^{2} + \lambda}\left\lbrack {y^{*}\left( {k + 1} \right) - y(k)} \right\rbrack u(k)=u(k1)+ϕc(k)2+λρϕc(k)[y(k+1)y(k)]

PPD参数估计算法

考虑参数估计值对采样数据的敏感性,提出PPD估计准则函数:
J [ ϕ c ^ ( k ) ] = ∣ y ( k ) − y ( k − 1 ) − ϕ c ^ ( k ) Δ u ( k − 1 ) ∣ 2 + μ ∣ ϕ c ^ ( k ) − ϕ c ^ ( k − 1 ) ∣ 2 = [ y ( k ) − y ( k − 1 ) ] 2 + [ ϕ c ^ ( k ) Δ u ( k − 1 ) ] 2 − 2 [ y ( k ) − y ( k − 1 ) ] ϕ c ^ ( k ) Δ u ( k − 1 ) + μ ∣ ϕ c ^ ( k ) − ϕ c ^ ( k − 1 ) ∣ 2 J\left\lbrack {\hat{\phi_{c}}(k)} \right\rbrack = \left| {y(k) - y\left( {k - 1} \right) - \hat{\phi_{c}}(k)\Delta u\left( {k - 1} \right)} \right|^{2} + \mu\left| {\hat{\phi_{c}}(k) - \hat{\phi_{c}}\left( {k - 1} \right)} \right|^{2} = \left\lbrack {y(k) - y\left( {k - 1} \right)} \right\rbrack^{2} + \left\lbrack {\hat{\phi_{c}}(k)\Delta u\left( {k - 1} \right)} \right\rbrack^{2} - 2\left\lbrack y(k) - y(k - 1) \right\rbrack\hat{\phi_{c}}(k)\Delta u\left( {k - 1} \right) + \mu\left| {\hat{\phi_{c}}(k) - \hat{\phi_{c}}\left( {k - 1} \right)} \right|^{2} J[ϕc^(k)]= y(k)y(k1)ϕc^(k)Δu(k1) 2+μ ϕc^(k)ϕc^(k1) 2=[y(k)y(k1)]2+[ϕc^(k)Δu(k1)]22[y(k)y(k1)]ϕc^(k)Δu(k1)+μ ϕc^(k)ϕc^(k1) 2

其中,μ>0为权重因子, ϕ c ( k ) ϕ_c (k) ϕc(k) ϕ c ( k ) ϕ_c (k) ϕc(k) 的估计值。

J [ ϕ c ( k ) ] J[ϕ_c (k)] J[ϕc(k)] 求极值,可得PPD的估计算法为:
ϕ c ^ ( k ) = ϕ C ^ ( k − 1 ) + Δ u ( k − 1 ) μ + Δ u ( k − 1 ) 2 [ Δ y ( k ) − ϕ c ^ ( k − 1 ) Δ u ( k − 1 ) ] \hat{\phi_{c}}(k) = \hat{\phi_{C}}\left( {k - 1} \right) + \frac{\Delta u\left( {k - 1} \right)}{\mu + {\Delta u\left( {k - 1} \right)}^{2}}\left\lbrack \Delta y(k) - \hat{\phi_{c}}(k - 1)\Delta u\left( {k - 1} \right) \right\rbrack ϕc^(k)=ϕC^(k1)+μ+Δu(k1)2Δu(k1)[Δy(k)ϕc^(k1)Δu(k1)]

为了让控制算法更具一般性,引入步长因子 η∈(0,1] :
ϕ c ^ ( k ) = ϕ c ^ ( k − 1 ) + η Δ u ( k − 1 ) μ + Δ u ( k − 1 ) 2 [ Δ y ( k ) − ϕ c ^ ( k − 1 ) Δ u ( k − 1 ) ] \hat{\phi_{c}}(k) = \hat{\phi_{c}}\left( {k - 1} \right) + \frac{\eta\Delta u\left( {k - 1} \right)}{\mu + {\Delta u\left( {k - 1} \right)}^{2}}\left\lbrack \Delta y(k) - \hat{\phi_{c}}(k - 1)\Delta u\left( {k - 1} \right) \right\rbrack ϕc^(k)=ϕc^(k1)+μ+Δu(k1)2ηΔu(k1)[Δy(k)ϕc^(k1)Δu(k1)]

与一般的投影估计算法不同,一般的投影估计算法的分母项引入常数μ是为了防止除数=0,而在估计算法中μ是对PPD估计值变化量的惩罚因子。

PPD参数重置算法

如果
∣ ϕ c ^ ( k ) ∣ ≤ ε \left| {\hat{\phi_{c}}(k)} \right| \leq \varepsilon ϕc^(k) ε

∣ Δ u ( k − 1 ) ∣ ≤ ε \left| {\Delta u\left( {k - 1} \right)} \right| \leq \varepsilon Δu(k1)ε

s i g n ( ϕ c ^ ( k ) ) ≠ s i g n ( ϕ c ^ ( 1 ) ) sign\left( {\hat{\phi_{c}}(k)} \right) \neq sign\left( {\hat{\phi_{c}}(1)} \right) sign(ϕc^(k))=sign(ϕc^(1))

ϕ c ^ ( k ) = ϕ c ^ ( 1 ) \hat{\phi_{c}}(k) = \hat{\phi_{c}}(1) ϕc^(k)=ϕc^(1)

算法重置机制的引入是为了使PPD估计算法具有更强的对时变参数的跟踪能力。


http://www.kler.cn/a/15936.html

相关文章:

  • [Python学习日记-67] 封装
  • Tiktok对接和内容发布申请流程
  • flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例
  • flutter pigeon gomobile 插件中使用go工具类
  • 蓝队技术学习
  • vue 项目使用 nginx 部署
  • Redis知识点
  • Dart String字符串的常用方法概述 整理了大概4000多字
  • 自动驾驶货运编队行驶介绍
  • 0、Java开发常见(并发,JVM)
  • 独立IP服务器和共享IP服务器有什么区别
  • JavaScript全解析——常见的BOM操作(下)
  • FreeRTOS任务的创建(动态方法和静态方法)
  • java常用的工具类 apache --- CollectionUtils(IT枫斗者)
  • QImage 如何设置图片的透明度
  • kotlin教程4:函数进阶
  • 贪心算法OJ刷题(2)
  • Python并发编程之进程操作
  • aac音频怎么转mp3,这几个方法很简便
  • 2023五一杯B题赛题公布
  • OpenGL(三)——着色器
  • Redis学习笔记01 (数据结构,线程模型,持久化)
  • 分屏视图上线,详情数据秒切换
  • Python小姿势 - # 如何在Python中实现基本的数据类型
  • 如何查看自己是否使用了国产SSL证书?“套牌”SSL证书?
  • GDB 1、超详细的GDB入门笔记,包含演示代码,快速入门