非线性规划中的自适应共轭梯度法(Adaptive Conjugate Gradient Method)基础题
题目描述
考虑一个无约束非线性规划问题:
最小化目标函数 \(f(x) = x_1^2 + 2x_2^2 + \sin(x_1 + x_2)\),其中 \(x = (x_1, x_2) \in \mathbb{R}^2\)。
使用自适应共轭梯度法求解该问题,初始点设为 \(x^{(0)} = (1, 1)\),并允许最大迭代次数为 5 次。要求说明算法步骤,并解释“自适应”在共轭梯度法中的体现。
解题过程循序渐进讲解
1. 问题理解
- 目标:最小化一个光滑非线性函数 \(f(x)\),无约束。
- 方法:自适应共轭梯度法。它是标准共轭梯度法(CG)的改进,通过自适应调整参数(如步长、共轭方向更新规则)来提升在非线性问题中的收敛性。
- 核心思想:在每次迭代中,沿着共轭方向搜索,但需结合线搜索确定步长,并可能根据问题特性调整共轭方向的生成方式。
2. 自适应共轭梯度法步骤概述
标准共轭梯度法用于二次凸函数时,能在有限步内收敛。对于非线性函数,需做调整:
- 选择初始点 \(x^{(0)}\),计算梯度 \(g^{(0)} = \nabla f(x^{(0)})\)。设初始搜索方向 \(d^{(0)} = -g^{(0)}\)。
- 对于每次迭代 \(k = 0, 1, 2, \dots\):
a. 沿方向 \(d^{(k)}\) 执行线搜索(如精确或回溯线搜索),得到步长 \(\alpha_k\)。
b. 更新迭代点:\(x^{(k+1)} = x^{(k)} + \alpha_k d^{(k)}\)。
c. 计算新梯度 \(g^{(k+1)} = \nabla f(x^{(k+1)})\)。
d. 计算自适应参数 \(\beta_k\)(常用公式如 Fletcher-Reeves 或 Polak-Ribière 公式的改进版本)。
e. 更新共轭方向:\(d^{(k+1)} = -g^{(k+1)} + \beta_k d^{(k)}\)。
f. 如果满足停止准则(如梯度范数足够小),则终止。
“自适应”通常体现在 \(\beta_k\) 的计算上,例如在非二次或非凸情形下,采用修正公式(如保证方向下降性),或根据问题曲率信息动态调整。
3. 应用于本题的具体计算
首先计算梯度:
\[\nabla f(x) = \left( 2x_1 + \cos(x_1 + x_2),\ 4x_2 + \cos(x_1 + x_2) \right) \]
初始点 \(x^{(0)} = (1,1)\):
\[g^{(0)} = (2 \cdot 1 + \cos(2),\ 4 \cdot 1 + \cos(2)) = (2 + \cos 2,\ 4 + \cos 2) \approx (2 - 0.4161,\ 4 - 0.4161) = (1.5839,\ 3.5839) \]
初始方向:\(d^{(0)} = -g^{(0)} \approx (-1.5839,\ -3.5839)\)。
4. 第一次迭代(k=0)
- 线搜索:沿 \(d^{(0)}\) 最小化 \(\phi(\alpha) = f(x^{(0)} + \alpha d^{(0)})\)。为简化,这里用回溯线搜索(Armijo条件):设初始尝试步长 \(\alpha=1\),衰减因子 \(\rho=0.5\),收缩系数 \(c=0.1\)。
计算 \(f(x^{(0)}) = 1^2 + 2\cdot1^2 + \sin(2) = 3 + 0.9093 = 3.9093\)。
尝试 \(\alpha=1\):\(x_{\text{try}} = (1 - 1.5839,\ 1 - 3.5839) = (-0.5839,\ -2.5839)\)
\(f(x_{\text{try}}) = (-0.5839)^2 + 2(-2.5839)^2 + \sin(-3.1678) = 0.3409 + 2\cdot6.6775 + 0.0424 = 0.3409 + 13.3550 - 0.0424 = 13.6535\)(注:\(\sin(-3.1678) \approx 0.0424\),实际需精确计算,此处为示例)。
因 \(f(x_{\text{try}}) > f(x^{(0)})\),不满足 Armijo 条件,需缩小 \(\alpha\)。回溯至 \(\alpha=0.5, 0.25, \dots\) 直到满足条件。假设经回溯得 \(\alpha_0 = 0.25\)。 - 更新点:\(x^{(1)} = (1,1) + 0.25(-1.5839,\ -3.5839) = (0.6040,\ 0.1040)\)。
- 新梯度:\(g^{(1)} = (2 \cdot 0.6040 + \cos(0.7080),\ 4 \cdot 0.1040 + \cos(0.7080)) \approx (1.2080 + 0.7594,\ 0.4160 + 0.7594) = (1.9674,\ 1.1754)\)。
- 计算 \(\beta_0\):这里用 Polak-Ribière 公式(常用自适应形式):
\[ \beta_0^{\text{PR}} = \frac{g^{(1)T}(g^{(1)} - g^{(0)})}{g^{(0)T}g^{(0)}} \]
分子:\((1.9674,\ 1.1754) \cdot (1.9674-1.5839,\ 1.1754-3.5839) = 1.9674 \cdot 0.3835 + 1.1754 \cdot (-2.4085) = 0.7546 - 2.8304 = -2.0758\)
分母:\(1.5839^2 + 3.5839^2 = 2.5087 + 12.8443 = 15.3530\)
故 \(\beta_0^{\text{PR}} \approx -0.1352\)。
- 更新方向:\(d^{(1)} = -g^{(1)} + \beta_0 d^{(0)} = (-1.9674,\ -1.1754) + (-0.1352)(-1.5839,\ -3.5839) = (-1.9674 + 0.2142,\ -1.1754 + 0.4846) = (-1.7532,\ -0.6908)\)。
5. 后续迭代
按相同步骤进行 k=1 到 4 的迭代,每次:
- 沿 \(d^{(k)}\) 线搜索得 \(\alpha_k\)。
- 更新点。
- 计算梯度。
- 用 Polak-Ribière 公式(或其他自适应公式)计算 \(\beta_k\),并更新方向。
- 检查停止条件(如梯度范数小于阈值或达最大迭代次数)。
6. 自适应的体现
- 在非线性问题中,标准 Fletcher-Reeves 公式可能效率低。Polak-Ribière 公式能利用梯度变化信息,自动调整方向,更适合非二次函数。
- 为进一步保证收敛,可对 \(\beta_k\) 做截断:\(\beta_k^{\text{PR+}} = \max(0, \beta_k^{\text{PR}})\),防止负值导致性能下降,这也是自适应的一种。
- 线搜索步长也可自适应调整(如基于函数曲率估计)。
7. 算法输出
经过 5 次迭代,点列会趋近局部最优点(近似 \((0,0)\) 附近,因 \(\sin\) 项影响微小)。最终结果应给出近似解、函数值及梯度范数,说明自适应 CG 比最速下降法收敛更快。
总结
自适应共轭梯度法通过调整 \(\beta_k\) 的计算方式和步长选择,增强了在非线性优化中的鲁棒性和效率。本题展示了从初始点出发,经线搜索、方向更新的完整过程,其中“自适应”主要体现在方向更新的参数调整上。