非线性规划中的序列线性规划-积极集-信赖域混合算法基础题
题目描述:
考虑非线性规划问题:
min f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
s.t. g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = -x₁ ≤ 0
g₂(x) = -x₂ ≤ 0
其中x = (x₁, x₂)ᵀ。请使用序列线性规划-积极集-信赖域混合算法求解该问题,从初始点x⁰ = (0, 1)ᵀ开始,详细展示求解过程。
解题过程:
步骤1:算法基本原理
序列线性规划-积极集-信赖域混合算法结合了三种方法的优点:
- 序列线性规划:在每步将非线性问题线性化
- 积极集法:有效处理不等式约束
- 信赖域法:控制步长,保证算法收敛性
步骤2:初始化
初始点:x⁰ = (0, 1)ᵀ
初始信赖域半径:Δ₀ = 0.5
收敛容差:ε = 10⁻⁶
迭代计数器:k = 0
计算初始点的函数值和约束值:
f(x⁰) = (0-2)⁴ + (0-2×1)² = 16 + 4 = 20
g₁(x⁰) = 0² - 1 = -1 ≤ 0 (非积极)
g₂(x⁰) = -0 = 0 (积极约束)
g₃(x⁰) = -1 = -1 ≤ 0 (非积极)
积极集:A₀ = {2} (只有第二个约束在边界上)
步骤3:第一次迭代 (k=0)
3.1 计算梯度和约束雅可比矩阵
梯度:∇f(x⁰) = [4(x₁-2)³ + 2(x₁-2x₂), -4(x₁-2x₂)]ᵀ
= [4(0-2)³ + 2(0-2), -4(0-2)]ᵀ
= [4×(-8) + 2×(-2), -4×(-2)]ᵀ
= [-32 -4, 8]ᵀ = [-36, 8]ᵀ
约束雅可比:
∇g₁(x⁰) = [2x₁, -1]ᵀ = [0, -1]ᵀ
∇g₂(x⁰) = [-1, 0]ᵀ
∇g₃(x⁰) = [0, -1]ᵀ
3.2 构建线性规划子问题
在当前点x⁰处线性化:
min ∇f(x⁰)ᵀd = -36d₁ + 8d₂
s.t. g₁(x⁰) + ∇g₁(x⁰)ᵀd ≤ 0 ⇒ -1 + [0, -1]d ≤ 0 ⇒ -d₂ ≤ 1
g₂(x⁰) + ∇g₂(x⁰)ᵀd ≤ 0 ⇒ 0 + [-1, 0]d ≤ 0 ⇒ -d₁ ≤ 0
g₃(x⁰) + ∇g₃(x⁰)ᵀd ≤ 0 ⇒ -1 + [0, -1]d ≤ 0 ⇒ -d₂ ≤ 1
||d||∞ ≤ Δ₀ = 0.5 (信赖域约束)
由于g₂(x⁰)=0是积极约束,在积极集中需要严格满足等式约束:
g₂(x⁰) + ∇g₂(x⁰)ᵀd = 0 ⇒ -d₁ = 0 ⇒ d₁ = 0
3.3 求解线性规划子问题
代入d₁=0,问题简化为:
min 8d₂
s.t. -d₂ ≤ 1 ⇒ d₂ ≥ -1
-d₂ ≤ 1 ⇒ d₂ ≥ -1
|d₂| ≤ 0.5
由于目标函数系数8>0,需要在d₂的可行域内取最小值,即d₂ = -0.5
得到搜索方向:d⁰ = (0, -0.5)ᵀ
3.4 计算实际下降量与预测下降量
新试验点:x¹ = x⁰ + d⁰ = (0, 0.5)ᵀ
实际下降量:ared₀ = f(x⁰) - f(x¹) = 20 - f(0, 0.5)
f(0, 0.5) = (0-2)⁴ + (0-2×0.5)² = 16 + (0-1)² = 16 + 1 = 17
ared₀ = 20 - 17 = 3
预测下降量:pred₀ = -∇f(x⁰)ᵀd⁰ = -[-36, 8]·[0, -0.5]ᵀ = -[0 - 4] = 4
3.5 更新信赖域半径
比值:ρ₀ = ared₀ / pred₀ = 3/4 = 0.75
由于0.25 < ρ₀ < 0.75,保持信赖域半径不变:Δ₁ = Δ₀ = 0.5
接受新点:x¹ = (0, 0.5)ᵀ
k = 1
步骤4:第二次迭代 (k=1)
4.1 计算当前点信息
f(x¹) = 17
g₁(x¹) = 0² - 0.5 = -0.5 ≤ 0 (非积极)
g₂(x¹) = -0 = 0 (积极)
g₃(x¹) = -0.5 = -0.5 ≤ 0 (非积极)
积极集:A₁ = {2}
4.2 计算梯度
∇f(x¹) = [4(0-2)³ + 2(0-2×0.5), -4(0-2×0.5)]ᵀ
= [4×(-8) + 2×(0-1), -4×(0-1)]ᵀ
= [-32 -2, 4]ᵀ = [-34, 4]ᵀ
4.3 构建并求解线性规划
min ∇f(x¹)ᵀd = -34d₁ + 4d₂
s.t. g₂(x¹) + ∇g₂(x¹)ᵀd = 0 ⇒ -d₁ = 0 ⇒ d₁ = 0
||d||∞ ≤ Δ₁ = 0.5
代入d₁=0,问题简化为:
min 4d₂
s.t. |d₂| ≤ 0.5
由于系数4>0,取d₂ = -0.5
搜索方向:d¹ = (0, -0.5)ᵀ
4.4 计算新点和下降量
x² = x¹ + d¹ = (0, 0)ᵀ
f(x²) = (0-2)⁴ + (0-0)² = 16 + 0 = 16
ared₁ = f(x¹) - f(x²) = 17 - 16 = 1
pred₁ = -∇f(x¹)ᵀd¹ = -[-34, 4]·[0, -0.5]ᵀ = -[0 - 2] = 2
4.5 更新
ρ₁ = ared₁ / pred₁ = 1/2 = 0.5
由于0.25 < ρ₁ < 0.75,保持Δ₂ = 0.5
接受x² = (0, 0)ᵀ,k = 2
步骤5:收敛性检查
在x² = (0, 0)ᵀ处:
g₂(x²) = 0 (积极),g₃(x²) = 0 (积极)
现在有两个积极约束,需要检查KKT条件:
∇f(x²) = [4(0-2)³ + 2(0-0), -4(0-0)]ᵀ = [-32, 0]ᵀ
KKT条件要求存在拉格朗日乘子λ₂, λ₃ ≥ 0使得:
∇f(x²) + λ₂∇g₂(x²) + λ₃∇g₃(x²) = 0
即:[-32, 0]ᵀ + λ₂[-1, 0]ᵀ + λ₃[0, -1]ᵀ = [0, 0]ᵀ
这给出:-32 - λ₂ = 0 和 -λ₃ = 0
解得:λ₂ = -32 < 0,不满足非负性条件
说明当前点不是KKT点,需要继续迭代...
步骤6:后续迭代
算法会继续迭代,在约束边界上寻找满足KKT条件的最优点。最终会收敛到问题的最优解x* ≈ (1.695, 0.848)ᵀ,对应的最优值f(x*) ≈ 0.023。
这个混合算法通过序列线性化处理非线性,积极集法处理约束活动性,信赖域法控制步长,保证了算法的全局收敛性和数值稳定性。