scipy.optimize.

fmin_powell#

scipy.optimize.fmin_powell(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None, direc=None)[Quelle]#

Minimiert eine Funktion mit der modifizierten Powell-Methode.

Diese Methode verwendet nur Funktionswerte, keine Ableitungen.

Parameter:
funccallable f(x,*args)

Zielfunktion, die minimiert werden soll.

x0ndarray

Anfangsschätzung.

argstuple, optional

Zusätzliche Argumente, die an func übergeben werden.

xtolfloat, optional

Toleranz für den Fehler bei der Liniensuche.

ftolfloat, optional

Relative Abweichung bei func(xopt), die für die Konvergenz akzeptabel ist.

maxiterint, optional

Maximale Anzahl durchzuführender Iterationen.

maxfunint, optional

Maximale Anzahl von Funktionsaufrufen, die ausgeführt werden sollen.

full_outputbool, optional

Wenn True, werden fopt, xi, direc, iter, funcalls und warnflag zurückgegeben.

dispbool, optional

Wenn True, werden Konvergenzmeldungen ausgegeben.

retallbool, optional

Wenn True, wird eine Liste der Lösung bei jeder Iteration zurückgegeben.

callbackcallable, optional

Eine optionale benutzerdefinierte Funktion, die nach jeder Iteration aufgerufen wird. Sie wird als callback(xk) aufgerufen, wobei xk der aktuelle Parametervektor ist.

direcndarray, optional

Der anfängliche Schritt und die Parameterordnung werden als (N, N)-Array gesetzt, wobei N die Anzahl der Fit-Parameter in x0 ist. Standardmäßig ist der Schritt 1.0, wobei alle Parameter gleichzeitig angepasst werden (np.eye((N, N))). Um die anfängliche Berücksichtigung von Werten in einem Schritt zu verhindern oder die anfängliche Schrittgröße zu ändern, setzen Sie sie auf 0 oder die gewünschte Schrittgröße in der J-ten Position des M-ten Blocks, wobei J die Position in x0 und M der gewünschte Auswertungsschritt ist, wobei die Schritte in Indexreihenfolge ausgewertet werden. Schrittgröße und Reihenfolge ändern sich während der Minimierung frei.

Rückgabe:
xoptndarray

Parameter, der func minimiert.

foptnumber

Wert der Funktion am Minimum: fopt = func(xopt).

direcndarray

Aktuelle Richtungsmenge.

iterint

Anzahl der Iterationen.

funcallsint

Anzahl der gemachten Funktionsaufrufe.

warnflagint
Integer-Warnungsflag

1: Maximale Anzahl von Funktionsausrufen. 2: Maximale Anzahl von Iterationen. 3: NaN-Ergebnis gefunden. 4: Das Ergebnis liegt außerhalb der angegebenen Grenzen.

allvecslist

Liste der Lösungen bei jeder Iteration.

Siehe auch

minimieren

Schnittstelle zu ungezwungenen Minimierungsalgorithmen für multivariate Funktionen. Siehe insbesondere die Methode 'Powell'.

Hinweise

Verwendet eine Modifikation der Powell-Methode zur Suche des Minimums einer Funktion von N Variablen. Die Powell-Methode ist eine konjugierte Richtungsmethode.

Der Algorithmus hat zwei Schleifen. Die äußere Schleife durchläuft lediglich die innere Schleife. Die innere Schleife minimiert entlang jeder aktuellen Richtung in der Richtungsmenge. Am Ende der inneren Schleife wird, wenn bestimmte Bedingungen erfüllt sind, die Richtung, die die größte Abnahme bewirkt hat, verworfen und durch die Differenz zwischen dem aktuellen geschätzten x und dem geschätzten x vom Beginn der inneren Schleife ersetzt.

Die technischen Bedingungen für den Ersatz der Richtung der größten Zunahme bestehen darin zu prüfen, dass

  1. Entlang der Richtung der größten Zunahme kann keine weitere Verbesserung erzielt werden.

  2. Die Richtung der größten Zunahme machte einen ausreichend großen Anteil der Abnahme des Funktionswerts von dieser Iteration der inneren Schleife aus.

Referenzen

Powell M.J.D. (1964) An efficient method for finding the minimum of a function of several variables without calculating derivatives, Computer Journal, 7 (2):155-162.

Press W., Teukolsky S.A., Vetterling W.T., and Flannery B.P.: Numerical Recipes (jede Ausgabe), Cambridge University Press

Beispiele

>>> def f(x):
...     return x**2
>>> from scipy import optimize
>>> minimum = optimize.fmin_powell(f, -1)
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 2
         Function evaluations: 16
>>> minimum
array(0.0)