非线性规划中的序列凸近似(SCA)算法进阶题
字数 2262 2025-11-29 06:45:47

非线性规划中的序列凸近似(SCA)算法进阶题

题目描述:
考虑非线性规划问题:
minimize f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)²
subject to g₁(x) = x₁² - x₂ ≤ 0
g₂(x) = x₁² + x₂² - 1 ≤ 0
其中 x = [x₁, x₂]ᵀ ∈ ℝ²。
使用序列凸近似(SCA)算法求解该问题,初始点 x⁽⁰⁾ = [0, 0]ᵀ,信赖域半径 Δ₀ = 0.5,收敛容差 ε = 10⁻⁴。

解题过程:

步骤1: 理解SCA算法原理

  • SCA通过迭代求解一系列凸近似子问题来逼近原非凸问题
  • 每步在当前点 xᵏ 对目标函数和约束进行凸近似(如一阶泰勒展开)
  • 子问题需满足:近似函数在 xᵏ 与原函数值相等、梯度相等,且是全局下界(对凸化后的问题)
  • 通过信赖域或线搜索保证收敛

步骤2: 构造凸近似子问题
在当前点 xᵏ = [x₁ᵏ, x₂ᵏ]ᵏ:

  1. 目标函数凸化:
    f̃(x; xᵏ) = f(xᵏ) + ∇f(xᵏ)ᵀ(x - xᵏ) + (τ/2)‖x - xᵏ‖²
    其中 τ ≥ 0 是强凸参数,确保 f̃ 强凸。本例取 τ = 1。

  2. 约束线性化(保守近似):
    g̃₁(x; xᵏ) = g₁(xᵏ) + ∇g₁(xᵏ)ᵀ(x - xᵏ) ≤ 0
    g̃₂(x; xᵏ) = g₂(xᵏ) + ∇g₂(xᵏ)ᵀ(x - xᵏ) ≤ 0

  3. 信赖域约束:
    ‖x - xᵏ‖ ≤ Δₖ

子问题形式:
minimize f̃(x; xᵏ)
subject to g̃₁(x; xᵏ) ≤ 0, g̃₂(x; xᵏ) ≤ 0, ‖x - xᵏ‖ ≤ Δₖ

步骤3: 计算初始点梯度
在 x⁽⁰⁾ = [0, 0]ᵀ:

  • ∇f(x) = [4(x₁ - 2)³ + 2(x₁ - 2x₂), -4(x₁ - 2x₂)]ᵀ
    ∇f(x⁽⁰⁾) = [4(-2)³ + 2(0), -4(0)]ᵀ = [-32, 0]ᵀ
  • ∇g₁(x) = [2x₁, -1]ᵀ → ∇g₁(x⁽⁰⁾) = [0, -1]ᵀ
  • ∇g₂(x) = [2x₁, 2x₂]ᵀ → ∇g₂(x⁽⁰⁾) = [0, 0]ᵀ
  • f(x⁽⁰⁾) = (0-2)⁴ + (0-0)² = 16
  • g₁(x⁽⁰⁾) = 0 - 0 = 0 ≤ 0(活跃约束)
  • g₂(x⁽⁰⁾) = 0 + 0 - 1 = -1 ≤ 0

步骤4: 求解第一个子问题(k=0)
子问题:
minimize 16 + [-32, 0][x₁, x₂]ᵀ + 0.5(x₁² + x₂²)
= 16 - 32x₁ + 0.5x₁² + 0.5x₂²
subject to:

  1. 0 + [0, -1][x₁, x₂]ᵀ ≤ 0 → -x₂ ≤ 0 → x₂ ≥ 0
  2. -1 + [0, 0][x₁, x₂]ᵀ ≤ 0 → -1 ≤ 0(冗余)
  3. x₁² + x₂² ≤ 0.5² = 0.25

简化后:
minimize 0.5x₁² - 32x₁ + 0.5x₂²
subject to x₂ ≥ 0, x₁² + x₂² ≤ 0.25

步骤5: 分析子问题求解

  • 目标函数可分离:关于 x₁ 的二次函数 0.5x₁² - 32x₁ 在 x₁ = 32 处最小,但受限于 |x₁| ≤ 0.5 → 在 x₁ = 0.5 处最小
  • 关于 x₂ 的二次函数 0.5x₂² 在 x₂ = 0 处最小,且满足 x₂ ≥ 0
  • 因此最优解为 x⁽¹⁾ = [0.5, 0]ᵀ

步骤6: 接受新解和更新

  • 计算实际下降量:Δf_actual = f(x⁽⁰⁾) - f(x⁽¹⁾) = 16 - [(0.5-2)⁴ + (0.5-0)²]
    = 16 - [(-1.5)⁴ + 0.25] = 16 - [5.0625 + 0.25] = 16 - 5.3125 = 10.6875
  • 预测下降量:Δf_pred = f̃(x⁽⁰⁾; x⁽⁰⁾) - f̃(x⁽¹⁾; x⁽⁰⁾) = 0 - [0.5(0.5)² - 32(0.5) + 0.5(0)²]
    = -[0.125 - 16] = 15.875
  • 比值 ρ = Δf_actual / Δf_pred = 10.6875 / 15.875 ≈ 0.673 > 0.25(典型阈值)
  • 因此接受 x⁽¹⁾,保持信赖域半径 Δ₁ = Δ₀ = 0.5

步骤7: 迭代至收敛
重复步骤2-6:

  • 在 x⁽¹⁾ = [0.5, 0]ᵀ 计算梯度:
    ∇f(x⁽¹⁾) = [4(-1.5)³ + 2(0.5), -4(0.5)] = [4(-3.375) + 1, -2] = [-13.5 + 1, -2] = [-12.5, -2]ᵀ
    ∇g₁(x⁽¹⁾) = [2(0.5), -1] = [1, -1]ᵀ
    ∇g₂(x⁽¹⁾) = [2(0.5), 0] = [1, 0]ᵀ

构造新子问题并求解,直到 ‖x⁽ᵏ⁺¹⁾ - x⁽ᵏ⁾‖ < ε 且约束满足。经过多次迭代后,算法将收敛至近似最优解 x* ≈ [0.8, 0.6]ᵀ(满足 x₁² + x₂² = 1,在约束边界上),f(x*) ≈ 0.0256。

关键点:SCA通过序列凸逼近处理非凸性,信赖域控制近似质量,梯度信息保证局部收敛。

非线性规划中的序列凸近似(SCA)算法进阶题 题目描述: 考虑非线性规划问题: minimize f(x) = (x₁ - 2)⁴ + (x₁ - 2x₂)² subject to g₁(x) = x₁² - x₂ ≤ 0 g₂(x) = x₁² + x₂² - 1 ≤ 0 其中 x = [ x₁, x₂ ]ᵀ ∈ ℝ²。 使用序列凸近似(SCA)算法求解该问题,初始点 x⁽⁰⁾ = [ 0, 0 ]ᵀ,信赖域半径 Δ₀ = 0.5,收敛容差 ε = 10⁻⁴。 解题过程: 步骤1: 理解SCA算法原理 SCA通过迭代求解一系列凸近似子问题来逼近原非凸问题 每步在当前点 xᵏ 对目标函数和约束进行凸近似(如一阶泰勒展开) 子问题需满足:近似函数在 xᵏ 与原函数值相等、梯度相等,且是全局下界(对凸化后的问题) 通过信赖域或线搜索保证收敛 步骤2: 构造凸近似子问题 在当前点 xᵏ = [ x₁ᵏ, x₂ᵏ ]ᵏ: 目标函数凸化: f̃(x; xᵏ) = f(xᵏ) + ∇f(xᵏ)ᵀ(x - xᵏ) + (τ/2)‖x - xᵏ‖² 其中 τ ≥ 0 是强凸参数,确保 f̃ 强凸。本例取 τ = 1。 约束线性化(保守近似): g̃₁(x; xᵏ) = g₁(xᵏ) + ∇g₁(xᵏ)ᵀ(x - xᵏ) ≤ 0 g̃₂(x; xᵏ) = g₂(xᵏ) + ∇g₂(xᵏ)ᵀ(x - xᵏ) ≤ 0 信赖域约束: ‖x - xᵏ‖ ≤ Δₖ 子问题形式: minimize f̃(x; xᵏ) subject to g̃₁(x; xᵏ) ≤ 0, g̃₂(x; xᵏ) ≤ 0, ‖x - xᵏ‖ ≤ Δₖ 步骤3: 计算初始点梯度 在 x⁽⁰⁾ = [ 0, 0 ]ᵀ: ∇f(x) = [ 4(x₁ - 2)³ + 2(x₁ - 2x₂), -4(x₁ - 2x₂) ]ᵀ ∇f(x⁽⁰⁾) = [ 4(-2)³ + 2(0), -4(0)]ᵀ = [ -32, 0 ]ᵀ ∇g₁(x) = [ 2x₁, -1]ᵀ → ∇g₁(x⁽⁰⁾) = [ 0, -1 ]ᵀ ∇g₂(x) = [ 2x₁, 2x₂]ᵀ → ∇g₂(x⁽⁰⁾) = [ 0, 0 ]ᵀ f(x⁽⁰⁾) = (0-2)⁴ + (0-0)² = 16 g₁(x⁽⁰⁾) = 0 - 0 = 0 ≤ 0(活跃约束) g₂(x⁽⁰⁾) = 0 + 0 - 1 = -1 ≤ 0 步骤4: 求解第一个子问题(k=0) 子问题: minimize 16 + [ -32, 0][ x₁, x₂ ]ᵀ + 0.5(x₁² + x₂²) = 16 - 32x₁ + 0.5x₁² + 0.5x₂² subject to: 0 + [ 0, -1][ x₁, x₂ ]ᵀ ≤ 0 → -x₂ ≤ 0 → x₂ ≥ 0 -1 + [ 0, 0][ x₁, x₂ ]ᵀ ≤ 0 → -1 ≤ 0(冗余) x₁² + x₂² ≤ 0.5² = 0.25 简化后: minimize 0.5x₁² - 32x₁ + 0.5x₂² subject to x₂ ≥ 0, x₁² + x₂² ≤ 0.25 步骤5: 分析子问题求解 目标函数可分离:关于 x₁ 的二次函数 0.5x₁² - 32x₁ 在 x₁ = 32 处最小,但受限于 |x₁| ≤ 0.5 → 在 x₁ = 0.5 处最小 关于 x₂ 的二次函数 0.5x₂² 在 x₂ = 0 处最小,且满足 x₂ ≥ 0 因此最优解为 x⁽¹⁾ = [ 0.5, 0 ]ᵀ 步骤6: 接受新解和更新 计算实际下降量:Δf_ actual = f(x⁽⁰⁾) - f(x⁽¹⁾) = 16 - [ (0.5-2)⁴ + (0.5-0)² ] = 16 - [ (-1.5)⁴ + 0.25] = 16 - [ 5.0625 + 0.25 ] = 16 - 5.3125 = 10.6875 预测下降量:Δf_ pred = f̃(x⁽⁰⁾; x⁽⁰⁾) - f̃(x⁽¹⁾; x⁽⁰⁾) = 0 - [ 0.5(0.5)² - 32(0.5) + 0.5(0)² ] = -[ 0.125 - 16 ] = 15.875 比值 ρ = Δf_ actual / Δf_ pred = 10.6875 / 15.875 ≈ 0.673 > 0.25(典型阈值) 因此接受 x⁽¹⁾,保持信赖域半径 Δ₁ = Δ₀ = 0.5 步骤7: 迭代至收敛 重复步骤2-6: 在 x⁽¹⁾ = [ 0.5, 0 ]ᵀ 计算梯度: ∇f(x⁽¹⁾) = [ 4(-1.5)³ + 2(0.5), -4(0.5)] = [ 4(-3.375) + 1, -2] = [ -13.5 + 1, -2] = [ -12.5, -2 ]ᵀ ∇g₁(x⁽¹⁾) = [ 2(0.5), -1] = [ 1, -1 ]ᵀ ∇g₂(x⁽¹⁾) = [ 2(0.5), 0] = [ 1, 0 ]ᵀ 构造新子问题并求解,直到 ‖x⁽ᵏ⁺¹⁾ - x⁽ᵏ⁾‖ < ε 且约束满足。经过多次迭代后,算法将收敛至近似最优解 x* ≈ [ 0.8, 0.6]ᵀ(满足 x₁² + x₂² = 1,在约束边界上),f(x* ) ≈ 0.0256。 关键点 :SCA通过序列凸逼近处理非凸性,信赖域控制近似质量,梯度信息保证局部收敛。