非线性规划中的内点反射梯度-序列凸近似-自适应屏障混合算法基础题
题目描述:
考虑非线性规划问题:
\[\min f(x) = (x_1 - 2)^4 + (x_2 - 3)^4 \]
\[\text{s.t. } g_1(x) = x_1^2 + x_2^2 - 5 \le 0 \]
\[g_2(x) = -x_1 - x_2 + 1 \le 0 \]
\[x \in \mathbb{R}^2 \]
这是一个带有非线性不等式约束的非凸优化问题。我们将使用一种混合算法,该算法结合了内点反射梯度法、序列凸近似和自适应屏障函数。内点反射梯度法用于在可行域内搜索,序列凸近似用于处理非凸约束,自适应屏障函数用于控制迭代点远离约束边界。初始点取 \(x^{(0)} = (1.5, 1.5)\),该点满足 \(g_1(x^{(0)}) = 4.5 - 5 = -0.5 < 0\),\(g_2(x^{(0)}) = -3 + 1 = -2 < 0\),为严格内点。目标是最小化目标函数 \(f(x)\)。
解题过程:
-
问题分析与算法框架概览
目标函数 \(f(x)\) 是关于 \(x_1, x_2\) 的四次多项式,非凸但光滑。约束 \(g_1(x)\) 是凸的(圆盘),\(g_2(x)\) 是线性的。整体问题是可微的非凸规划。混合算法的基本思想如下:- 在每个迭代点 \(x^{(k)}\),对非凸目标函数 \(f(x)\) 和约束 \(g_1(x)\) 在 \(x^{(k)}\) 处进行凸近似(例如一阶泰勒展开),得到一个凸子问题。
- 使用内点反射梯度法求解这个凸子问题,该方法在可行域内部进行梯度投影,确保迭代点始终严格可行。
- 采用自适应屏障函数(如对数屏障)将约束纳入目标,并通过自适应参数调整屏障权重,平衡最优性和可行性。
- 重复直到收敛。
-
构建序列凸近似子问题
在第 \(k\) 次迭代,当前点为 \(x^{(k)}\)。对 \(f(x)\) 和 \(g_1(x)\) 在 \(x^{(k)}\) 处作一阶泰勒展开(线性化):
\[ \tilde{f}^{(k)}(x) = f(x^{(k)}) + \nabla f(x^{(k)})^T (x - x^{(k)}) \]
\[ \tilde{g}_1^{(k)}(x) = g_1(x^{(k)}) + \nabla g_1(x^{(k)})^T (x - x^{(k)}) \]
其中梯度计算为:
\[ \nabla f(x) = \begin{bmatrix} 4(x_1 - 2)^3 \\ 4(x_2 - 3)^3 \end{bmatrix}, \quad \nabla g_1(x) = \begin{bmatrix} 2x_1 \\ 2x_2 \end{bmatrix} \]
由于 \(g_2(x)\) 已经是线性的,无需近似。于是得到凸子问题(线性目标,线性约束):
\[ \min_x \tilde{f}^{(k)}(x) \]
\[ \text{s.t. } \tilde{g}_1^{(k)}(x) \le 0, \quad g_2(x) \le 0 \]
注意:子问题是凸的(线性规划),可行域是凸多面体。
- 内点反射梯度法求解子问题
内点反射梯度法旨在在严格可行内点迭代求解子问题。我们引入自适应对数屏障函数将约束整合到目标中。对于子问题,定义屏障函数:
\[ B^{(k)}(x; \mu) = \tilde{f}^{(k)}(x) - \mu \left[ \ln(-\tilde{g}_1^{(k)}(x)) + \ln(-g_2(x)) \right] \]
其中 \(\mu > 0\) 是屏障参数。初始屏障参数 \(\mu^{(0)} = 1\),初始点 \(x^{(0)}\) 是严格内点,满足 \(\tilde{g}_1^{(k)}(x^{(0)}) < 0\) 和 \(g_2(x^{(0)}) < 0\)。
接下来执行内点反射梯度步骤:
a. 计算屏障函数的梯度:
\[ \nabla B^{(k)}(x; \mu) = \nabla \tilde{f}^{(k)}(x) - \mu \left[ \frac{1}{\tilde{g}_1^{(k)}(x)} \nabla \tilde{g}_1^{(k)}(x) + \frac{1}{g_2(x)} \nabla g_2(x) \right] \]
其中 \(\nabla \tilde{f}^{(k)}(x) = \nabla f(x^{(k)})\)(常数向量),\(\nabla \tilde{g}_1^{(k)}(x) = \nabla g_1(x^{(k)})\)(常数向量),\(\nabla g_2(x) = (-1, -1)^T\)。
b. 进行梯度下降步:\(x_{\text{new}} = x - \alpha \nabla B^{(k)}(x; \mu)\),其中步长 \(\alpha > 0\) 通过线搜索(如Armijo规则)确定,确保新点仍严格可行。
c. 如果新点靠近边界(例如某个约束值大于 \(-\epsilon\)),则进行反射操作:将点沿约束边界的法向反射回可行域内部。具体来说,如果 \(\tilde{g}_1^{(k)}(x_{\text{new}}) \ge -\delta\)(\(\delta\) 是小正数),则计算反射步 \(x_{\text{new}} = x_{\text{new}} - 2 \tilde{g}_1^{(k)}(x_{\text{new}}) \frac{\nabla \tilde{g}_1^{(k)}(x_{\text{new}})}{\|\nabla \tilde{g}_1^{(k)}(x_{\text{new}})\|^2}\),类似处理 \(g_2\)。
d. 重复 b 和 c 直到子问题收敛(梯度足够小或迭代次数达到上限)。
-
自适应屏障参数更新
在每次外层迭代(序列凸近似)结束后,更新屏障参数 \(\mu\) 以逐步收紧屏障,使解趋近原问题的最优解。常用更新规则:\(\mu^{(k+1)} = \gamma \mu^{(k)}\),其中 \(\gamma \in (0,1)\),例如 \(\gamma = 0.5\)。随着 \(\mu\) 减小,屏障函数越来越接近原始目标,但保持内点性质。 -
序列凸近似外层迭代
用内点反射梯度法求解当前凸子问题后,得到新迭代点 \(x^{(k+1)}\)。然后基于 \(x^{(k+1)}\) 重新线性化目标函数和约束,构建新的凸子问题,重复步骤2-4。收敛条件可以是连续两次迭代点变化很小,例如 \(\|x^{(k+1)} - x^{(k)}\| < 10^{-6}\),或者目标函数值变化很小。 -
示例计算(第一次迭代)
初始点 \(x^{(0)} = (1.5, 1.5)\)。- 计算梯度:
\[ \nabla f(x^{(0)}) = [4(1.5-2)^3, 4(1.5-3)^3] = [4 \times (-0.125), 4 \times (-3.375)] = [-0.5, -13.5] \]
\[ \nabla g_1(x^{(0)}) = [3, 3] \]
当前约束值:\(g_1(x^{(0)}) = 4.5 - 5 = -0.5\),\(g_2(x^{(0)}) = -3 + 1 = -2\)。
- 构建凸子问题:
\[ \min_x \tilde{f}^{(0)}(x) = f(x^{(0)}) + [-0.5, -13.5]^T (x - x^{(0)}) \]
\[ \text{s.t. } \tilde{g}_1^{(0)}(x) = -0.5 + [3, 3]^T (x - x^{(0)}) \le 0, \quad g_2(x) = -x_1 - x_2 + 1 \le 0 \]
为简化,由于 \(f(x^{(0)})\) 是常数,可忽略,子问题等价于最小化线性目标 \([-0.5, -13.5]^T x\)。
- 设置初始屏障参数 \(\mu = 1\),执行内点反射梯度法。首先计算屏障函数梯度在 \(x^{(0)}\) 处的值:
\[ \nabla B^{(0)}(x^{(0)}; 1) = [-0.5, -13.5] - 1 \left[ \frac{1}{-0.5} [3, 3] + \frac{1}{-2} [-1, -1] \right] = [-0.5, -13.5] - [-6 - 0.5, -6 - 0.5] = [5, -7] \]
这里计算了每一项:\(\frac{1}{\tilde{g}_1^{(0)}} = 1/(-0.5) = -2\),乘以 \(\nabla \tilde{g}_1^{(0)} = [3,3]\) 得 \([-6, -6]\);\(\frac{1}{g_2} = 1/(-2) = -0.5\),乘以 \(\nabla g_2 = [-1, -1]\) 得 \([0.5, 0.5]\);求和为 \([-5.5, -5.5]\),减去后得梯度 \([5, -7]\)。
- 沿负梯度方向搜索,步长 \(\alpha\) 需通过线搜索确保新点满足约束严格小于0。经过几步内点迭代后,假设收敛到子问题的最优内点解,例如 \(x^{(1)} = (1.8, 1.8)\)(此值为示例,实际需严格求解)。
- 更新屏障参数:\(\mu^{(1)} = 0.5 \times 1 = 0.5\)。
然后以 \(x^{(1)}\) 为新点,重新线性化,继续下一次序列凸近似迭代。
- 收敛性与总结
该混合算法结合了序列凸近似(处理非凸)、内点法(保持可行性)和反射梯度(处理边界接近)。在适当条件下,序列凸近似生成的序列会收敛到原问题的一个稳定点(满足 KKT 条件)。内点反射确保了迭代点始终严格可行,自适应屏障参数控制逼近精度。最终,算法能有效求解该非凸约束问题。