1

我试图在 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

正如你所看到的,它只是不断地评估,评估,评估......问题是每次评估大约需要一分钟,所以这是相当长的等待的结果......

我的直觉是,这是行搜索的问题,但我对细节的了解还不够,无法真正弄清楚发生了什么……

4

0 回答 0