非线性规划中的连续凸近似信赖域反射混合算法基础题
题目描述
考虑一个带有非凸目标函数和凸不等式约束的非线性规划问题:
\[\begin{aligned} \min_{x \in \mathbb{R}^n} &\quad f(x) \\ \text{s.t.} &\quad g_i(x) \le 0, \quad i=1,2,\dots,m \end{aligned} \]
其中:
- 目标函数 \(f(x)\) 是非凸、可微的;
- 约束函数 \(g_i(x)\) 是凸、可微的;
- 可行域记为 \(S = \{x \mid g_i(x) \le 0, \, i=1,\dots,m\}\)。
我们要求解此问题,但不假设目标函数为凸函数,因此传统凸优化方法无法直接应用。这里引入一种结合了连续凸近似(Successive Convex Approximation, SCA) 与信赖域反射(Trust Region Reflection, TRR) 的混合算法,该算法能够处理非凸目标,同时在迭代过程中确保可行性并提升收敛性。
解题过程循序渐进讲解
第一步:理解算法的基本思想
该混合算法的核心思想是:
- 在每一步迭代点 \(x^k\) 处,构造目标函数 \(f(x)\) 的一个凸近似模型 \(q_k(x)\),使其在 \(x^k\) 附近近似 \(f(x)\)。
- 利用信赖域策略限制每一步的移动范围,避免因近似模型不准确而导致发散。
- 引入反射步(当试探步被拒绝时,在信赖域内尝试一个“反射”方向,以加速收敛)。
- 由于约束是凸的,可直接在凸近似子问题中保留原约束,确保迭代点始终可行。
第二步:构造凸近似模型
在第 \(k\) 次迭代,当前点为 \(x^k\)。我们需要构造一个凸函数 \(q_k(x)\) 来近似 \(f(x)\),常用的方法是基于一阶泰勒展开并添加一个正定二次项:
\[q_k(x) = f(x^k) + \nabla f(x^k)^\top (x - x^k) + \frac{1}{2} (x - x^k)^\top B_k (x - x^k) \]
其中:
- \(\nabla f(x^k)\) 是目标函数在 \(x^k\) 处的梯度;
- \(B_k\) 是一个对称正定矩阵,用于保证 \(q_k(x)\) 是凸函数(例如,取 \(B_k = \lambda_k I\),其中 \(\lambda_k > 0\) 足够大,或采用拟牛顿更新得到正定近似 Hessian)。
第三步:建立带信赖域的子问题
在信赖域半径 \(\Delta_k > 0\) 内求解如下凸优化子问题:
\[\begin{aligned} \min_{d \in \mathbb{R}^n} &\quad q_k(x^k + d) \\ \text{s.t.} &\quad g_i(x^k + d) \le 0, \quad i=1,\dots,m \\ &\quad \|d\| \le \Delta_k \end{aligned} \]
其中:
- 决策变量是位移 \(d = x - x^k\);
- 约束 \(g_i(x^k + d) \le 0\) 是凸的(因 \(g_i\) 是凸函数);
- 信赖域约束 \(\|d\| \le \Delta_k\) 通常取为 2-范数或 ∞-范数,这里假设为 2-范数。
注意:子问题是凸的(目标为凸二次,约束为凸集交集),可用内点法、投影梯度法等有效求解。
第四步:计算试探步与反射步
- 求解子问题得到试探步 \(d_k^t\),并计算试探点 \(x^+ = x^k + d_k^t\)。
- 计算实际下降量与预测下降量的比值:
\[ \rho_k = \frac{f(x^k) - f(x^+)}{q_k(x^k) - q_k(x^+)} \]
这个比值衡量近似模型的准确程度。
3. 如果 \(\rho_k\) 较大(例如 \(\rho_k \ge \eta_1 > 0\)),说明近似较好,接受试探点 \(x^{k+1} = x^+\),并可能扩大信赖域半径。
4. 如果 \(\rho_k\) 很小(例如 \(\rho_k < \eta_1\)),说明近似较差,拒绝试探点。此时,尝试反射步:
- 计算反射方向 \(d_k^r = -\alpha \, d_k^t\),其中 \(0 < \alpha < 1\) 为反射系数(例如 \(\alpha=0.5\))。
- 在满足约束和信赖域限制下,沿反射方向寻找一个新点 \(x^r = x^k + d_k^r\)。
- 如果 \(f(x^r) < f(x^k)\),则接受反射点 \(x^{k+1} = x^r\);否则保持当前点 \(x^{k+1} = x^k\) 并缩小信赖域半径。
反射步的引入旨在利用坏方向的反方向可能带来下降的性质,避免算法停滞。
第五步:更新信赖域半径
信赖域半径 \(\Delta_k\) 根据比值 \(\rho_k\) 更新:
- 若 \(\rho_k \ge \eta_2\)(例如 \(\eta_2=0.9\)),表明模型很准确,可扩大半径:\(\Delta_{k+1} = \min(\gamma_1 \Delta_k, \Delta_{\max})\)。
- 若 \(\eta_1 \le \rho_k < \eta_2\)(例如 \(\eta_1=0.1\)),保持半径:\(\Delta_{k+1} = \Delta_k\)。
- 若 \(\rho_k < \eta_1\),缩小半径:\(\Delta_{k+1} = \gamma_2 \Delta_k\),其中 \(0 < \gamma_2 < 1 < \gamma_1\)。
第六步:算法流程总结
- 初始化:给定初始点 \(x^0 \in S\),信赖域半径 \(\Delta_0 > 0\),参数 \(0 < \eta_1 < \eta_2 < 1\),\(0 < \gamma_2 < 1 < \gamma_1\),反射系数 \(\alpha \in (0,1)\)。设 \(k=0\)。
- 循环直到收敛:
a. 构造凸近似模型 \(q_k(x)\)。
b. 求解信赖域子问题得到试探步 \(d_k^t\)。
c. 计算比值 \(\rho_k\)。
d. 若 \(\rho_k \ge \eta_1\),接受试探点,更新 \(x^{k+1} = x^k + d_k^t\)。
e. 否则,尝试反射步:- 计算反射方向 \(d_k^r = -\alpha d_k^t\)。
- 若 \(x^k + d_k^r\) 满足约束且 \(f(x^k + d_k^r) < f(x^k)\),则 \(x^{k+1} = x^k + d_k^r\);否则 \(x^{k+1} = x^k\)。
f. 根据 \(\rho_k\) 更新信赖域半径 \(\Delta_{k+1}\)。
g. 更新 \(B_k\)(若使用拟牛顿法)并令 \(k \leftarrow k+1\)。
第七步:收敛性分析要点
- 由于约束是凸的,子问题始终可行,且迭代点始终满足约束。
- 反射步仅在试探步被拒绝时使用,它提供了额外的下降机会,但不会破坏收敛性。
- 在适当条件下(如 \(B_k\) 一致正定有界,\(f\) 连续可微且有下界),算法生成的序列 \(\{x^k\}\) 的任一极限点都是原问题的稳定点(即满足 KKT 条件)。
- 反射步的引入可以改善收敛速度,尤其在非凸目标函数具有“峡谷”形态时。
关键点提醒
- 凸近似的构建是算法的核心,要确保 \(q_k(x)\) 是凸的且在 \(x^k\) 附近足够接近 \(f(x)\)。
- 信赖域控制步长,保证全局收敛性。
- 反射步是一种加速技巧,当试探步失败时尝试相反方向,但需小心控制步长以免破坏收敛性。
- 该混合算法特别适合目标函数非凸但约束为凸的问题,因为它保持了可行性并利用了凸优化的高效子求解器。
通过以上步骤,你可以逐步实现并理解该混合算法的工作机制。如果需要,我可以进一步给出一个简单数值例子来说明具体迭代细节。