我正在尝试在python中使用L-BFGS-B方法来优化函数,并且在某些情况下它工作正常并且很快找到最小值,但在某些情况下它正在做一些我并不完全理解的事情
特别是,它会在一次迭代中一遍又一遍地评估我的功能。我通过简单地在我的函数中添加“打印结果”行来验证这种情况。因此,每次评估我的函数时,它都会打印函数的值。当我遇到一个不好的情况时,我得到这样的东西:
>>> a,b,c=opt.fmin_l_bfgs_b(lambda pars: coalHMM.coalHMMgf(chmm,pars[0],.6,pars[1],.000001,.000001,50000,10000,pars[2],10000,5,10,0,p=1),[.1,.2,10000],bounds=[(.000001,.999999),(.000001,.599999),(4000,100000)],approx_grad=1,iprint=5,epsilon=1e-5,factr=1e5)
RUNNING THE L-BFGS-B CODE
* * *
Machine precision = 2.220D-16
N = 3 M = 10
At X0 0 variables are exactly at the bounds
216599.857913
216599.857913
216599.787373
216606.008249
216599.857968
At iterate 0 f= 2.16600D+05 |proj g|= 5.51559D+00
92823.559439
92823.559439
92823.5563853
92829.0821432
92823.559463
92823.5584543
92823.5584543
92823.5554005
92829.0811585
92823.5584784
92823.5545111
92823.5545111
92823.5514573
92829.0772149
92823.554535
92823.5387401
92823.5387401
92823.5356864
92829.061443
92823.5387644
92823.475657
92823.475657
92823.4726033
92828.9983542
92823.475681
92823.2233259
92823.2233259
92823.2202723
92828.7460035
92823.2233502
92822.2139978
92822.2139978
92822.2109435
92827.7365952
92822.2140218
92818.1766824
92818.1766824
92818.1736284
92823.6989603
92818.1767058
92802.0273601
92802.0273601
92802.0243085
92807.5483614
正如您所看到的,它只是不断评估,评估和评估......问题是每次评估大约需要一分钟,所以这是等待很长时间的结果......
我的预感是线搜索存在问题,但我不知道足够的细节来确定正在发生的事情......