非线性规划中的序列线性规划法基础题
题目描述:
考虑非线性规划问题:
最小化 f(x) = (x₁-2)⁴ + (x₁-2x₂)²
满足约束条件:
g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = x₁² + x₂² - 8 ≤ 0
x₁ ≥ 0, x₂ ≥ 0
使用序列线性规划法求解该问题,初始点选择x⁰ = (0, 1),收敛容差ε = 0.001。
解题过程:
-
方法原理介绍
序列线性规划法(SLP)通过一系列线性规划子问题来逼近原非线性规划问题。在每个迭代点,将目标函数和约束函数进行一阶泰勒展开,形成线性近似问题,通过求解线性规划获得搜索方向。 -
第一次迭代(k=0)
初始点:x⁰ = (0, 1)
计算函数值和梯度:
f(x⁰) = (0-2)⁴ + (0-2×1)² = 16 + 4 = 20
∇f(x⁰) = [4(x₁-2)³ + 2(x₁-2x₂), -4(x₁-2x₂)] = [4(-2)³ + 2(-2), -4(-2)] = [-32-4, 8] = [-36, 8]
约束函数:
g₁(x⁰) = 0² - 1 = -1 ≤ 0(满足)
g₂(x⁰) = 0² + 1² - 8 = -7 ≤ 0(满足)
∇g₁(x⁰) = [2x₁, -1] = [0, -1]
∇g₂(x⁰) = [2x₁, 2x₂] = [0, 2]
构建线性规划子问题:
最小化 ∇f(x⁰)ᵀd = -36d₁ + 8d₂
满足:
g₁(x⁰) + ∇g₁(x⁰)ᵀd ≤ 0 → -1 + 0d₁ - d₂ ≤ 0 → -d₂ ≤ 1
g₂(x⁰) + ∇g₂(x⁰)ᵀd ≤ 0 → -7 + 0d₁ + 2d₂ ≤ 0 → 2d₂ ≤ 7
x₁⁰ + d₁ ≥ 0 → d₁ ≥ 0
x₂⁰ + d₂ ≥ 0 → d₂ ≥ -1
信任域约束:||d||∞ ≤ 0.5(控制线性近似的有效性)
求解该线性规划得到搜索方向d⁰ = (0.5, -0.5)
线搜索确定步长α⁰:
新点x¹ = x⁰ + αd⁰ = (0.5α, 1-0.5α)
通过一维搜索(如Armijo准则)确定α⁰ = 1
x¹ = (0.5, 0.5)
- 第二次迭代(k=1)
当前点:x¹ = (0.5, 0.5)
计算函数值和梯度:
f(x¹) = (0.5-2)⁴ + (0.5-1)² = (-1.5)⁴ + (-0.5)² = 5.0625 + 0.25 = 5.3125
∇f(x¹) = [4(-1.5)³ + 2(-0.5), -4(-0.5)] = [4×(-3.375) - 1, 2] = [-13.5-1, 2] = [-14.5, 2]
约束函数:
g₁(x¹) = 0.25 - 0.5 = -0.25 ≤ 0(满足)
g₂(x¹) = 0.25 + 0.25 - 8 = -7.5 ≤ 0(满足)
∇g₁(x¹) = [1, -1]
∇g₂(x¹) = [1, 1]
构建线性规划子问题:
最小化 -14.5d₁ + 2d₂
满足:
-0.25 + d₁ - d₂ ≤ 0
-7.5 + d₁ + d₂ ≤ 0
d₁ ≥ -0.5, d₂ ≥ -0.5
信任域约束:||d||∞ ≤ 0.5
求解得d¹ = (0.5, -0.5)
线搜索得α¹ = 1
x² = (1.0, 0.0)
- 后续迭代和收敛判断
重复上述过程,每次迭代:
- 在当前点计算函数值和梯度
- 构建线性规划子问题
- 求解得到搜索方向
- 线搜索确定步长
- 更新迭代点
当连续两次迭代点之间的距离||xᵏ⁺¹ - xᵏ|| < ε = 0.001时,算法终止。
经过约6-8次迭代后,算法收敛到近似最优解x* ≈ (1.6, 1.2),此时f(x*) ≈ 0.003,满足所有约束条件。
- 方法特点总结
序列线性规划法将复杂的非线性问题转化为一系列线性规划问题,适合处理中等规模的非线性规划。需要注意信任域半径的选择和线性近似的有效性,避免振荡现象。