scipy.optimize.

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), wobei my_args und my_kwargs erforderliche Positions- und Schlüsselwortargumente sind. Anstatt f0 als aufrufbare Funktion zu übergeben, wrappen Sie sie so, dass sie nur x akzeptiert; z. B. übergeben Sie fun=lambda x: f0(x, *my_args, **my_kwargs) als aufrufbare Funktion, wobei my_args (Tupel) und my_kwargs (Dict) vor dem Aufruf dieser Funktion gesammelt wurden.

bracketSequenz, optional

Für die Methoden 'brent' und 'golden' definiert bracket das Bracketing-Intervall und ist erforderlich. Entweder ein Tripel (xa, xb, xc), das xa < xb < xc und func(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 (siehe scipy.optimize.bracket). Der Minimierer res.x wird nicht notwendigerweise xa <= res.x <= xb erfü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:

  • Brent

  • Begrenzt

  • Golden

  • 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: x der Lösungsvektor, success ein boolesches Flag, das angibt, ob der Optimizer erfolgreich beendet wurde, und message, das die Ursache der Beendigung beschreibt. Siehe OptimizeResult für eine Beschreibung anderer Attribute.

Siehe auch

minimieren

Schnittstelle zu Minimierungsalgorithmen für skalare multivariate Funktionen

show_options

Zusä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 Sie scipy.optimize.minimize in 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), wobei kwargs allen anderen an minimize übergebenen Parametern entspricht (wie bracket, tol usw.), außer dem options-Dict, dessen Inhalt ebenfalls paarweise als method-Parameter übergeben wird. Die Methode soll ein OptimizeResult-Objekt zurückgeben.

Die bereitgestellte method-Aufrufbare muss beliebige Parameter akzeptieren können (und möglicherweise ignorieren); die Menge der von minimize akzeptierten 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