【发布时间】:2014-01-08 20:03:29
【问题描述】:
我的功能:
count = 0
def fake(x):
global count
print count
count += 1
return x ** 4 + 10 * x ** 3 + 4 * x ** 2 + 7 * x + 1
“Nelder-Mead”方法,给了我正确数量的函数调用。
scipy.optimize.fmin(fake, [1])
0
1
...
45
Optimization terminated successfully.
Current function value: -887.470826
Iterations: 23
Function evaluations: 46
Out[377]:
array([-7.25761719])
BFGS 方法,给我正确的函数调用次数。
scipy.optimize.fmin_bfgs(fake, [1])
0
1
...
61
62
Optimization terminated successfully.
Current function value: -887.470826
Iterations: 6
Function evaluations: 63
Gradient evaluations: 21
Out[380]:
array([-7.25765231])
但是,L-BFGS-B 给了我奇怪数量的函数调用。发生了什么?
scipy.optimize.fmin_l_bfgs_b(fake, [1], approx_grad=True)
0
1
...
43
44
Out[374]:
(array([-7.25765246]),
array([-887.47082639]),
{'funcalls': 15,
'grad': array([ -3.41060513e-05]),
'nit': 6,
'task': 'CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH',
'warnflag': 0})
【问题讨论】:
标签: python optimization scipy