非线性规划中的序列凸近似(SCA)与自适应梯度投影混合算法基础题
题目描述:
考虑以下带有非线性不等式约束的非凸优化问题:
minimize f(x) = sin(x₁)·exp(-x₂²) + (x₁ - 1)⁴ + (x₂ + 2)²
subject to c₁(x) = x₁² + x₂² - 4 ≤ 0
c₂(x) = -x₁ + x₂² - 1 ≤ 0
-3 ≤ x₁ ≤ 3
-3 ≤ x₂ ≤ 3
其中目标函数f(x)非凸(含有三角函数、指数函数和高次项),约束c₁(x)定义了一个圆盘区域,c₂(x)是非凸二次不等式。要求设计一种混合算法,将序列凸近似(SCA)与自适应梯度投影法结合,在每一步迭代中:(1) 在当前点对目标函数和约束进行凸近似;(2) 利用梯度投影法确保迭代点保持在近似凸可行域内;(3) 自适应调整近似模型的信赖域半径。请详细说明算法步骤、凸近似的构造方法、自适应机制以及收敛性保证。
解题过程:
-
问题分析与算法框架概览
原问题是非凸约束优化。序列凸近似(SCA)的核心思想是:在每次迭代时,在当前点构造目标函数和约束的凸近似模型,求解这个凸子问题得到新迭代点。梯度投影法则用于在求解子问题时,将迭代点投影到近似可行域上,确保可行性。自适应机制通过控制近似模型的信赖域半径来平衡近似精度和收敛速度。整体是一个迭代过程,逐步逼近原问题的局部最优解。 -
构造凸近似模型
设在第k次迭代,当前点为x⁽ᵏ⁾ = (x₁⁽ᵏ⁾, x₂⁽ᵏ⁾)。a. 目标函数f(x)的凸近似:
f(x)由三项组成:- 第一项 φ₁(x) = sin(x₁)·exp(-x₂²):在x⁽ᵏ⁾处进行一阶泰勒展开,得到线性近似:
φ̃₁(x; x⁽ᵏ⁾) = φ₁(x⁽ᵏ⁾) + ∇φ₁(x⁽ᵏ⁾)ᵀ (x - x⁽ᵏ⁾)
其中梯度 ∇φ₁ = [cos(x₁)·exp(-x₂²), -2x₂·sin(x₁)·exp(-x₂²)]ᵀ - 第二项 φ₂(x) = (x₁ - 1)⁴:这是凸函数(四次偶函数,在定义域内凸),故直接保留原函数。
- 第三项 φ₃(x) = (x₂ + 2)²:是凸二次函数,保留。
因此,凸近似目标函数为:
f̃(x; x⁽ᵏ⁾) = φ̃₁(x; x⁽ᵏ⁾) + (x₁ - 1)⁴ + (x₂ + 2)²
注意:φ₂和φ₃本来就是凸的,无需近似;只对非凸的φ₁进行了线性化,线性函数是凸的,因此f̃是凸函数。
b. 约束c₁(x)和c₂(x)的凸近似:
- c₁(x) = x₁² + x₂² - 4:这是凸二次函数(二次项系数为正),本身就是凸的,故直接保留。
- c₂(x) = -x₁ + x₂² - 1:这也是凸的(线性项加凸二次项),直接保留。
因此,约束无需近似,子问题中的约束与原约束相同。但需注意,如果原约束非凸,则也需要在x⁽ᵏ⁾处线性化或凸化。
c. 添加信赖域约束:为了控制近似模型只在当前点附近有效,增加一个球形信赖域约束:
‖x - x⁽ᵏ⁾‖² ≤ Δₖ
其中Δₖ > 0是信赖域半径,在迭代中自适应调整。因此,第k次迭代的子问题是一个凸优化问题:
minimize f̃(x; x⁽ᵏ⁾)
subject to c₁(x) ≤ 0, c₂(x) ≤ 0, x ∈ [-3,3]×[-3,3], ‖x - x⁽ᵏ⁾‖² ≤ Δₖ - 第一项 φ₁(x) = sin(x₁)·exp(-x₂²):在x⁽ᵏ⁾处进行一阶泰勒展开,得到线性近似:
-
自适应梯度投影法求解子问题
子问题是凸的,但带有非线性约束,可用梯度投影法求解。梯度投影法的基本思想是:沿负梯度方向移动,然后投影到可行域上。这里采用自适应步长。设我们要求解子问题,其可行域为 Ω = {x | c₁(x)≤0, c₂(x)≤0, x∈[−3,3]², ‖x−x⁽ᵏ⁾‖²≤Δₖ}。
a. 初始化内点:从x⁽ᵏ⁾开始(通常x⁽ᵏ⁾是可行的,或通过简单修正得到可行点)。
b. 迭代更新:对于梯度投影法的第t步,当前点为yᵗ,计算梯度∇f̃(yᵗ; x⁽ᵏ⁾),然后进行投影梯度步:
yᵗ⁺¹ = Proj_Ω( yᵗ - αᵗ ∇f̃(yᵗ; x⁽ᵏ⁾) )
其中αᵗ是步长,可以用Barzilai-Borwein(BB)步长等自适应方法选择:
αᵗ = (sᵗᵀ sᵗ) / (sᵗᵀ yᵗ) 或 αᵗ = (sᵗᵀ yᵗ) / (yᵗᵀ yᵗ)
其中 sᵗ = yᵗ - yᵗ⁻¹, yᵗ = ∇f̃(yᵗ; x⁽ᵏ⁾) - ∇f̃(yᵗ⁻¹; x⁽ᵏ⁾)
投影操作Proj_Ω(v)是求v到凸集Ω的欧几里得投影,这本身是一个凸优化问题,但由于Ω是多个凸约束的交集,可用内点法或交替投影法高效求解。
c. 停止准则:当‖yᵗ⁺¹ - yᵗ‖ < ε_inner(内层精度)或梯度投影条件满足时停止,得到子问题的解,记为x̂⁽ᵏ⁺¹⁾。 -
接受性与信赖域半径自适应调整
得到子问题解x̂⁽ᵏ⁺¹⁾后,需判断是否接受该点,并更新信赖域半径Δₖ。定义实际下降量: Aredₖ = f(x⁽ᵏ⁾) - f(x̂⁽ᵏ⁺¹⁾)
定义预测下降量: Predₖ = f̃(x⁽ᵏ⁾; x⁽ᵏ⁾) - f̃(x̂⁽ᵏ⁺¹⁾; x⁽ᵏ⁾) = 0 - f̃(x̂⁽ᵏ⁺¹⁾; x⁽ᵏ⁾) = -f̃(x̂⁽ᵏ⁺¹⁾; x⁽ᵏ⁾)
计算比值: ρₖ = Aredₖ / Predₖ根据ρₖ调整信赖域半径Δₖ:
- 如果ρₖ ≥ η₁(例如η₁=0.8),说明近似模型很好,接受迭代点:x⁽ᵏ⁺¹⁾ = x̂⁽ᵏ⁺¹⁾,并增大信赖域半径:Δₖ₊₁ = min(γ₁ Δₖ, Δ_max),例如γ₁=2。
- 如果η₀ ≤ ρₖ < η₁(例如η₀=0.1),说明近似模型一般,接受迭代点:x⁽ᵏ⁺¹⁾ = x̂⁽ᵏ⁺¹⁾,但保持半径不变:Δₖ₊₁ = Δₖ。
- 如果ρₖ < η₀,说明近似模型很差,拒绝该点:x⁽ᵏ⁺¹⁾ = x⁽ᵏ⁾,并缩小信赖域半径:Δₖ₊₁ = γ₀ Δₖ,例如γ₀=0.5。
-
整体算法步骤
步骤1:初始化。给定初始点x⁽⁰⁾(需可行,例如x⁽⁰⁾=(0,0)),初始信赖域半径Δ₀>0(例如Δ₀=1),参数η₀=0.1, η₁=0.8, γ₀=0.5, γ₁=2, Δ_max=10, 精度ε>0,k=0。
步骤2:构造凸近似。在当前点x⁽ᵏ⁾构造凸近似目标f̃(x; x⁽ᵏ⁾)(如步骤2所述),约束使用原约束(因已是凸的)。
步骤3:求解子问题。用自适应梯度投影法(步骤3)求解子问题,得x̂⁽ᵏ⁺¹⁾。
步骤4:接受性判断与半径调整。计算ρₖ,按步骤4更新x⁽ᵏ⁺¹⁾和Δₖ₊₁。
步骤5:收敛检查。如果‖x⁽ᵏ⁺¹⁾ - x⁽ᵏ⁾‖ < ε 且 满足KKT条件(例如梯度投影条件),则停止,输出x⁽ᵏ⁺¹⁾为近似解;否则k=k+1,转步骤2。 -
收敛性说明
在适当条件下(如f和c_i连续可微,可行域紧致,子问题解存在),该算法可收敛到一个稳定点(KKT点)。原因:- 每次迭代,子问题是凸的,且梯度投影法可收敛到子问题的全局解。
- 信赖域机制保证实际下降非负,且当Δₖ→0时,近似模型精确,算法行为类似于梯度投影法。
- 由于目标值序列{f(x⁽ᵏ⁾)}单调不增且有下界(在紧集上),故收敛。极限点满足KKT条件。
这个混合算法结合了SCA的局部凸化能力和梯度投影法的可行性保持特性,自适应信赖域平衡了精度和效率,适用于中等规模的非凸约束问题。