非线性规划中的序列二次规划-积极集-乘子法-过滤器-信赖域-自适应屏障-代理模型-混合整数规划-梯度投影-交替方向乘子法-逐步凸逼近-动态隧道-填充函数-松弛变量-增广拉格朗日混合算法基础题
字数 1786 2025-11-08 10:02:46
非线性规划中的序列二次规划-积极集-乘子法-过滤器-信赖域-自适应屏障-代理模型-混合整数规划-梯度投影-交替方向乘子法-逐步凸逼近-动态隧道-填充函数-松弛变量-增广拉格朗日混合算法基础题
题目描述
考虑如下非线性规划问题:
最小化 \(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_1, x_2 \geq 0\)
该问题包含非线性目标函数和约束,需结合多种高级算法求解。
解题过程
-
问题分析
- 目标函数 \(f(x)\) 为凸二次函数,约束 \(g_1(x)\) 为非线性凸约束,\(g_2(x)\) 为线性约束。
- 需处理可行域边界(如 \(g_1(x) = 0\) 的抛物线)与最优解的交互。
-
算法框架选择
- 采用序列二次规划(SQP) 作为主干,在每步迭代中构建二次规划子问题。
- 引入积极集法 识别活跃约束,减少计算量。
- 使用乘子法 处理约束违反,避免罚函数数值病态。
- 结合过滤器 权衡目标下降与约束违反,避免Maratos效应。
- 通过信赖域 控制步长,保证子问题可解性。
- 其他组件(如代理模型、动态隧道等)在本问题中暂不激活,因问题规模较小。
-
迭代步骤详解
初始点:取 \(x^{(0)} = (0.5, 0.5)\),计算初始目标值 \(f(x^{(0)}) = 2.5\),约束违反度 \(\theta^{(0)} = \max(g_1(x), g_2(x), 0) = 0.25\)。第1次迭代:
- 构建二次规划子问题:
近似Hessian \(B^{(0)} = I\)(单位矩阵),梯度 \(\nabla f(x^{(0)}) = (-3, -1)\)。
线性化约束:
\(\nabla g_1(x^{(0)}) = (1, -1) \Rightarrow g_1(x) \approx 0.25 + (1, -1)^T d\)
\(\nabla g_2(x^{(0)}) = (1, 1) \Rightarrow g_2(x) \approx -1 + (1, 1)^T d\)
子问题:最小化 \(\frac{1}{2} d^T I d + (-3, -1)^T d\),满足线性化约束 \(\leq 0\)。 - 求解得搜索方向 \(d^{(0)} = (0.8, 0.2)\)。
- 信赖域检验:步长 \(\alpha = 1\) 满足 \(f\) 下降且约束违反未增长,接受 \(x^{(1)} = (1.3, 0.7)\)。
第2次迭代:
- 更新Hessian为BFGS公式:\(B^{(1)} = B^{(0)} + \frac{yy^T}{y^T s} - \frac{(B^{(0)} s)(B^{(0)} s)^T}{s^T B^{(0)} s}\),其中 \(s = x^{(1)} - x^{(0)}\), \(y = \nabla L(x^{(1)}) - \nabla L(x^{(0)})\)(\(L\) 为拉格朗日函数)。
- 过滤器判断:\(f(x^{(1)}) = 0.58 < f(x^{(0)})\),且 \(\theta^{(1)} = 0.09 < \theta^{(0)}\),接受该点。
- 重复直至收敛(如 \(\|d\| < 10^{-6}\))。
- 构建二次规划子问题:
-
收敛结果
- 最终解 \(x^* \approx (1.0, 1.0)\),对应 \(f(x^*) = 1.0\),约束满足 \(g_1(x^*) = 0\), \(g_2(x^*) = 0\)。
- 乘子法验证:拉格朗日乘子 \(\lambda_1 \approx 0.5, \lambda_2 \approx 0.5\),符合KKT条件。
关键技巧
- 积极集法动态调整约束,减少子问题规模。
- 过滤器避免目标函数与约束违反的振荡。
- BFGS更新保持Hessian正定性,确保子问题凸性。