【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(k−ny),…u(k),…u(k−nu))
其中,
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(k−1)∣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(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
(
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(k−1)]
令
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(k−1)]−[y∗(k+1)−y(k)]ϕc(k)+λ[u(k)−u(k−1)]=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(k−1)+∣ϕ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(k−1)+∣ϕ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(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
其中,μ>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^(k−1)+μ+Δu(k−1)2Δu(k−1)[Δy(k)−ϕc^(k−1)Δu(k−1)]
为了让控制算法更具一般性,引入步长因子 η∈(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^(k−1)+μ+Δu(k−1)2ηΔu(k−1)[Δy(k)−ϕc^(k−1)Δu(k−1)]
与一般的投影估计算法不同,一般的投影估计算法的分母项引入常数μ是为了防止除数=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(k−1)∣≤ε
或
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估计算法具有更强的对时变参数的跟踪能力。