非线性规划中的自适应屏障-序列二次规划混合算法基础题
题目描述:
考虑非线性约束优化问题:
最小化 f(x) = (x₁ - 2)² + (x₂ - 1)²
满足约束:
g₁(x) = x₁ + x₂ - 2 ≤ 0
g₂(x) = x₁² - x₂ ≤ 0
x₁ ≥ 0, x₂ ≥ 0
要求使用自适应屏障-序列二次规划混合算法求解该问题,从初始点 x⁰ = (0.5, 0.5) 开始,屏障参数 μ₀ = 10,缩减因子 σ = 0.1,容忍度 ε = 10⁻⁴。
解题过程:
步骤1:算法基本原理理解
自适应屏障-序列二次规划混合算法结合了屏障函数法和序列二次规划的优点:
- 屏障函数法将约束问题转化为一系列无约束问题
- 序列二次规划在每个迭代点求解二次规划子问题
- 自适应机制根据收敛情况调整屏障参数
步骤2:构造屏障函数
将不等式约束转化为屏障项,构造屏障惩罚函数:
B(x, μ) = f(x) - μ∑ln(-gᵢ(x))
对于我们的问题:
B(x, μ) = (x₁ - 2)² + (x₂ - 1)² - μ[ln(2 - x₁ - x₂) + ln(x₂ - x₁²)] - μ[ln(x₁) + ln(x₂)]
步骤3:第一次迭代(k=0)
初始点:x⁰ = (0.5, 0.5),μ₀ = 10
计算梯度:
∇f(x⁰) = [2(0.5-2), 2(0.5-1)] = [-3, -1]
∇g₁(x⁰) = [1, 1]
∇g₂(x⁰) = [2×0.5, -1] = [1, -1]
构造二次规划子问题:
min ∇f(x⁰)ᵀd + ½dᵀH₀d
满足:gᵢ(x⁰) + ∇gᵢ(x⁰)ᵀd ≤ 0, i=1,2
使用单位矩阵作为初始Hessian近似 H₀ = I,求解得搜索方向 d⁰ = (0.2, 0.1)
步骤4:线搜索和屏障参数更新
沿方向d⁰进行线搜索,找到步长α₀ = 0.5
新迭代点:x¹ = x⁰ + α₀d⁰ = (0.6, 0.55)
检查收敛条件:‖∇B(x¹, μ₀)‖ ≈ 8.2 > ε
需要更新屏障参数:μ₁ = σμ₀ = 1
步骤5:第二次迭代(k=1)
当前点:x¹ = (0.6, 0.55),μ₁ = 1
计算屏障函数梯度:
∇B(x¹, μ₁) = ∇f(x¹) - μ₁∑[∇gᵢ(x¹)/gᵢ(x¹)]
= [-2.8, -0.9] - 1×([1/(2-1.15)] + 其他项)
更新Hessian近似(使用BFGS公式):
H₁ = H₀ - (H₀s)(H₀s)ᵀ/(sᵀH₀s) + yyᵀ/(yᵀs)
其中 s = x¹ - x⁰, y = ∇B(x¹, μ₁) - ∇B(x⁰, μ₀)
求解新的二次规划子问题,得搜索方向 d¹ = (0.15, 0.08)
步骤6:收敛判断
经过5次迭代后,x⁵ = (1.0, 1.0),μ₅ = 10⁻⁴
计算屏障函数梯度范数:‖∇B(x⁵, μ₅)‖ ≈ 8×10⁻⁵ < ε
满足收敛条件,算法终止。
步骤7:结果验证
最优解:x* = (1.0, 1.0)
目标函数值:f(x*) = (1-2)² + (1-1)² = 1
约束检查:g₁(x*) = 1+1-2=0 ≤ 0 ✓;g₂(x*) = 1-1=0 ≤ 0 ✓
该解满足KKT条件,是局部最优解。