#import "@local/scibook:0.1.0": *
#show: doc => conf(
  title: "线性二次型调节器",
  author: ("ivaquero"),
  header-cap: "现代控制理论",
  footer-cap: "github@ivaquero",
  outline-on: false,
  doc,
)

= 一维动态规划

== 简单系统

考虑系统

$ x_([k+1]) = x_([k]) + u_([k]) $

其中

- 初始值：$x[0]=1$
- 目标值：$x[d]=0$
- 末端：$N=2$

于是，其代价函数可定义为

$
  J = 1 / 2 underbrace(x^2[w], "末端代价") + 1 / 2 ∑_(k=0)^(N-1)(
    underbrace(x^2_([k]),"运行代价") + underbrace(u^2_([k]), "输入代价")
  )
$

== 极端策略

#block(
  height: 11em,
  columns()[
    - 策略1：一步到位
      - 输入代价
        - $u[0] = -1$
        - $u[1] = 0$
      - 最终代价
        - $x[1] = 0, x[2] = 0$
        - $J = 1$
    - 策略2：两步走
      - 输入代价
        - $u[0] = -0.5$
        - $u[1] = -0.5$
      - 最终代价
        - $x[1] = 0.5, x[2] = 0$
        - $J = 0.875$
  ],
)

== 最优策略

即，求$u^*[0], u^*[1]$，使$J$最小，采用逆向分级方法

- $k = 1→2$

$
  J_(1→2) &= 1 / 2 x^2[2] + 1 / 2 x^2[1] + 1 / 2 u^2[1]\
  &= 1 / 2 (x[1] + u[1])^2 + 1 / 2 x^2[1] + 1 / 2 u^2[1]
$

求导得

$ pdv(J_(1→2),u[1]) = x[1] + u[1] + u[1] = 0 $

有

$ u^*[1] = -1 / 2 x[1] $

于是

$ J^*_(1→2) = 3 / 4 x^2[1] $

#pagebreak()

进而得

$ J_(0→2) = J_(1→2) + 1 / 2(x^2[0] + u^2[0]) $

根据 Bellman 最优理论，若$J_(0→2)$最小，则子项$J_(1→2)$此时必为 最小。代入$J^*_(1→2)$和$x[1]$，可得

$ J_(0→2) = 3 / 4 (x[0] + u[0])^2 + 1 / 2 (x^2[0] + u^2[0]) $

求导得

$ pdv(J_(0→2),u[0]) = 3 / 2 (x[0] + u[0]) + u[0] = 0 $

此时

$ u^*[0] = -3 / 5 x[0] $

回代得

$ x[0] = 2 / 5, x[1] = 1 / 5 $

最终得

$ J_(min) = 0.8 $

= 线性二次型调节器

== 连续线性系统

对连续线性系统

$ dot(𝒙) = 𝑨 𝒙 + 𝑩 𝒖 $

若$𝒖 = -k 𝒙$，则

$ dot(𝒙) = (𝑨 - 𝑩 k)𝒙 = 𝑨_("cl") 𝒙 $

此时，可通过调整$k$来调整$𝑨_("cl")$的特征值，从而控制系统的稳定性。

对$𝒖$考虑，则需要引入最优化控制，其损失函数为

$ J = ∫_0^∞ (𝒙^(⊤) 𝑸 𝒙 + 𝒖^(⊤) 𝑹 𝒖) dd(t) $

这就得到了一个 LQR（linear quadratic regulator）问题。其中

- $𝒙^(⊤) 𝑸 𝒙 > 0$，类似惩罚项
- $𝒖^(⊤) 𝑹 𝒖$中，$𝑹$越大，$𝒖$的影响越大

== 离散线性系统

对离散线性系统

$ 𝒙_([k+1]) = 𝑨 𝒙_([k]) + 𝑩 𝒖_([k]) $ <sys-quad>

#pagebreak()

其代价函数可化为二次型

$
  J &= 1 / 2 underbrace((𝒙_([N]) - 𝒙_d_([N]))^(⊤) 𝑺(𝒙_([N]) - 𝒙[d]), "末端代价") \
  &+1 / 2∑_(k=0)^(N-1) (underbrace((𝒙_([N]) - 𝒙[d])^(⊤) 𝑸 (𝒙_([N]) - 𝒙[d])^(⊤), "运行代价") + 𝒖^(⊤)_([k]) 𝑹 𝒖_([k]))
$

调节目标

$ 𝒙_d = 𝟎 = vec(delim: "[", 0, 0, ⋮,0) $

则

$ J = 1 / 2 𝒙_([N])^(⊤) 𝑺 𝒙_([N]) + 1 / 2 ∑_k^(N-1) (𝒙_([k])^(⊤) 𝑸 𝒙_([k]) + 𝒖^(⊤)_([k]) 𝑹 𝒖_([k])) $

此时，$𝑺, 𝑸$为半正定对角阵，$𝑹$为正定对角阵。

== 逆向分级

$k = N$时

$ J_(N→N) = 1 / 2 𝒙_([N])^(⊤) 𝑺 𝒙_([N]) $

此时$J$为最优末端代价，因为此时无法再产生变化。令$𝑺 = P_([0])$，即

$ J_(N→N) = 1 / 2 𝒙_([N])^(⊤) P_([0]) 𝒙_([N]) $

$k = N-1$时

$
  J_(N-1→N) &= 1 / 2 𝒙_([N])^(⊤) 𝑺 𝒙_([N]) + 1 / 2 𝒙_([N-1])^(⊤) 𝑸 𝒙_([N-1]) + 1 / 2 𝒖^(⊤)_([N-1]) 𝑹 𝒖_([N-1])\
  &= J_(N→N) + 1 / 2 𝒙_([N-1])^(⊤) 𝑸 𝒙_([N-1]) + 1 / 2 𝒖^(⊤)_([N-1]) 𝑹 𝒖_([N-1])
$

以此类推

$
  J_(N-2→N) = J_(N-1→N) + 1 / 2 𝒙_([N-2])^(⊤) 𝑸 𝒙_([N-2]) + 1 / 2 𝒖^(⊤)_([N-2]) 𝑹 𝒖_([N-2])
$

又由@eqt:sys-quad，可得

$ 𝒙_([N]) = 𝑨 𝒙_([N-1]) + 𝑩 𝒖_([N-1]) $

于是，令一阶导数

$ pdv(J_(N-1→N), 𝒖_([N-1])) = 0 $

得

$
  𝒖^*_([N-1]) = -(𝑩^⊤ P_([0])𝑩 + 𝑹)^(-1) 𝑩^⊤ P_([0]) 𝑨 𝒙_([
    N-1
  ]) = -underbrace(F_([N-1]), "feedback")underbrace(𝒙_([N-1]),"Gain")
$

#pagebreak()

又二阶导数

$ pdv(J_(N-1→N), 𝒖_([N-1]), 2) = underbrace((𝑩^⊤ P_([0])𝑩)^⊤, "≥0") + underbrace(𝑹^⊤, ">0") $

故$𝒖^*$为最小值。进一步得

$ J_(N-1→N) = 1 / 2 𝒙_([N-1])^(⊤) P_([1]) 𝒙_([N-1]) $

其中

$ P_([1]) = (𝑨 - 𝑩 F_([N-1]))^⊤ P_([0])(𝑨 - 𝑩 F_([N-1])) + F_([N-1])^⊤ 𝑹 F_([N-1]) + 𝑸 $

类推得

$ J_(N-k→N) = 1 / 2 𝒙_([N-1])^(⊤) P_([k]) 𝒙_([N-1]) $

其中

$
  cases(
    P_([k]) = (𝑨 - 𝑩 F_([N-k]))^⊤ P_([k-1])(𝑨 - 𝑩 F_([N-k])) + F_([N-k])^⊤ 𝑹 F_([N-k]) + 𝑸,
    F_([N-k]) = (𝑩^⊤ P_([0])𝑩 + 𝑹)^(-1) 𝑩^⊤ P_([k-1]) 𝑨,
    𝒖^*_([N-k]) = -F_([N-k]) 𝒙_([N-k])
)
$
