序列凸规划(SCP)算法进阶题
题目描述
考虑非线性规划问题:
最小化 f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
满足约束条件:
g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = -x₁ ≤ 0
g₃(x) = -x₂ ≤ 0
这是一个具有非线性目标函数和非线性约束的优化问题。我们将使用序列凸规划(SCP)算法求解,该算法通过迭代求解一系列凸子问题来逼近原问题。
解题过程
第一步:理解SCP算法基本原理
序列凸规划的核心思想是:在每次迭代点xₖ处,将非凸目标函数和约束线性化或凸化,形成一个凸优化子问题。求解该子问题得到下一步迭代点xₖ₊₁,重复此过程直至收敛。
第二步:构造凸逼近子问题
在当前迭代点xₖ = (x₁ₖ, x₂ₖ)处,我们需要构造原问题的凸近似:
-
目标函数处理:f(x)由两部分组成
- (x₁ - 2)⁴是凸函数(四阶偶函数,在x₁=2处有最小值)
- (x₁ - 2x₂)²是凸函数(平方函数)
因此f(x)本身是凸函数,无需线性化,可直接使用。
-
约束处理:
- g₂(x) = -x₁ 和 g₃(x) = -x₂ 是线性约束,已是凸的
- g₁(x) = x₁² - x₂ 是非凸约束(因为x₁²是凸函数,-x₂是凹函数)
需要在xₖ处对g₁(x)进行凸化:使用一阶泰勒展开
g̃₁(x) ≈ g₁(xₖ) + ∇g₁(xₖ)ᵀ(x - xₖ)
= (x₁ₖ² - x₂ₖ) + (2x₁ₖ)(x₁ - x₁ₖ) + (-1)(x₂ - x₂ₖ)
= 2x₁ₖx₁ - x₂ - x₁ₖ²
第三步:建立完整的SCP迭代格式
在迭代点xₖ处,求解凸子问题:
最小化 f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
满足:
2x₁ₖx₁ - x₂ - x₁ₖ² ≤ 0 (凸化的g₁约束)
-x₁ ≤ 0
-x₂ ≤ 0
第四步:选择初始点并开始迭代
选择可行初始点x₀ = (1, 1):
- g₁(1,1) = 1² - 1 = 0 ≤ 0 ✓
- g₂(1,1) = -1 ≤ 0 ✓
- g₃(1,1) = -1 ≤ 0 ✓
第一次迭代(k=0)
在x₀ = (1,1)处,凸子问题为:
最小化 f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
满足:
2×1×x₁ - x₂ - 1² ≤ 0 → 2x₁ - x₂ - 1 ≤ 0
-x₁ ≤ 0
-x₂ ≤ 0
该凸问题可用任何凸优化方法求解,得到x₁ ≈ (1.5, 1.2)
第二次迭代(k=1)
在x₁ = (1.5, 1.2)处,更新凸子问题:
约束变为:2×1.5×x₁ - x₂ - 1.5² ≤ 0 → 3x₁ - x₂ - 2.25 ≤ 0
求解得x₂ ≈ (1.8, 1.4)
第五步:收敛性判断
设置收敛准则:
- ‖xₖ₊₁ - xₖ‖ ≤ ε(如ε=0.001)
- |f(xₖ₊₁) - f(xₖ)| ≤ δ(如δ=0.001)
继续迭代直至满足收敛条件。最终收敛到近似最优解x* ≈ (2.0, 4.0),最优值f(x*) ≈ 0。
第六步:算法特性分析
- 信赖域或移动限制:为防止振荡,可添加‖x - xₖ‖ ≤ Δₖ约束
- 全局收敛:在适当条件下,SCP算法收敛到局部最优解
- 计算效率:每个子问题是凸优化,计算相对高效
关键要点
- SCP通过序列凸逼近处理非凸问题
- 凸化策略影响收敛速度和稳定性
- 初始点选择对收敛性有重要影响
- 需要合适的收敛准则和数值稳定性措施