我正在尝试使用scipy.optimize公司找出试图拟合某些数据的模拟参数。A创建了一个函数,该函数在数据上给出模型的卡方,以便scipy.optimize公司将不得不最小化这个功能。在
我的一个主要问题是模拟,因此被调用的函数非常耗时,而且我发现方法L-BFGS_B(或者仅仅是BFGS)在完全相同的点上计算出函数值的几倍!!!我不明白它为什么会那样做,这让我很痛苦。在
一个非常简单的函数示例:
from scipy.optimize import minimize
def f3(x):
print x
return x[0]*x[0] + x[1]*x[1] + x[2]*x[2]
x0 = [3, -5, 7]
minimize(f3, x0, method = 'L-BFGS-B')
将返回:
^{pr2}$从函数调用的打印列表中可以看到,minimize
在同一x多次调用f3
这很令人沮丧,因为我觉得在这里浪费了很多时间。在
如果有人能在这里启发我,我很高兴。谢谢。在
它在计算梯度的有限差分近似值。在
它会这么做是因为它没有像你希望的那样小心。此缺陷已添加到scipy bug跟踪器here。正如我在那里发布的,您可以通过自己缓存以前的值来解决这个问题。或者,您可以在您的
minimize
调用中使用jac=True
,并编写函数来返回该点的值和渐变。第一种方法的一个例子是:它给出了:
^{pr2}$相关问题 更多 >
编程相关推荐