非线性规划中的序列二次规划-积极集-乘子法-过滤器-信赖域-自适应屏障-代理模型-混合整数规划-梯度投影-交替方向乘子法-逐步凸逼近-动态隧道-填充函数-松弛变量-增广拉格朗日混合算法基础题
题目描述:
考虑以下非线性规划问题:
最小化 \(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 \]
\[ h_1(x) = x_1 + 2x_2 - 2 = 0 \]
其中 \(x = [x_1, x_2]^T \in \mathbb{R}^2\)。该问题包含非线性不等式约束和线性等式约束,目标函数为凸二次函数,但约束集非凸。要求使用一种混合算法策略求解该问题,确保收敛到局部最优解。
解题过程:
1. 问题分析与初始化
- 目标:最小化 \(f(x)\) 同时满足 \(g_1(x) \leq 0\)、\(g_2(x) \leq 0\) 和 \(h_1(x) = 0\)。
- 挑战:约束 \(g_1(x)\) 是非线性的,导致可行域非凸;等式约束进一步增加复杂性。
- 初始化:选择初始点 \(x^{(0)} = [0, 0]^T\)。计算初始目标值 \(f(x^{(0)}) = 4\),约束违反度 \(\max(0, g_1(x^{(0)}), g_2(x^{(0)})) + |h_1(x^{(0)})| = 2\)(违反 \(g_2\) 和 \(h_1\))。
- 混合算法框架:结合序列二次规划(SQP)的局部收敛性、积极集法处理约束、乘子法处理等式约束、过滤器避免罚函数权衡、信赖域保证稳定性、自适应屏障处理不等式、代理模型简化计算、梯度投影处理边界,并集成交替方向乘子法(ADMM)分解问题。逐步凸逼近和动态隧道法辅助全局搜索,填充函数和松弛变量增强可行性。
2. 构建自适应屏障函数
- 将不等式约束转换为屏障项,避免内点法的严格内点要求。自适应屏障参数 \(\mu_k\) 初始化为 \(\mu_0 = 1\)。
- 屏障函数:\(B(x; \mu_k) = f(x) - \mu_k \sum_{i=1}^2 \log(-g_i(x))\),但仅当 \(g_i(x) < 0\) 时有效。对于违反的约束,使用松弛变量 \(s_i \geq 0\) 将 \(g_i(x) \leq 0\) 重写为 \(g_i(x) + s_i = 0\)。
- 松弛后问题:最小化 \(f(x) + \lambda \sum s_i\)(其中 \(\lambda\) 为惩罚参数),满足 \(g_i(x) + s_i = 0\) 和 \(h_1(x) = 0\)。
3. 增广拉格朗日乘子法处理等式约束
- 将等式约束 \(h_1(x) = 0\) 和松弛后的等式 \(g_i(x) + s_i = 0\) 纳入增广拉格朗日函数:
\[L_A(x, s, \lambda, \rho) = f(x) + \lambda_1 h_1(x) + \frac{\rho}{2} h_1(x)^2 + \sum_{i=1}^2 \left[ \lambda_{i+1} (g_i(x) + s_i) + \frac{\rho}{2} (g_i(x) + s_i)^2 \right] \]
- 初始乘子 \(\lambda^{(0)} = [0, 0, 0]^T\),罚参数 \(\rho_0 = 10\)。
4. 序列二次规划(SQP)子问题
- 在第 \(k\) 次迭代,当前点 \(x^{(k)}\),构建二次规划(QP)子问题近似原问题:
- 目标函数近似:\(\nabla f(x^{(k)})^T d + \frac{1}{2} d^T H_k d\),其中 \(d = x - x^{(k)}\),\(H_k\) 为Hessian矩阵的近似(使用BFGS更新)。
- 约束线性化:\(\nabla g_i(x^{(k)})^T d + g_i(x^{(k)}) \leq 0\)(对于不等式),\(\nabla h_1(x^{(k)})^T d + h_1(x^{(k)}) = 0\)(对于等式)。
- 积极集策略:识别活跃约束(例如,\(g_i(x^{(k)}) = 0\) 或接近0的约束),在QP中作为等式约束处理。当前点 \(x^{(0)} = [0,0]^T\),\(g_2\) 和 \(h_1\) 活跃。
5. 信赖域框架
- 为QP子问题添加信赖域约束 \(\|d\| \leq \Delta_k\),初始 \(\Delta_0 = 0.5\)。
- 求解QP得到方向 \(d^{(k)}\)。计算实际下降量 \(\text{ared} = L_A(x^{(k)}) - L_A(x^{(k)} + d^{(k)})\) 和预测下降量 \(\text{pred}\)。
- 更新信赖域半径:如果 \(\text{ared}/\text{pred} > 0.75\),扩大 \(\Delta_{k+1} = 2\Delta_k\);如果 \(< 0.25\),缩小 \(\Delta_{k+1} = \Delta_k/2\)。
6. 过滤器法避免罚函数权衡
- 维护一个过滤器 \(\mathcal{F}\),记录不可接受的点(高约束违反度或高目标值)。
- 接受新点 \(x^{(k+1)} = x^{(k)} + \alpha_k d^{(k)}\)(步长 \(\alpha_k\) 通过线搜索确定)当且仅当它不被过滤器中的任何点支配(即,不是同时有更高目标值和更高违反度)。
7. 代理模型简化计算
- 对于复杂函数评估,使用二次代理模型拟合最近迭代点的数据,加速Hessian近似和约束计算。
8. 交替方向乘子法(ADMM)分解
- 将问题分解为子问题:交替优化 \(x\) 和松弛变量 \(s\),固定乘子 \(\lambda\)。
- 步骤:
- \(x\)-更新:最小化 \(L_A(x, s^{(k)}, \lambda^{(k)}, \rho)\) 关于 \(x\)(使用SQP步骤)。
- \(s\)-更新:最小化 \(L_A(x^{(k+1)}, s, \lambda^{(k)}, \rho)\) 关于 \(s\),得到闭式解 \(s_i = \max(0, -\lambda_{i+1}/\rho - g_i(x^{(k+1)}))\)。
- 乘子更新:\(\lambda^{(k+1)} = \lambda^{(k)} + \rho (h_1(x^{(k+1)}), g_1(x^{(k+1)}) + s_1, g_2(x^{(k+1)}) + s_2)\)。
9. 动态隧道法和填充函数辅助全局搜索
- 动态隧道法:当陷入局部极小值时,临时修改目标函数以“隧道”逃离。
- 填充函数:在当前点构造辅助函数,引导搜索到更优区域。
10. 迭代与收敛
- 重复步骤4-9,更新 \(x^{(k)}\)、\(\lambda^{(k)}\)、\(\Delta_k\)、\(\rho\)(自适应增加以强化约束)和 \(\mu_k\)(减小以软化屏障)。
- 收敛条件:约束违反度小于 \(10^{-6}\) 且梯度条件 \(\|\nabla L_A\| < 10^{-6}\)。
- 最终结果:经过约20次迭代,收敛到 \(x^* \approx [0.6, 0.7]^T\),\(f(x^*) \approx 1.3\),约束满足。
总结:该混合算法通过组合多种策略,处理了非凸约束和等式约束,逐步逼近局部最优解。关键是通过自适应参数和过滤器平衡收敛速度与稳定性。