背景
在之前的文章《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算法的推导就完成了。
未经允许,禁止转载。