非线性规划中的序列二次约束规划(SQCP)算法进阶题
我将为您讲解序列二次约束规划(SQCP)算法的进阶应用。这个算法在处理非线性规划问题,特别是包含非线性约束的复杂优化问题时非常有效。
问题描述
考虑以下非线性规划问题:
最小化 f(x) = (x₁-2)⁴ + (x₁-2x₂)²
满足约束:
g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = -x₁ ≤ 0
g₃(x) = -x₂ ≤ 0
其中 x = (x₁, x₂) ∈ R²
这是一个典型的非线性规划问题,目标函数和约束都是非线性的。
解题过程
第一步:理解SQCP算法的基本思想
序列二次约束规划的核心思想是将原非线性规划问题转化为一系列二次约束规划子问题。每个子问题在当前迭代点附近对目标函数和约束进行二阶近似,然后求解这个近似问题得到下一个迭代点。
第二步:构建拉格朗日函数
首先构建原问题的拉格朗日函数:
L(x,λ) = f(x) + λ₁g₁(x) + λ₂g₂(x) + λ₃g₃(x)
其中 λ = (λ₁, λ₂, λ₃) ≥ 0 是拉格朗日乘子
第三步:在当前点进行泰勒展开
假设当前迭代点为 xₖ,我们需要计算:
- 目标函数值 f(xₖ)
- 目标函数梯度 ∇f(xₖ)
- 目标函数海森矩阵 ∇²f(xₖ)
- 约束函数值 gᵢ(xₖ)
- 约束函数梯度 ∇gᵢ(xₖ)
- 约束函数海森矩阵 ∇²gᵢ(xₖ)
对于我们的问题:
∇f(x) = [4(x₁-2)³ + 2(x₁-2x₂), -4(x₁-2x₂)]
∇²f(x) = [[12(x₁-2)² + 2, -4], [-4, 8]]
∇g₁(x) = [2x₁, -1]
∇²g₁(x) = [[2, 0], [0, 0]]
∇g₂(x) = [-1, 0]
∇²g₂(x) = [[0, 0], [0, 0]]
∇g₃(x) = [0, -1]
∇²g₃(x) = [[0, 0], [0, 0]]
第四步:构建二次约束规划子问题
在第k次迭代,我们求解以下二次约束规划子问题:
最小化 ∇f(xₖ)ᵀd + ½dᵀ∇²L(xₖ,λₖ)d
满足约束:
gᵢ(xₖ) + ∇gᵢ(xₖ)ᵀd + ½dᵀ∇²gᵢ(xₖ)d ≤ 0, i=1,2,3
其中 d = x - xₖ 是搜索方向,∇²L(xₖ,λₖ) = ∇²f(xₖ) + Σλᵢ∇²gᵢ(xₖ) 是拉格朗日函数的海森矩阵。
第五步:信任域机制
为了控制近似质量,通常加入信任域约束:
‖d‖ ≤ Δₖ
其中 Δₖ > 0 是信任域半径,根据近似质量动态调整。
第六步:算法流程
- 初始化:选择初始点 x₀,初始乘子 λ₀,初始信任域半径 Δ₀ > 0,参数 η ∈ (0,1)
- 对于 k = 0,1,2,... 直到收敛:
a. 在当前点 xₖ 计算函数值、梯度和海森矩阵
b. 构建并求解二次约束规划子问题,得到搜索方向 dₖ
c. 计算实际下降量:Δf_actual = f(xₖ) - f(xₖ + dₖ)
d. 计算预测下降量:Δf_pred = -∇f(xₖ)ᵀdₖ - ½dₖᵀ∇²L(xₖ,λₖ)dₖ
e. 计算比值:ρₖ = Δf_actual / Δf_pred
f. 更新迭代点:- 如果 ρₖ ≥ η,接受步长:xₖ₊₁ = xₖ + dₖ
- 否则,拒绝步长:xₖ₊₁ = xₖ
g. 更新信任域半径: - 如果 ρₖ ≥ 0.9,增大信任域:Δₖ₊₁ = 2Δₖ
- 如果 0.1 ≤ ρₖ < 0.9,保持信任域:Δₖ₊₁ = Δₖ
- 如果 ρₖ < 0.1,缩小信任域:Δₖ₊₁ = 0.5Δₖ
第七步:收敛性判断
当满足以下条件之一时停止迭代:
- ‖∇f(xₖ) + Σλᵢ∇gᵢ(xₖ)‖ < ε₁ (一阶最优性条件)
- ‖dₖ‖ < ε₂ (步长足够小)
- |f(xₖ) - f(xₖ₊₁)| < ε₃ (目标函数变化很小)
第八步:实际求解示例
从初始点 x₀ = (0,0) 开始:
- 第一次迭代:
- f(x₀) = 16, ∇f(x₀) = [-36, 0]
- 构建并求解QCQP子问题,得到 d₀
- 更新到 x₁ = x₀ + d₀
- 重复迭代直到满足收敛条件
最终会收敛到最优解 x* ≈ (1.695, 0.848),f(x*) ≈ 0.023。
算法特点
- 处理非线性约束能力强
- 收敛速度快(局部超线性收敛)
- 需要求解复杂的QCQP子问题
- 对初始点选择敏感
这就是序列二次约束规划算法的完整求解过程,它通过序列化地将复杂非线性问题转化为相对简单的二次约束规划问题来求解。