赞
踩
写在前面本文是记录学习B站博主Dr.can的学习笔记,如有侵权请联系笔者删除此文。
最优控制问题就是研究在约束条件下达到最优的系统表现,通常系统的表现是综合分析的结果。比如考虑一个单输入单输出的系统(SISO),状态变量 x x x,输出为 y y y,要求其输出能跟踪预设的参考值 r r r,误差可以表示为 e = y − r e=y-r e=y−r,那么最优控制的目标是
min ∫ 0 t e 2 d t \min \int_0^t e^2 dt min∫0te2dt
如果同时希望输入量 u u u也能越小越好(一般的目的是减少能耗),那最优控制的目标可以是
min ∫ 0 t q × e 2 d t + r × u 2 d t \min \int_0^t q\times e^2 dt + r\times u^2 dt min∫0tq×e2dt+r×u2dt
其中 q , r q,r q,r分别是权重参数,用于调节两个目标的重要性。
考虑一个多输入多输出的系统(MIMO),系统的模型为:
d
X
d
t
=
A
X
+
B
U
Y
=
C
X
那么可以将上述的最优化目标改写为:
J = ∫ 0 t E T Q E + U T R U d t J = \int^t_0 E^T Q E + U^T R U dt J=∫0tETQE+UTRUdt
举一个实际的例子,系统的模型如下所示:
d
d
t
[
x
1
x
2
]
=
A
[
x
1
x
2
]
+
B
[
u
1
u
2
]
[
y
1
y
2
]
=
[
x
1
x
2
]
设置的参考值 R R R为:
R
=
[
r
1
r
2
]
=
[
0
0
]
R =
那么可以推导出误差 E E E为:
E
=
[
e
1
e
2
]
=
[
y
1
−
r
1
y
2
−
r
2
]
=
[
x
1
x
2
]
E =
那么上述最优控制的目标函数可以写成:
E
T
Q
E
=
[
x
1
x
2
]
T
[
q
1
0
0
q
2
]
[
x
1
x
2
]
=
q
1
x
1
2
+
q
2
x
2
2
U
T
R
U
=
[
u
1
u
2
]
T
[
r
1
0
0
r
2
]
[
u
1
u
2
]
=
r
1
u
1
2
+
r
2
u
2
2
J
=
∫
0
t
q
1
x
1
2
+
q
2
x
2
2
+
r
1
u
1
2
+
r
2
u
2
2
MPC(Model Predictive Control,模型预测控制)的基本思想是通过建立一个系统的动态模型,并在每一个控制时刻使用这个模型来预测系统未来的行为。基于这些预测,它可以生成一个优化控制序列,然后通过执行第一个控制动作来调整系统状态,接着在下一个时刻重新计算和执行。这个过程反复进行,以使系统能够在未来的一段时间内优化一个特定的性能指标。
通常来说,MPC包括以下四个基本步骤:
系统模型化:建立描述系统动态行为的数学模型,通常是差分方程或微分方程。
预测:在当前时刻基于系统状态和控制输入,使用模型预测未来一段时间内的系统响应。
优化:基于预测的系统响应,通过求解一个优化问题来计算最优的控制输入序列,以最大化或最小化一个性能指标(如系统响应时间、能耗等)。
执行:根据优化得到的控制输入序列中的第一个值,执行这个控制动作,并将实际的系统状态反馈到下一个控制周期中
在具体实施的过程中MPC主要分为下列的三个步骤:
在k
时刻:
为了能求解MPC问题,我们需要将其转换成二次规划(Quadratic Programming)的形式,对于二次规划已经有很多成熟的求解器了,我们只需要使用这些求解器就能顺利求解。
二次规划一般具有如下的形式:
min
x
x
T
H
x
+
f
T
x
subject to
.
.
.
其中 H H H是正定的对称矩阵, f f f, x \bold{x} x是向量。
考虑一个离散的线性系统
x
(
k
+
1
)
=
A
n
×
n
x
(
k
)
+
B
n
×
p
u
(
k
)
x
n
×
1
=
[
x
1
x
2
⋮
x
n
]
,
u
p
×
1
=
[
u
1
u
2
⋮
u
p
]
\bold{x}(k+1) = A_{n\times n}\bold{x}(k) + B_{n\times p}\bold{u}(k) \\ \bold{x}_{n\times 1} =
假设滚动的窗口大小(预测区间,Predictive Horizon)为 N N N,在 k k k时刻,预测 k k k时刻的输入为 u ( k ∣ k ) \bold{u}(k|k) u(k∣k),预测 k + 1 k+1 k+1时刻的输入为 u ( k + 1 ∣ k ) \bold{u}(k+1|k) u(k+1∣k),以此类推预测,预测区间的最后一个时刻的输入为 u ( k + N − 1 ∣ k ) \bold{u}(k+N-1|k) u(k+N−1∣k),将这些预测输入整合成一个向量
U
k
=
[
u
(
k
∣
k
)
u
(
k
+
1
∣
k
)
⋮
u
(
k
+
i
∣
k
)
u
(
k
+
N
−
1
∣
k
)
]
\bold{U}_k =
在 k k k时刻,系统的状态为 x ( k ∣ k ) \bold{x}(k|k) x(k∣k), k + 1 k+1 k+1系统的状态为 x ( k + 1 ∣ k ) \bold{x}(k+1|k) x(k+1∣k),以此类推预测,预测区间的最后一个时刻的系统的状态为 x ( k + N − 1 ∣ k ) \bold{x}(k+N-1|k) x(k+N−1∣k),然后再加上区间结束后的第一个状态 x ( k + N ∣ k ) \bold{x}(k+N|k) x(k+N∣k),将这些系统的状态整合成一个向量
X
k
=
[
x
(
k
∣
k
)
x
(
k
+
1
∣
k
)
⋮
x
(
k
+
i
∣
k
)
x
(
k
+
N
∣
k
)
]
\bold{X}_k =
假设系统的输出 y = x \bold{y}=\bold{x} y=x,设定的参考值 r = 0 \bold{r}=0 r=0,那么系统的误差为 e = y − r = x − 0 = x \bold{e}=\bold{y}-\bold{r}=\bold{x}-0 = \bold{x} e=y−r=x−0=x,为了最优化误差和最优化输入,我们可以这样表示代价函数(Cost Function)
min u J = ∑ i = 0 N − 1 ( x ( k + i ∣ k ) T Q x ( k + i ∣ k ) + u ( k + i ∣ k ) T R u ( k + i ∣ k ) ) + x ( k + N ) T F x ( k + N ) ⏟ Terminal Cost \min_\bold{u} J = \sum^{N-1}_{i=0} \Big(\bold{x}(k+i|k)^TQ \bold{x}(k+i|k) + \bold{u}(k+i|k)^TR \bold{u}(k+i|k) \Big) + \underbrace{\bold{x}(k+N)^T F \bold{x}(k+N)}_{\text{Terminal Cost}} uminJ=i=0∑N−1(x(k+i∣k)TQx(k+i∣k)+u(k+i∣k)TRu(k+i∣k))+Terminal Cost x(k+N)TFx(k+N)
但是乍一看这并不是二次规划的形式,我们可以通过化简将其转化为标准的二次规划形式。
在 k k k时刻,我们的系统状态可以表示为
x
(
k
∣
k
)
=
x
k
x
(
k
+
1
∣
k
)
=
A
x
(
k
∣
k
)
+
B
u
(
k
∣
k
)
=
A
x
k
+
B
u
(
k
∣
k
)
x
(
k
+
2
∣
k
)
=
A
x
(
k
+
1
∣
k
)
+
B
u
(
k
∣
k
)
=
A
2
x
k
+
A
B
u
(
k
∣
k
)
+
B
u
(
k
+
1
∣
k
)
⋮
x
(
k
+
N
∣
k
)
=
A
N
x
k
+
A
N
−
1
B
u
(
k
∣
k
)
+
⋯
+
B
u
(
k
+
N
−
1
∣
k
)
左边即为 X k \bold{X}_k Xk,然后将右边写成矩阵的形式
X
k
=
[
I
A
A
2
⋮
A
N
]
⏟
M
x
k
+
[
0
0
⋯
0
⋮
⋮
⋱
⋮
0
0
⋯
0
B
0
⋯
0
A
B
B
⋯
0
⋮
⋮
⋱
⋮
A
N
−
1
B
A
N
−
2
B
⋯
B
]
⏟
C
U
k
X
k
=
M
x
k
+
C
U
k
其中 M M M的前 n n n行都是 0 0 0。接下来,我们来将代价函数化成QP的形式
J
=
∑
i
=
0
N
−
1
(
x
(
k
+
i
∣
k
)
T
Q
x
(
k
+
i
∣
k
)
+
u
(
k
+
i
∣
k
)
T
R
u
(
k
+
i
∣
k
)
)
+
x
(
k
+
N
)
T
F
x
(
k
+
N
)
=
x
(
k
∣
k
)
T
Q
x
(
k
∣
k
)
+
x
(
k
+
1
∣
k
)
T
Q
x
(
k
+
1
∣
k
)
+
⋯
+
x
(
k
+
N
−
1
∣
k
)
T
Q
x
(
k
+
N
−
1
∣
k
)
+
x
(
k
+
N
∣
k
)
T
Q
x
(
k
+
N
∣
k
)
+
∑
i
=
0
N
−
1
u
(
k
+
i
∣
k
)
T
R
u
(
k
+
i
∣
k
)
=
[
x
(
k
∣
k
)
x
(
k
+
1
∣
k
)
⋮
x
(
k
+
i
∣
k
)
x
(
k
+
N
∣
k
)
]
T
[
Q
Q
Q
⋱
F
]
⏟
Q
ˉ
[
x
(
k
∣
k
)
x
(
k
+
1
∣
k
)
⋮
x
(
k
+
i
∣
k
)
x
(
k
+
N
∣
k
)
]
+
[
u
(
k
∣
k
)
u
(
k
+
1
∣
k
)
⋮
u
(
k
+
i
∣
k
)
u
(
k
+
N
−
1
∣
k
)
]
T
[
R
R
R
⋱
R
]
⏟
R
ˉ
[
u
(
k
∣
k
)
u
(
k
+
1
∣
k
)
⋮
u
(
k
+
i
∣
k
)
u
(
k
+
N
−
1
∣
k
)
]
=
X
k
T
Q
ˉ
X
k
+
U
k
R
ˉ
U
k
然后再将前面推导的条件带入
J
=
X
k
T
Q
ˉ
X
k
+
U
k
R
ˉ
U
k
=
(
M
x
k
+
C
U
k
)
T
Q
ˉ
(
M
x
k
+
C
U
k
)
+
U
k
R
ˉ
U
k
=
x
k
T
M
T
Q
ˉ
M
x
k
+
U
k
T
C
T
Q
ˉ
M
x
k
+
x
k
T
M
T
Q
ˉ
C
⏟
2
x
T
C
T
Q
ˉ
M
U
k
U
k
+
U
k
T
C
T
Q
ˉ
C
U
k
+
U
k
R
ˉ
U
k
=
x
k
T
M
T
Q
ˉ
M
x
k
+
2
x
T
C
T
Q
ˉ
M
U
k
U
k
+
U
k
T
C
T
Q
ˉ
C
U
k
+
U
k
R
ˉ
U
k
其中 G = M T Q ˉ M G=M^T\bar{Q}M G=MTQˉM, E = C T Q ˉ M E=C^T\bar{Q}M E=CTQˉM, H = C T R ˉ C + R ˉ H=C^T\bar{R}C+\bar{R} H=CTRˉC+Rˉ,那么 J J J可以化简为:
J = x k T G x k + 2 U k T E x k + U k T H U k J = \bold{x}_k^T G \bold{x}_k + 2\bold{U}_k^T E \bold{x}_k + \bold{U}_k^T H \bold{U}_k J=xkTGxk+2UkTExk+UkTHUk
其中 x k T G x k \bold{x}_k^T G \bold{x}_k xkTGxk是初始状态,是一个常量,在优化的过程中可以忽略。最终的代价函数可以表示为
min
U
J
=
U
k
T
E
x
k
+
0.5
×
U
k
T
H
U
k
G
=
M
T
Q
ˉ
M
E
=
C
T
Q
ˉ
M
H
=
C
T
R
ˉ
C
+
R
ˉ
Q
ˉ
=
[
Q
⋯
⋮
Q
⋮
⋯
F
]
,
R
ˉ
=
[
R
⋯
⋮
⋱
⋮
⋯
R
]
\min_\bold{U} J = \bold{U}_k^T E \bold{x}_k + 0.5 \times\bold{U}_k^T H \bold{U}_k \\ G=M^T\bar{Q}M \\ E=C^T\bar{Q}M \\ H=C^T\bar{R}C+\bar{R} \\ \bar{Q} =
这就是一个标准的QP问题。
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。