非线性规划中的序列二次规划-积极集混合算法基础题
题目描述
考虑非线性规划问题:
最小化 f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
满足约束:
g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = -x₁ ≤ 0
g₃(x) = -x₂ ≤ 0
这是一个具有非线性目标函数和非线性不等式约束的优化问题。我们需要找到在满足所有约束条件下使目标函数最小的点。
解题过程
1. 算法选择思路
序列二次规划(SQP)算法在非线性规划中表现优秀,但对于约束较多的复杂问题,其计算量可能较大。积极集法能有效处理约束边界,但需要好的初始点。将两者结合,可以利用SQP的快速收敛性和积极集法对约束的精确处理能力。
2. 算法框架
混合算法的基本步骤:
- 步骤1:初始化。选择初始点x⁰,初始拉格朗日乘子估计λ⁰,初始Hessian近似B⁰
- 步骤2:在当前点构造二次规划子问题
- 步骤3:使用积极集法求解二次规划子问题,得到搜索方向
- 步骤4:进行线搜索确定步长
- 步骤5:更新当前点和乘子估计
- 步骤6:检查收敛条件,若满足则停止,否则返回步骤2
3. 具体实现步骤
步骤3.1:构造二次规划子问题
在当前迭代点xᵏ,我们构造如下二次规划子问题:
最小化 ∇f(xᵏ)ᵀd + ½dᵀBᵏd
满足:
gᵢ(xᵏ) + ∇gᵢ(xᵏ)ᵀd ≤ 0, i=1,2,3
其中Bᵏ是拉格朗日函数Hessian的近似。
步骤3.2:计算梯度和函数值
目标函数梯度:∇f(x) = [4(x₁-2)³ + 2(x₁-2x₂), -4(x₁-2x₂)]ᵀ
约束梯度:
∇g₁(x) = [2x₁, -1]ᵀ
∇g₂(x) = [-1, 0]ᵀ
∇g₃(x) = [0, -1]ᵀ
步骤3.3:积极集法求解二次规划子问题
积极集法的核心思想是识别在最优解处起作用的约束集合。
子步骤:
- 预测积极集:基于当前约束违反情况和乘子估计,预测可能起作用的约束
- 求解等式约束二次规划:只考虑预测的积极约束作为等式约束
- 检查最优性条件:计算拉格朗日乘子,如果所有乘子非负且满足互补松弛条件,则找到解
- 如果存在负乘子,从积极集中移除对应约束
- 如果解不可行,将最违反的约束加入积极集
步骤3.4:线搜索和收敛判断
使用Merit函数(如l₁精确罚函数)进行线搜索:
ϕ(x; μ) = f(x) + μ∑max(0, gᵢ(x))
收敛判断基于KKT条件的满足程度:
- 梯度条件:‖∇ₓL(x,λ)‖ ≤ ε
- 可行性:max(0, gᵢ(x)) ≤ ε
- 互补松弛条件:|λᵢgᵢ(x)| ≤ ε
4. 数值示例
从初始点x⁰ = [0.5, 0.5]开始迭代:
- 第一次迭代:构造QP子问题,积极集法求解得到搜索方向
- 线搜索确定步长,更新点位置
- 重复直到收敛到最优解x* ≈ [1.0, 1.0]
5. 算法优势
这种混合方法结合了SQP的快速局部收敛和积极集法对约束边界的精确处理,特别适合中等规模的非线性规划问题,在约束数量较多时仍能保持较好的计算效率。