序列内点反射信赖域混合算法基础题
题目描述
考虑一个非线性规划问题:
\[\begin{aligned} \min_{x \in \mathbb{R}^n} \quad & f(x) \\ \text{s.t.} \quad & c_i(x) = 0, \quad i \in \mathcal{E}, \\ & c_i(x) \geq 0, \quad i \in \mathcal{I}. \end{aligned} \]
其中,目标函数 \(f: \mathbb{R}^n \to \mathbb{R}\) 和约束函数 \(c_i: \mathbb{R}^n \to \mathbb{R}\) 是二次连续可微的。内点反射信赖域混合算法结合了内点法、信赖域法和反射技术,用于处理带不等式约束的非线性优化问题。本题目要求你阐述该算法的基本框架和关键步骤,并应用于以下具体例子:
\[\begin{aligned} \min_{x_1, x_2} \quad & f(x) = (x_1 - 1)^2 + (x_2 - 2)^2 \\ \text{s.t.} \quad & x_1 + x_2 - 2 \geq 0, \\ & x_1 \geq 0, \quad x_2 \geq 0. \end{aligned} \]
从初始点 \(x^{(0)} = (0.5, 0.5)\) 开始,执行一次算法迭代(包括构造子问题、求解信赖域子问题、进行反射步骤以及更新内点参数和信赖域半径)。要求展示详细计算过程,包括梯度、Hessian矩阵、障碍函数、子问题构造、信赖域求解、反射条件和参数更新规则。
解题过程循序渐进讲解
第一步:算法基本思想理解
内点反射信赖域混合算法的核心思想是:
- 内点法处理不等式约束:通过引入障碍函数(如对数障碍函数)将不等式约束融入目标函数,形成一个无约束或仅含等式约束的子问题,并确保迭代点始终位于可行域内部(即严格满足不等式约束)。
- 信赖域法控制步长:在每一步迭代,在当前点附近用一个简化模型(通常是二次模型)近似原问题,并限制步长在一个信赖域内,以保证模型的可靠性。
- 反射技术加速收敛:当试探步长导致点接近或违反边界时,不直接拒绝,而是尝试将其“反射”回可行域内部,可能获得更大的可行步长,从而提高收敛速度。
这个混合策略旨在结合内点法的可行性保持、信赖域法的全局收敛性以及反射技术的边界处理效率。
第二步:构造障碍函数和拉格朗日函数
对于不等式约束 \(c_i(x) \geq 0\),引入对数障碍函数。原问题转化为一系列障碍子问题:
\[\min_{x} \quad \phi_\mu(x) = f(x) - \mu \sum_{i \in \mathcal{I}} \ln(c_i(x)), \]
其中 \(\mu > 0\) 是障碍参数,随着迭代逐渐减小趋于0。等式约束可以通过拉格朗日乘子处理。定义增广拉格朗日函数:
\[\mathcal{L}(x, \lambda) = \phi_\mu(x) + \sum_{i \in \mathcal{E}} \lambda_i c_i(x), \]
其中 \(\lambda_i\) 是对应等式约束的拉格朗日乘子。在我们的例子中,没有等式约束(\(\mathcal{E} = \emptyset\)),只有一个不等式约束 \(c_1(x) = x_1 + x_2 - 2 \geq 0\) 和两个边界约束 \(x_1 \geq 0, x_2 \geq 0\)。通常,边界约束可以直接纳入障碍项。因此,障碍函数为:
\[\phi_\mu(x) = (x_1 - 1)^2 + (x_2 - 2)^2 - \mu \left[ \ln(x_1 + x_2 - 2) + \ln(x_1) + \ln(x_2) \right]. \]
注意:初始点 \(x^{(0)} = (0.5, 0.5)\) 需严格满足 \(x_1>0, x_2>0, x_1+x_2-2>0\)(即 \(0.5+0.5-2=-1<0\))。实际上,这个点不满足约束 \(x_1+x_2-2 \geq 0\)。内点法要求严格内点,所以我们需要调整初始点。为了使算法可行,我们调整初始点为 \(x^{(0)} = (1.5, 1.0)\),此时 \(x_1=1.5>0, x_2=1.0>0, x_1+x_2-2=0.5>0\),是严格内点。这是内点法的常见要求。
第三步:计算当前点的梯度和Hessian矩阵
在点 \(x^{(0)} = (1.5, 1.0)\),设定初始障碍参数 \(\mu = 0.1\)。
首先计算目标函数梯度:
\[\nabla f(x) = \begin{bmatrix} 2(x_1 - 1) \\ 2(x_2 - 2) \end{bmatrix} = \begin{bmatrix} 2(1.5-1) \\ 2(1.0-2) \end{bmatrix} = \begin{bmatrix} 1 \\ -2 \end{bmatrix}. \]
障碍项部分:记 \(g_1(x) = x_1 + x_2 - 2\), \(g_2(x) = x_1\), \(g_3(x) = x_2\)。
\[\nabla (-\ln(g_1)) = -\frac{1}{g_1} \nabla g_1 = -\frac{1}{x_1+x_2-2} \begin{bmatrix} 1 \\ 1 \end{bmatrix} = -\frac{1}{0.5} \begin{bmatrix} 1 \\ 1 \end{bmatrix} = \begin{bmatrix} -2 \\ -2 \end{bmatrix}. \]
\[ \nabla (-\ln(g_2)) = -\frac{1}{x_1} \begin{bmatrix} 1 \\ 0 \end{bmatrix} = -\frac{1}{1.5} \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} -2/3 \\ 0 \end{bmatrix} \approx \begin{bmatrix} -0.6667 \\ 0 \end{bmatrix}. \]
\[ \nabla (-\ln(g_3)) = -\frac{1}{x_2} \begin{bmatrix} 0 \\ 1 \end{bmatrix} = -\frac{1}{1.0} \begin{bmatrix} 0 \\ 1 \end{bmatrix} = \begin{bmatrix} 0 \\ -1 \end{bmatrix}. \]
因此,障碍函数梯度:
\[\nabla \phi_\mu = \nabla f - \mu \left( \sum_{i=1}^3 \nabla (-\ln(g_i)) \right) = \begin{bmatrix} 1 \\ -2 \end{bmatrix} - 0.1 \left( \begin{bmatrix} -2 \\ -2 \end{bmatrix} + \begin{bmatrix} -2/3 \\ 0 \end{bmatrix} + \begin{bmatrix} 0 \\ -1 \end{bmatrix} \right) = \begin{bmatrix} 1 \\ -2 \end{bmatrix} - 0.1 \begin{bmatrix} -8/3 \\ -3 \end{bmatrix}. \]
计算:
\[-0.1 \times (-8/3) = 0.8/3 \approx 0.2667, \quad -0.1 \times (-3) = 0.3. \]
所以,
\[\nabla \phi_\mu(x^{(0)}) \approx \begin{bmatrix} 1 + 0.2667 \\ -2 + 0.3 \end{bmatrix} = \begin{bmatrix} 1.2667 \\ -1.7 \end{bmatrix}. \]
现在计算Hessian矩阵。目标函数Hessian:
\[\nabla^2 f = \begin{bmatrix} 2 & 0 \\ 0 & 2 \end{bmatrix}. \]
障碍项Hessian:对于 \(-\ln(g)\),其Hessian为 \(\frac{1}{g^2} \nabla g (\nabla g)^T\)。
对于 \(g_1\):
\[\nabla^2 (-\ln(g_1)) = \frac{1}{(x_1+x_2-2)^2} \begin{bmatrix} 1 \\ 1 \end{bmatrix} \begin{bmatrix} 1 & 1 \end{bmatrix} = \frac{1}{0.5^2} \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix} = 4 \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix} = \begin{bmatrix} 4 & 4 \\ 4 & 4 \end{bmatrix}. \]
对于 \(g_2\):
\[\nabla^2 (-\ln(g_2)) = \frac{1}{x_1^2} \begin{bmatrix} 1 \\ 0 \end{bmatrix} \begin{bmatrix} 1 & 0 \end{bmatrix} = \frac{1}{1.5^2} \begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix} \approx 0.4444 \begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix} = \begin{bmatrix} 0.4444 & 0 \\ 0 & 0 \end{bmatrix}. \]
对于 \(g_3\):
\[\nabla^2 (-\ln(g_3)) = \frac{1}{x_2^2} \begin{bmatrix} 0 \\ 1 \end{bmatrix} \begin{bmatrix} 0 & 1 \end{bmatrix} = \frac{1}{1.0^2} \begin{bmatrix} 0 & 0 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & 0 \\ 0 & 1 \end{bmatrix}. \]
因此,
\[\nabla^2 \phi_\mu = \nabla^2 f - \mu \left( \nabla^2 (-\ln(g_1)) + \nabla^2 (-\ln(g_2)) + \nabla^2 (-\ln(g_3)) \right) = \begin{bmatrix} 2 & 0 \\ 0 & 2 \end{bmatrix} - 0.1 \left( \begin{bmatrix} 4 & 4 \\ 4 & 4 \end{bmatrix} + \begin{bmatrix} 0.4444 & 0 \\ 0 & 0 \end{bmatrix} + \begin{bmatrix} 0 & 0 \\ 0 & 1 \end{bmatrix} \right). \]
计算内部和:
\[\begin{bmatrix} 4 & 4 \\ 4 & 4 \end{bmatrix} + \begin{bmatrix} 0.4444 & 0 \\ 0 & 0 \end{bmatrix} + \begin{bmatrix} 0 & 0 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 4.4444 & 4 \\ 4 & 5 \end{bmatrix}. \]
乘以 \(\mu = 0.1\):
\[0.1 \times \begin{bmatrix} 4.4444 & 4 \\ 4 & 5 \end{bmatrix} = \begin{bmatrix} 0.44444 & 0.4 \\ 0.4 & 0.5 \end{bmatrix}. \]
所以,
\[\nabla^2 \phi_\mu(x^{(0)}) \approx \begin{bmatrix} 2 - 0.44444 & 0 - 0.4 \\ 0 - 0.4 & 2 - 0.5 \end{bmatrix} = \begin{bmatrix} 1.55556 & -0.4 \\ -0.4 & 1.5 \end{bmatrix}. \]
第四步:构造信赖域子问题
在点 \(x^{(0)}\),我们用二次模型近似障碍函数 \(\phi_\mu\):
\[m(s) = \phi_\mu(x^{(0)}) + \nabla \phi_\mu(x^{(0)})^T s + \frac{1}{2} s^T \nabla^2 \phi_\mu(x^{(0)}) s, \]
其中 \(s = x - x^{(0)}\) 是步长。信赖域子问题为:
\[\min_{s \in \mathbb{R}^n} m(s) \quad \text{s.t.} \quad \| s \| \leq \Delta, \]
这里 \(\Delta > 0\) 是信赖域半径。我们初始设定 \(\Delta^{(0)} = 0.5\)。约束 \(\| s \|\) 通常取2-范数。
代入数值:
\[m(s) = \phi_\mu(x^{(0)}) + [1.2667, -1.7] \begin{bmatrix} s_1 \\ s_2 \end{bmatrix} + \frac{1}{2} [s_1, s_2] \begin{bmatrix} 1.55556 & -0.4 \\ -0.4 & 1.5 \end{bmatrix} \begin{bmatrix} s_1 \\ s_2 \end{bmatrix}. \]
常数项 \(\phi_\mu(x^{(0)})\) 在极小化中可忽略,所以模型简化为:
\[m(s) = 1.2667 s_1 - 1.7 s_2 + 0.5 (1.55556 s_1^2 - 0.8 s_1 s_2 + 1.5 s_2^2). \]
整理:
\[m(s) = 1.2667 s_1 - 1.7 s_2 + 0.77778 s_1^2 - 0.4 s_1 s_2 + 0.75 s_2^2. \]
第五步:求解信赖域子问题
这是一个带球形约束的二次优化问题。常用求解方法是计算无约束稳定点,然后投影到信赖域内。无约束稳定点满足 \(\nabla m(s) = 0\):
\[\frac{\partial m}{\partial s_1} = 1.2667 + 1.55556 s_1 - 0.4 s_2 = 0, \\ \frac{\partial m}{\partial s_2} = -1.7 - 0.4 s_1 + 1.5 s_2 = 0. \]
写成矩阵形式:
\[\begin{bmatrix} 1.55556 & -0.4 \\ -0.4 & 1.5 \end{bmatrix} \begin{bmatrix} s_1 \\ s_2 \end{bmatrix} = \begin{bmatrix} -1.2667 \\ 1.7 \end{bmatrix}. \]
解这个线性方程组。计算行列式:
\[\text{det} = 1.55556 \times 1.5 - (-0.4) \times (-0.4) = 2.33334 - 0.16 = 2.17334. \]
逆矩阵:
\[\begin{bmatrix} 1.55556 & -0.4 \\ -0.4 & 1.5 \end{bmatrix}^{-1} = \frac{1}{2.17334} \begin{bmatrix} 1.5 & 0.4 \\ 0.4 & 1.55556 \end{bmatrix} \approx \begin{bmatrix} 0.6900 & 0.1840 \\ 0.1840 & 0.7156 \end{bmatrix}. \]
所以,
\[\begin{bmatrix} s_1 \\ s_2 \end{bmatrix} = \begin{bmatrix} 0.6900 & 0.1840 \\ 0.1840 & 0.7156 \end{bmatrix} \begin{bmatrix} -1.2667 \\ 1.7 \end{bmatrix}. \]
计算:
\[s_1 = 0.6900 \times (-1.2667) + 0.1840 \times 1.7 = -0.8740 + 0.3128 = -0.5612, \\ s_2 = 0.1840 \times (-1.2667) + 0.7156 \times 1.7 = -0.2331 + 1.2165 = 0.9834. \]
无约束步长 \(s^{\text{unc}} = (-0.5612, 0.9834)^T\),其范数:
\[\| s^{\text{unc}} \| = \sqrt{(-0.5612)^2 + 0.9834^2} = \sqrt{0.3149 + 0.9671} = \sqrt{1.282} \approx 1.132. \]
因为 \(1.132 > \Delta = 0.5\),所以无约束步长在信赖域外。我们需要找到约束边界 \(\| s \| = 0.5\) 上的解。这通常通过求解 \((\nabla^2 \phi_\mu + \lambda I) s = -\nabla \phi_\mu\) 并选择 \(\lambda \geq 0\) 使得 \(\| s \| = \Delta\)。由于计算复杂,这里我们采用简化:将无约束步长按比例缩放至信赖域边界:
\[s^{\text{tr}} = \frac{\Delta}{\| s^{\text{unc}} \|} s^{\text{unc}} = \frac{0.5}{1.132} \begin{bmatrix} -0.5612 \\ 0.9834 \end{bmatrix} \approx \begin{bmatrix} -0.2478 \\ 0.4342 \end{bmatrix}. \]
所以,信赖域步长为 \(s^{\text{tr}} \approx (-0.2478, 0.4342)^T\)。
第六步:反射步骤
计算试探点 \(x^{\text{trial}} = x^{(0)} + s^{\text{tr}} = (1.5 - 0.2478, 1.0 + 0.4342) = (1.2522, 1.4342)\)。检查约束违反情况:
- \(g_1 = x_1 + x_2 - 2 = 1.2522 + 1.4342 - 2 = 0.6864 > 0\),满足。
- \(x_1 = 1.2522 > 0\),满足。
- \(x_2 = 1.4342 > 0\),满足。
所以 \(x^{\text{trial}}\) 是严格内点,无需反射。如果 \(x^{\text{trial}}\) 接近或违反某个边界(比如 \(x_1\) 接近0),则可以进行反射操作:假设 \(x^{\text{trial}}\) 使得某个 \(g_i(x) \leq \epsilon\)(一个小正数),则将其沿边界法向反射回内部。这里我们不需要反射。
第七步:计算实际下降与预测下降,更新信赖域半径
计算实际下降:
\[\text{ared} = \phi_\mu(x^{(0)}) - \phi_\mu(x^{\text{trial}}). \]
首先计算 \(\phi_\mu(x^{(0)})\):
\[\phi_\mu(x^{(0)}) = f(x^{(0)}) - \mu [\ln(g_1) + \ln(g_2) + \ln(g_3)] = (1.5-1)^2 + (1.0-2)^2 - 0.1 [\ln(0.5) + \ln(1.5) + \ln(1.0)]. \]
\(f = 0.25 + 1 = 1.25\)。\(\ln(0.5) = -0.6931, \ln(1.5)=0.4055, \ln(1)=0\)。和 = -0.2876。所以 \(\phi_\mu(x^{(0)}) = 1.25 - 0.1 \times (-0.2876) = 1.25 + 0.02876 = 1.27876\)。
现在计算 \(\phi_\mu(x^{\text{trial}})\):
\[f(x^{\text{trial}}) = (1.2522-1)^2 + (1.4342-2)^2 = (0.2522)^2 + (-0.5658)^2 = 0.0636 + 0.3201 = 0.3837. \]
\(g_1 = 0.6864, g_2=1.2522, g_3=1.4342\)。
\(\ln(g_1) = \ln(0.6864) = -0.376, \ln(g_2)=0.225, \ln(g_3)=0.360\)。
和 = 0.209。所以 \(\phi_\mu(x^{\text{trial}}) = 0.3837 - 0.1 \times 0.209 = 0.3837 - 0.0209 = 0.3628\)。
因此,\(\text{ared} = 1.27876 - 0.3628 = 0.9160\)。
预测下降(模型下降):
\[\text{pred} = m(0) - m(s^{\text{tr}}) = 0 - m(s^{\text{tr}}). \]
计算 \(m(s^{\text{tr}})\):
\[m(s^{\text{tr}}) = 1.2667 \times (-0.2478) - 1.7 \times 0.4342 + 0.77778 \times (-0.2478)^2 - 0.4 \times (-0.2478) \times 0.4342 + 0.75 \times 0.4342^2. \]
逐项计算:
- 线性项:\(1.2667 \times (-0.2478) = -0.3139\), \(-1.7 \times 0.4342 = -0.7381\),和为 -1.0520。
- 二次项:\(0.77778 \times 0.0614 = 0.0478\), \(-0.4 \times (-0.1076) = 0.0430\)(注意 \(-0.2478 \times 0.4342 = -0.1076\)),\(0.75 \times 0.1885 = 0.1414\)。
二次项和 = 0.0478 + 0.0430 + 0.1414 = 0.2322。
所以 \(m(s^{\text{tr}}) = -1.0520 + 0.2322 = -0.8198\)。
因此,\(\text{pred} = 0 - (-0.8198) = 0.8198\)。
比值 \(\rho = \frac{\text{ared}}{\text{pred}} = \frac{0.9160}{0.8198} \approx 1.117\)。
由于 \(\rho > 0.75\)(通常阈值),表明模型拟合良好,接受该步:\(x^{(1)} = x^{\text{trial}} = (1.2522, 1.4342)\)。同时,由于 \(\rho > 0.75\) 且 \(\| s^{\text{tr}} \| = \Delta = 0.5\),可以扩大信赖域半径,比如 \(\Delta^{(1)} = 2 \Delta^{(0)} = 1.0\)。如果 \(\rho\) 很小(如<0.25),则缩小信赖域。
第八步:更新障碍参数
通常,障碍参数按照规则 \(\mu_{k+1} = \sigma \mu_k\) 更新,其中 \(\sigma \in (0,1)\),比如 \(\sigma = 0.1\)。所以 \(\mu^{(1)} = 0.1 \times 0.1 = 0.01\)。
第九步:迭代与收敛
至此,我们完成了一次迭代。算法会重复步骤3-8,直到满足收敛条件(如梯度足够小、步长足够小、障碍参数足够小等)。最终点会趋近于原问题的最优解。对于本例,最优解在 \((1,2)\),但需满足约束 \(x_1+x_2-2 \geq 0\),实际最优点在边界 \(x_1+x_2=2\) 上,通过障碍法逼近。
总结:内点反射信赖域混合算法通过障碍函数处理不等式约束,信赖域控制步长可靠性,反射处理边界接近情况。本次迭代从严格内点出发,构建二次模型,求解信赖域子问题,得到可行点,更新参数,为后续迭代打下基础。