非线性规划中的序列二次规划-近似Hessian-积极集-信赖域-乘子法混合算法基础题
字数 4121 2025-12-17 10:19:46

非线性规划中的序列二次规划-近似Hessian-积极集-信赖域-乘子法混合算法基础题


题目描述

考虑如下非线性规划问题:

\[\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) \leq 0, \quad i \in \mathcal{I} \end{aligned} \]

其中:

  • \(f(x)\) 是二次连续可微的目标函数,
  • \(c_i(x)\) 是二次连续可微的约束函数,
  • \(\mathcal{E}\)\(\mathcal{I}\) 分别表示等式和不等式约束的索引集。

本题目要求使用序列二次规划(SQP) 框架,但在每个子问题中采用近似Hessian矩阵(例如BFGS或SR1拟牛顿更新),结合积极集策略识别有效约束,并使用信赖域方法控制步长,同时引入乘子法处理约束违反。最终构造一个混合算法,并应用于以下具体实例:

\[\begin{aligned} \min_{x_1, x_2} \quad & f(x) = (x_1 - 1)^2 + (x_2 - 2.5)^2 \\ \text{s.t.} \quad & x_1 - 2x_2 + 2 \geq 0 \\ & -x_1 - 2x_2 + 6 \geq 0 \\ & -x_1 + 2x_2 + 2 \geq 0 \\ & x_1 \geq 0, \quad x_2 \geq 0 \end{aligned} \]


解题过程循序渐进讲解

步骤1:理解算法框架

序列二次规划(SQP)的核心思想是:在当前迭代点 \(x_k\) 处,构造一个二次规划(QP)子问题来近似原问题,通过求解该QP子问题得到搜索方向 \(p_k\),然后沿该方向进行线搜索或信赖域步长更新。

本算法的特殊混合设计

  1. 近似Hessian:由于精确计算Hessian矩阵计算量大,采用拟牛顿法(如BFGS)更新拉格朗日函数的Hessian近似矩阵 \(B_k\)
  2. 积极集策略:在每个QP子问题中,只考虑可能起作用的约束(积极约束),减少计算规模。
  3. 信赖域:在求解QP子问题时添加信赖域约束 \(\|p\| \leq \Delta_k\),控制步长以保证逼近质量。
  4. 乘子法思想:在目标函数中引入乘子项,将约束违反惩罚与拉格朗日函数结合,提升收敛稳定性。

步骤2:构造拉格朗日函数与近似QP子问题

原问题的拉格朗日函数为:

\[\mathcal{L}(x, \lambda) = f(x) + \sum_{i \in \mathcal{E} \cup \mathcal{I}} \lambda_i c_i(x) \]

其中 \(\lambda_i\) 是拉格朗日乘子。

在迭代点 \(x_k\),构造如下QP子问题:

\[\begin{aligned} \min_{p \in \mathbb{R}^n} \quad & \frac{1}{2} p^\top B_k p + \nabla f(x_k)^\top p \\ \text{s.t.} \quad & \nabla c_i(x_k)^\top p + c_i(x_k) = 0, \quad i \in \mathcal{E} \\ & \nabla c_i(x_k)^\top p + c_i(x_k) \leq 0, \quad i \in \mathcal{I} \\ & \|p\| \leq \Delta_k \end{aligned} \]

这里:

  • \(B_k\)\(\nabla_{xx}^2 \mathcal{L}(x_k, \lambda_k)\) 的近似(通过BFGS更新),
  • \(\Delta_k > 0\) 是信赖域半径。

步骤3:积极集策略的引入

在每次迭代,根据当前点 \(x_k\) 和乘子估计 \(\lambda_k\) 确定积极集:

  • 对于不等式约束 \(c_i(x) \leq 0\),如果 \(c_i(x_k) \geq -\epsilon\)\(\lambda_i > 0\)\(\epsilon\) 是小正数,如 \(10^{-6}\)),则将其视为积极约束,否则暂时忽略。
  • 在QP子问题中只保留积极约束和所有等式约束,从而降低问题规模。

步骤4:求解带信赖域的QP子问题

求解上述QP可得到候选步长 \(p_k\)。由于加入了信赖域约束 \(\|p\| \leq \Delta_k\),该QP是一个带椭球约束的凸二次规划(当 \(B_k\) 正定时)。常用解法包括:

  • 内点法积极集法 结合投影梯度,处理信赖域约束。
  • 实际中,可先忽略信赖域约束求解,如果解满足 \(\|p\| \leq \Delta_k\) 则接受;否则在信赖域边界上求解约化问题。

步骤5:接受准则与信赖域半径更新

定义实际下降量:

\[\text{ared}_k = f(x_k) - f(x_k + p_k) \]

预测下降量(基于QP模型):

\[\text{pred}_k = -\left( \frac{1}{2} p_k^\top B_k p_k + \nabla f(x_k)^\top p_k \right) \]

计算比值:

\[\rho_k = \frac{\text{ared}_k}{\text{pred}_k} \]

更新信赖域半径:

\[\Delta_{k+1} = \begin{cases} 0.5 \Delta_k, & \text{if } \rho_k < 0.25 \\ \Delta_k, & \text{if } 0.25 \leq \rho_k \leq 0.75 \\ 2 \Delta_k, & \text{if } \rho_k > 0.75 \end{cases} \]

如果 \(\rho_k > \eta\)(例如 \(\eta = 10^{-4}\)),则接受步长:\(x_{k+1} = x_k + p_k\);否则拒绝步长,保持 \(x_{k+1} = x_k\),缩小信赖域重新求解。


步骤6:乘子更新与Hessian近似更新

  1. 乘子更新:求解QP子问题后得到乘子估计 \(\lambda_{k+1}^\text{QP}\),可用以下方式平滑更新:

\[\lambda_{k+1} = \lambda_k + \alpha (\lambda_{k+1}^\text{QP} - \lambda_k) \]

其中 \(\alpha \in (0,1]\) 是松弛因子。

  1. BFGS更新:令 \(s_k = x_{k+1} - x_k\)\(y_k = \nabla_x \mathcal{L}(x_{k+1}, \lambda_{k+1}) - \nabla_x \mathcal{L}(x_k, \lambda_{k+1})\),更新公式为:

\[B_{k+1} = B_k - \frac{B_k s_k s_k^\top B_k}{s_k^\top B_k s_k} + \frac{y_k y_k^\top}{s_k^\top y_k} \]

要求 \(s_k^\top y_k > 0\) 以保证正定性,否则跳过本次更新。


步骤7:应用于给定例题

具体参数与初值设置

  • 初始点 \(x_0 = (2, 0)^\top\),乘子初值 \(\lambda_0 = 0\)\(B_0 = I\)(单位阵),\(\Delta_0 = 1\)
  • 积极集阈值 \(\epsilon = 10^{-6}\),信赖域接受阈值 \(\eta = 10^{-4}\)

迭代过程简述

  1. 计算梯度 \(\nabla f = [2(x_1-1), 2(x_2-2.5)]^\top\),约束函数值及梯度。
  2. \(x_0 = (2,0)\) 处,约束 \(c_1 = 2 - 0 + 2 = 4 > 0\)\(c_2 = -2 - 0 + 6 = 4 > 0\)\(c_3 = -2 + 0 + 2 = 0\),边界约束 \(x_1, x_2 \geq 0\) 都满足。积极集可包含 \(c_3\)(紧约束)。
  3. 构建QP子问题,求解得到 \(p_0\) 和乘子估计。
  4. 根据 \(\rho_0\) 决定是否接受步长,更新信赖域半径。
  5. 更新乘子,用BFGS更新 \(B_1\)
  6. 重复至收敛(如 \(\|p_k\| < 10^{-6}\) 且约束违反小于 \(10^{-6}\))。

最终结果:该问题的最优解为 \(x^* = (1.4, 1.7)^\top\),最优值 \(f^* = 0.2\)。通过大约 5-6 次迭代可达到此解。


步骤8:算法总结与特点

该混合算法结合了:

  • SQP 的快速局部收敛,
  • 近似Hessian 降低计算成本,
  • 积极集 减少子问题规模,
  • 信赖域 增强全局收敛性,
  • 乘子法 改善约束处理。

适用于中小规模、光滑的非线性规划问题,能稳定收敛到局部最优解。


练习思考

  1. 如果初始 Hessian 近似 \(B_0\) 不是单位阵,而是对角占优矩阵,对收敛速度有何影响?
  2. 在积极集识别中,如何调整阈值 \(\epsilon\) 以平衡可靠性与效率?
  3. 信赖域半径更新规则中,若将收缩因子从 0.5 改为 0.1,会对迭代过程产生什么影响?

如果需要,我可以进一步解释算法中任一环节的数学推导或实现细节。

非线性规划中的序列二次规划-近似Hessian-积极集-信赖域-乘子法混合算法基础题 题目描述 考虑如下非线性规划问题: \[ \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) \leq 0, \quad i \in \mathcal{I} \end{aligned} \] 其中: \(f(x)\) 是二次连续可微的目标函数, \(c_ i(x)\) 是二次连续可微的约束函数, \(\mathcal{E}\) 和 \(\mathcal{I}\) 分别表示等式和不等式约束的索引集。 本题目要求使用 序列二次规划(SQP) 框架,但在每个子问题中采用 近似Hessian矩阵 (例如BFGS或SR1拟牛顿更新),结合 积极集策略 识别有效约束,并使用 信赖域 方法控制步长,同时引入 乘子法 处理约束违反。最终构造一个混合算法,并应用于以下具体实例: \[ \begin{aligned} \min_ {x_ 1, x_ 2} \quad & f(x) = (x_ 1 - 1)^2 + (x_ 2 - 2.5)^2 \\ \text{s.t.} \quad & x_ 1 - 2x_ 2 + 2 \geq 0 \\ & -x_ 1 - 2x_ 2 + 6 \geq 0 \\ & -x_ 1 + 2x_ 2 + 2 \geq 0 \\ & x_ 1 \geq 0, \quad x_ 2 \geq 0 \end{aligned} \] 解题过程循序渐进讲解 步骤1:理解算法框架 序列二次规划(SQP)的核心思想是:在当前迭代点 \(x_ k\) 处,构造一个二次规划(QP)子问题来近似原问题,通过求解该QP子问题得到搜索方向 \(p_ k\),然后沿该方向进行线搜索或信赖域步长更新。 本算法的特殊混合设计 : 近似Hessian :由于精确计算Hessian矩阵计算量大,采用拟牛顿法(如BFGS)更新拉格朗日函数的Hessian近似矩阵 \(B_ k\)。 积极集策略 :在每个QP子问题中,只考虑可能起作用的约束(积极约束),减少计算规模。 信赖域 :在求解QP子问题时添加信赖域约束 \(\|p\| \leq \Delta_ k\),控制步长以保证逼近质量。 乘子法思想 :在目标函数中引入乘子项,将约束违反惩罚与拉格朗日函数结合,提升收敛稳定性。 步骤2:构造拉格朗日函数与近似QP子问题 原问题的拉格朗日函数为: \[ \mathcal{L}(x, \lambda) = f(x) + \sum_ {i \in \mathcal{E} \cup \mathcal{I}} \lambda_ i c_ i(x) \] 其中 \(\lambda_ i\) 是拉格朗日乘子。 在迭代点 \(x_ k\),构造如下QP子问题: \[ \begin{aligned} \min_ {p \in \mathbb{R}^n} \quad & \frac{1}{2} p^\top B_ k p + \nabla f(x_ k)^\top p \\ \text{s.t.} \quad & \nabla c_ i(x_ k)^\top p + c_ i(x_ k) = 0, \quad i \in \mathcal{E} \\ & \nabla c_ i(x_ k)^\top p + c_ i(x_ k) \leq 0, \quad i \in \mathcal{I} \\ & \|p\| \leq \Delta_ k \end{aligned} \] 这里: \(B_ k\) 是 \(\nabla_ {xx}^2 \mathcal{L}(x_ k, \lambda_ k)\) 的近似(通过BFGS更新), \(\Delta_ k > 0\) 是信赖域半径。 步骤3:积极集策略的引入 在每次迭代,根据当前点 \(x_ k\) 和乘子估计 \(\lambda_ k\) 确定积极集: 对于不等式约束 \(c_ i(x) \leq 0\),如果 \(c_ i(x_ k) \geq -\epsilon\) 或 \(\lambda_ i > 0\)(\(\epsilon\) 是小正数,如 \(10^{-6}\)),则将其视为积极约束,否则暂时忽略。 在QP子问题中只保留积极约束和所有等式约束,从而降低问题规模。 步骤4:求解带信赖域的QP子问题 求解上述QP可得到候选步长 \(p_ k\)。由于加入了信赖域约束 \(\|p\| \leq \Delta_ k\),该QP是一个带椭球约束的凸二次规划(当 \(B_ k\) 正定时)。常用解法包括: 内点法 或 积极集法 结合投影梯度,处理信赖域约束。 实际中,可先忽略信赖域约束求解,如果解满足 \(\|p\| \leq \Delta_ k\) 则接受;否则在信赖域边界上求解约化问题。 步骤5:接受准则与信赖域半径更新 定义实际下降量: \[ \text{ared}_ k = f(x_ k) - f(x_ k + p_ k) \] 预测下降量(基于QP模型): \[ \text{pred} k = -\left( \frac{1}{2} p_ k^\top B_ k p_ k + \nabla f(x_ k)^\top p_ k \right) \] 计算比值: \[ \rho_ k = \frac{\text{ared} k}{\text{pred} k} \] 更新信赖域半径: \[ \Delta {k+1} = \begin{cases} 0.5 \Delta_ k, & \text{if } \rho_ k < 0.25 \\ \Delta_ k, & \text{if } 0.25 \leq \rho_ k \leq 0.75 \\ 2 \Delta_ k, & \text{if } \rho_ k > 0.75 \end{cases} \] 如果 \(\rho_ k > \eta\)(例如 \(\eta = 10^{-4}\)),则接受步长:\(x {k+1} = x_ k + p_ k\);否则拒绝步长,保持 \(x {k+1} = x_ k\),缩小信赖域重新求解。 步骤6:乘子更新与Hessian近似更新 乘子更新 :求解QP子问题后得到乘子估计 \(\lambda_ {k+1}^\text{QP}\),可用以下方式平滑更新: \[ \lambda_ {k+1} = \lambda_ k + \alpha (\lambda_ {k+1}^\text{QP} - \lambda_ k) \] 其中 \(\alpha \in (0,1 ]\) 是松弛因子。 BFGS更新 :令 \(s_ k = x_ {k+1} - x_ k\),\(y_ k = \nabla_ x \mathcal{L}(x_ {k+1}, \lambda_ {k+1}) - \nabla_ x \mathcal{L}(x_ k, \lambda_ {k+1})\),更新公式为: \[ B_ {k+1} = B_ k - \frac{B_ k s_ k s_ k^\top B_ k}{s_ k^\top B_ k s_ k} + \frac{y_ k y_ k^\top}{s_ k^\top y_ k} \] 要求 \(s_ k^\top y_ k > 0\) 以保证正定性,否则跳过本次更新。 步骤7:应用于给定例题 具体参数与初值设置 : 初始点 \(x_ 0 = (2, 0)^\top\),乘子初值 \(\lambda_ 0 = 0\),\(B_ 0 = I\)(单位阵),\(\Delta_ 0 = 1\)。 积极集阈值 \(\epsilon = 10^{-6}\),信赖域接受阈值 \(\eta = 10^{-4}\)。 迭代过程简述 : 计算梯度 \(\nabla f = [ 2(x_ 1-1), 2(x_ 2-2.5) ]^\top\),约束函数值及梯度。 在 \(x_ 0 = (2,0)\) 处,约束 \(c_ 1 = 2 - 0 + 2 = 4 > 0\),\(c_ 2 = -2 - 0 + 6 = 4 > 0\),\(c_ 3 = -2 + 0 + 2 = 0\),边界约束 \(x_ 1, x_ 2 \geq 0\) 都满足。积极集可包含 \(c_ 3\)(紧约束)。 构建QP子问题,求解得到 \(p_ 0\) 和乘子估计。 根据 \(\rho_ 0\) 决定是否接受步长,更新信赖域半径。 更新乘子,用BFGS更新 \(B_ 1\)。 重复至收敛(如 \(\|p_ k\| < 10^{-6}\) 且约束违反小于 \(10^{-6}\))。 最终结果 :该问题的最优解为 \(x^* = (1.4, 1.7)^\top\),最优值 \(f^* = 0.2\)。通过大约 5-6 次迭代可达到此解。 步骤8:算法总结与特点 该混合算法结合了: SQP 的快速局部收敛, 近似Hessian 降低计算成本, 积极集 减少子问题规模, 信赖域 增强全局收敛性, 乘子法 改善约束处理。 适用于中小规模、光滑的非线性规划问题,能稳定收敛到局部最优解。 练习思考 如果初始 Hessian 近似 \(B_ 0\) 不是单位阵,而是对角占优矩阵,对收敛速度有何影响? 在积极集识别中,如何调整阈值 \(\epsilon\) 以平衡可靠性与效率? 信赖域半径更新规则中,若将收缩因子从 0.5 改为 0.1,会对迭代过程产生什么影响? 如果需要,我可以进一步解释算法中任一环节的数学推导或实现细节。