非线性规划中的自适应屏障-序列二次规划混合算法基础题
题目描述
考虑非线性约束优化问题:
最小化 \(f(x) = (x_1 - 2)^2 + (x_2 - 1)^2\)
约束条件:
\(g_1(x) = x_1^2 - x_2 \leq 0\)
\(g_2(x) = x_1 + x_2 - 2 \leq 0\)
其中 \(x = (x_1, x_2) \in \mathbb{R}^2\)。
要求设计一种自适应屏障-序列二次规划混合算法,结合屏障函数(内点罚函数)的可行性保持特性与序列二次规划(SQP)的快速局部收敛性,并通过自适应机制调整屏障参数和二次规划子问题的精度。
解题过程
1. 算法框架概述
混合算法的核心思想是:
- 使用屏障函数将约束问题转化为一系列无约束子问题,确保迭代点始终在可行域内部;
- 对每个子问题应用SQP方法进行快速求解,并自适应调整屏障参数和子问题精度以平衡效率与稳定性。
流程分为以下步骤:初始化、屏障函数构造、自适应SQP求解、参数更新和收敛判断。
2. 屏障函数构造
原问题的屏障函数形式为:
\[B(x, \mu) = f(x) - \mu \sum_{i=1}^2 \ln(-g_i(x)) \]
其中 \(\mu > 0\) 是屏障参数。屏障项 \(-\ln(-g_i(x))\) 在约束边界趋于无穷大,迫使迭代点留在可行域内部(即 \(g_i(x) < 0\))。初始点需严格可行,例如选 \(x^{(0)} = (0.5, 0.5)\),满足 \(g_1(x) = -0.25 < 0\),\(g_2(x) = -1 < 0\)。
3. 自适应SQP求解子问题
对每个固定的 \(\mu_k\),求解无约束问题 \(\min_x B(x, \mu_k)\)。SQP通过二次规划子问题逼近解:
- 梯度计算:
\(\nabla B(x, \mu_k) = \nabla f(x) - \mu_k \sum_{i=1}^2 \frac{\nabla g_i(x)}{-g_i(x)}\)。
例如,\(\nabla f(x) = [2(x_1-2), 2(x_2-1)]^T\),\(\nabla g_1(x) = [2x_1, -1]^T\),\(\nabla g_2(x) = [1, 1]^T\)。 - Hessian近似:使用BFGS公式更新 \(H_k\) 以近似 \(\nabla^2 B(x, \mu_k)\),避免直接计算二阶导数。
- 二次规划子问题:在迭代点 \(x^{(k)}\) 构建子问题:
最小化 \(\frac{1}{2} d^T H_k d + \nabla B(x^{(k)}, \mu_k)^T d\)
约束为线性化可行性条件:\(g_i(x^{(k)}) + \nabla g_i(x^{(k)})^T d \leq 0 \quad (i=1,2)\)。
注意:由于屏障函数保证 \(g_i(x^{(k)}) < 0\),子问题总是可行。 - 自适应精度控制:若子问题的解 \(d_k\) 满足 \(\|d_k\| < \epsilon_{\text{inner}}\)(内层容忍度),则终止内层循环;否则更新 \(x^{(k+1)} = x^{(k)} + \alpha_k d_k\),其中步长 \(\alpha_k\) 通过Armijo线搜索满足 \(B(x^{(k+1)}, \mu_k) < B(x^{(k)}, \mu_k) + c_1 \alpha_k \nabla B^T d_k\)。
4. 自适应参数更新
- 屏障参数更新:每完成一个SQP阶段后,减小 \(\mu_k\) 以逼近原始问题解,例如 \(\mu_{k+1} = \mu_k / \gamma\)(\(\gamma > 1\),如 \(\gamma=10\))。若当前点 \(x^{(k)}\) 的约束违反度 \(\max_i g_i(x^{(k)})\) 接近零,则加速减小 \(\mu_k\);若违反度增大,则调小 \(\gamma\) 以稳定迭代。
- 收敛判断:当 \(\mu_k < \mu_{\min}\)(如 \(10^{-6}\))且原始问题的KKT条件残差 \(\|\nabla f(x^{(k)}) + \lambda_1 \nabla g_1(x^{(k)}) + \lambda_2 \nabla g_2(x^{(k)})\| < \epsilon\)(如 \(\epsilon=10^{-5}\))时停止,其中拉格朗日乘子 \(\lambda_i = \mu_k / (-g_i(x^{(k)}))\) 由屏障函数导出。
5. 实例演算
以初始点 \(x^{(0)} = (0.5, 0.5)\),\(\mu_0=1\) 为例:
- 第一轮(\(\mu_0=1\)):计算 \(B(x^{(0)}, 1) \approx 4.25\),梯度 \(\nabla B \approx [-2, 0]^T\)。求解QP子问题得 \(d_0 \approx (0.3, 0.2)\),步长 \(\alpha_0=0.5\) 更新至 \(x^{(1)} = (0.65, 0.6)\)。
- 参数调整:检查约束违反度(\(g_1 \approx -0.1775\),\(g_2 \approx -0.75\))后减小 \(\mu_1=0.1\)。
- 后续迭代:重复SQP步骤,直至 \(x^{(k)} \approx (1.0, 1.0)\)(最优解),此时 \(f(x)=2\),约束紧致且KKT残差趋于零。
总结
本算法通过屏障函数保持可行性,SQP提升收敛速度,自适应机制平衡全局探索与局部精细搜索。关键点在于屏障参数与SQP精度的协同调整,避免过早陷入边界或计算浪费。