序列凸近似信赖域反射混合算法基础题
字数 3043 2025-12-05 07:55:28

序列凸近似信赖域反射混合算法基础题

1. 题目描述
考虑以下非线性规划问题:

\[\begin{aligned} \min_{x \in \mathbb{R}^n} \quad & f(x) \\ \text{s.t.} \quad & c_i(x) \leq 0, \quad i = 1, \dots, m, \\ & Ax = b, \end{aligned} \]

其中 \(f: \mathbb{R}^n \to \mathbb{R}\) 是光滑但非凸的目标函数,\(c_i: \mathbb{R}^n \to \mathbb{R}\) 是光滑但非凸的不等式约束函数,\(A \in \mathbb{R}^{p \times n}\)\(b \in \mathbb{R}^p\) 是线性等式约束。假设该问题在可行域内存在局部最优解,但直接求解困难。

要求:设计一种 序列凸近似(SCA)信赖域反射(TRR) 的混合算法,逐步将原问题转化为一系列凸子问题,并结合信赖域策略控制近似误差,确保算法收敛到原问题的一个稳定点。


2. 解题过程

步骤1:理解算法框架
序列凸近似(SCA)的核心思想是:在每次迭代中,用凸函数近似原问题的非凸部分,从而得到一个凸子问题,再求解该子问题得到下一步迭代点。信赖域反射(TRR)则在每一步限制迭代步长,确保近似误差可控。混合算法的流程为:

  1. 在当前点构造凸近似子问题。
  2. 在信赖域内求解子问题。
  3. 根据实际目标下降与预测下降的比例,调整信赖域半径。
  4. 重复直到满足收敛条件。

步骤2:构造凸近似子问题
假设当前迭代点为 \(x_k\)。对目标函数 \(f(x)\) 和约束 \(c_i(x)\) 进行一阶泰勒展开,并添加二次正则项使其凸化。具体地,定义近似函数:

\[\tilde{f}(x; x_k) = f(x_k) + \nabla f(x_k)^T (x - x_k) + \frac{\tau}{2} \|x - x_k\|^2, \]

\[\tilde{c}_i(x; x_k) = c_i(x_k) + \nabla c_i(x_k)^T (x - x_k) + \frac{\rho_i}{2} \|x - x_k\|^2, \]

其中 \(\tau > 0\)\(\rho_i \geq 0\) 是正则化参数,确保 \(\tilde{f}\)\(\tilde{c}_i\) 是凸函数。于是,第 \(k\) 次迭代的子问题为:

\[\begin{aligned} \min_{x \in \mathbb{R}^n} \quad & \tilde{f}(x; x_k) \\ \text{s.t.} \quad & \tilde{c}_i(x; x_k) \leq 0, \quad i = 1, \dots, m, \\ & Ax = b, \\ & \|x - x_k\| \leq \Delta_k, \end{aligned} \]

其中 \(\Delta_k > 0\) 是当前信赖域半径,约束 \(\|x - x_k\| \leq \Delta_k\) 定义了信赖域。

步骤3:求解子问题
由于子问题是凸的(目标为强凸二次函数,约束为凸不等式和线性等式),可用凸优化方法(如内点法、有效集法)精确求解。记解为 \(s_k = x - x_k\),则候选点为 \(x_k^+ = x_k + s_k\)

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

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

预测下降(基于近似模型):

\[\text{pred}_k = \tilde{f}(x_k; x_k) - \tilde{f}(x_k^+; x_k) = -\nabla f(x_k)^T s_k - \frac{\tau}{2} \|s_k\|^2. \]

计算比值:

\[r_k = \frac{\text{ared}_k}{\text{pred}_k}. \]

  • 如果 \(r_k\) 接近 1,说明近似模型很好,可扩大信赖域。
  • 如果 \(r_k\) 很小或为负,说明近似模型很差,应缩小信赖域。

步骤5:更新信赖域半径和迭代点
根据比值 \(r_k\) 调整半径:

\[\Delta_{k+1} = \begin{cases} \max(\gamma_1 \Delta_k, \Delta_{\min}) & \text{if } r_k < \eta_1, \\ \Delta_k & \text{if } \eta_1 \leq r_k < \eta_2, \\ \min(\gamma_2 \Delta_k, \Delta_{\max}) & \text{if } r_k \geq \eta_2, \end{cases} \]

其中 \(0 < \eta_1 < \eta_2 < 1\)\(0 < \gamma_1 < 1 < \gamma_2\)\(\Delta_{\min}\)\(\Delta_{\max}\) 是半径上下界。
\(r_k > \eta_0\)(如 \(\eta_0 = 10^{-4}\)),则接受迭代点:\(x_{k+1} = x_k^+\);否则保持 \(x_{k+1} = x_k\)

步骤6:收敛判断
检查以下条件:

  1. 梯度投影范数:计算拉格朗日函数 \(L(x, \lambda, \mu) = f(x) + \sum \lambda_i c_i(x) + \mu^T(Ax - b)\) 的 KKT 条件残差,若 \(\|\nabla_x L\| < \epsilon\) 且约束违反度很小,则停止。
  2. 信赖域半径足够小:若 \(\Delta_k < \Delta_{\min}\) 且迭代点变化很小,则停止。
  3. 达到最大迭代次数。

步骤7:算法流程

  1. 初始化 \(x_0\)\(\Delta_0 > 0\),参数 \(\tau, \rho_i, \eta_0, \eta_1, \eta_2, \gamma_1, \gamma_2\)
  2. 对于 \(k = 0, 1, 2, \dots\)
    a. 构造凸近似子问题。
    b. 在信赖域内求解子问题,得候选点 \(x_k^+\)
    c. 计算比值 \(r_k\)
    d. 按规则更新 \(\Delta_{k+1}\)\(x_{k+1}\)
    e. 若收敛,输出 \(x_{k+1}\) 作为近似最优解。

3. 关键点与注意事项

  • 正则化参数 \(\tau, \rho_i\) 需选得足够大,使 \(\tilde{f}\)\(\tilde{c}_i\) 凸,但过大则近似过于保守。可自适应调整,例如根据 Hessian 估计设置。
  • 子问题的求解精度需足够高,否则影响算法收敛性。
  • 该混合算法结合了 SCA 的迭代凸化与 TRR 的全局收敛保证,适用于中等规模的非凸非线性规划。

通过以上步骤,你可以逐步实现并分析该算法的性能。

序列凸近似信赖域反射混合算法基础题 1. 题目描述 考虑以下非线性规划问题: \[\begin{aligned} \min_ {x \in \mathbb{R}^n} \quad & f(x) \\ \text{s.t.} \quad & c_ i(x) \leq 0, \quad i = 1, \dots, m, \\ & Ax = b, \end{aligned}\] 其中 \(f: \mathbb{R}^n \to \mathbb{R}\) 是光滑但非凸的目标函数,\(c_ i: \mathbb{R}^n \to \mathbb{R}\) 是光滑但非凸的不等式约束函数,\(A \in \mathbb{R}^{p \times n}\),\(b \in \mathbb{R}^p\) 是线性等式约束。假设该问题在可行域内存在局部最优解,但直接求解困难。 要求:设计一种 序列凸近似(SCA) 与 信赖域反射(TRR) 的混合算法,逐步将原问题转化为一系列凸子问题,并结合信赖域策略控制近似误差,确保算法收敛到原问题的一个稳定点。 2. 解题过程 步骤1:理解算法框架 序列凸近似(SCA)的核心思想是:在每次迭代中,用凸函数近似原问题的非凸部分,从而得到一个凸子问题,再求解该子问题得到下一步迭代点。信赖域反射(TRR)则在每一步限制迭代步长,确保近似误差可控。混合算法的流程为: 在当前点构造凸近似子问题。 在信赖域内求解子问题。 根据实际目标下降与预测下降的比例,调整信赖域半径。 重复直到满足收敛条件。 步骤2:构造凸近似子问题 假设当前迭代点为 \(x_ k\)。对目标函数 \(f(x)\) 和约束 \(c_ i(x)\) 进行一阶泰勒展开,并添加二次正则项使其凸化。具体地,定义近似函数: \[ \tilde{f}(x; x_ k) = f(x_ k) + \nabla f(x_ k)^T (x - x_ k) + \frac{\tau}{2} \|x - x_ k\|^2, \] \[ \tilde{c}_ i(x; x_ k) = c_ i(x_ k) + \nabla c_ i(x_ k)^T (x - x_ k) + \frac{\rho_ i}{2} \|x - x_ k\|^2, \] 其中 \(\tau > 0\),\(\rho_ i \geq 0\) 是正则化参数,确保 \(\tilde{f}\) 和 \(\tilde{c} i\) 是凸函数。于是,第 \(k\) 次迭代的子问题为: \[ \begin{aligned} \min {x \in \mathbb{R}^n} \quad & \tilde{f}(x; x_ k) \\ \text{s.t.} \quad & \tilde{c}_ i(x; x_ k) \leq 0, \quad i = 1, \dots, m, \\ & Ax = b, \\ & \|x - x_ k\| \leq \Delta_ k, \end{aligned} \] 其中 \(\Delta_ k > 0\) 是当前信赖域半径,约束 \(\|x - x_ k\| \leq \Delta_ k\) 定义了信赖域。 步骤3:求解子问题 由于子问题是凸的(目标为强凸二次函数,约束为凸不等式和线性等式),可用凸优化方法(如内点法、有效集法)精确求解。记解为 \(s_ k = x - x_ k\),则候选点为 \(x_ k^+ = x_ k + s_ k\)。 步骤4:计算实际下降与预测下降 定义实际下降: \[ \text{ared}_ k = f(x_ k) - f(x_ k^+), \] 预测下降(基于近似模型): \[ \text{pred}_ k = \tilde{f}(x_ k; x_ k) - \tilde{f}(x_ k^+; x_ k) = -\nabla f(x_ k)^T s_ k - \frac{\tau}{2} \|s_ k\|^2. \] 计算比值: \[ r_ k = \frac{\text{ared}_ k}{\text{pred}_ k}. \] 如果 \(r_ k\) 接近 1,说明近似模型很好,可扩大信赖域。 如果 \(r_ k\) 很小或为负,说明近似模型很差,应缩小信赖域。 步骤5:更新信赖域半径和迭代点 根据比值 \(r_ k\) 调整半径: \[ \Delta_ {k+1} = \begin{cases} \max(\gamma_ 1 \Delta_ k, \Delta_ {\min}) & \text{if } r_ k < \eta_ 1, \\ \Delta_ k & \text{if } \eta_ 1 \leq r_ k < \eta_ 2, \\ \min(\gamma_ 2 \Delta_ k, \Delta_ {\max}) & \text{if } r_ k \geq \eta_ 2, \end{cases} \] 其中 \(0 < \eta_ 1 < \eta_ 2 < 1\),\(0 < \gamma_ 1 < 1 < \gamma_ 2\),\(\Delta_ {\min}\) 和 \(\Delta_ {\max}\) 是半径上下界。 若 \(r_ k > \eta_ 0\)(如 \(\eta_ 0 = 10^{-4}\)),则接受迭代点:\(x_ {k+1} = x_ k^+\);否则保持 \(x_ {k+1} = x_ k\)。 步骤6:收敛判断 检查以下条件: 梯度投影范数:计算拉格朗日函数 \(L(x, \lambda, \mu) = f(x) + \sum \lambda_ i c_ i(x) + \mu^T(Ax - b)\) 的 KKT 条件残差,若 \(\|\nabla_ x L\| < \epsilon\) 且约束违反度很小,则停止。 信赖域半径足够小:若 \(\Delta_ k < \Delta_ {\min}\) 且迭代点变化很小,则停止。 达到最大迭代次数。 步骤7:算法流程 初始化 \(x_ 0\),\(\Delta_ 0 > 0\),参数 \(\tau, \rho_ i, \eta_ 0, \eta_ 1, \eta_ 2, \gamma_ 1, \gamma_ 2\)。 对于 \(k = 0, 1, 2, \dots\): a. 构造凸近似子问题。 b. 在信赖域内求解子问题,得候选点 \(x_ k^+\)。 c. 计算比值 \(r_ k\)。 d. 按规则更新 \(\Delta_ {k+1}\) 和 \(x_ {k+1}\)。 e. 若收敛,输出 \(x_ {k+1}\) 作为近似最优解。 3. 关键点与注意事项 正则化参数 \(\tau, \rho_ i\) 需选得足够大,使 \(\tilde{f}\) 和 \(\tilde{c}_ i\) 凸,但过大则近似过于保守。可自适应调整,例如根据 Hessian 估计设置。 子问题的求解精度需足够高,否则影响算法收敛性。 该混合算法结合了 SCA 的迭代凸化与 TRR 的全局收敛保证,适用于中等规模的非凸非线性规划。 通过以上步骤,你可以逐步实现并分析该算法的性能。