2016-06-09 31 views
2

scipy.optimize.minimzeobjjac作爲輸入。我相信它會在需要的時候分開打電話給他們。但是我們經常會遇到目標函數,其梯度計算與目標函數共享大量計算。所以理想情況下,我想同時計算objgrad。但是這個庫似乎不是這種情況?如果仍然想要使用scipy.optimize.minimze,那麼處理它的方法是什麼?如何使用scipy.optimize.minimize函數來計算漸變以及目標函數?

回答

4

你完全可以。只需使用jac=True

In [1]: import numpy as np 

In [2]: from scipy.optimize import minimize 

In [3]: def f_and_grad(x): 
    ...:  return x**2, 2*x 
    ...: 

In [4]: minimize(f_and_grad, [1], jac=True) 
Out[4]: 
     fun: 1.8367099231598242e-40 
hess_inv: array([[ 0.5]]) 
     jac: array([ 2.71050543e-20]) 
    message: 'Optimization terminated successfully.' 
    nfev: 4 
     nit: 2 
    njev: 4 
    status: 0 
    success: True 
     x: array([ 1.35525272e-20]) 

它實際上documented

江淮汽車:BOOL或可調用,可選的雅可比(梯度)目標 功能。只用於CG,BFGS,Newton-CG,L-BFGS-B,TNC,SLSQP,狗腿, trust-ncg。 如果jac是一個布爾值並且爲真,則假定有趣的是返回 梯度以及目標函數。如果爲假,則會根據數字估計梯度 。 jac也可以是可調用的返回目標的梯度。在這種情況下,它必須接受相同的 參數。

(重點煤礦)

+0

感謝您指出了這一點!從文檔/示例中不是很明顯,我覺得應該給出這個功能的重要性。 – velocirabbit

相關問題