非线性规划中的序列二次规划-代理模型-信赖域混合算法进阶题
字数 2404 2025-11-13 21:18:05

非线性规划中的序列二次规划-代理模型-信赖域混合算法进阶题

题目描述
考虑非线性规划问题:

\[\min f(x) = (x_1 - 1)^2 + (x_2 - 2.5)^2 + \sin(x_1 x_2) \]

约束条件为:

\[g_1(x) = x_1 - 2x_2 + 1 \geq 0 \]

\[g_2(x) = -x_1^2 - x_2^2 + 4 \geq 0 \]

\[x_1, x_2 \in \mathbb{R} \]

要求使用序列二次规划(SQP)结合代理模型(如二次近似)和信赖域策略求解该问题,初始点 \(x^{(0)} = [2, 0]\),初始信赖域半径 \(\Delta_0 = 0.5\)


解题过程

  1. 问题分析

    • 目标函数 \(f(x)\) 包含非线性项 \(\sin(x_1 x_2)\),约束 \(g_2(x)\) 为非线性不等式。
    • 核心思想:通过SQP将原问题转化为一系列二次规划子问题,并用代理模型(如拉格朗日函数的二次近似)简化计算,再通过信赖域控制步长以保证收敛。
  2. 构建拉格朗日函数
    引入拉格朗日乘子 \(\lambda_1, \lambda_2\),定义拉格朗日函数:

\[ L(x, \lambda) = f(x) - \lambda_1 g_1(x) - \lambda_2 g_2(x) \]

其中 \(\lambda_1, \lambda_2 \geq 0\)

  1. 初始化
    设初始点 \(x^{(0)} = [2, 0]\),初始乘子 \(\lambda^{(0)} = [0, 0]\),初始信赖域半径 \(\Delta_0 = 0.5\),容忍误差 \(\epsilon = 10^{-6}\)

  2. 迭代步骤(第k次迭代)
    步骤1:计算梯度与Hessian

    • 计算目标函数梯度 \(\nabla f(x^{(k)})\) 和约束梯度 \(\nabla g_1(x^{(k)}), \nabla g_2(x^{(k)})\)
      例如在 \(x^{(0)}\) 处:

\[ \nabla f = [2(x_1-1) + x_2 \cos(x_1 x_2), \ 2(x_2-2.5) + x_1 \cos(x_1 x_2)] \]

 代入得 $ \nabla f(x^{(0)}) \approx [2, -3] $。  

\[ \nabla g_1 = [1, -2], \quad \nabla g_2 = [-2x_1, -2x_2] \approx [-4, 0] \]

  • 计算拉格朗日函数的Hessian近似 \(B_k\)(用BFGS更新或精确Hessian):

\[ B_k = \nabla^2 L(x^{(k)}, \lambda^{(k)}) \]

 若用精确Hessian,需计算二阶导数。

步骤2:构建二次规划子问题
\(x^{(k)}\) 处建立代理模型(二次近似):

\[ \min_p \frac{1}{2} p^T B_k p + \nabla f(x^{(k)})^T p \]

约束为线性化约束:

\[ \nabla g_1(x^{(k)})^T p + g_1(x^{(k)}) \geq 0 \]

\[ \nabla g_2(x^{(k)})^T p + g_2(x^{(k)}) \geq 0 \]

且满足信赖域约束 \(\|p\| \leq \Delta_k\)

步骤3:求解子问题
使用积极集法或内点法求解该二次规划,得到步长 \(p_k\)

步骤4:计算实际下降与预测下降

  • 实际下降:

\[ \text{ared}_k = f(x^{(k)}) - f(x^{(k)} + p_k) \]

  • 预测下降(基于代理模型):

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

  • 计算比值 \(\rho_k = \frac{\text{ared}_k}{\text{pred}_k}\)

步骤5:更新信赖域半径

  • \(\rho_k < 0.25\),拒绝步长,缩小信赖域: \(\Delta_{k+1} = 0.5 \Delta_k\)
  • \(\rho_k > 0.75\),接受步长,扩大信赖域: \(\Delta_{k+1} = 2 \Delta_k\)
  • 否则保持 \(\Delta_{k+1} = \Delta_k\)

步骤6:更新迭代点与乘子

  • \(\rho_k > \eta\)(如 \(\eta = 0.1\)),接受步长: \(x^{(k+1)} = x^{(k)} + p_k\),并更新乘子 \(\lambda^{(k+1)}\) 为子问题解。
  • 否则保持 \(x^{(k+1)} = x^{(k)}\)
  1. 收敛判断
    检查KKT条件的残差:

\[ \|\nabla L(x^{(k)}, \lambda^{(k)})\| \leq \epsilon, \quad |\lambda_i g_i(x^{(k)})| \leq \epsilon \]

若满足则停止,否则返回步骤1。


关键点

  • 代理模型简化了非线性的Hessian计算。
  • 信赖域确保迭代稳定性,避免无效大步长。
  • 通过比值 \(\rho_k\) 动态调整信赖域半径,平衡近似精度与效率。
非线性规划中的序列二次规划-代理模型-信赖域混合算法进阶题 题目描述 : 考虑非线性规划问题: \[ \min f(x) = (x_ 1 - 1)^2 + (x_ 2 - 2.5)^2 + \sin(x_ 1 x_ 2) \] 约束条件为: \[ g_ 1(x) = x_ 1 - 2x_ 2 + 1 \geq 0 \] \[ g_ 2(x) = -x_ 1^2 - x_ 2^2 + 4 \geq 0 \] \[ x_ 1, x_ 2 \in \mathbb{R} \] 要求使用序列二次规划(SQP)结合代理模型(如二次近似)和信赖域策略求解该问题,初始点 \( x^{(0)} = [ 2, 0] \),初始信赖域半径 \( \Delta_ 0 = 0.5 \)。 解题过程 : 问题分析 目标函数 \( f(x) \) 包含非线性项 \( \sin(x_ 1 x_ 2) \),约束 \( g_ 2(x) \) 为非线性不等式。 核心思想:通过SQP将原问题转化为一系列二次规划子问题,并用代理模型(如拉格朗日函数的二次近似)简化计算,再通过信赖域控制步长以保证收敛。 构建拉格朗日函数 引入拉格朗日乘子 \( \lambda_ 1, \lambda_ 2 \),定义拉格朗日函数: \[ L(x, \lambda) = f(x) - \lambda_ 1 g_ 1(x) - \lambda_ 2 g_ 2(x) \] 其中 \( \lambda_ 1, \lambda_ 2 \geq 0 \)。 初始化 设初始点 \( x^{(0)} = [ 2, 0] \),初始乘子 \( \lambda^{(0)} = [ 0, 0] \),初始信赖域半径 \( \Delta_ 0 = 0.5 \),容忍误差 \( \epsilon = 10^{-6} \)。 迭代步骤(第k次迭代) 步骤1:计算梯度与Hessian 计算目标函数梯度 \( \nabla f(x^{(k)}) \) 和约束梯度 \( \nabla g_ 1(x^{(k)}), \nabla g_ 2(x^{(k)}) \)。 例如在 \( x^{(0)} \) 处: \[ \nabla f = [ 2(x_ 1-1) + x_ 2 \cos(x_ 1 x_ 2), \ 2(x_ 2-2.5) + x_ 1 \cos(x_ 1 x_ 2) ] \] 代入得 \( \nabla f(x^{(0)}) \approx [ 2, -3 ] \)。 \[ \nabla g_ 1 = [ 1, -2], \quad \nabla g_ 2 = [ -2x_ 1, -2x_ 2] \approx [ -4, 0 ] \] 计算拉格朗日函数的Hessian近似 \( B_ k \)(用BFGS更新或精确Hessian): \[ B_ k = \nabla^2 L(x^{(k)}, \lambda^{(k)}) \] 若用精确Hessian,需计算二阶导数。 步骤2:构建二次规划子问题 在 \( x^{(k)} \) 处建立代理模型(二次近似): \[ \min_ p \frac{1}{2} p^T B_ k p + \nabla f(x^{(k)})^T p \] 约束为线性化约束: \[ \nabla g_ 1(x^{(k)})^T p + g_ 1(x^{(k)}) \geq 0 \] \[ \nabla g_ 2(x^{(k)})^T p + g_ 2(x^{(k)}) \geq 0 \] 且满足信赖域约束 \( \|p\| \leq \Delta_ k \)。 步骤3:求解子问题 使用积极集法或内点法求解该二次规划,得到步长 \( p_ k \)。 步骤4:计算实际下降与预测下降 实际下降: \[ \text{ared}_ k = f(x^{(k)}) - f(x^{(k)} + p_ k) \] 预测下降(基于代理模型): \[ \text{pred}_ k = -\left( \nabla f(x^{(k)})^T p_ k + \frac{1}{2} p_ k^T B_ k p_ k \right) \] 计算比值 \( \rho_ k = \frac{\text{ared}_ k}{\text{pred}_ k} \)。 步骤5:更新信赖域半径 若 \( \rho_ k < 0.25 \),拒绝步长,缩小信赖域: \( \Delta_ {k+1} = 0.5 \Delta_ k \)。 若 \( \rho_ k > 0.75 \),接受步长,扩大信赖域: \( \Delta_ {k+1} = 2 \Delta_ k \)。 否则保持 \( \Delta_ {k+1} = \Delta_ k \)。 步骤6:更新迭代点与乘子 若 \( \rho_ k > \eta \)(如 \( \eta = 0.1 \)),接受步长: \( x^{(k+1)} = x^{(k)} + p_ k \),并更新乘子 \( \lambda^{(k+1)} \) 为子问题解。 否则保持 \( x^{(k+1)} = x^{(k)} \)。 收敛判断 检查KKT条件的残差: \[ \|\nabla L(x^{(k)}, \lambda^{(k)})\| \leq \epsilon, \quad |\lambda_ i g_ i(x^{(k)})| \leq \epsilon \] 若满足则停止,否则返回步骤1。 关键点 : 代理模型简化了非线性的Hessian计算。 信赖域确保迭代稳定性,避免无效大步长。 通过比值 \( \rho_ k \) 动态调整信赖域半径,平衡近似精度与效率。