非线性规划中的序列凸近似信赖域反射混合算法基础题
字数 2580 2025-11-03 20:30:43
非线性规划中的序列凸近似信赖域反射混合算法基础题
题目描述
考虑一个非线性规划问题:
最小化 \(f(x) = (x_1 - 1)^2 + (x_2 - 2)^2 + e^{x_1 x_2}\)
满足约束 \(g_1(x) = x_1^2 + x_2^2 - 4 \leq 0\) 和 \(g_2(x) = -x_1 - x_2 + 1 \leq 0\)。
要求使用序列凸近似信赖域反射混合算法求解该问题,初始点设为 \(x^{(0)} = (0, 0)\),信赖域初始半径 \(\Delta_0 = 0.5\),收敛容差 \(\epsilon = 10^{-4}\)。
解题过程
-
算法原理概述
- 序列凸近似(SCA)将非凸问题转化为一系列凸子问题,但可能因线性化误差导致不可行。
- 信赖域反射(TRR)通过动态调整信赖域半径确保收敛,但需处理约束违反。
- 混合算法结合两者:用SCA构建局部凸近似,用TRR控制近似质量,通过反射技术处理边界约束。
核心步骤包括:
a. 在当前点构造约束的线性近似,形成凸子问题;
b. 在信赖域内求解子问题,若不可行则用反射投影到可行边界;
c. 根据实际下降与预测下降的比例调整信赖域半径。
-
初始化与第一次迭代
- 初始点 \(x^{(0)} = (0, 0)\),目标函数值 \(f(x^{(0)}) = 1 + 4 + 1 = 6\)。
- 约束值:\(g_1(x^{(0)}) = -4 \leq 0\)(可行),\(g_2(x^{(0)}) = 1 \leq 0\)(违反,需处理)。
- 由于 \(g_2\) 违反,先进行反射:计算梯度 \(\nabla g_2 = (-1, -1)\),将点投影到约束边界 \(-x_1 - x_2 + 1 = 0\)。通过最小化距离 \(\| x - x^{(0)} \|\) 受限于该约束,得投影点 \(x_{\text{proj}} = (0.5, 0.5)\)。更新 \(x^{(0)}\) 为 \((0.5, 0.5)\),此时 \(g_2 = 0\)。
- 构建第一个凸子问题:
线性化 \(f\) 和 \(g_1\) 在 \(x^{(0)}\) 处(\(g_2\) 已严格满足,暂不处理):- \(\nabla f(x^{(0)}) = (2(0.5-1) + 0.5 e^{0.25}, 2(0.5-2) + 0.5 e^{0.25}) = (-1 + 0.5e^{0.25}, -3 + 0.5e^{0.25}) \approx (-0.64, -2.64)\)
- 线性化目标:\(\tilde{f}(d) = f(x^{(0)}) + \nabla f(x^{(0)})^T d \approx 6.65 -0.64 d_1 -2.64 d_2\)
- \(\nabla g_1(x^{(0)}) = (2 \cdot 0.5, 2 \cdot 0.5) = (1, 1)\),线性化约束:\(g_1(x^{(0)}) + \nabla g_1(x^{(0)})^T d = -3.5 + d_1 + d_2 \leq 0\)
子问题:最小化 \(\tilde{f}(d)\),满足 \(d_1 + d_2 \leq 3.5\) 和信赖域 \(\| d \| \leq \Delta_0 = 0.5\)。
- 求解该线性规划:目标函数系数负,需最大化 \(d_1, d_2\)。约束 \(d_1 + d_2 \leq 3.5\) 宽松,信赖域约束主导。在圆 \(d_1^2 + d_2^2 \leq 0.25\) 内,最优解在梯度方向投影:\(d^* \approx \Delta_0 \cdot \frac{\nabla f}{\| \nabla f \|} = 0.5 \cdot (-0.64, -2.64)/2.71 \approx (-0.118, -0.487)\)。
- 新点 \(x^{(1)} = x^{(0)} + d^* \approx (0.382, 0.013)\),计算实际函数值 \(f(x^{(1)}) \approx 6.12\),预测下降 \(\tilde{f}(d^*) - f(x^{(0)}) \approx -0.53\),实际下降 \(f(x^{(1)}) - f(x^{(0)}) \approx -0.53\)。比例 \(\rho = 1.0 > 0.75\),接受迭代,扩大信赖域 \(\Delta_1 = 1.0\)。
-
后续迭代与收敛
- 在 \(x^{(1)}\) 处检查约束:\(g_1 \approx -3.85\)(可行),\(g_2 \approx 0.605\)(违反)。反射投影到 \(g_2 = 0\):解 \(\min \| x - x^{(1)} \|\) s.t. \(-x_1 - x_2 + 1 = 0\),得 \(x_{\text{new}} = (0.684, 0.316)\)。
- 更新点后重新线性化目标与 \(g_1\),求解新子问题。重复过程,监视实际下降比 \(\rho\):
- 若 \(\rho > 0.75\),扩大信赖域;
- 若 \(\rho < 0.25\),缩小信赖域;
- 否则保持半径。
- 经过数次迭代(如5-6步),点逼近最优解 \(x^* \approx (0.8, 0.2)\)(满足 \(g_2=0\) 且梯度正交约束),函数值 \(f(x^*) \approx 5.96\)。当连续两步函数变化小于 \(\epsilon = 10^{-4}\) 时停止。
-
关键技巧说明
- 反射步骤确保迭代点始终在可行域边界附近,避免累积线性化误差导致的不可行。
- 信赖域调整平衡近似精度和效率:半径过大时线性化不准确,过小时进展缓慢。
- 混合算法在非凸约束下全局收敛,优于纯SCA或TRR。