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.