我熟悉一些在scipy.optimize.optimize的功能,在过去使用fmin_cg,以尽量减少在那里我知道衍生物的功能。但是,我现在有一个不容易区分的公式。Python函数最小化不带导
几个在该模块中(fmin_cg,例如)的功能并不会真正所需要的衍生物被提供。我假设他们然后通过依次为每个参数添加一个小值来计算quazi-derivative - 这是否正确?
我的主要问题是这样的:其中的功能(或一个从别处)是最好的,没有给出衍生物最小化在多个参数的函数时使用?
我熟悉一些在scipy.optimize.optimize的功能,在过去使用fmin_cg,以尽量减少在那里我知道衍生物的功能。但是,我现在有一个不容易区分的公式。Python函数最小化不带导
几个在该模块中(fmin_cg,例如)的功能并不会真正所需要的衍生物被提供。我假设他们然后通过依次为每个参数添加一个小值来计算quazi-derivative - 这是否正确?
我的主要问题是这样的:其中的功能(或一个从别处)是最好的,没有给出衍生物最小化在多个参数的函数时使用?
是,在调用任何fmin_bfgs fmin_cg fmin_powell
作为
fmin_xx(func, x0, fprime=None, epsilon=.001 ...)
估计在x
由(func(x + epsilon I) - func(x))/epsilon
梯度。
这是为你的应用程序的“最佳”,不过, 强就如何顺利的功能,以及有多少变数取决于。
平原内尔德 - 米德,fmin
,是一个很好的第一选择 - 缓慢但肯定; 可惜SciPy的内尔德-米德无论x的规模的开始与一个固定大小的单工,0.05/0.00025。
听说fmin_tnc
在scipy.optimize.tnc
好:
fmin_tnc(func, x0, approx_grad=True, epsilon=.001 ...) or
fmin_tnc(func_and_grad, x0 ...) # func, your own estimated gradient
(fmin_tnc是〜fmin_ncg与约束的限制,很好的消息,看看发生了什么,有些不同ARGS)
我并不太熟悉SciPy中可用的方法,但Downhill Simplex方法(又名Nelder-Mead或Amoeba方法)经常适用于多维优化。
现在看看,它看起来像是在minimize()
函数中使用method='Nelder-Mead'
参数作为选项提供。
不要单纯形(丹)算法的线性规划混淆...
另外,如[fmin](http://docs.scipy.org/doc/scipy-0.10.1/reference/generated/scipy.optimize.fmin.html#scipy.optimize.fmin)函数 – 2012-03-11 11:17:51
你即将正确数值上近似导数(雅可比行列式)的方法。我在使用'scipy.optimize.leastsq'时看到了这个。 – wim 2012-03-08 05:51:47
只是好奇,你有多少变数? – denis 2012-03-14 10:48:25