2016-06-09 4 views
2

scipy.optimize.minimze dauert obj und jac Funktionen als Eingabe. und ich glaube, es wird sie bei Bedarf getrennt anrufen. Aber meistens stoßen wir auf objektive Funktionen, deren Gradientenberechnung viele Berechnungen von der Zielfunktion gemeinsam hat. Also idealerweise würde ich gerne die obj und grad gleichzeitig berechnen. Aber das scheint bei dieser Bibliothek nicht der Fall zu sein? Wie soll man damit umgehen, wenn man überhaupt noch scipy.optimize.minimze verwenden will?wie scipy.optimize.minimize-Funktion zu verwenden, wenn Sie Gradient zusammen mit der Zielfunktion berechnen möchten?

Antwort

4

Sie können total. Nur jac=True verwenden:

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]) 

Es ist eigentlich documented:

jac: bool oder kündbare, optional Jacobi (Gradient) der objektiven Funktion. Nur für CG, BFGS, Newton-CG, L-BFGS-B, TNC, SLSQP, Dogleg, vertrauen-ncg. Wenn jac ein Boolescher Wert ist und True ist, wird angenommen, dass Spaß der Gradient zusammen mit der Zielfunktion zurückgibt. Wenn Falsch, wird der Gradient numerisch geschätzt. jac kann auch eine abrufbare der Steigung des Objektivs sein. In diesem Fall muss es die gleichen Argumente als Spaß akzeptieren.

(Hervorhebung von mir)

+0

Danke für den Hinweis! Es war nicht sehr offensichtlich aus der Dokumentation/den Beispielen, und ich denke, es sollte gegeben werden, wie wichtig ein Feature ist. – velocirabbit