二次规划(QP, Quadratic Programming)定义:目标函数为二次函数,约束条件为线性约束,属于最简单的一种非线性规划。
一个标准的等式约束QP模型如下
其中 是由二阶导构成的Hessian矩阵,这里的向量都是指列向量,
表示转置成行向量。
其对应的Lagrange函数为
满足KKT条件,即满足
将其写成矩阵形式
其中
,
,
这是一个纯线性方程组,易于求解,KKT方程组的解 ,即为优化模型的解
一个标准的等式不等式联合约束QP原模型如下
表示的是
个等式约束集合,
表示的是
个不等式约束集合。对于不等式约束下的QP问题此处介绍两种求解方案
模型的拉格朗日函数为
内点法在之前的系列中我们已经详细介绍,以原始对偶内点法为例,加入微小量 扰动后KKT条件为
为了更快的检查解是否在约束空间内,我们在不等式方程组引入了松弛变量 则
,因为判断
要比判断
方便的多,上式成为
将其写成矩阵形式
其中
,
,
牛顿法解方程组
即
得到 然后更新变量
同时更新,
进入
次迭代直到方程组的解,并且满足
积极集法属于图形法在QP问题上的扩展,其通过求解有限个等式约束QP问题来解决一般约束下的QP模型。当不等式约束条件不多时,也是一种高效的求解QP算法。
积极集法首先将QP中所有的不等式约束视为等式约束。把不等式约束直接转成等式约束当然是存在问题的,不等式约束存在有效和无效两种情况,而有效无效很容易通过该不等式对应的拉格朗日乘子进行判断。不等式约束的互补松弛条件告诉我们,不等式对应的拉格朗日乘子应当满足 。
在第 次迭代开始时,我们首先检查当前的迭代点
是否为当前工作集
(有效不等式约束集合)下的最优点。如果不是,我们就通过求解一个等式约束的 QP 命题来得到一个前进方向
。在计算
的时候,只关注
中的不等式约束并将其转化为等式约束,而忽略其他不等式约束。令:
,代入原命题得
上式展开后,令 (常数),在第
次迭代需要求解的 QP 子命题为
更新:
添加有效约束:
迭代需要满足 ,因此步长
为
:满足所有等式不等式约束,不需要更新工作集,进一步迭代;
:在当前迭代点处有其他的有效约束没有被添加到工作集
中;
:也就是说下降方向
被某条不在工作集
内的约束阻拦住了,需要将这条约束添加到工作集来构造新的工作集
。
删除无效约束:
计算拉格朗日乘子
通过上式计算出不等式约束对应的拉格朗日乘子,如果有一个或者多个 的值小于0。那么就表明通过去掉工作集的某一条或几条约束,目标函数值可以进一步下降。因此我们会从对应的
值小于 0 的约束中选择一条,将其从工作集
中剔除从而构造出新的工作集
。如果有多于一条的可选约束,那么不同的剔除方法会遵循不同原则,默认去除对应
值最小的那条约束。