使用optimtool库的trust_region模块
优化算法研究Rosenbrock函数,信赖域算法通过限制每次迭代的步长范围(信赖域半径)来保证优化的稳定性。它在每一步求解一个子问题,即在信赖域内寻找目标函数的近似模型(如二次模型)的最优解。信赖域半径根据模型与实际函数的匹配程度动态调整。
信赖域算法对非凸问题具有较好的鲁棒性,尤其适用于目标函数在局部近似不准确的情况。它不需要保证Hessian矩阵正定,但计算复杂度较高,需反复求解子问题。
import optimtool.unconstrain as ou
from optimtool.base import sp
x = sp.symbols("x1:5")
f = 100 * (x[1] - x[0]**2)**2 + \
(1 - x[0])**2 + \
100 * (x[3] - x[2]**2)**2 + \
(1 - x[2])**2
x_0 = (0, 0, 0, 0)
ou.trust_region.steihaug_CG(f, x, x_0, verbose=True, draw=True)
Steihaug-CG方法的优势
Steihaug-CG方法作为信赖域方法中的子问题求解器,结合了共轭梯度法(CG)和信赖域框架的优点,具有以下显著优势:
高效处理大规模问题
传统牛顿法需要计算和存储完整的Hessian矩阵,而Steihaug-CG方法仅需矩阵-向量乘积操作,适用于高维问题。通过迭代逼近解,避免了直接分解矩阵的计算开销。
自动满足信赖域约束
在CG迭代过程中,若搜索方向导致步长超出信赖域边界,方法会直接截断至边界点。这种机制无需额外投影步骤,天然保证迭代点始终位于信赖域内。
灵活处理不定Hessian矩阵
当Hessian矩阵非正定时,标准CG可能失效。Steihaug-CG通过检测负曲率方向并沿边界终止,将问题转化为边界解,从而处理非凸问题。
理论收敛性保障
方法在有限步内终止,且生成的解满足全局收敛条件。结合信赖域框架的适应性调整,可保证算法收敛到一阶或二阶临界点。
低存储需求
仅需存储当前迭代点、梯度和搜索方向等少量向量,内存占用为O(n)级别,特别适合内存受限的大规模优化问题。
与其他方法的对比
相较于精确求解信赖域子问题的算法(如奇异值分解),Steihaug-CG以较低计算成本提供近似解,平衡了精度与效率。相比截断牛顿法,其信赖域约束处理更为自然,无需复杂的线搜索策略。
信赖域的输出结果
(0, 0, 0, 0) 2.0 0
(0, 0, 0, 0) 2.0 1
(0, 0, 0, 0) 2.0 2
[0.1767767 0. 0.1767767 0. ] 1.5507057188134525 3
[0.29032474 0.0713953 0.29032474 0.0713953 ] 1.0405246607673213 4
[0.48863385 0.19943654 0.48863385 0.19943654] 0.8323054782555606 5
[0.54631561 0.29513356 0.54631561 0.29513356] 0.4138730825145653 6
[0.54631561 0.29513356 0.54631561 0.29513356] 0.4138730825145653 7
[0.54631561 0.29513356 0.54631561 0.29513356] 0.4138730825145653 8
[0.69530513 0.46204246 0.69530513 0.46204246] 0.27732784674527516 9
[0.75299771 0.56367711 0.75299771 0.56367711] 0.1242359583180978 10
[0.75299771 0.56367711 0.75299771 0.56367711] 0.1242359583180978 11
[0.89072142 0.77435432 0.89072142 0.77435432] 0.09631433535109457 12
[0.91345905 0.83389044 0.91345905 0.83389044] 0.015032128686181399 13
[0.99189022 0.97769476 0.99189022 0.97769476] 0.007699598816246098 14
[0.99552642 0.99105963 0.99552642 0.99105963] 4.006080480702178e-05 15
[0.9999882 0.9999565 0.9999882 0.9999565] 7.95400879592257e-08 16
[0.99999995 0.99999991 0.99999995 0.99999991] 4.3824634686890425e-15 17
##信赖域方法的可视化


337

被折叠的 条评论
为什么被折叠?



