非线性规划中的序列二次规划-积极集-乘子法-过滤器-信赖域混合算法进阶题
题目描述
考虑如下带有不等式和等式约束的非线性优化问题:
\[\begin{aligned} \min_{x \in \mathbb{R}^n} \quad & f(x) \\ \text{s.t.} \quad & c_i(x) = 0, \quad i \in \mathcal{E} \\ & c_i(x) \le 0, \quad i \in \mathcal{I} \end{aligned} \]
其中,目标函数 \(f(x)\) 和约束函数 \(c_i(x)\) 都是二阶连续可微的。本题要求设计并实现一个结合了序列二次规划(SQP)、积极集策略、乘子法、过滤器(Filter)和信赖域(Trust Region) 的混合算法,以高效、鲁棒地求解该问题,尤其适用于中大规模、非凸、约束条件复杂的场景。
解题过程
第一步:算法总体框架理解
该混合算法的核心思想是序列二次规划(SQP):在当前迭代点 \(x_k\),通过求解一个二次规划(QP)子问题来获得搜索方向 \(d_k\)。然后,结合积极集策略识别有效约束,乘子法处理约束违反和拉格朗日乘子更新,过滤器管理目标下降与约束违反的平衡,以及信赖域控制步长的可信度。整体流程是一个迭代过程,直到满足收敛条件。
算法基本循环:
- 初始化:给定初始点 \(x_0\),拉格朗日乘子估计 \(\lambda_0\),信赖域半径 \(\Delta_0 > 0\),过滤器 \(\mathcal{F}\),容忍误差 \(\epsilon\)。
- 对于 \(k = 0, 1, 2, \dots\) 直到收敛:
a. 构造并求解当前点的QP子问题,得到试探步 \(d_k\)。
b. 使用过滤器判断是否接受该步。
c. 若接受,更新迭代点、乘子和信赖域半径;否则,调整信赖域半径并重新求解QP。
d. 检查收敛条件(如KKT条件的近似满足)。
第二步:构造QP子问题
在当前点 \(x_k\),我们构造如下QP子问题:
\[\begin{aligned} \min_{d \in \mathbb{R}^n} \quad & \nabla f(x_k)^T d + \frac{1}{2} d^T B_k d \\ \text{s.t.} \quad & \nabla c_i(x_k)^T d + c_i(x_k) = 0, \quad i \in \mathcal{E} \\ & \nabla c_i(x_k)^T d + c_i(x_k) \le 0, \quad i \in \mathcal{I} \end{aligned} \]
其中,\(B_k\) 是拉格朗日函数 \(L(x, \lambda) = f(x) + \lambda^T c(x)\) 的Hessian矩阵 \(\nabla_{xx}^2 L(x_k, \lambda_k)\) 或其拟牛顿近似(如BFGS更新)。这里的约束是原约束在当前点的线性近似。
注意:为了简化计算和数值稳定性,通常采用积极集策略,即仅考虑在当前点可能起作用的约束(如等式约束和活跃的不等式约束)来构造QP,这能减少子问题的规模。
第三步:积极集策略
- 识别积极集:对于不等式约束 \(i \in \mathcal{I}\),判断其是否活跃。一个常用的准则是:
\[ c_i(x_k) \ge -\epsilon_a \quad \text{或} \quad \lambda_i^k > 0 \]
其中 \(\epsilon_a > 0\) 是一个小阈值,\(\lambda_i^k\) 是当前乘子估计。满足条件的约束被纳入积极集 \(\mathcal{A}_k \subseteq \mathcal{I}\)。
2. 构造简化QP:在QP子问题中,只包含等式约束 \(\mathcal{E}\) 和积极集 \(\mathcal{A}_k\) 对应的约束,其他不等式约束暂时忽略。这能显著降低QP的求解复杂度。
第四步:乘子法的作用
乘子法(也称为增广拉格朗日方法)在该混合算法中主要用于:
- QP子问题的修正:有时会在QP的目标函数中加入一个惩罚项,形成增广拉格朗日形式的QP,以改善约束违反的处理。
- 乘子更新:在每次成功接受步长后,更新拉格朗日乘子 \(\lambda_{k+1}\) 以更好地逼近最优乘子。更新公式通常为:
\[ \lambda_{k+1} = \lambda_k + \mu_k c(x_k + d_k) \]
其中 \(\mu_k > 0\) 是惩罚参数(可能自适应调整)。
3. Hessian近似:在构造 \(B_k\) 时,使用当前乘子 \(\lambda_k\) 计算拉格朗日函数的Hessian,使QP子问题更准确地反映原问题的曲率信息。
第五步:过滤器机制
过滤器用于平衡目标函数下降和约束违反减少,避免传统罚函数法中权重选择的困难。
- 定义过滤器条目:每个迭代点 \(x\) 对应一个二元组 \((f(x), \theta(x))\),其中 \(\theta(x) = \|c(x)^+\|\) 是约束违反度量(\(c^+\) 表示不等式约束的正部分和等式约束的绝对值)。
- 接受准则:试探点 \(x_k + d_k\) 被接受,如果它不被当前过滤器 \(\mathcal{F}_k\) 中的任何条目占优,即不存在 \((f, \theta) \in \mathcal{F}_k\) 使得 \(f \le f(x_k + d_k)\) 且 \(\theta \le \theta(x_k + d_k)\),且至少一个不等式严格成立。
- 过滤器更新:若接受该点,则将 \((f(x_k + d_k), \theta(x_k + d_k))\) 加入过滤器,并删除所有被它占优的条目。
- 恢复机制:如果试探点被过滤器拒绝,则进入“恢复阶段”,例如求解一个以减少约束违约为主要目标的子问题,或缩小信赖域半径重新尝试。
第六步:信赖域控制
信赖域用于确保QP子问题产生的方向 \(d_k\) 在局部模型的有效范围内。
- 添加信赖域约束:在QP子问题中加入约束 \(\|d\| \le \Delta_k\),其中 \(\Delta_k > 0\) 是当前信赖域半径。
- 计算实际下降与预测下降:
- 实际下降:\(\text{ared}_k = f(x_k) - f(x_k + d_k) + \mu_k [\theta(x_k) - \theta(x_k + d_k)]\)(可能结合乘子法的增广项)。
- 预测下降:\(\text{pred}_k = -\left( \nabla f(x_k)^T d_k + \frac{1}{2} d_k^T B_k d_k \right) + \mu_k [\theta(x_k) - \theta_{\text{lin}}(x_k + d_k)]\),其中 \(\theta_{\text{lin}}\) 是基于线性化约束的违反度量。
- 更新信赖域半径:
- 若 \(\text{ared}_k / \text{pred}_k \ge \eta_1\)(如 \(\eta_1 = 0.75\)),接受该步并扩大半径:\(\Delta_{k+1} = \gamma_1 \Delta_k\)(如 \(\gamma_1 = 2\))。
- 若 \(\text{ared}_k / \text{pred}_k \in [\eta_0, \eta_1)\)(如 \(\eta_0 = 0.1\)),接受该步并保持半径不变。
- 否则,拒绝该步并缩小半径:\(\Delta_{k+1} = \gamma_0 \Delta_k\)(如 \(\gamma_0 = 0.5\)),然后返回重新求解QP或进入恢复阶段。
第七步:完整算法步骤与收敛条件
初始化:
- 选择初始点 \(x_0\),乘子 \(\lambda_0\)(可设为零),初始信赖域半径 \(\Delta_0\),初始过滤器 \(\mathcal{F}_0 = \{ (f(x_0), \theta(x_0)) \}\),参数 \(\epsilon > 0\),\(\mu_0 > 0\),\(B_0\)(通常为单位矩阵)。
迭代步骤(对于第 \(k\) 次迭代):
- 积极集识别:根据当前 \(x_k\) 和 \(\lambda_k\) 确定积极集 \(\mathcal{A}_k\)。
- 构造并求解QP子问题:
- 构建带信赖域约束的QP(包含等式约束和 \(\mathcal{A}_k\))。
- 使用有效集法或内点法求解该QP,得到方向 \(d_k\)。
- 过滤器-信赖域测试:
- 计算实际下降 \(\text{ared}_k\) 和预测下降 \(\text{pred}_k\)。
- 检查 \(x_k + d_k\) 是否被当前过滤器接受。
- 计算比率 \(\rho_k = \text{ared}_k / \text{pred}_k\)。
- 步长接受与更新:
- 如果同时满足过滤器接受条件和 \(\rho_k \ge \eta_0\),则接受步长:\(x_{k+1} = x_k + d_k\)。
- 更新乘子 \(\lambda_{k+1}\)(如使用一阶更新或求解QP乘子)。
- 更新过滤器 \(\mathcal{F}_{k+1}\)。
- 更新信赖域半径 \(\Delta_{k+1}\) 基于 \(\rho_k\)。
- 更新Hessian近似 \(B_{k+1}\)(如BFGS)。
- 否则,拒绝步长:\(x_{k+1} = x_k\),缩小信赖域半径 \(\Delta_{k+1} = \gamma_0 \Delta_k\),并可能进入恢复阶段(例如求解一个以减小 \(\theta\) 为主的QP)。
- 如果同时满足过滤器接受条件和 \(\rho_k \ge \eta_0\),则接受步长:\(x_{k+1} = x_k + d_k\)。
- 收敛检查:
- 若 \(\| \nabla L(x_{k+1}, \lambda_{k+1}) \| \le \epsilon\) 且 \(\theta(x_{k+1}) \le \epsilon\),则停止并输出 \(x_{k+1}\) 作为近似最优解。
- 否则,继续下一迭代。
总结
该混合算法通过序列二次规划提供快速局部收敛,积极集策略降低子问题规模,乘子法改善约束处理和乘子估计,过滤器平衡目标与约束,信赖域保证全局收敛性。它特别适合处理非凸、约束复杂的优化问题,在实际应用中(如工程设计、经济模型)具有较好的鲁棒性和效率。