非线性规划中的序列二次规划与积极集法的结合
我将为您讲解这个运筹学词条。我们从基本概念开始,逐步深入到这个方法的原理和实现。
步骤1:理解背景与基本组件
首先需要明确两个核心概念:
-
序列二次规划(SQP):这是一种求解带约束非线性规划问题的方法。其核心思想是:在每次迭代中,构造一个二次规划子问题来近似原问题,求解这个子问题得到搜索方向,然后沿此方向进行线搜索。这个二次规划子问题通常是通过对原问题的拉格朗日函数进行二次近似,并对约束进行线性近似而得到的。
-
积极集法:这是一种处理不等式约束优化问题的方法。在每次迭代中,它预测哪些不等式约束在当前解处是“积极”的(即等式成立或近似成立),并将这些约束当作等式约束来处理,而忽略非积极约束。随着迭代进行,这个积极集的预测会不断更新。
步骤2:为什么需要结合这两种方法?
考虑一般的非线性规划问题:
最小化 f(x)
满足 c_i(x) = 0, i ∈ E (等式约束)
c_i(x) ≥ 0, i ∈ I (不等式约束)
纯粹的SQP方法在每次迭代中需要求解一个二次规划子问题。当不等式约束很多时,这个二次规划子问题的求解本身可能就很复杂。而积极集法的优势在于,它通过识别积极约束,将一个带有许多不等式约束的问题,转化为一个只处理少量(积极)等式约束的问题,从而降低了计算量。
因此,将SQP与积极集法结合,其核心动机是:利用SQP框架处理问题的非线性本质,同时利用积极集策略高效处理不等式约束,特别是当积极约束数量远少于总约束数量时。
步骤3:结合方法的基本框架
结合后的算法通常按以下步骤进行迭代:
步骤3.1:在当前迭代点构造二次规划子问题
在迭代点 \(x_k\) 处,我们构造如下二次规划子问题:
最小化 ∇f(x_k)^T d + (1/2) d^T B_k d
满足 ∇c_i(x_k)^T d + c_i(x_k) = 0, i ∈ E
∇c_i(x_k)^T d + c_i(x_k) ≥ 0, i ∈ I
其中,\(d\) 是搜索方向,\(B_k\) 是拉格朗日函数Hessian矩阵的近似(或Hessian本身)。
步骤3.2:应用积极集法求解该二次规划子问题
这是结合的关键。我们不直接求解上述完整的二次规划,而是用积极集法来求解:
- 预测积极集 \(A_k\):基于当前信息,预测在子问题最优解处可能取等式的那些不等式约束的集合(即“积极”约束)。
- 求解等式约束二次规划:将 \(A_k\) 中的不等式约束视为等式约束(与原有的等式约束 \(E\) 一起),忽略其他不等式约束,得到一个较小的、只含等式约束的二次规划问题。这个问题的求解非常高效(例如,可以转化为求解线性系统)。
- 检查与更新:求解后,检查解是否满足所有原始不等式约束,并检查积极集预测的合理性(例如,通过拉格朗日乘子的符号判断)。如果不满足,则更新积极集 \(A_k\)(增加或移除约束),然后重新求解。重复此过程,直到找到子问题的最优解 \(d_k\) 和对应的乘子估计 \(\lambda_{k+1}\)。
步骤3.3:线搜索与接受新迭代点
得到搜索方向 \(d_k\) 后,沿此方向进行线搜索,确定步长 \(\alpha_k\),以确保某个价值函数(如精确罚函数)充分下降。然后更新迭代点:
\(x_{k+1} = x_k + \alpha_k d_k\)。
步骤3.4:更新近似Hessian矩阵
根据新的点 \(x_{k+1}\) 和乘子 \(\lambda_{k+1}\),使用拟牛顿法(如BFGS或SR1更新公式)更新矩阵 \(B_k\) 为 \(B_{k+1}\),以更好地近似拉格朗日函数的二阶信息。
步骤4:算法的关键细节与优势
-
积极集预测策略:如何初始化和更新积极集 \(A_k\) 是关键。通常,可以将前一次迭代的积极集作为当前预测的起点,或者利用当前点的约束函数值和乘子信息进行预测。
-
子问题求解效率:由于每次内部循环(积极集法的迭代)只需求解一个等式约束二次规划,计算成本较低,尤其是当积极约束数量很少时。
-
全局收敛性:通过结合价值函数(如l1精确罚函数或增广拉格朗日函数)的线搜索,可以保证算法能从任意初始点收敛到稳定点(满足KKT条件的点)。
-
超线性收敛:在最优解附近,如果使用精确的Hessian矩阵(或其一致近似),并且积极集识别正确后不再改变,该算法会退化为在正确的积极约束流形上执行牛顿法,从而获得超线性收敛速率。
步骤5:总结与应用场景
这种方法本质上是SQP算法框架的一种具体实现方式,专门针对大规模、含大量不等式约束的非线性规划问题进行了优化。它继承了SQP方法处理非线性问题的强大能力,同时通过积极集策略避免了在每次外层迭代中求解大规模、复杂的二次规划子问题,显著提升了计算效率。它在工程设计、经济均衡、最优控制等领域具有广泛的应用价值。