2016-05-08 4 views
-1

Ich wollte eine der Minimierungsmethoden innerhalb von sicpy.minimize auf eine Funktion anwenden, die nicht immer glatte Derivate liefert. Ich habe mich mit der Nelder-Mead Implementierung der Simplex-Methode vertraut gemacht, aber es scheint nicht das Begrenzungsargument zu akzeptieren: (...,bounds=[xmin, xmax],...). Wenn man diese documentation liest, scheinen nur die L-BFGS-B-, TNC- und SLSQP-Methoden Grenzen zu akzeptieren, und alle drei basieren in irgendeiner Weise auf Newtons Methode und berechnen entweder eine numerische Ableitung oder akzeptieren eine.Wie man Simplex-ähnliche "Robustheit" zusammen mit Grenzen in SciPy bekommt?

Ich kenne den genauen Begriff nicht, aber ich suche nach einer 'Simplex-ähnlichen' oder 'derivativlosen Methode' in scipy, die Grenzen akzeptiert, aber auch Funktionen verzeiht, die keine glatte Ableitung liefern (Ein Beispiel ist treppenartiges Verhalten). Für jetzt mache ich 1d. Später kann ich Dimensionen hinzufügen, aber das ist momentan nicht kritisch.

+1

Ich suche nach einer Minimierungsmethode in SciPy, die keine Derivate verwendet und Grenzen zulässt. 1d wird für jetzt tun. * Wie ist das zu breit? * Entweder gibt es einen oder gibt es nicht. – uhoh

+0

Für 1d, schau hier http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.minimize_scalar.html –

Antwort

1

Ich würde geben lmfit einen Versuch (http://cars9.uchicago.edu/software/python/lmfit/).

Obwohl nicht Teil von scipy, aber basierend auf, bietet es begrenzte Minimierung. Ich benutze es zur Kurvenanpassung und Parameterextraktion. Trotzdem konnte ich nicht sagen, wie es sich auf Ihre spezifische Funktion auswirken würde.

+1

Hey das ist * wirklich interessant *! Wenn ich es richtig verstehe, verwendet es intern die Minimierungsmethoden in 'scipy' (zumindest manchmal), bietet dem Benutzer jedoch eine viel mehr" pythonische "Menge von Klassen, um das Problem einzurichten. Für Methoden in 'scipy', die nicht explizit mit Grenzen umgehen, [* maps * beschränkte Parameter] (http://cars9.uchicago.edu/software/python/lmfit/bounds.html) im Benutzerbereich zu '-inf 'zu' + inf ', wenn sie scipy ausgesetzt werden. Ich könnte tatsächlich versuchen, das selbst ohne "lmfit" zu machen! aber es sieht nach Spaß aus, also denke ich, dass ich es ausprobieren werde. Danke!!! – uhoh