非线性规划中的序列二次规划-乘子法-积极集混合算法基础题
题目描述:
考虑非线性规划问题:
minimize f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
subject to:
g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = -x₁ ≤ 0
g₃(x) = -x₂ ≤ 0
其中 x = (x₁, x₂) ∈ R²。请使用序列二次规划-乘子法-积极集混合算法求解该问题。
解题过程:
- 算法框架理解
该混合算法结合了三种方法的优点:
- 序列二次规划(SQP):通过求解一系列二次规划子问题来逼近原问题
- 乘子法:处理约束条件,改善收敛性
- 积极集策略:有效识别活动约束,提高计算效率
-
初始化
选取初始点 x⁰ = (0, 0),初始乘子估计 λ⁰ = (0, 0, 0),初始惩罚参数 μ = 10,收敛阈值 ε = 10⁻⁶ -
第一次迭代 (k=0)
当前点:x⁰ = (0, 0)
3.1 计算函数值和梯度
f(x⁰) = (0-2)⁴ + (0-0)² = 16
∇f(x⁰) = [4(0-2)³ + 2(0-0), -4(0-0)] = [-32, 0]
3.2 计算约束和梯度
g₁(x⁰) = 0² - 0 = 0 (边界约束)
g₂(x⁰) = -0 = 0 (边界约束)
g₃(x⁰) = -0 = 0 (边界约束)
∇g₁(x⁰) = [2×0, -1] = [0, -1]
∇g₂(x⁰) = [-1, 0]
∇g₃(x⁰) = [0, -1]
3.3 构建拉格朗日函数
L(x,λ) = f(x) + λ₁g₁(x) + λ₂g₂(x) + λ₃g₃(x)
3.4 构建二次规划子问题
min ½dᵀB⁰d + ∇f(x⁰)ᵀd
s.t. gᵢ(x⁰) + ∇gᵢ(x⁰)ᵀd ≤ 0, i=1,2,3
其中 B⁰ 取单位矩阵(初始Hessian近似)
3.5 求解QP子问题
得到搜索方向 d⁰ = (0.5, 0.25)
- 线搜索和参数更新
沿方向 d⁰ 进行线搜索,得到新点 x¹ = (0.4, 0.2)
4.1 更新乘子估计
使用乘子法更新公式:
λ¹ = max(0, λ⁰ + μ g(x¹))
4.2 更新Hessian近似
使用BFGS公式更新拉格朗日函数的Hessian近似
-
第二次迭代 (k=1)
重复上述过程,继续优化... -
收敛判断
经过多次迭代后,当 ‖∇L(xᵏ, λᵏ)‖ < ε 且约束违反度足够小时,算法终止。
最终得到近似最优解:x* ≈ (1.2, 0.6),f(x*) ≈ 0.05
该混合算法通过SQP提供快速局部收敛,乘子法增强全局收敛性,积极集策略提高计算效率,特别适合中等规模的非线性规划问题。