Ceci est une question simple et de répondre sur l'utilisation minimize
. Au cas où d'autres utilisateurs auraient besoin de quelque chose de plus concret, voici un exemple simple.
Une équation quadratique généralisée:
In [282]: def fun(x, a,b,c):
...: return a*x**2 + b*x + c
In [283]: optimize.minimize(fun, 10, args=(1,0,0))
Out[283]:
fun: 1.7161984122524196e-15
hess_inv: array([[ 0.50000001]])
jac: array([ -6.79528891e-08])
message: 'Optimization terminated successfully.'
nfev: 15
nit: 4
njev: 5
status: 0
success: True
x: array([ -4.14270251e-08])
In [284]: optimize.minimize(fun, 10, args=(1,1,1))
Out[284]:
fun: 0.7500000000000221
hess_inv: array([[ 0.49999999]])
jac: array([ 3.12924385e-07])
message: 'Optimization terminated successfully.'
nfev: 12
nit: 2
njev: 4
status: 0
success: True
x: array([-0.49999985])
La fonction pourrait prendre des tableaux en entrée aussi bien, mais doit encore revenir un seul (scalaire) Valeur:
In [289]: optimize.minimize(fun, [10,10,10], args=(np.array([1,2,3]), 1, 1))
Out[289]:
fun: 2.541666666667115
hess_inv: array([[ 0.50021475, -0.00126004, 0.00061239],
[-0.00126004, 0.25822101, -0.00259327],
[ 0.00061239, -0.00259327, 0.16946887]])
jac: array([ -8.94069672e-08, 4.47034836e-07, -2.20537186e-06])
message: 'Optimization terminated successfully.'
nfev: 55
nit: 9
njev: 11
status: 0
success: True
x: array([-0.50000006, -0.2499999 , -0.16666704])
In [286]: def fun(x, a,b,c):
...: return (a*x**2 + b*x + c).sum()
Il est une bonne idée de assurez-vous que la fonction fonctionne avec le x0
proposé et args, par exemple
In [291]: fun(np.array([10,10,10]), np.array([1,2,3]), 1, 1)
Out[291]: 633
Si vous ne pouvez pas appeler la fonction objective, ou sont confus quant à la façon dont ses arguments fonctionnent, minimize
n'est pas une balle magique. Cette minimisation est seulement aussi bonne que votre compréhension de la fonction objective.
"Figer" la fonction avec des valeurs particulières "a, b, c" en utilisant 'functools.partial'? –
@ PM2Ring cela fonctionnerait, et je suis heureux de savoir que cet outil est maintenant disponible, mais comme @Liteye l'a fait remarquer, 'minimiser 'me permet en fait de lui passer les paramètres. Merci! –
Pas de soucis. 'partial' est génial quand vous en avez besoin, mais je ne connais pas SciPy, donc c'était seulement une suggestion. De toute évidence, la réponse de Liteye est la bonne façon de le faire. :) –