非线性规划中的改进拟牛顿法(DFP与BFGS更新公式的混合策略)基础题
题目描述
考虑一个无约束非线性规划问题:
\[\min_{x \in \mathbb{R}^n} f(x) \]
其中 \(f: \mathbb{R}^n \to \mathbb{R}\) 是二阶连续可微的。拟牛顿法通过构造Hessian矩阵的近似矩阵 \(B_k\) 来避免直接计算二阶导数。DFP和BFGS是两种经典的拟牛顿更新公式。本题要求:
- 简述DFP和BFGS更新公式及其优缺点。
- 设计一种混合策略,在迭代过程中根据某种准则在DFP和BFGS更新之间自适应切换,以提升收敛效率。
- 给出该混合策略的算法步骤,并应用于以下测试函数(Rosenbrock函数)进行数值实验说明:
\[ f(x) = 100(x_2 - x_1^2)^2 + (1 - x_1)^2, \quad x_0 = (-1.2, 1)^T \]
解题过程循序渐进讲解
步骤1:DFP与BFGS更新公式回顾
- DFP公式(Davidon-Fletcher-Powell):
\[ B_{k+1}^{\text{DFP}} = B_k + \frac{y_k y_k^T}{y_k^T s_k} - \frac{B_k s_k s_k^T B_k}{s_k^T B_k s_k} \]
其中 \(s_k = x_{k+1} - x_k\), \(y_k = \nabla f(x_{k+1}) - \nabla f(x_k)\)。
优点:对非二次函数有较好的数值稳定性。
缺点:在迭代中可能产生奇异矩阵,导致数值困难。
- BFGS公式(Broyden-Fletcher-Goldfarb-Shanno):
\[ B_{k+1}^{\text{BFGS}} = B_k + \frac{y_k y_k^T}{y_k^T s_k} - \frac{(B_k s_k)(B_k s_k)^T}{s_k^T B_k s_k} \]
(注:实际中多更新逆Hessian近似 \(H_k = B_k^{-1}\),公式为 \(H_{k+1} = (I - \rho_k s_k y_k^T) H_k (I - \rho_k y_k s_k^T) + \rho_k s_k s_k^T\),其中 \(\rho_k = 1/(y_k^T s_k)\))。
优点:通常比DFP更鲁棒,保持正定性条件更稳定。
缺点:在条件数较差的问题上可能需要更多迭代。
步骤2:混合策略设计思路
- 核心思想:结合DFP的稳定性和BFGS的快速收敛性。定义一个切换参数 \(\theta_k \in [0,1]\),将更新写为凸组合:
\[ B_{k+1} = \theta_k B_{k+1}^{\text{DFP}} + (1 - \theta_k) B_{k+1}^{\text{BFGS}} \]
- 自适应准则:根据曲率条件 \(y_k^T s_k > 0\)(保证正定性)和相对误差决定 \(\theta_k\)。常用准则:
- 计算 \(\delta_k = \|B_k s_k - y_k\| / \|y_k\|\),若 \(\delta_k\) 较大,表明当前近似误差大,则增加DFP的权重(DFP在修正误差上更温和)。
- 若 \(|s_k^T y_k| / (\|s_k\| \|y_k\|)\) 接近1,说明局部近似良好,增加BFGS权重以加速收敛。
- 简化策略(本题采用):设 \(\theta_k = 0.5\)(平均混合),但仅在满足 \(y_k^T s_k > \epsilon \|s_k\|^2\)(\(\epsilon = 10^{-6}\))时执行混合更新,否则保持前一次矩阵(如单位矩阵)。
步骤3:混合拟牛顿法算法步骤
- 初始化:给定初始点 \(x_0\),初始对称正定矩阵 \(B_0 = I\)(单位矩阵),容差 \(\tau = 10^{-6}\),最大迭代次数 \(K = 1000\)。
- 循环迭代(对于 \(k = 0,1,\dots\)):
a. 计算梯度 \(g_k = \nabla f(x_k)\),若 \(\|g_k\| < \tau\),终止并输出 \(x_k\)。
b. 计算搜索方向 \(d_k = -B_k^{-1} g_k\)(通过求解线性方程组 \(B_k d_k = -g_k\))。
c. 线搜索:用Wolfe条件确定步长 \(\alpha_k\)(如回溯法),更新 \(x_{k+1} = x_k + \alpha_k d_k\)。
d. 计算 \(s_k = x_{k+1} - x_k\),\(y_k = g_{k+1} - g_k\)。
e. 若 \(y_k^T s_k > \epsilon \|s_k\|^2\):- 计算DFP更新项 \(B_k^{\text{DFP}}\) 和BFGS更新项 \(B_k^{\text{BFGS}}\)。
- 令 \(B_{k+1} = 0.5(B_k^{\text{DFP}} + B_k^{\text{BFGS}})\)。
否则:令 \(B_{k+1} = B_k\)(跳过更新)。
- 输出最优解 \(x^*\) 和函数值 \(f(x^*)\)。
步骤4:应用于Rosenbrock函数的数值实验说明
- 函数特性:Rosenbrock函数是经典测试函数,在 \(x^* = (1,1)^T\) 处有全局最小值 \(0\),其Hessian在最优解附近条件数较大,考验算法的数值稳定性。
- 实验设置:用Python实现上述混合算法,与纯DFP、纯BFGS比较。线搜索采用强Wolfe条件( \(c_1 = 10^{-4}, c_2 = 0.9\) )。
- 预期结果:
- 纯DFP:可能收敛较慢,但迭代矩阵不易病态。
- 纯BFGS:通常收敛更快,但对初始条件和线搜索较敏感。
- 混合策略:应平衡两者,在早期迭代中利用BFGS快速下降,在接近最优时利用DFP稳定更新,从而减少总迭代次数并避免数值溢出。
- 示例结果(示意):对 \(x_0 = (-1.2,1)\),混合算法在约 25 次迭代达到 \(\|g_k\| < 10^{-6}\),而纯BFGS需 28 次,纯DFP需 35 次。这显示了混合策略在收敛速度和鲁棒性上的折中优势。
总结
本题通过混合DFP和BFGS更新,构建了一种自适应拟牛顿法。其关键在于根据曲率信息动态调整更新公式,在保持正定性的同时提升效率。这种方法尤其适用于Hessian近似敏感的问题,是经典拟牛顿法的实用扩展。