LBFGS算法使用

本文详细介绍了有限内存BFGS(Limited Memory BFGS,简称LBFGS)算法,这是一种用于解决大规模变量优化问题的有效算法。文章讨论了LBFGS算法的主要组成部分,包括如何在迭代过程中使用前M个BFGS结果更新对角矩阵Hk0,以及如何通过用户自定义的函数计算函数值和梯度。此外,文章还阐述了算法的参数及其作用,如n(变量个数)、m(BFGS更新时使用的修正个数)、eps(误差范围)和xtol(机器精度)。文章指出,用户需要根据需求配置参数,并负责计算目标函数和梯度。最后,文章提到了算法中的一些错误处理情况,帮助用户更好地理解和使用LBFGS算法。
摘要由CSDN通过智能技术生成

一、首先把两个作者 JORGE NOCEDAL 给的文件看明白sdrive.f和lbfgs.f

   sdrive.f -  is a simple driver
   lbfgs.f  -  contains all the supporting routines

 

1、lbfgs.f文件包括LBFGS算法和运行函数等

 

 主体函数为:

 subroutine lbfgs(n, m, x, f, g, diagco, diag, iprint, eps, xtol, w, iflag)

 

 int          n, m, iprint[2], iflag;

 double   x[n], g[n], diag[n], w[n*(2*m+1)+2*m];

 double   eps, xtol;

 bool       diagco;

 

 使用LBFGS方法,能够有效地解决大规模变量的问题。算法开始定义一个对角矩阵Hk0,之后应用多次迭代,每次迭代使用前M个BFGS的结果更新这个矩阵,直到得到Hk矩阵,这个矩阵近似等于海塞矩阵的逆矩阵。这里的M是用户指定的,会影响到运行中所需的存储空间大小。用户同样可以提供一个不满足默认选择的初始对角矩阵。算法的详细描述可以阅读"On the limited memory BFGS method C for large scale optimization" by D. Liu and J. Nocedal。

 

用户需要自己计算给定的函数F的值和梯度G,为了便于用户控制这些计算可以使用逆向交流(这个还没看到,看到再写?),通过iflag实现重复调用函数运算。

 

每次迭代都会定义步长,定义使用CSRCH的微变换MCVSRCH。

 

调用语句为call lbfgs(n, m, x, f, g, diagco, diag, iprint, eps, xtol, w, iflag);

 

下面详细解释参数:

 

n:整型变量,变量个数 n>0

 

m:整型变量,BFGS更新时使用的修正个数 3<=m<=7

 

x:双精度浮点数组变量,长度为n,初始化为可能的解得向量 X=(x1, x2,..., xn),程序结束时存储最优解结果向量

 

f:双精度浮点变量,初始化和iflag=1时为X带入的函数值

 

g:双精度浮点数组变量,长度为n,初始化呵iflag=1时为带入X后的函数的梯度

 

diagco:逻辑变量,如果用户希望每次迭代前提供初始化的对角矩阵设定为true,否则使用默认矩阵设为false。如果设为true, 每次迭代返回iflag=2且初始对角矩阵需要通过数组diag设置。

 

diag:双精度浮点数组,长度为n,如果diagco=true,初始化和iflag=2时,用户需要输入初始矩阵的数值,且每个值必须非负

 

iprint:整型数组变量,长度为2,用户设定

      iprint[0]表示输出的频率--<0不生成输出,=0只在第一次和最后一次迭代后输出,>0每次迭代输出

      iprint[1]表示输出类型----=0输出迭代次数,函数评估,函数值,归一后的梯度值和步长

                                          =1除了以上之外,还输出最初点的变量向量和梯度向量

                                          =2除了以上之外,还输出结果变量向量

                                          =3除了以上之外,还输出结果梯度向量

 

eps:正的双精度浮点变量,用户设定,定义找到解终止迭代的误差范围 ||g||<epsmax(1,||x||);

 

xtol:正的双精度浮点变量,用户设定,机器精度,迭代在这个精度以下时自动终止

 

w:双精度浮点数组变量,长度为n(2m+1)+2m,作为LBFGS的运行空间

 

iflag:整型变量,如果返回结果为负表述出现错误,返回0表示无错终止,返回1用户必须给函数f和梯度g赋值,返回2用户需要提供初始对角矩阵

下面的错误信息就懒得翻译了,比较容易理解反正

 The following negative values of IFLAG, detecting an error,
C             are possible:
C
C              IFLAG=-1  The line search routine MCSRCH failed. The
C                        parameter INFO provides more detailed information
C                        (see also the documentation of MCSRCH):
C
C                       INFO = 0  IMPROPER INPUT PARAMETERS.
C
C                       INFO = 2  RELATIVE WIDTH OF THE INTERVAL OF
C                                 UNCERTAINTY IS AT MOST XTOL.
C
C                       INFO = 3  MORE THAN 20 FUNCTION EVALUATIONS WERE
C                                 REQUIRED AT THE PRESEN

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值