本文来自潘神的知乎笔记什么是二次型最优控制
什么是二次型
说到“最”字,我们自然需要一个标准。比如,我们说到“最高”,可以用长度来丈量;说到“最重”,一般用质量来衡量,这些都是比较容易获得标准的。现在如果问,什么是“最美”?我们可能就得思考一会了。同样的道理,现在如果问什么是“最优”控制?——在没有“标准”的情况下讨论这个问题,就没有太大的意义。所以,我们要先来搞一个标准。既然我们搞控制,简单来说就是要“指东打东,指西打西”,翻译一下就是“输出能跟随输入”,那什么是“最优控制”呢?——一个很直观的想法就是:“输入能完全跟随输入,在每一个时间点上都是100%一样”,当然这是理想情况,实际上很难实现。那我们能不能拉开来看呢?——我们要有更大的视野,不要求每一点都一样,那在整个工作时间内是不是可以更接近呢?比如我们可以这样:把每一时刻的状态的误差都累加起来,只要累加的值更小,那是不是就更接近呢?比如我们可以令:
J
=
∫
0
∞
∣
e
∣
d
t
=
∫
0
∞
∣
x
o
(
t
)
−
x
i
(
t
)
∣
d
t
J=\int_{0}^{\infty}|e| d t=\int_{0}^{\infty}\left|x_{o}(t)-x_{i}(t)\right| d t
J=∫0∞∣e∣dt=∫0∞∣xo(t)−xi(t)∣dt
其中
x
o
(
t
)
x_{o}(t)
xo(t)为实际状态,
x
i
(
t
)
x_{i}(t)
xi(t)为期望状态。这样显然是可以的,如果
x
o
(
t
)
x_{o}(t)
xo(t)和
x
i
(
t
)
x_{i}(t)
xi(t)完全一样,
J
J
J则为零,达到最小值,显然
J
J
J 越小越好——我们一般将
J
J
J称之为代价函数(cost function)。
但是我们知道,绝对值这个操作,数学上不太好处理——因为它的导数不连续,会带来很多麻烦,那怎么办?——聪明的你可能已经想到了,可以用平方啊,它也能表征距离,而且性能非常好。 这样代价函数就变成了:
J
=
∫
0
∞
e
2
d
t
=
∫
0
∞
(
x
o
(
t
)
−
x
i
(
t
)
)
2
d
t
J=\int_{0}^{\infty} e^{2} d t=\int_{0}^{\infty}\left(x_{o}(t)-x_{i}(t)\right)^{2} d t
J=∫0∞e2dt=∫0∞(xo(t)−xi(t))2dt
为简单起见,我们先假设期望状态
x
i
(
t
)
x_{i}(t)
xi(t)为零,即
J
=
∫
0
∞
e
2
d
t
=
∫
0
∞
(
x
o
(
t
)
)
2
d
t
J=\int_{0}^{\infty} e^{2} d t=\int_{0}^{\infty}\left(x_{o}(t)\right)^{2} d t
J=∫0∞e2dt=∫0∞(xo(t))2dt
我们看一下被积分的部分,这只有一个状态,我们可以扩充一下,假如现在有
n
n
n个状态,即
J
=
∫
0
∞
x
1
2
(
t
)
+
x
2
2
(
t
)
+
…
+
x
n
2
(
t
)
d
t
J=\int_{0}^{\infty} x_{1}^{2}(t)+x_{2}^{2}(t)+\ldots+x_{n}^{2}(t) d t
J=∫0∞x12(t)+x22(t)+…+xn2(t)dt
这样不够紧凑,我们换个写法:
J
=
∫
0
∞
x
T
x
d
t
J=\int_{0}^{\infty} \boldsymbol{x}^{T} \boldsymbol{x} d t
J=∫0∞xTxdt
其中
x T x = [ x 1 , x 2 , … x n ] [ 1 0 ⋯ 0 0 1 … 0 ⋮ ⋮ ⋮ ⋮ 0 0 … 1 ] [ x 1 x 2 ⋮ x n ] = x 1 2 + x 2 2 + … + x n 2 \begin{array}{c}{\boldsymbol{x}^{T} \boldsymbol{x}=\left[x_{1}, x_{2}, \ldots x_{n}\right] \left[ \begin{array}{cccc}{1} & {0} & {\cdots} & {0} \\ {0} & {1} & {\ldots} & {0} \\ {\vdots} & {\vdots} & {\vdots} & {\vdots} \\ {0} & {0} & {\ldots} & {1}\end{array}\right] \left[ \begin{array}{c}{x_{1}} \\ {x_{2}} \\ {\vdots} \\ {x_{n}}\end{array}\right]} \\ {=x_{1}^{2}+x_{2}^{2}+\ldots+x_{n}^{2}}\end{array} xTx=[x1,x2,…xn]⎣⎢⎢⎢⎡10⋮001⋮0⋯…⋮…00⋮1⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤=x12+x22+…+xn2
这就是一种简单的二次型函数,因为变量的最高次数是2。
当然,我们的工具可以更强大,比如单位矩阵
I
I
I可以扩展为对角矩阵
λ
\lambda
λ:
λ
=
[
λ
1
0
…
0
0
λ
2
…
0
⋮
⋮
⋮
⋮
0
0
…
λ
n
]
\boldsymbol{\lambda}=\left[ \begin{array}{cccc}{\lambda_{1}} & {0} & {\ldots} & {0} \\ {0} & {\lambda_{2}} & {\dots} & {0} \\ {\vdots} & {\vdots} & {\vdots} & {\vdots} \\ {0} & {0} & {\ldots} & {\lambda_{n}}\end{array}\right]
λ=⎣⎢⎢⎢⎡λ10⋮00λ2⋮0……⋮…00⋮λn⎦⎥⎥⎥⎤
这相当于给各个变量误差取个权重,然后对角矩阵
λ
\lambda
λ还可以扩展为更一般的矩阵
Q
Q
Q:
Q
=
[
a
11
a
12
…
a
1
n
a
21
a
22
…
a
2
n
⋮
⋮
⋮
⋮
a
n
1
a
n
2
…
a
n
n
]
\boldsymbol{Q}=\left[ \begin{array}{cccc}{a_{11}} & {a_{12}} & {\dots} & {a_{1 n}} \\ {a_{21}} & {a_{22}} & {\dots} & {a_{2 n}} \\ {\vdots} & {\vdots} & {\vdots} & {\vdots} \\ {a_{n 1}} & {a_{n 2}} & {\dots} & {a_{n n}}\end{array}\right]
Q=⎣⎢⎢⎢⎡a11a21⋮an1a12a22⋮an2……⋮…a1na2n⋮ann⎦⎥⎥⎥⎤
但无论怎么扩展,展开的函数最高次数都是2次,因此我们把这种类型的函数统称为二次型函数。
二阶系统的阻尼比为何选择0.707
一个简单例子,二阶系统,框图如下,现在加入我们要实现最优控制,看看最佳阻尼比应该是什么样。
其开环传递函数为
C
(
s
)
E
(
s
)
=
1
s
(
s
+
2
ζ
)
\frac{C(s)}{E(s)}=\frac{1}{s(s+2 \zeta)}
E(s)C(s)=s(s+2ζ)1
误差为:
E
(
s
)
=
R
(
s
)
−
C
(
s
)
E(s)=R(s)-C(s)
E(s)=R(s)−C(s)
将上面两个传递函数变成时域方程为:
c
¨
+
2
ζ
c
˙
=
e
e
=
r
−
c
\begin{array}{l}{\ddot{c}+2 \zeta \dot{c}=e} \\ {e=r-c}\end{array}
c¨+2ζc˙=ee=r−c
联立以上两式就可以得到
e
¨
+
2
ζ
e
˙
+
e
=
r
¨
+
2
ζ
r
˙
\ddot{e}+2 \zeta \dot{e}+e=\ddot{r}+2 \zeta \dot{r}
e¨+2ζe˙+e=r¨+2ζr˙
传递函数只能描述单输入单输出系统,现在我们要把它改成状态方程的形式:
x 1 = e x 2 = e ˙ \begin{aligned} x_{1} &=e \\ x_{2} &=\dot{e} \end{aligned} x1x2=e=e˙
也就是我们要研究误差和误差变化率,为简单起见,我们假设输入为阶跃信号,即
r
¨
=
0
\ddot{r}=0
r¨=0,
r
˙
=
0
\dot{r}=0
r˙=0,
r
=
1
\quad r=1
r=1,对应的
e
=
1
e=1
e=1,
e
˙
=
0
\quad \dot{e}=0
e˙=0。这样状态方程就变成
x
˙
=
A
x
\dot{\boldsymbol{x}}=\boldsymbol{A x}
x˙=Ax
其中
A
=
[
0
1
−
1
−
2
ζ
]
A=\left[ \begin{array}{cc}{0} & {1} \\ {-1} & {-2 \zeta}\end{array}\right]
A=[0−11−2ζ]
完整状态方程为
[
x
˙
1
x
˙
2
]
=
[
0
1
−
1
−
2
ζ
]
[
x
1
x
2
]
\left[ \begin{array}{c}{\dot{x}_{1}} \\ {\dot{x}_{2}}\end{array}\right]=\left[ \begin{array}{cc}{0} & {1} \\ {-1} & {-2 \zeta}\end{array}\right] \left[ \begin{array}{l}{x_{1}} \\ {x_{2}}\end{array}\right]
[x˙1x˙2]=[0−11−2ζ][x1x2]
我们定义代价函数为:
J = ∫ 0 ∞ ( e 2 + e ˙ 2 ) d t J=\int_{0}^{\infty}\left(e^{2}+\dot{e}^{2}\right) d t J=∫0∞(e2+e˙2)dt
即两个变量之间同等权重,用变量表示
J = ∫ 0 ∞ ( x 1 2 + x 2 2 ) d t J=\int_{0}^{\infty}\left(x_{1}^{2}+x_{2}^{2}\right) d t J=∫0∞(x12+x22)dt
现在我们想要
J
J
J最小,具体应该怎么做呢?先将代价函数写成紧凑一点的形式:
J
=
∫
0
∞
x
T
x
d
t
J=\int_{0}^{\infty} \boldsymbol{x}^{T} \boldsymbol{x} d t
J=∫0∞xTxdt
这是个积分的问题,所以我们要先找到被积函数 x T x \boldsymbol{x}^{T} \boldsymbol{x} xTx的原函数,这个数学问题不是我们的重点,假设我们现在已经知道原函数的长相为 x T P x \boldsymbol{x}^{T} \boldsymbol{P} \boldsymbol{x} xTPx,即
d d t ( x T P x ) = − x T x \frac{d}{d t}\left(\boldsymbol{x}^{T} \boldsymbol{P} \boldsymbol{x}\right)=-\boldsymbol{x}^{T} \boldsymbol{x} dtd(xTPx)=−xTx
其中 P \boldsymbol{P} P是一个待定的实对称矩阵,我们把它看成待定系数,现在要研究一下这系数需要满足什么条件,我们把上式的左边微分展开:
d d t ( x T P x ) = x ˙ T P x + x T P x ˙ \frac{d}{d t}\left(\boldsymbol{x}^{T} \boldsymbol{P} \boldsymbol{x}\right)=\dot{\boldsymbol{x}}^{T} \boldsymbol{P} \boldsymbol{x}+\boldsymbol{x}^{T} \boldsymbol{P} \dot{\boldsymbol{x}} dtd(xTPx)=x˙TPx+xTPx˙
把状态方程 x ˙ = A x \dot{\boldsymbol{x}}=\boldsymbol{A x} x˙=Ax代入上式,于是我们就得到:
d d t ( x T P x ) = x T ( A T P + P A ) x \frac{d}{d t}\left(\boldsymbol{x}^{T} \boldsymbol{P} \boldsymbol{x}\right)=\boldsymbol{x}^{T}\left(\boldsymbol{A}^{T} \boldsymbol{P}+\boldsymbol{P} \boldsymbol{A}\right) \boldsymbol{x} dtd(xTPx)=xT(ATP+PA)x
如果我们保证 A T P + P A = − I \boldsymbol{A}^{T} \boldsymbol{P}+\boldsymbol{P} \boldsymbol{A}=-\boldsymbol{I} ATP+PA=−I,由于 A A A 是已知的,这样我们就能确定 P P P,也就能确定原函数 x T P x \boldsymbol{x}^{T} \boldsymbol{P} \boldsymbol{x} xTPx ,此时
J = ∫ 0 ∞ x T x d t = − x T P x ∣ 0 ∞ = x T ( 0 ) P x ( 0 ) − x T ( ∞ ) P x ( ∞ ) J=\int_{0}^{\infty} \boldsymbol{x}^{T} \boldsymbol{x} d t=-\boldsymbol{x}^{T} \boldsymbol{P}\left.\boldsymbol{x}\right|_{0} ^{\infty}=\boldsymbol{x}^{T}(0) \boldsymbol{P} \boldsymbol{x}(0)-\boldsymbol{x}^{T}(\infty) \boldsymbol{P} \boldsymbol{x}(\infty) J=∫0∞xTxdt=−xTPx∣0∞=xT(0)Px(0)−xT(∞)Px(∞)
我们的系统是稳定的,而且输入为零,这样我们就可以得到 x ∞ = 0 \boldsymbol{x}_{\infty}=0 x∞=0 ,所以代价函数可以进一步简化为:
J = x T ( 0 ) P x ( 0 ) J=\boldsymbol{x}^{T}(0) \boldsymbol{P} \boldsymbol{x}(0) J=xT(0)Px(0)
其中 P P P满足 A T P + P A = − I \boldsymbol{A}^{T} \boldsymbol{P}+\boldsymbol{P} \boldsymbol{A}=-\boldsymbol{I} ATP+PA=−I(这其实也是李雅普诺夫第二法)
注意:所有的二次型最优控制,形式可能会很复杂,但是处理思路和方式都是这样。
P P P使用待定系数法求解。得到:
P
=
[
ζ
+
1
2
ζ
1
2
1
2
1
2
ζ
]
\boldsymbol{P}=\left[ \begin{array}{cc}{\zeta+\frac{1}{2 \zeta}} & {\frac{1}{2}} \\ {\frac{1}{2}} & {\frac{1}{2 \zeta}}\end{array}\right]
P=[ζ+2ζ121212ζ1]
将
x
(
0
)
=
[
1
0
]
T
\boldsymbol{x}(0)=\left[ \begin{array}{ll}{1} & {0}\end{array}\right]^{T}
x(0)=[10]T带入
J
=
x
T
(
0
)
P
x
(
0
)
J=\boldsymbol{x}^{T}(0) \boldsymbol{P} \boldsymbol{x}(0)
J=xT(0)Px(0)
得到代价函数:
J
=
ζ
+
1
2
ζ
J=\zeta+\frac{1}{2 \zeta}
J=ζ+2ζ1
现在我们要计算 J J J的极小值,先对变量微分
d
J
d
ζ
=
1
−
1
2
ζ
2
\frac{d J}{d \zeta}=1-\frac{1}{2 \zeta^{2}}
dζdJ=1−2ζ21
当
d
J
d
ζ
=
0
\frac{d J}{d \zeta}=0
dζdJ=0时,可以计算得到:
ζ
=
2
2
≈
0.707
\zeta=\frac{\sqrt{2}}{2} \approx 0.707
ζ=22≈0.707
也就是说,当阻尼比取0.707时,
J
=
∫
0
∞
(
e
2
+
e
˙
2
)
d
t
J=\int_{0}^{\infty}\left(e^{2}+\dot{e}^{2}\right) d t
J=∫0∞(e2+e˙2)dt这个损失函数取极小值——也就是说从整体来看,误差和误差变化率累计最小,这就是为什么我们一般把二阶系统的阻尼比设置在0.707左右的原因。
代价函数矩阵需要由 I I I变成 Q Q Q
前面选择的代价函数为
J = ∫ 0 ∞ ( x 1 2 + x 2 2 ) d t J=\int_{0}^{\infty}\left(x_{1}^{2}+x_{2}^{2}\right) d t J=∫0∞(x12+x22)dt
我们认为状态变量的权重都一样,没有谁更重要。实际上,并不都是如此,比如还是前面的例子,有时候我们可能更关心误差,对误差的变化率容忍度高一些,这时候我们就可以给它们分配一个权重:
J = ∫ 0 ∞ ( x 1 2 + μ x 2 2 ) d t μ > 0 J=\int_{0}^{\infty}\left(x_{1}^{2}+\mu x_{2}^{2}\right) d t \quad \mu>0 J=∫0∞(x12+μx22)dtμ>0
此时代价函数可以演变为
J
=
∫
0
∞
(
e
2
+
μ
e
˙
2
)
d
t
=
∫
0
∞
(
x
1
2
+
μ
x
2
2
)
d
t
=
∫
0
∞
[
x
1
x
2
]
[
1
0
0
μ
]
[
x
1
x
2
]
d
t
=
∫
0
∞
x
T
Q
x
d
t
\begin{aligned} J &=\int_{0}^{\infty}\left(e^{2}+\mu \dot{e}^{2}\right) d t=\int_{0}^{\infty}\left(x_{1}^{2}+\mu x_{2}^{2}\right) d t \\ &=\int_{0}^{\infty}\left[x_{1} \quad x_{2}\right] \left[ \begin{array}{cc}{1} & {0} \\ {0} & {\mu}\end{array}\right] \left[ \begin{array}{l}{x_{1}} \\ {x_{2}}\end{array}\right] d t \\ &=\int_{0}^{\infty} \boldsymbol{x}^{T} \boldsymbol{Q} \boldsymbol{x} d t \end{aligned}
J=∫0∞(e2+μe˙2)dt=∫0∞(x12+μx22)dt=∫0∞[x1x2][100μ][x1x2]dt=∫0∞xTQxdt
其中
Q
=
[
1
0
0
μ
]
\boldsymbol{Q}=\left[ \begin{array}{ll}{1} & {0} \\ {0} & {\mu}\end{array}\right]
Q=[100μ]
同样前面的处理方式一样,代价函数的表达式仍然为
J
=
x
(
0
)
T
P
x
(
0
)
J=\boldsymbol{x}(0)^{T} \boldsymbol{P} \boldsymbol{x}(0)
J=x(0)TPx(0)
不过此时
P
P
P需要满足不再是
A
T
P
+
P
A
=
−
I
\boldsymbol{A}^{T} \boldsymbol{P}+\boldsymbol{P} \boldsymbol{A}=-\boldsymbol{I}
ATP+PA=−I,而是
A
T
P
+
P
A
=
−
Q
\boldsymbol{A}^{T} \boldsymbol{P}+\boldsymbol{P} \boldsymbol{A}=-\boldsymbol{Q}
ATP+PA=−Q
还是前面的状态方程:
[ x 1 ˙ x 2 ˙ ] = [ 0 1 − 1 − 2 ζ ] ⎵ A [ x 1 x 2 ] \left[ \begin{array}{c}{\dot{x_{1}}} \\ {\dot{x_{2}}}\end{array}\right]=\underbrace{\left[ \begin{array}{cc}{0} & {1} \\ {-1} & {-2 \zeta}\end{array}\right]}_{A} \left[ \begin{array}{l}{x_{1}} \\ {x_{2}}\end{array}\right] [x1˙x2˙]=A [0−11−2ζ][x1x2]
此时可计算满足 A T P + P A = − Q \boldsymbol{A}^{T} \boldsymbol{P}+\boldsymbol{P} \boldsymbol{A}=-\boldsymbol{Q} ATP+PA=−Q 的 P P P为
P = [ ζ + 1 + μ 4 ζ 1 2 1 2 1 + μ 4 ζ ] \boldsymbol{P}=\left[ \begin{array}{cc}{\zeta+\frac{1+\mu}{4 \zeta}} & {\frac{1}{2}} \\ {\frac{1}{2}} & {\frac{1+\mu}{4 \zeta}}\end{array}\right] P=[ζ+4ζ1+μ21214ζ1+μ]
将初始条件 x ( 0 ) = [ 1 0 ] T \boldsymbol{x}(0)=\left[ \begin{array}{ll}{1} & {0}\end{array}\right]^{T} x(0)=[10]T带入 J = x ( 0 ) T P x ( 0 ) J=\boldsymbol{x}(0)^{T} \boldsymbol{P} \boldsymbol{x}(0) J=x(0)TPx(0),即可得到:
J = [ 1 0 ] [ ζ + 1 + μ 4 ζ 1 2 1 2 1 + μ 4 ζ ] [ 1 0 ] = ζ + 1 + μ 4 ζ J=\left[ \begin{array}{cc}{1} & {0}\end{array}\right] \left[ \begin{array}{cc}{\zeta+\frac{1+\mu}{4 \zeta}} & {\frac{1}{2}} \\ {\frac{1}{2}} & {\frac{1+\mu}{4 \zeta}}\end{array}\right] \left[ \begin{array}{l}{1} \\ {0}\end{array}\right]=\zeta+\frac{1+\mu}{4 \zeta} J=[10][ζ+4ζ1+μ21214ζ1+μ][10]=ζ+4ζ1+μ
可见,此时代价函数取决于阻尼比
ζ
\zeta
ζ和输入的权重
μ
\mu
μ ,为了计算
J
J
J的极值,我们同样要计算
J
J
J 对
ζ
\zeta
ζ 的微分
∂
J
∂
ζ
=
1
−
1
+
μ
4
ζ
2
\frac{\partial J}{\partial \zeta}=1-\frac{1+\mu}{4 \zeta^{2}}
∂ζ∂J=1−4ζ21+μ
当
∂
J
∂
ζ
=
0
\frac{\partial J}{\partial \zeta}=0
∂ζ∂J=0时,
ζ
=
1
+
μ
2
\zeta=\frac{\sqrt{1+\mu}}{2}
ζ=21+μ
显然,当
μ
=
1
\mu=1
μ=1时,
ζ
=
2
2
\zeta=\frac{\sqrt{2}}{2}
ζ=22,这与我们前面的计算结果一致。如果我们现在增加
μ
\mu
μ ,也就意味着误差变化率
e
˙
\dot{e}
e˙的权重更大,此时也就意味着我们需要增加阻尼比
ζ
\zeta
ζ。