optim: Allgemeine Optimierung

Details

Beachten Sie, dass die Argumente nach genau übereinstimmen müssen.

Standardmäßig führt optim eine Minimierung durch, maximiert aber auch, wenn control$fnscale negativ ist. optimHess ist eine Hilfsfunktion, um die Hessian zu einem späteren Zeitpunkt zu berechnen, wenn hessian = TRUE vergessen wurde.

Die Standardmethode ist eine Implementierung der Methode von Nelder und Mead (1965), die nur Funktionswerte verwendet und robust, aber relativ langsam ist. Sie funktioniert einigermaßen gut für nicht differenzierbare Funktionen.

Methode "BFGS" ist eine Quasi-Newton-Methode (auch bekannt als variabler metrischer Algorithmus), und zwar die 1970 von Broyden, Fletcher, Goldfarb und Shanno gleichzeitig veröffentlichte. Diese Methode verwendet Funktionswerte und Gradienten, um ein Bild der zu optimierenden Oberfläche zu erstellen.

Methode "CG" ist eine konjugierte Gradientenmethode, die auf der Methode von Fletcher und Reeves (1964) basiert (jedoch mit der Möglichkeit von Polak-Ribiere- oder Beale-Sorenson-Aktualisierungen). Konjugierte Gradientenmethoden sind im Allgemeinen anfälliger als die BFGS-Methode, aber da sie keine Matrix speichern, können sie bei viel größeren Optimierungsproblemen erfolgreich sein.

Methode "L-BFGS-B" ist die von Byrd et. al. (1995), die Box-Constraints erlaubt, d.h. jeder Variablen kann eine untere und/oder obere Grenze gegeben werden. Der Anfangswert muss den Beschränkungen genügen. Es handelt sich um eine Abwandlung des BFGS-Quasi-Newton-Verfahrens mit begrenztem Speicherplatz. Wenn nicht-triviale Schranken angegeben werden, wird diese Methode mit einer Warnung ausgewählt.

Nocedal und Wright (1999) ist eine umfassende Referenz für die drei vorgenannten Methoden.

Methode "SANN" ist standardmäßig eine Variante des simulierten Annealings aus Belisle (1992). Simulated-Annealing gehört zur Klasse der stochastischen globalen Optimierungsverfahren. Es verwendet nur Funktionswerte, ist aber relativ langsam. Es funktioniert auch für nicht-differenzierbare Funktionen. Diese Implementierung verwendet die Metropolis-Funktion für die Akzeptanzwahrscheinlichkeit. Standardmäßig wird der nächste Kandidatenpunkt aus einem Gaußschen Markov-Kernel erzeugt, dessen Skala proportional zur aktuellen Temperatur ist. Wenn eine Funktion zur Erzeugung eines neuen Kandidatenpunktes angegeben wird, kann die Methode "SANN" auch zur Lösung kombinatorischer Optimierungsprobleme verwendet werden. Die Temperaturen werden entsprechend dem logarithmischen Abkühlungsschema nach Belisle (1992, S. 890) gesenkt; konkret wird die Temperatur auf temp / log(((t-1) %/% tmax)*tmax + exp(1)) gesetzt, wobei t der aktuelle Iterationsschritt ist und temp und tmax über control spezifizierbar sind, siehe unten. Beachten Sie, dass die Methode "SANN" entscheidend von den Einstellungen der Steuerparameter abhängt. Sie ist keine Allzweckmethode, kann aber sehr nützlich sein, um auf einer sehr rauen Oberfläche zu einem guten Wert zu gelangen.

Die Methode "Brent" ist nur für eindimensionale Probleme geeignet und verwendet optimize(). Sie kann in Fällen nützlich sein, in denen optim() innerhalb anderer Funktionen verwendet wird, bei denen nur method angegeben werden kann, wie z.B. in mle aus dem Paket stats4.

Funktion fn kann NA oder Inf zurückgeben, wenn die Funktion nicht mit dem übergebenen Wert ausgewertet werden kann, aber der Anfangswert muss einen berechenbaren endlichen Wert von fn haben. (Außer bei der Methode "L-BFGS-B", bei der die Werte immer endlich sein sollten.)

optim kann rekursiv verwendet werden, und zwar sowohl für einen als auch für mehrere Parameter. Es akzeptiert auch eine Null-Länge par und wertet die Funktion nur mit diesem Argument aus.

Das control-Argument ist eine Liste, die eine der folgenden Komponenten enthalten kann:

trace

Nicht-negative Ganzzahl. Ist der Wert positiv, werden Informationen über den Fortschritt der Optimierung ausgegeben. Höhere Werte können mehr Informationen über den Verlauf der Optimierung liefern: für die Methode "L-BFGS-B" gibt es sechs Stufen der Rückverfolgung. (Um genau zu verstehen, was diese bewirken, siehe den Quellcode: höhere Stufen liefern mehr Details.)

fnscale

Eine Gesamtskalierung, die während der Optimierung auf den Wert von fn und gr anzuwenden ist. Falls negativ, wird das Problem zu einem Maximierungsproblem. Die Optimierung wird für fn(par)/fnscale durchgeführt.

parscale

Ein Vektor von Skalierungswerten für die Parameter. Die Optimierung wird für par/parscale durchgeführt, und diese sollten in dem Sinne vergleichbar sein, dass eine Änderung um eine Einheit bei einem Element eine Änderung um eine Einheit beim skalierten Wert bewirkt. Nicht verwendet (und auch nicht benötigt) für method = "Brent".

ndeps

Ein Vektor von Schrittgrößen für die Finite-Differenzen-Näherung an den Gradienten, auf der Skala par/parscale. Standardwert ist 1e-3.

maxit

Die maximale Anzahl der Iterationen. Standardwert ist 100 für die auf Ableitungen basierenden Methoden und 500 für "Nelder-Mead".

Für "SANN" gibt maxit die Gesamtzahl der Funktionsauswertungen an: Es gibt kein anderes Abbruchkriterium. Standardwert ist 10000.

abstol

Die absolute Konvergenztoleranz. Nur nützlich für nicht-negative Funktionen, als Toleranz für das Erreichen von Null.

reltol

Relative Konvergenztoleranz. Der Algorithmus hält an, wenn er den Wert in einem Schritt nicht um einen Faktor reltol * (abs(val) + reltol) reduzieren kann. Standardwert ist sqrt(.Machine$double.eps), normalerweise etwa 1e-8.

alpha,beta,gamma

Skalierungsparameter für die "Nelder-Mead"-Methode. alpha ist der Reflexionsfaktor (Standardwert 1,0), beta der Kontraktionsfaktor (0,5) und gamma der Expansionsfaktor (2,0).

REPORT

Die Häufigkeit der Berichte für die Methoden "BFGS", "L-BFGS-B" und "SANN", wenn control$trace positiv ist. Standardmäßig alle 10 Iterationen für "BFGS" und "L-BFGS-B" oder alle 100 Temperaturen für "SANN".

warn.1d.NelderMead

a logical gibt an, ob die (Standard-)Methode "Nelder-Mean" eine Warnung ausgeben soll, wenn sie für eindimensionale Minimierung verwendet wird. Da die Warnung manchmal unangebracht ist, können Sie sie unterdrücken, indem Sie diese Option auf false setzen.

type

für die Methode der konjugierten Gradienten. Nimmt den Wert 1 für die Fletcher-Reeves-Aktualisierung, 2 für Polak-Ribiere und 3 für Beale-Sorenson an.

lmm

ist eine ganze Zahl, die die Anzahl der BFGS-Aktualisierungen angibt, die in der "L-BFGS-B"-Methode beibehalten werden; der Standardwert ist 5.

factr

kontrolliert die Konvergenz der "L-BFGS-B"-Methode. Konvergenz tritt ein, wenn die Reduktion des Ziels innerhalb dieses Faktors der Maschinentoleranz liegt. Die Voreinstellung ist 1e7, d.h. eine Toleranz von etwa 1e-8.

pgtol

Hilft, die Konvergenz der Methode "L-BFGS-B" zu steuern. Es handelt sich um eine Toleranz für den projizierten Gradienten in der aktuellen Suchrichtung. Die Voreinstellung ist Null, wenn die Prüfung unterdrückt wird.

temp

Steuert die Methode "SANN". Es handelt sich um die Starttemperatur für den Kühlplan. Der Standardwert ist 10.

tmax

ist die Anzahl der Funktionsauswertungen bei jeder Temperatur für die Methode "SANN". Standardwert ist 10.

Alle Namen, die par gegeben werden, werden in die Vektoren kopiert, die an fn und gr übergeben werden. Beachten Sie, daß keine anderen Attribute von par kopiert werden.

Der an fn übergebene Parametervektor hat eine besondere Semantik und kann zwischen Aufrufen gemeinsam genutzt werden: die Funktion sollte ihn nicht ändern oder kopieren.