基于序列凸近似和信赖域反射的混合整数非线性规划算法进阶题
题目描述
考虑混合整数非线性规划(MINLP)问题:
min f(x, y)
s.t. g_i(x, y) ≤ 0, i = 1, ..., m
h_j(x, y) = 0, j = 1, ..., p
x ∈ X ⊆ ℝ^n (连续变量)
y ∈ Y ⊆ ℤ^q (整数变量)
其中 f, g_i, h_j 是光滑但可能非凸的函数。该问题同时包含非凸性、非线性约束和整数变量,求解困难。
要求:结合序列凸近似(SCA)和信赖域反射(TRR)的思想,设计一个求解该MINLP的算法。SCA用于处理非凸约束和目标,通过凸近似在迭代点构造可解的子问题;TRR用于处理子问题中的等式和不等式约束,尤其适合求解边界附近的问题。算法需处理整数变量,保证收敛到局部最优解。
解题过程循序渐进讲解
1. 问题分解与算法框架构思
MINLP的挑战在于连续和离散变量的耦合以及非凸性。常见思路是外层处理整数变量(如分支定界),内层处理连续变量。我们采用序列凸近似框架,在每次迭代中固定整数变量 y_k,在连续变量子空间求解一个凸近似子问题,然后更新 y_k 和 x_k。
算法框架为:
- 初始化 (x₀, y₀),设置信赖域半径 Δ₀ > 0,迭代计数 k=0。
- While 未收敛:
a. 固定 y = y_k,在当前点 (x_k, y_k) 对 f 和 g_i 进行凸近似,对 h_j 进行线性近似,构建一个带有信赖域约束的凸子问题(连续变量子问题)。
b. 用信赖域反射法(TRR)求解该凸子问题,得到步长 s_k,更新 x_{k+1} = x_k + s_k。
c. 判断步长接受性,更新信赖域半径 Δ_k。
d. 在整数空间搜索,更新 y_{k+1}(例如,在 y_k 邻域内搜索,评估目标函数改进)。
e. 判断收敛条件(如步长、函数值变化、约束违反度等)。
2. 构建凸近似子问题
在点 (x_k, y_k),我们将目标函数 f(x, y_k) 在 x 处凸近似。常用一阶泰勒展开,但可能不保持凸性。为此,我们可以对非凸部分添加正则项,使其强凸。例如,对于 f,构造近似函数:
f̂_k(x) = f(x_k, y_k) + ∇ₓ f(x_k, y_k)^T (x - x_k) + (τ/2) ||x - x_k||²
其中 τ > 0 是强凸参数,保证 f̂_k 是强凸的。类似地,对不等式约束 g_i(x, y_k) ≤ 0 进行凸近似:
ĝ_i,k(x) = g_i(x_k, y_k) + ∇ₓ g_i(x_k, y_k)^T (x - x_k) ≤ 0
(如果 g_i 非凸,此近似可能不凸,此时也可对 g_i 添加正则项或采用保守的凸上近似)。
对等式约束 h_j(x, y_k)=0 线性化:
ĥ_j,k(x) = h_j(x_k, y_k) + ∇ₓ h_j(x_k, y_k)^T (x - x_k) = 0
此外,为保证近似只在 x_k 附近有效,加入信赖域约束:||x - x_k|| ≤ Δ_k。
于是得到凸子问题(在固定 y=y_k 下):
min_x f̂_k(x)
s.t. ĝ_i,k(x) ≤ 0, i=1,...,m
ĥ_j,k(x) = 0, j=1,...,p
||x - x_k|| ≤ Δ_k
x ∈ X
3. 用信赖域反射法(TRR)求解凸子问题
信赖域反射法结合了信赖域和梯度反射思想,特别适合有界或线性约束问题。我们的子问题是凸的,有线性(或凸)约束和球约束,可用TRR有效求解。
步骤:
a. 将线性等式和不等式约束写为 Ax = b, Cx ≤ d 形式,与信赖域球约束合并。
b. 在每步TRR迭代中,计算目标梯度 ∇f̂_k,在信赖域内沿梯度反射方向搜索。反射操作将迭代点投影到可行域(满足线性约束)上。
c. 计算实际下降量 ared = f̂_k(x_k) - f̂_k(x_new) 和预测下降量 pred(基于模型函数下降),根据 ared/pred 比率调整信赖域半径 Δ_sub(子问题内部信赖域)。
d. 当子问题收敛(梯度足够小或信赖域收缩到很小),输出步长 s_k = x* - x_k。
4. 步长接受性与整数变量更新
得到连续步长 s_k 后,计算实际目标改进:
实际下降 = f(x_k, y_k) - f(x_k + s_k, y_k)
但需注意约束违反。定义价值函数 Φ(x,y) = f(x,y) + μ (Σ max(0,g_i(x,y)) + Σ |h_j(x,y)|),其中 μ 是惩罚参数。
如果价值函数下降充分,则接受步长,令 x_{k+1} = x_k + s_k,否则拒绝,缩小 Δ_k 重新求解。
接着处理整数变量 y。可采用局部搜索:
- 在 y_k 的邻域 N(y_k)(如汉明距离为1的整数点)中,固定 x = x_{k+1},评估价值函数 Φ(x_{k+1}, y'),选择使 Φ 最小的 y' 作为 y_{k+1}。
- 如果邻域中无改进,可扩大搜索或执行整数分支(如分支定界),但为避免复杂,可只做简单邻域搜索。
5. 收敛条件与参数更新
收敛条件:||s_k|| 很小,且 |f(x_{k+1},y_{k+1}) - f(x_k,y_k)| 很小,且约束违反度很小。
参数更新:
- 信赖域半径 Δ_k 根据 ared/pred 比例调整:比例大(如 >0.75)则增大 Δ;比例小(如 <0.25)则减小 Δ。
- 惩罚参数 μ 随迭代增大,以保证约束满足。
6. 算法总结与讨论
本算法融合了SCA和TRR:SCA将非凸问题序列凸化,TRR有效求解凸子问题,整数变量通过邻域搜索处理。优点是子问题凸且用TRR高效求解,适合中型MINLP。挑战在于凸近似的质量影响收敛,整数搜索可能陷入局部最优。可扩展为分支定界外层,内层用SCA-TRR求解连续松弛。
实例说明
考虑简单问题:min (x-1.8)² + (y-1.8)²
s.t. x² + y² ≤ 4
x ∈ [0,2], y ∈ {0,1,2}
初始化 (x₀,y₀)=(0.5,1), Δ₀=0.5。
第一步固定 y=1,构造 f̂ ≈ f(0.5,1)+2(0.5-1.8)(x-0.5)+τ/2 (x-0.5)²,约束线性化。TRR求解得到 x≈1.2。然后在 y=0,1,2 中搜索,y=2 时目标更小,更新 y=2。迭代直至收敛到近似解 (x,y)=(1.2,2)。