非线性规划中的序列二次约束二次规划(SQCQP)算法基础题
我将为您讲解序列二次约束二次规划(SQCQP)算法的基础题目。这个算法是处理非线性约束优化问题的重要方法。
题目描述:
考虑以下非线性规划问题:
最小化:f(x) = x₁² + x₂²
约束条件:g(x) = x₁⁴ + x₂⁴ - 16 ≤ 0
初始点:x⁰ = (2, 2)
解题过程:
第一步:理解问题结构
- 目标函数f(x)是二次函数,是凸函数
- 约束函数g(x)是四次函数,是非凸函数
- 可行域是x₁⁴ + x₂⁴ ≤ 16定义的区域
- 初始点(2,2)在约束边界上,因为2⁴ + 2⁴ = 16 + 16 = 32 > 16,所以是可行域外的点
第二步:SQCQP算法框架
SQCQP的核心思想是将原问题序列化为一系列二次约束二次规划子问题。在每个迭代点xᵏ处,我们构造如下子问题:
最小化:∇f(xᵏ)ᵀd + ½dᵀBᵏd
约束条件:g(xᵏ) + ∇g(xᵏ)ᵀd ≤ 0
(其中Bᵏ是Hessian矩阵的近似)
第三步:计算梯度和Hessian
在初始点x⁰ = (2,2)处:
∇f(x) = [2x₁, 2x₂] = [4, 4]
∇g(x) = [4x₁³, 4x₂³] = [32, 32]
g(x⁰) = 2⁴ + 2⁴ - 16 = 32 - 16 = 16 > 0(违反约束)
第四步:构造第一个子问题(k=0)
使用单位矩阵作为B⁰的初始近似:
最小化:4d₁ + 4d₂ + ½(d₁² + d₂²)
约束条件:16 + 32d₁ + 32d₂ ≤ 0
简化约束:32d₁ + 32d₂ ≤ -16 ⇒ d₁ + d₂ ≤ -0.5
第五步:求解第一个子问题
这是一个凸二次规划问题。使用拉格朗日乘子法:
L(d,λ) = 4d₁ + 4d₂ + ½(d₁² + d₂²) + λ(d₁ + d₂ + 0.5)
最优性条件:
∂L/∂d₁ = 4 + d₁ + λ = 0
∂L/∂d₂ = 4 + d₂ + λ = 0
d₁ + d₂ = -0.5(主动约束)
解得:d₁ = d₂ = -0.25, λ = -3.75
第六步:更新迭代点
x¹ = x⁰ + d = (2 - 0.25, 2 - 0.25) = (1.75, 1.75)
第七步:检查收敛性
在x¹处:g(x¹) = 1.75⁴ + 1.75⁴ - 16 ≈ 18.38 - 16 = 2.38 > 0
约束仍然违反,需要继续迭代。
第八步:第二次迭代(k=1)
在x¹ = (1.75, 1.75)处:
∇f(x¹) = [3.5, 3.5]
∇g(x¹) = [4×1.75³, 4×1.75³] ≈ [21.44, 21.44]
g(x¹) ≈ 2.38
更新B¹(使用BFGS公式或保持单位矩阵)
构造新的子问题并求解
第九步:算法收敛分析
经过多次迭代,算法会收敛到可行点,并且满足KKT条件:
- 目标函数梯度与约束函数梯度的线性组合为零
- 互补松弛条件成立
- 原始可行性和对偶可行性满足
关键要点:
- SQCQP通过序列二次逼近处理非凸约束
- 每个子问题都是凸优化问题,可高效求解
- 需要合适的Hessian近似以保证收敛性
- 算法具有局部超线性收敛速率
这个基础题目展示了SQCQP算法如何处理带有非线性约束的优化问题,通过序列化的凸近似逐步逼近最优解。