序列凸近似信赖域反射混合算法基础题
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 的全局收敛保证,适用于中等规模的非凸非线性规划。
通过以上步骤,你可以逐步实现并分析该算法的性能。