有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法
Posted Jeossirey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法相关的知识,希望对你有一定的参考价值。
有效集法(Active Set)
单纯性法(Simplex Method)是“线性规划之父”George Dantzig 最著名的成果,也是求解线性规划最有力的算法之一。而这一算法在求解二次规划(Quadratic Programming, QP)时的升级版就是有效集法(Active Set Method, ASM)。这两种算法的特点都是迭代点会循着约束边界前进,直到达到问题的最优点。
我们首先来讲一下约束部分:
假设
(就是这个向量一共有d个标量组成),则
的几何意象就是d维空间中的 d-1 维曲面,如果函数
是线性的,
则是个 d-1 维的超平面(这是平面中的直线、空间中的平面之推广(n大于3才被称为“超”平面))。那么有约束优化问题就要求在这个 d-1 维的曲面或者超平面上找到能使得目标函数最小的点,这个 d-1 维的曲面就是“可行解区域”。
对于不等式约束条件,
可行解区域从 d-1 维曲面扩展成为 d 维空间的一个子集。我们可以从 d=2 的二维空间进行对比理解。等式约束对应的可行解空间就是一条线;不等式约束对应的则是这条线以及线的某一侧对应的区域。
要说有效集法,首先要说说什么是有效集。有效集就是指那些在最优点有效(active)的不等式约束所组成的集合。
案例一:考虑二次函数:
函数的等高线及两个约束的图像如下(竖着的蓝色虚线为X=0;横着的红色虚线为Y=-1):
通过计算或者从图上可以看出:
1. 当没有约束时,目标函数的最小值在(−1,−0.5) 处取得。
2. 当考虑上述的两条约束时,目标函数的最小值在 (0,−0.5)处取得。这个时候在最优点处,约束 x≥0中的等号被激活,这条约束就被称为有效约束(active constraint)。如果我们记两条约束的编号为 1 和 2,那么在最优点处的有效集就可以记为:
而如果原命题中 y≥−1 这条约束改为 y≥−0.5,即要求解的优化命题变为:
函数的等高线及两个约束的图像如下(竖着的蓝色虚线为X=0;横着的红色虚线为Y=-0.5):
此时优化命题的解仍然是 (0,−0.5) ,但在最优点处两条约束均被激活,即此时的有效集可以记为:
从上面可以看出,如果我们能提前知道在最优点处有效的约束,那我们就可以把那些未有效的不等式约束剔除掉并把原命题转化成更易求解的等式约束命题。
案例二:
目标函数及约束:
结果分析:
1. 如果没有任何约束条件,最优解在坐标原点(0, 0)处(青色X);
2. 如果只有不等式约束条件 ,最优解在坐标(1,0)处(红色X);
3. 如果只有等式约束条件 ,在坐标(1,-1)处(绿色+);
4. 如果两个约束条件都有,最优解在黄色处。
结合案例一,我们在求解之前我们往往对最优点处的有效约束知之甚少。因此如何找到最优点处的有效约束也就是有效集法的主要工作。另外在这里要提一点,其实在一些应用中,我们需要求解一系列类似的 QP 命题,这个时候我们往往对最优点处的有效约束有一个初始猜测,因此通过这种方式可以实现算法的热启动(Warm Start),从而加速算法的收敛
ASM 算法的迭代点都是在可行域内或者可行域的边界上移动,这样的好处是即使你提前终止迭代,那么算法得到的也是一个可行解。而这样的缺点则是在算法启动是需要我们给定一个可行的初始点,而求解这样一个可行的初始点往往也不是一件简单的事情。而初始的工作集往往可以取为空集。
序列二次规划(SQP)
序列二次规划(Sequential Quadratic Programming)对于非线性约束最优化问题是一个非常有效的算法,将原始问题划分为一系列二次规划的子问题进行求解。
我们介绍的SQP都属于激活集算法,有两种类型的激活集SQP算法,第一类是IQP,将原始问题转换为一系列不等式约束二次规划;第二类是EQP,将原始问题转换为一系列等式约束二次规划问题。
大部分的SQP问题分为两个步骤进行求解,第一步通过局部方法寻找有效集;第二步是通过LineSearch或者TR进行最优化。
IPQ 和 EPQ
IPQ:顾名思义将原始问题转换为一系列带有不等式约束的二次规划问题,该方法在实际中效果非常好,问题是对于一般的二次规划问题求解复杂度较高,虽然可以将该次的最优解作为下一次子问题的初始解,仍然存在热启动问题。
EPQ:每次只考虑激活集,即等式约束。相对于IPQ每个子问题相对比较容易求解。
内点法(Interior-Point)
内点法和SQP方法类似对于求解大规模非线性约束非常有效。
内点法可以从对偶问题中获取关键思路,可以结合线搜索和信赖域方法进行求解。
以上是关于有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法的主要内容,如果未能解决你的问题,请参考以下文章
线性规划中的单纯形法与内点法(原理步骤以及matlab实现)
C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数
C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数