最优控制的目标:
对于一个状态空间方程表示的系统,在满足约束条件的前提下,将系统状态从起始步x[0]转移到目标步xd的最优控制策略,其中最优控制的评判标准是代价函数J的最小值。

代价函数J由两部分组成,分别是用hd表示的末端代价,即终止步x[N](N表示状态转移的总步长)与目标值xd的差距;以及用gd表示的运行代价,其又分为两部分,分别是系统在运行的每个状态转移步x[k]下与对应状态下的目标步xd[k]的差距,以及每个状态转移所需要输入的能耗u[k]的代价。
以下面这个离散系统的为例,可以看到随着步进,x[N]实际上是一个关于x[0],u[0],u[1]…u[N-1]的函数,也就是随着输入的进行,将系统状态从起始步x[0]转移到目标步xd的过程,而我们的目标就是找到最优的一系列输入u[0],u[1]…u*[N-1]使系统完成转移的同时代价函数最小。

最优控制的基本策略是动态规划和逆向分级,其数学原理是贝尔曼最优原理。
以下面这个简单的离散系统为例,步长N=2,初始步x[0]=1,目标步xd=0,代价函数如下:

要设计每步的输入u[k]使代价函数最小,即为最优的控制策略,定义*为最优策略符。
由于步长为2,显然进行两次输入就会结束,故要求的输入为u[0]和u[1]。
根据贝尔曼最优原理,要使J0->2最小,J1->2显然也是最小的,这就是一个逆向分级的思想。
那么要求J0->2的最小值,首先就要求J1->2的最小值:

列出J1->2的方程,此时系统状态为x[1]为已知值,故把终止步x[2]利用状态方程表示为x[1]和u[1]的组合,则此时J1->2为与x[1]和u[1]有关的函数,而x[1]为已知量,故J1->2=f(u[1]),只需要dJ1->2/du[1]=0即可求出该函数的极点(可证明为最小值),对应的u[1]即为能使J1->2取最小值的最优值u[1]。
得到了min{J1->2}就可以进一步求min{J0->2},列出J0->2的方程不难发现其包含J1->2部分,这也是贝尔曼最优原理的体现。显然要得到min{J0->2},J1->2要取之前求到的最小值,这个值与x[1]有关,同样我们利用状态方程将其表示为x[0]和u[0]的组合,而此时x[0]为已知量,故求dJ1->2/du[1]=0同样可求出该函数的极点,对应的u[0]即为能使J0->2取最小值的最优值u
[0]。

由此可以求出各状态和输入的最优值如下,代价函数的最小值为0.8,可以看到此时系统终止步并不在目标位置x[d],这是由代价函数的设置决定的,即代价函数只认可将其取值最小的结果,对于是否到达目标位置并不关心,这点在之后会优化。

LQR控制器:Linear Quadratic Regulator线性二次型调节器
LQR控制器由线性状态函数和二次型代价函数组成,这里详细解释一下代价函数。
代价函数中的末端代价和运行代价的概念没有变,仍然是当前步与当前目标步的欧几里得范数,而SQR均为参数对角矩阵,表示了对各输入和状态的不同重视程度,值越大越重视。

对于调节系统(xd=0)来说,代价函数简化成如下形式:

同样采用逆向分级的思想可以发现JN-k->N总是包含JN-k+1->N的部分,故要使JN-k->N取到最小值,显然JN-k+1->N也要是最小值

以求min{JN-1->N}为例,同样先把x[N]=Ax[N-1]+Bu[N-1]表示:

求解这个方程即可得到对应的最佳输入:

将输入u*[N-1]代回JN-1->N即可得到此时从N-1->N的最小代价函数值:

可以看到如果把中间的一长串定义为P[1],则它具有与JN->N中P[0]一样的形式
类似的,JN-k->N与JN-1->N具有相似的形式,如下所示:

可以看到上述的红框部分即为实现代价函数最小的最佳输入,在求解过程中,P[k]和u[k]的计算总是从终点步开始逆向求解的,而状态转移的进行却是从x[0]开始的,也就是说最优输入的确定完全是离线运算,不依赖于现在的状态。

把F矩阵看做常数?
对于轨迹追踪(xd!=0)系统来说,我们需要引入误差e[k]=x[k]-xd[k],则对x[k]的轨迹追踪问题就变为了对e[k]的调节问题,现在的问题是怎么把系统变量由x[k]变为e[k]。

先看最简单的一种情况,即目标步为一常数,即xd[k]为一不变值,即AD=I
此时系统的状态方程如下:

定义增广形式的状态变量xa[k]和状态方程如上所示,同时误差e[k]可以写作以下形式:

上式建立了e[k]和xa[k]的关系,之前我们提到了一般的二次型代价函数,则其可以改写如下:

这个代价函数是关于增广状态变量xa[k]的,因此可以与xa[k]对应的状态方程联立进行LQR:

可以看到其格式完全符合LQR的调节形式,使用之前的理论构建输入u[k]即可
值得指出的是,使用LQR的代价函数也有可能导致系统无法达到目标的情况,这与之前提到过的代价函数设置别无二致,这种控制方式我们称之为目标误差控制。

能够解决这个问题的方法被称为稳态非零参考值控制:
我们假设系统到达目标时处于常值稳态xd,对应的输入也为常值稳态ud,即:

显然在xd/A/B已知的时候ud为一已知量,此时我们定义稳态输入误差δu[k]=u[k]-ud:

同样定义增广形式的状态变量xa[k]和状态方程如上所示,注意此时的u[k]为δu[k],对应代价函数的u[k]项也为δu[k],此时就可以结合xa[k]和δu[k]建立LQR关系。

其中xa[k]为已知量,δu[k]为要求的最优控制值δu*[k]。由于我们此时得到的是δu[k],因而对u[k]的控制应该在ud的基础上加上δu[k]。

可以发现,在目标误差控制中代价函数以u的形式出现,体现了代价函数对能耗的看重,只有以一个比较适合的能耗完成过程才能满足代价函数,故目标误差控制中往往不能使系统转移到目标步;而在稳态非零参考值控制中代价函数以δu的形式出现,体现了代价函数对偏移的看重,只有偏移越小才能满足代价函数,故稳态非零参考值控制可以提供一个理想的ud使系统转移到目标点xd。
更加复杂的控制是输入增量控制,此时系统轨迹xd为非常数,即AD!=I

此时我们的目标是△u[k],代价函数要尽可能削减△u[k]的值使输入变化平滑
此时的增广状态为xa[k]=[x[k],xd[k],u[k-1]]
则此时系统的状态方程和代价函数可以写做:

同样,此时的状态方程和代价函数是关于xa[k]和△u[k]的,可以对xa[k]和△u[k]进行LQR,解出△u[k]的最优控制策略,同样对u[k]的控制应该在u[k-1]的基础上加上△u[k]。