minimize_scalar#
- scipy.optimize.minimize_scalar(fun, bracket=None, bounds=None, args=(), method=None, tol=None, options=None)[Quelle]#
Lokale Minimierung einer skalaren Funktion einer Variablen.
- Parameter:
- funcallable
Zielfunktion. Skalare Funktion, muss einen Skalar zurückgeben.
Angenommen, die aufrufbare Funktion hat die Signatur
f0(x, *my_args, **my_kwargs), wobeimy_argsundmy_kwargserforderliche Positions- und Schlüsselwortargumente sind. Anstattf0als aufrufbare Funktion zu übergeben, wrappen Sie sie so, dass sie nurxakzeptiert; z. B. übergeben Siefun=lambda x: f0(x, *my_args, **my_kwargs)als aufrufbare Funktion, wobeimy_args(Tupel) undmy_kwargs(Dict) vor dem Aufruf dieser Funktion gesammelt wurden.- bracketSequenz, optional
Für die Methoden 'brent' und 'golden' definiert
bracketdas Bracketing-Intervall und ist erforderlich. Entweder ein Tripel(xa, xb, xc), dasxa < xb < xcundfunc(xb) < func(xa) und func(xb) < func(xc)erfüllt, oder ein Paar(xa, xb), das als Ausgangspunkte für eine Abwärts-Bracketing-Suche verwendet wird (siehescipy.optimize.bracket). Der Minimiererres.xwird nicht notwendigerweisexa <= res.x <= xberfüllen.- boundsSequenz, optional
Für die Methode 'bounded' ist bounds obligatorisch und muss zwei endliche Elemente haben, die den Optimierungsgrenzen entsprechen.
- argstuple, optional
Zusätzliche Argumente, die an die Zielfunktion übergeben werden.
- methodstr oder aufrufbar, optional
Art des Lösers. Muss eine der folgenden sein:
benutzerdefiniert - ein aufrufbares Objekt (hinzugefügt in Version 0.14.0), siehe unten
Standardmäßig "Bounded", wenn Grenzen angegeben sind, andernfalls "Brent". Details zu jedem Solver finden Sie im Abschnitt 'Hinweise'.
- tolfloat, optional
Toleranz für die Beendigung. Für detaillierte Kontrolle verwenden Sie solver-spezifische Optionen.
- optionsdict, optional
Ein Wörterbuch mit Solver-Optionen.
- maxiterint
Maximale Anzahl durchzuführender Iterationen.
- dispbool
Auf True setzen, um Konvergenz-Meldungen auszugeben.
Solver-spezifische Optionen finden Sie unter
show_options.
- Rückgabe:
- resOptimizeResult
Das Optimierungsergebnis, dargestellt als
OptimizeResult-Objekt. Wichtige Attribute sind:xder Lösungsvektor,successein boolesches Flag, das angibt, ob der Optimizer erfolgreich beendet wurde, undmessage, das die Ursache der Beendigung beschreibt. SieheOptimizeResultfür eine Beschreibung anderer Attribute.
Siehe auch
minimierenSchnittstelle zu Minimierungsalgorithmen für skalare multivariate Funktionen
show_optionsZusätzliche Optionen, die von den Lösungsalgorithmen akzeptiert werden
Hinweise
Dieser Abschnitt beschreibt die verfügbaren Solver, die mit dem Parameter 'method' ausgewählt werden können. Die Standardmethode ist die
"Bounded"Brent-Methode, wenn bounds übergeben werden, andernfalls die unbegrenzte"Brent".Die Methode Brent verwendet den Brent-Algorithmus [1], um ein lokales Minimum zu finden. Der Algorithmus verwendet inverse parabolische Interpolation, wenn möglich, um die Konvergenz der goldenen Schnittmethode zu beschleunigen.
Die Methode Golden verwendet die Fibonacci-Suchtechnik [1]. Sie verwendet ein Analogon der Bisektionsmethode, um das eingeschlossene Intervall zu verkleinern. Es ist normalerweise vorzuziehen, die Methode *Brent* zu verwenden.
Die Methode Bounded kann eine begrenzte Minimierung durchführen [2] [3]. Sie verwendet die Brent-Methode, um ein lokales Minimum im Intervall x1 < xopt < x2 zu finden.
Beachten Sie, dass die Brent- und Golden-Methoden keinen Erfolg garantieren, es sei denn, ein gültiges
bracket-Tripel wird bereitgestellt. Wenn kein Drei-Punkt-Bracket gefunden werden kann, ziehen Siescipy.optimize.minimizein Betracht. Außerdem sind alle Methoden nur für die lokale Minimierung gedacht. Wenn die Funktion von Interesse mehr als ein lokales Minimum hat, ziehen Sie Globale Optimierung in Betracht.Benutzerdefinierte Minimierer
Es kann nützlich sein, eine benutzerdefinierte Minimierungsmethode zu übergeben, z. B. wenn Sie ein Bibliotheks-Frontend für minimize_scalar verwenden. Sie können einfach eine aufrufbare Funktion als Parameter
methodübergeben.Die aufrufbare Funktion wird aufgerufen als
method(fun, args, **kwargs, **options), wobeikwargsallen anderen anminimizeübergebenen Parametern entspricht (wiebracket, tol usw.), außer dem options-Dict, dessen Inhalt ebenfalls paarweise als method-Parameter übergeben wird. Die Methode soll einOptimizeResult-Objekt zurückgeben.Die bereitgestellte method-Aufrufbare muss beliebige Parameter akzeptieren können (und möglicherweise ignorieren); die Menge der von
minimizeakzeptierten Parameter kann in zukünftigen Versionen erweitert werden und diese Parameter werden dann an die Methode übergeben. Ein Beispiel finden Sie im SciPy-Optimierungstutorial.Hinzugefügt in Version 0.11.0.
Referenzen
[1] (1,2)Press, W., S.A. Teukolsky, W.T. Vetterling, und B.P. Flannery. Numerical Recipes in C. Cambridge University Press.
[2]Forsythe, G.E., M. A. Malcolm, und C. B. Moler. „Computer Methods for Mathematical Computations.“ Prentice-Hall Series in Automatic Computation 259 (1977).
[3]Brent, Richard P. Algorithms for Minimization Without Derivatives. Courier Corporation, 2013.
Beispiele
Betrachten Sie das Problem der Minimierung der folgenden Funktion.
>>> def f(x): ... return (x - 2) * x * (x + 2)**2
Mit der *Brent*-Methode finden wir das lokale Minimum wie folgt:
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar(f) >>> res.fun -9.9149495908
Der Minimierer ist
>>> res.x 1.28077640403
Mit der *Bounded*-Methode finden wir ein lokales Minimum mit angegebenen Grenzen wie folgt:
>>> res = minimize_scalar(f, bounds=(-3, -1), method='bounded') >>> res.fun # minimum 3.28365179850e-13 >>> res.x # minimizer -2.0000002026