二次型最优控制(一)

本文来自潘神的知乎笔记什么是二次型最优控制

什么是二次型

说到“最”字,我们自然需要一个标准。比如,我们说到“最高”,可以用长度来丈量;说到“最重”,一般用质量来衡量,这些都是比较容易获得标准的。现在如果问,什么是“最美”?我们可能就得思考一会了。同样的道理,现在如果问什么是“最优”控制?——在没有“标准”的情况下讨论这个问题,就没有太大的意义。所以,我们要先来搞一个标准。既然我们搞控制,简单来说就是要“指东打东,指西打西”,翻译一下就是“输出能跟随输入”,那什么是“最优控制”呢?——一个很直观的想法就是:“输入能完全跟随输入,在每一个时间点上都是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=0edt=0xo(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=0e2dt=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=0e2dt=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=0x12(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=0xTxdt
其中

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]100010001x1x2xn=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] λ=λ1000λ2000λ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=a11a21an1a12a22an2a1na2nann
但无论怎么扩展,展开的函数最高次数都是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=rc
联立以上两式就可以得到
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=[0112ζ]
完整状态方程为
[ 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]=[0112ζ][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=0xTxdt

这是个积分的问题,所以我们要先找到被积函数 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=0xTxdt=xTPx0=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=12ζ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=0xTQxdt
其中
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 [0112ζ][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=14ζ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 ζ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值