Frage

Ich kenne einige der Funktionen in Scipy.optimieren.optimiere und habe in der Vergangenheit fmin_cg verwendet, um eine Funktion zu minimieren, bei der ich die Ableitung kannte.Allerdings habe ich jetzt eine Formel, die nicht leicht zu unterscheiden ist.

Für einige der Funktionen in diesem Modul (z. B. fmin_cg ) muss die Ableitung nicht bereitgestellt werden.Ich gehe davon aus, dass sie dann ein Quazi-Derivat berechnen, indem sie nacheinander zu jedem der Parameter einen kleinen Wert addieren - stimmt das?

Meine Hauptfrage ist folgende:Welche der Funktionen (oder eine von anderswo) ist am besten zu verwenden, wenn eine Funktion über mehrere Parameter ohne gegebene Ableitung minimiert wird?

War es hilfreich?

Lösung

Ja, ich rufe einen von ihnen an fmin_bfgs fmin_cg fmin_powell als

fmin_xx( func, x0, fprime=None, epsilon=.001 ... )

schätzt den Gradienten auf x von (func( x + epsilon I ) - func(x)) / epsilon.
Welches ist jedoch "das Beste" für Ihre Bewerbung, hängt stark davon ab, wie glatt Ihre Funktion ist und wie viele Variablen.
Reiner Nelder-Met, fmin, ist eine gute erste Wahl - langsam aber sicher;leider beginnt der Scipy Nelder-Met mit einem Simplex fester Größe, .05 / .00025 unabhängig von der Skala von x.

Das habe ich gehört fmin_tnc in scipy.optimize.tnc ist gut:

fmin_tnc( func, x0, approx_grad=True, epsilon=.001 ... )  or
fmin_tnc( func_and_grad, x0 ... )  # func, your own estimated gradient

(fmin_tnc ist ~ fmin_ncg mit gebundenen Einschränkungen, netten Nachrichten, um zu sehen, was passiert, etwas anderen Argumenten.)

Andere Tipps

Ich bin nicht allzu vertraut mit dem, was in SciPy verfügbar ist, aber das Downhill Simplex die Methode (auch bekannt als Nelder-Mead oder Amöbenmethode) eignet sich häufig gut für die mehrdimensionale Optimierung.

Blick jetzt auf die scipy Dokumentation, es sieht so aus, als ob es als Option in der verfügbar ist minimize() funktion mit dem method='Nelder-Mead' Argument.

Verwechseln Sie es nicht mit dem Simplex-Algorithmus (Dantzig) für die lineare Programmierung...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top