背景
在之前的文章《离散系统的LQR推导》中,我们讨论了LQR在线性系统中的应用,我们讨论了该算法在线性时变系统中的一般情况,也讨论了在线性时不变系统中的特殊情况;以及有限时域(Finite Horizon)和无限时域(Infinite Horizon)这两种情况。不过在实际的控制系统中,大部分系统的模型都是非线性的,传统的LQR只能在系统的当前状态下对系统进行线性化近似,这种近似并不能保证基于线性假设得到的最优控制率实际上真的是最优的。
由于传统的LQR存在上述局限性,有人对它进行了改进,提出了iLQR算法,它的全称是迭代线性二次调节器(iterative Linear Quadratic Regulator),下面我们对该算法进行详细介绍。
算法概览
iLQR算法的关键思想是,在每次迭代中,所有非线性约束和目标都使用一阶或二阶泰勒级数展开来近似,因此,现在对标称轨迹的偏差进行操作的近似函数可以使用离散LQR来求解。最优反馈控制策略在“反向传播”阶段计算,因为和LQR算法一样,动态规划(Dynamic Programming)的步骤是从轨迹的尾部开始。然后在“正向传播”期间将“反向传播”期间得到的最优控制策略产生的控制输入偏差应用于标称轨迹的控制输入量,并使用更新之后的输入量来正向模拟更新轨迹(rollout)。这个过程在每次迭代中重复,直到收敛为止。
非线性系统优化问题
考虑下述非线性系统的优化问题:
代价(Cost):
其中,
状态转移方程(State Transition Equation):
根据《离散系统的LQR推导》的中的公式(8)中的相关推导,我们可以得到cost to go:
根据上述公式,我们可以发现是关于的函数,即,下面再看:
根据上式,可知是关于的函数,因为在对做优化之后,会得到一个最优控制率是关于,的函数。如果我们将最优控制率代入到公式(4),得到的最优代价也是的函数,因此根据公式(3)的递归,可知:
即第个最优代价(cost to go)是的函数,还未对进行优化的代价是和的函数。
使用泰勒展开将系统局部线性化
为了线性化非线性系统以及非线性代价函数,我们需要对、和进行泰勒展开,我们首先对进行泰勒展开,根据泰勒展开的公式:
下面对进行泰勒展开,根据泰勒展开的公式:
上式定义,,下面对进行泰勒展开,根据泰勒展开的公式:
于是有:
根据公式(5)的定义,有:
首先对上述的公式(10.1)进行泰勒展开,根据泰勒展开的公式:
然后对公式(9.2)进行泰勒展开,根据泰勒展开的公式:
综上我们分别得到,,,,,:
反向传播
根据控制系统的控制目标,我们需要对系统的状态进行反向传播,即从系统的最终状态开始,反向传播到系统的初始状态,我们首先对进行泰勒展开,根据泰勒展开的公式:
即:
如果终末代价函数是如下形式:
则有:
现在我们得到了轨迹尾部的和,下面我们来计算他们的递推关系,根据公式(5)和公式(8),有:
为了使得最小,我们需要对求导,令导数为0,有:
解上述方程,有:
即:
将上述公式(18)代入公式(9),并展开,有:
根据公式(7)的定义,有:
上边的是的关于的一阶项系数,是的关于的二阶项系数,是的常数项,论文中将称为“代价的期望变化(expected change in cost)”,后边我们会将每一个时间步长的“代价的期望变化”相加,得到总的“代价的期望变化”,它将用来判断“前向传播”中每一次迭代是否满足线性搜索(Line Search)的条件,我对这个地方的处理有些困惑。作为一个与无关的常数,它不会影响后续对于和及其之前的值的递推。
正向传播
现在我们已经计算了每个时间步长的最佳反馈增益,现在我们通过模拟动力学来更新标称轨迹。由于初始状态是固定的,整个正向模拟可以通过以下公式表示:
其中和是更新之后名义轨迹,是一个对于前馈项的缩放因子。
与所有非线性优化一样,需要沿着下降方向进行线路搜索,以确保足够的代价的降低,我们使用参数α采用简单的回溯线搜索。在应用公式(22)以获取候选状态和控制轨迹之后,我们计算了代价的实际减少与预期减少的比率:
其中:
其中是公式(21)中的的被参数化之后的结果。可以在“前向传播”时,通过分别存储公式(24)中的两项然后将它们和和相乘来计算高效的计算。
如果在之间,通常是,则我们接受这个候选轨迹,否则我们将缩小到,其中,通常是。我们重复这个过程,直到在之间。
我们可以考察这个极限情况,根据公式(22),有:
因为且,所以,根据公式(22),相比于没有任何变化,相应的相对于也没有变化,因此在这个情况下整条轨迹都不会有任何变动。相反,如果,那么整个轨迹会根据的值而有所变化,的大小决定了变化的程度。如果按照这个逻辑,我们可以这样理解公式(23)中的:其中是将代价函数线性化之后的期望的代价变化,则表示轨迹更新之后代价的实际变化,如果我们选取的没有使得更新的轨迹偏离线性化的位置过多,那么和的比值不会太大,即的值不会太大,反之,如果我们选取的使得更新的轨迹偏离线性化的位置过多,那么和的比值会很大,即的值会很大,这样我们就可以通过的值来判断我们选取的是否合适。
正则化(Regularization)
由于数值计算精度的问题,可能会不满足正定条件,因此我们需要对进行正则化,有以下两种正则化的方法:
方法1:
根据公式(11):
方法2:
根据公式(11):
注意和(以及和)在使用上的细微区别,前者被用来计算期望的代价变化()和向后传播的递归,正则化之后的后者被用来计算反馈增益()和前馈项()。
约束(Constraints)
要处理约束,需要使用增广拉格朗日法(Augmented Lagrange Method) 对原有的代价进行增广,在这里暂时不做讨论,后边会有专门的文章来讨论增广拉格朗日法在iLQR中的应用。即AL-iLQR算法。
终止条件
iLQR一般具有三种终止条件:
- 代价函数的变化量小于某个阈值,即。
- 前馈增益项的变化量小于某个阈值,即。
- 迭代次数达到某个阈值。
到此为止,我们已经完成了对于iLQR算法的讨论。