序列线性化信赖域反射-自适应屏障混合算法进阶题
题目描述
考虑以下带非线性不等式约束的优化问题:
最小化:\(f(x) = (x_1 - 2)^2 + (x_2 - 1)^2\)
约束条件:\(g_1(x) = x_1^2 - x_2 \le 0\), \(g_2(x) = x_1 + x_2 - 2 \le 0\)
要求使用序列线性化信赖域反射(Sequential Linearized Trust-Region Reflection)与自适应屏障(Adaptive Barrier)混合算法求解。初始点为 \(x^{(0)} = (0.5, 0.5)\),初始信赖域半径 \(\Delta_0 = 0.5\),屏障参数初始值 \(\mu_0 = 1\),衰减因子 \(\tau = 0.1\)。请详细描述迭代求解过程,包括子问题构造、可行性与最优性判断、参数更新等关键步骤。
解题过程循序渐进讲解
步骤1: 理解问题与算法框架
我们面临的是一个非线性规划问题,包含非线性不等式约束。算法结合了两种思想:
- 序列线性化:在每次迭代中,将非线性函数在当前点 \(x^{(k)}\) 处进行一阶泰勒展开,构造线性近似子问题。
- 信赖域反射:在信赖域约束内求解子问题,并通过反射技巧处理线性化可能导致的不可行性。
- 自适应屏障:使用屏障函数将约束问题转化为一系列无约束问题,屏障参数 \(\mu\) 自适应衰减以逐步逼近原始约束。
混合算法流程:外层循环更新屏障参数,内层循环求解序列线性化信赖域反射子问题。
步骤2: 初始设置与屏障函数构造
给定初始点 \(x^{(0)} = (0.5, 0.5)\),计算初始函数值与约束值:
- \(f(x^{(0)}) = (0.5-2)^2 + (0.5-1)^2 = 2.25 + 0.25 = 2.5\)
- \(g_1(x^{(0)}) = 0.25 - 0.5 = -0.25 \le 0\)(可行)
- \(g_2(x^{(0)}) = 0.5 + 0.5 - 2 = -1 \le 0\)(可行)
初始点可行。
自适应屏障函数(对数屏障)为:
\[\phi(x; \mu) = f(x) - \mu \sum_{i=1}^{2} \log(-g_i(x)) \]
由于 \(g_i(x) < 0\) 时对数才有定义,屏障函数只在内点(严格满足约束)有效。初始 \(\mu_0 = 1\)。
步骤3: 第k次迭代子问题构造
假设当前迭代点为 \(x^{(k)}\),屏障参数为 \(\mu\),信赖域半径为 \(\Delta\)。
- 线性化约束:
在 \(x^{(k)}\) 处对 \(g_1, g_2\) 进行一阶泰勒展开:
\[\tilde{g}_1(x) = g_1(x^{(k)}) + \nabla g_1(x^{(k)})^T (x - x^{(k)}) \le 0 \]
\[ \tilde{g}_2(x) = g_2(x^{(k)}) + \nabla g_2(x^{(k)})^T (x - x^{(k)}) \le 0 \]
其中梯度:
- \(\nabla g_1(x) = (2x_1, -1)\)
- \(\nabla g_2(x) = (1, 1)\)
- 线性化目标函数:
对屏障函数 \(\phi(x; \mu)\) 在 \(x^{(k)}\) 处进行一阶近似:
\[\tilde{\phi}(x; \mu) = \phi(x^{(k)}; \mu) + \nabla \phi(x^{(k)}; \mu)^T (x - x^{(k)}) \]
屏障函数的梯度:
\[\nabla \phi(x; \mu) = \nabla f(x) - \mu \sum_{i=1}^{2} \frac{\nabla g_i(x)}{g_i(x)} \]
这里 \(\nabla f(x) = (2(x_1-2), 2(x_2-1))\)。
- 信赖域约束:
\[\| x - x^{(k)} \|_\infty \le \Delta \]
(使用无穷范数简化,也可用二范数)
- 反射处理(确保子问题可行):
若线性化约束 \(\tilde{g}_i(x) \le 0\) 在信赖域内可能无解,则采用反射技巧:将不可行点沿约束边界法向反射回可行域。但对于本算法,我们直接构造以下子问题:
序列线性化信赖域反射子问题:
\[\min_{d} \nabla \phi(x^{(k)}; \mu)^T d \]
\[ \text{s.t. } g_i(x^{(k)}) + \nabla g_i(x^{(k)})^T d \le 0, \quad i=1,2 \]
\[ \| d \|_\infty \le \Delta \]
其中 \(d = x - x^{(k)}\)。这是一个线性规划问题,可用单纯形法或内点法求解。
步骤4: 求解子问题与接受性判断
求解上述线性规划得到位移 \(d_k\)。计算实际下降量:
\[\text{ared}_k = \phi(x^{(k)}; \mu) - \phi(x^{(k)}+d_k; \mu) \]
预测下降量(基于线性模型):
\[\text{pred}_k = -\nabla \phi(x^{(k)}; \mu)^T d_k \]
计算比值:
\[\rho_k = \frac{\text{ared}_k}{\text{pred}_k} \]
信赖域半径更新(标准准则):
- 若 \(\rho_k < 0.25\),认为近似不佳,缩小信赖域:\(\Delta_{k+1} = 0.5 \Delta_k\)。
- 若 \(\rho_k > 0.75\) 且 \(\| d_k \|_\infty\) 接近 \(\Delta_k\),认为近似好,扩大信赖域:\(\Delta_{k+1} = 2 \Delta_k\)。
- 否则保持 \(\Delta_{k+1} = \Delta_k\)。
迭代点更新:
- 若 \(\rho_k > \eta\)(例如 \(\eta = 10^{-4}\)),接受位移:\(x^{(k+1)} = x^{(k)} + d_k\)。
- 否则拒绝,保持 \(x^{(k+1)} = x^{(k)}\),仅缩小信赖域。
步骤5: 自适应屏障参数更新
内层循环(固定 \(\mu\))迭代直到满足收敛条件(如 \(\| d_k \| < \epsilon_{\text{inner}}\) 或达到最大内迭代次数)。然后进入外层循环更新屏障参数:
\[\mu_{\text{new}} = \tau \mu \]
其中 \(\tau = 0.1\)。屏障参数减小使得屏障函数越来越接近原始目标函数,约束逐渐收紧。
收敛判断:
外层循环终止条件:\(\mu < \epsilon_{\text{outer}}\)(例如 \(10^{-6}\))且当前点满足约束容差(如 \(\max(g_i(x)) \le \epsilon_{\text{constr}}\))。
步骤6: 示例迭代(第0次迭代演示)
以初始点 \(x^{(0)} = (0.5, 0.5)\),\(\mu_0 = 1\),\(\Delta_0 = 0.5\) 为例:
- 计算梯度:
- \(\nabla f(x^{(0)}) = (-3, -1)\)
- \(g_1 = -0.25\),\(\nabla g_1 = (1, -1)\)
- \(g_2 = -1\),\(\nabla g_2 = (1, 1)\)
- \(\nabla \phi = (-3, -1) - 1 \times \left[ \frac{(1, -1)}{-0.25} + \frac{(1, 1)}{-1} \right] = (-3, -1) - [ (-4, 4) + (-1, -1) ] = (-3, -1) - (-5, 3) = (2, -4)\)
- 构造线性规划子问题:
\[\min_{d} 2 d_1 - 4 d_2 \]
\[ \text{s.t. } -0.25 + 1 \cdot d_1 - 1 \cdot d_2 \le 0 \quad \Rightarrow \quad d_1 - d_2 \le 0.25 \]
\[ -1 + 1 \cdot d_1 + 1 \cdot d_2 \le 0 \quad \Rightarrow \quad d_1 + d_2 \le 1 \]
\[ |d_1| \le 0.5, \quad |d_2| \le 0.5 \]
- 求解该线性规划(可用图解法或单纯形法):
约束区域为多边形。目标函数梯度方向为 \((2, -4)\),即希望 \(d_1\) 增大,\(d_2\) 减小。检查顶点:
- \((0.5, -0.5)\): 目标值 = \(2*0.5 -4*(-0.5)=1+2=3\)
- \((-0.5, 0.5)\): 目标值 = \(-1 -2 = -3\)(更小)
- \((-0.5, -0.5)\): 目标值 = \(-1 +2 = 1\)
- 约束交点:解 \(d_1 - d_2 = 0.25\),\(d_1 + d_2 = 1\) 得 \(d_1 = 0.625\),\(d_2 = 0.375\)(超出 \(|d_1|\le0.5\))。
实际上,在约束区域内使 \(2d_1 -4d_2\) 最小的点是 \(d_1 = -0.5\),\(d_2 = 0.5\)(目标值 -3)。因此 \(d_0 = (-0.5, 0.5)\)。
- 计算实际下降:
\(x^{\text{new}} = (0, 1)\)
- \(f(x^{\text{new}}) = 4 + 0 = 4\)
- \(g_1 = 0 - 1 = -1\),\(g_2 = 0+1-2=-1\)
- \(\phi(x^{\text{new}}; \mu=1) = 4 - [\log(1) + \log(1)] = 4\)
- 原屏障函数值 \(\phi(x^{(0)};1) = 2.5 - [\log(0.25) + \log(1)] = 2.5 - (-1.3863 + 0) = 3.8863\)
- \(\text{ared} = 3.8863 - 4 = -0.1137\)(实际上升!)
- \(\text{pred} = -\nabla \phi^T d = -(2*(-0.5) + (-4)*0.5) = -(-1 -2) = 3\)
- \(\rho = (-0.1137)/3 \approx -0.0379\)
由于 \(\rho < 0\),实际效果变差,拒绝该位移,缩小信赖域:\(\Delta_1 = 0.25\),保持 \(x^{(1)} = x^{(0)}\)。
- 继续内层迭代(新的更小信赖域内重新求解线性规划)直至内层收敛,然后更新 \(\mu_1 = 0.1\)。
总结与要点
- 该混合算法通过序列线性化将复杂非线性问题转化为一系列线性规划。
- 信赖域控制线性近似的可靠性,反射确保子问题可行性。
- 自适应屏障将约束处理融入目标,通过衰减 \(\mu\) 逐步逼近原始问题解。
- 实际应用中需仔细调整参数(\(\tau, \Delta_0, \eta\))并处理数值稳定性(如屏障函数在边界附近的奇异性)。
- 最终收敛点应近似满足 KKT 条件。对于本例,最优解在约束交点上,可通过多次迭代逼近。