我熟悉一些在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