非线性规划中的可行顺序线性规划(FSLP)算法进阶题
我将为您详细讲解可行顺序线性规划(FSLP)算法的一个进阶题目。这个算法是处理非线性约束优化问题的重要方法。
问题描述
考虑以下非线性规划问题:
最小化:f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
约束条件:
g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = -x₁ ≤ 0
g₃(x) = -x₂ ≤ 0
初始可行点:x⁰ = [0, 1]ᵀ
解题过程详解
第一步:算法基本原理理解
可行顺序线性规划(FSLP)的核心思想是:
- 在每次迭代中,在当前点将非线性函数线性化(一阶泰勒展开)
- 求解得到的线性规划子问题
- 通过线搜索确保新迭代点既改善目标函数又保持可行性
- 重复直到收敛
第二步:初始化设置
给定初始点 x⁰ = [0, 1]ᵀ
验证可行性:
- g₁(x⁰) = 0² - 1 = -1 ≤ 0 ✓
- g₂(x⁰) = -0 = 0 ≤ 0 ✓
- g₃(x⁰) = -1 = -1 ≤ 0 ✓
初始点可行,目标函数值 f(x⁰) = (0-2)⁴ + (0-2)² = 16 + 4 = 20
第三步:第一次迭代 - 构建线性化子问题
计算梯度:
∇f(x) = [4(x₁-2)³ + 2(x₁-2x₂), -4(x₁-2x₂)]ᵀ
在x⁰处:
∇f(x⁰) = [4(0-2)³ + 2(0-2), -4(0-2)] = [4×(-8) + 2×(-2), 8] = [-32-4, 8] = [-36, 8]ᵀ
约束梯度:
∇g₁(x) = [2x₁, -1]ᵀ → ∇g₁(x⁰) = [0, -1]ᵀ
∇g₂(x) = [-1, 0]ᵀ
∇g₃(x) = [0, -1]ᵀ
构建线性规划子问题:
最小化:∇f(x⁰)ᵀd = -36d₁ + 8d₂
约束条件:
g₁(x⁰) + ∇g₁(x⁰)ᵀd ≤ 0 → -1 + [0, -1][d₁,d₂]ᵀ ≤ 0 → -1 - d₂ ≤ 0
g₂(x⁰) + ∇g₂(x⁰)ᵀd ≤ 0 → 0 + [-1, 0][d₁,d₂]ᵀ ≤ 0 → -d₁ ≤ 0
g₃(x⁰) + ∇g₃(x⁰)ᵀd ≤ 0 → -1 + [0, -1][d₁,d₂]ᵀ ≤ 0 → -1 - d₂ ≤ 0
移动限制:||d||∞ ≤ 0.5
第四步:求解线性规划子问题
线性规划问题:
最小化:-36d₁ + 8d₂
约束条件:
d₂ ≥ -1
d₁ ≥ 0
d₂ ≥ -1
-0.5 ≤ d₁ ≤ 0.5
-0.5 ≤ d₂ ≤ 0.5
分析:目标函数系数中d₁的系数-36(负值意味着增加d₁可减小目标函数),d₂的系数+8(正值意味着减小d₂可减小目标函数)
在移动限制下,取d₁最大值0.5,d₂最小值-0.5
得到搜索方向 d⁰ = [0.5, -0.5]ᵀ
第五步:线搜索确定步长
使用Armijo型可行性保持线搜索:
尝试步长α,要求:
- 充分下降:f(x⁰ + αd⁰) ≤ f(x⁰) + c₁α∇f(x⁰)ᵀd⁰
- 可行性:gᵢ(x⁰ + αd⁰) ≤ 0, i=1,2,3
计算:∇f(x⁰)ᵀd⁰ = [-36, 8][0.5, -0.5]ᵀ = -18 - 4 = -22
尝试α=1:
x¹ = x⁰ + αd⁰ = [0,1] + [0.5,-0.5] = [0.5, 0.5]
f(x¹) = (0.5-2)⁴ + (0.5-1)² = (-1.5)⁴ + (-0.5)² = 5.0625 + 0.25 = 5.3125
可行性检查:
g₁(x¹) = 0.5² - 0.5 = 0.25 - 0.5 = -0.25 ≤ 0 ✓
g₂(x¹) = -0.5 ≤ 0 ✓
g₃(x¹) = -0.5 ≤ 0 ✓
目标函数从20降到5.3125,满足充分下降条件。
第六步:第二次迭代
当前点:x¹ = [0.5, 0.5]ᵀ, f(x¹) = 5.3125
计算梯度:
∇f(x¹) = [4(0.5-2)³ + 2(0.5-1), -4(0.5-1)] = [4×(-3.375) + 2×(-0.5), 2] = [-13.5-1, 2] = [-14.5, 2]ᵀ
约束梯度:
∇g₁(x¹) = [2×0.5, -1] = [1, -1]ᵀ
∇g₂(x) = [-1, 0]ᵀ
∇g₃(x) = [0, -1]ᵀ
构建线性规划:
最小化:-14.5d₁ + 2d₂
约束条件:
g₁(x¹) + ∇g₁(x¹)ᵀd ≤ 0 → -0.25 + [1, -1][d₁,d₂]ᵀ ≤ 0 → -0.25 + d₁ - d₂ ≤ 0
g₂(x¹) + ∇g₂(x¹)ᵀd ≤ 0 → -0.5 + [-1, 0][d₁,d₂]ᵀ ≤ 0 → -0.5 - d₁ ≤ 0
g₃(x¹) + ∇g₃(x¹)ᵀd ≤ 0 → -0.5 + [0, -1][d₁,d₂]ᵀ ≤ 0 → -0.5 - d₂ ≤ 0
移动限制:||d||∞ ≤ 0.5
第七步:收敛性分析
经过数次迭代后,算法会收敛到KKT点。对于这个问题,最优解在x* ≈ [1, 0.5]附近,其中:
- 目标函数梯度与约束梯度线性相关
- 所有约束满足,部分约束处于活跃状态
- 满足一阶最优性条件
FSLP算法的优势在于始终保持可行性,适合工程应用,但收敛速度是线性的,且需要仔细处理移动限制以避免Maratos效应。