背景
在之前的文章《iLQR算法公式推导》中,我们推导了iLQR算法在无约束情况下的迭代公式,但是在实际应用中,我们往往需要考虑约束条件。本文将介绍如何使用增广拉格朗日法Augmented Lagrangian Methods来处理约束条件。
约束优化问题
具有约束的优化问题具有如下形式:
其中是时间步,
是状态,
是控制量,
是状态转移函数,
是终端损失函数,
是中间损失函数,
是不等式约束,
是等式约束。
增广拉格朗日法
将约束优化问题转化为增广拉格朗日函数的形式:
其中是拉格朗日乘子,
是惩罚系数,
是不等式约束和等式约束的组合,相应的,不等式约束的序号和等式约束的序号的集合分别是
和
,
是对角矩阵,它的定义如下:
其中表示第
个时间步的第
个约束,
表示第
个时间步的第
个约束的值,
表示第
个时间步的第
个约束的拉格朗日乘子,
表示第
个时间步的第
个约束的惩罚系数。
系统的动力学约束可以通过如下方式显式得处理:使用系统的初始状态和控制量
,通过状态转移函数
得到状态序列
。
增广拉格朗日法的迭代公式
根据iLQR算法的反向传播过程,我们可以通过固定拉格朗日乘子和惩罚系数来定义cost-to-go函数:
根据上述新的和
的定义对其进行泰勒展开:
根据定义,我们可以得到终末(terminal)的最优cost-to-go函数的二阶展开之后的系数:
其中:
接下来我们看action-value函数的二阶展开之后的系数,根据iLQR中的推导:
其中,
,
,
,
,
的形式和iLQR中的有所不同,它们的定义如下:
其中:
接下来就和iLQR中的过程一样了,其中反向传播的过程如下:
当然,如果考虑正则化,的计算方式如下:
方法1:
方法2:
更新增广拉格朗日乘子和惩罚系数
在保持和
不变的情况下进行完iLQR操作之后(如上),我们可以得到新的控制量序列
以及对应的状态序列
,接下来我们在这个基础上更新
和
:
其中是一个大于1的常数,
和
表示第
个时间步的第
个约束的更新后的拉格朗日乘子和惩罚系数。
AL-iLQR算法整体流程
- 初始化
,
和
;
- 根据当前的
和
,使用iLQR算法计算
和
;
- 根据
和
,更新
和
。
- 根据
和
,更新
和
;
- 检查
如果是真的,转到步骤2,否则结束。
- 输出
和
和
。
至此AL-iLQR算法的推导就完成了。
未经允许,禁止转载。