|
- Das Nelder-Mead-Verfahren ist ein sogenanntes ''ableitungsfreies''
Minimierungsverfahren, das nur Funktionsauswertungen benötigt.
Es ist zwar beweisbar nicht immer konvergent (McKinnon SIOPT 1998),
aber bei den Anwendern das
bei weitem beliebteste, wohl wegen seiner Einfachheit und auch weil es ''meistens''
recht gute Ergebnisse liefert, jedenfalls wenn die Dimension des Problems klein ist.
Das Originalverfahren wurde von Nelder und Mead (Computer
Journal 7, (1965),308-313) veröffentlicht. Hier wird eine beweisbar konvergente
Modifikation von A. Witzel (Dissertation, 2008) benutzt.
-
In jedem Schritt des Verfahrens liegt ein Simplex im Rn vor,
also die konvexe Hülle von n+1 affin unabhängigen Punkten
xi, i=0,...,n, an denen die Funktionswerte f(xi) bekannt sind.
Ein Schritt des Verfahrens erzeugt einen neuen Simplex so, dass
der grösste Funktionswert auf den Ecken dieses neuen Simplex kleiner ist
als der grösste Funktionswert auf dem zuvor berechneten. Dies geschieht
durch eine Anwendung von Modifikationsregeln. Zu einem Simplex mit
den Ecken xi, i=0,...,n sei definiert
- fh = max { f(xj): j=0,...,n },
der grösste f-Wert
- H = { i: f(xi) >= f_h - epsf*rho },
die Indexmenge der grossen f-Werte
- L = { 0,...,n}\ H,
die Indexmenge der kleinen f-Werte
- fl = argmin{ f(xi), i=0,...,n },
der kleinste f-Wert
- fs = min { f(xi) : i in H },
der kleinste unter den grossen f-Werten.
epsf ist ein Verfahrensparameter, der in den ''Hauptzyklen'' des
Verfahrens fest ist und beim Abbruch eines Hauptzyklus um einen festen
Faktor verkleinert wird. rho ist die grösste Kantenlänge im laufenden
Simplex.
Ferner ist
xs = 1/|L| Summei in L xi .
also der Schwerpunkt der Ecken mit ''niedrigen'' Funktionswerten.
Man hat Verfahrensparameter α >0, γ > 1 und 0 < β < 1 und
0 < δ < 1,
den Reflektionskoeffizienten, den Expansionskoeffizienten, den Kontraktionskoeffizienten
und den Koeffizienten der massiven Kontraktion.
Typische Werte sind
α = 1 , β = 0.5, γ = 2, δ = 0.5
-
Ist L leer, dann wird zunächst entlang der Simplexkanten von einem xl
aus durch eine Gittersuche mit Verfeinerung um den Faktor δ nach einem Funktionswert gesucht, der kleiner ist
als
fh-epsf*rho*δm
mit m=0,..., wobei in beiden Richtungen gesucht wird. Dies wird hier als ''symmetrische massive Kontraktion''
bezeichnet, ''smsc''. Wird kein
solcher Wert gefunden, dann werden epsf und rho um einen festen Faktor verkleinert. Unterschreiten dabei
beide Werte eine vorgegebene untere Schranke (hier 10-14 und 10-15) dann bricht das Verfahren ab: man hat zumindest einen
stationären Wert von f in xl (näherungsweise). Sonst wird neu gestartet, d.h. die Indexmengen werden neu
bestimmt. In unmittelbarer Nähe eines Minimums kommt es immer zwangsläufig zu smsc-Schritten.
Weitere Abbruchgründe sind: Änderung von f kleiner als epsfmin und Simplexdiameter kleiner
als diameps, Simplexdiameter kleiner als diammin, Simplexdiameter grösser als diammax,
mehr als maxiter Schritte erforderlich, mehr als 10 aufeinanderfolgende geringe Änderungen in f.
- Ist nun L nicht leer, dann wird versucht, alle Punkte aus H durch bessere Werte
zu ersetzen, wobei es genügt, Werte kleiner als fh zu erhalten.
Folgende Operationen sind vorgesehen, die nacheinander für jeden Punkt aus H
ausgeführt werden:
- Der Reflektionsschritt. Definiere
xr = (1+α) xs - α xi für i in H .
xr liegt also auf der Geraden durch xi und xs , den Schwerpunkt der
Punkte in L , jedoch auf der xi gegenüberliegenden
Seite zu xi.
Drei Fälle können bei der Reflektion auftreten:
- f(xr) < f(xl) . In diesem Fall wird ein Expansionsschritt
ausgeführt.
- f(xl) <= f(xr) < f(xs). In diesem Fall wird xh
durch xr ersetzt und ein neuer (Teil-)Schritt des Verfahrens gestartet.
- f(xs) <= f(xr). In diesem Fall wird unterschieden: ist
f(xr) < f(xh), so wird xh durch xr ersetzt und anschliessend
ein Kontraktionsschritt ausgeführt (s.u.). Andernfalls wird sofort ein
Kontraktionsschritt ausgeführt. Sei dazu
f(xh') = min {f(xr),f(xh) }
- Der Kontraktionsschritt. Der Kontraktionspunkt xc ist
definiert durch
xc = β xh'+(1-β) xs
β ist das Verhältnis der Abstände ||xc- xs|| und
||xh' - xs||. Nach Definition von h' ist also
xc = β xh +(1-β)xs wenn f(xr) >= f(xh) (innere Kontraktion)
bzw.
xc = β xr +(1-β)xs wenn f(xr) < f(xh). (äussere Kontraktion)
Ist nun f(xc) < f(xh), so wird xh durch xc ersetzt und der nächste
Schritt wird begonnen, andernfalls wird eine massive Kontraktion ausgeführt.
- Die massive Kontraktion. In diesem Fall werden für i ungleich l
alle Punkte durch
xt i = xl +(-) δm (xi-xl)
ersetzt, bis alle neuen Simplexpunkte kleinere Werte als fh aufweisen.
Diese massive Kontraktion tritt vor allem in zwei Situationen auf:
xh befindet sich in der Nähe eines Sattelpunktes und die Reflektion
wird in Richtung eines Anstieges ausgeführt oder die Niveaubereiche von f sind
sehr stark gekrümmt und f(xh) ist sehr viel grösser als alle
anderen Funktionswerte.
- Der Expansionsschritt. Dieser Schritt wird ausgeführt, wenn
f(xr) < f(xl). Man kann dann hoffen, in der Richtung von xh nach xr noch kleinere
Werte von f zu finden. Man setzt
xe = γ xr+(1-γ) xs
Ist f(xe) < f(xr), dann wird xh durch xe, sonst wird xh durch xr
ersetzt und der Algorithmus neu gestartet.
- Bei diesem Algorithmus werden also pro Schritt (pro neuem Simplex) ein, zwei
oder maximal 2mn neue Funktionswerte berechnet, letzteres nur im Falle der massiven
Kontraktion oder wenn L leer war.
Es kommt vor, dass der Simplex entartet, d.h. die Ecken werden affin abhängig.
Dies wird mittels der QR-Zerlegung der Simplexmatrix kontrolliert und
durch Neuaufbau eines entarteten Simplex (in den Richtungen der Q-Matrix)
behoben. Um den Aufwand ertr"aglich zu halten, wird der Diagonalteil
der R-Matrix zur Konditionsschätzung benutzt. Auch bei diesem Neuaufbau
wird durch Gittersuche sichergestellt, dass der maximale Funktionswert im
Simplex immer monoton fällt.
Der Parameter condbound im Eingabeteil ist eine Schranke, die man
für diese Konditionsschätzung vorgibt.
|
|
- CPU-Zeit, Name des Testfalls und eine Statistik über
die ausgeführten Schritte. Hier bedeutet ''Hcnt=1'' dass ein
unmodifizierter Nelder-Mead-Schritt (Originalverfahren) vorlag.
- Den Grund des Rechnungsabbruchs.
- Die berechneten Optimalwerte f(xopt) und
x(1)opt,...,x(n)opt und den sogenannten
''Simplexgradienten'', also eine Näherung an den Gradienten von f
aufgrund der Funktionswerte auf den n+1 Ecken des letzten Simplex.
- Wenn Sie ein Protokoll des Iterationsverlaufs gefordert haben,
wird eine Liste angezeigt mit Iterationsschritt, maximalem Funktionswert im
Simplex (streng monoton fallend), dem Simplexdiameter und dem Typ des Ersetzungsschrittes. Dabei bedeutet
''refl'' Reflektion, ''exp'' Expansion, ''i_contr'' innere und ''o_contr'' äussere
Kontraktion sowie ''msc'' massive Kontraktion. Die Sonderschritte ''smsc'' und Simplexneuaufbau
werden angezeigt.
- Vier Plots: Logarithmus des Fehlers f - fopt,
die Anzahl der aufgewendeten Funktionsauswertungen (in der Regel strikt linear in der
Schrittzahl und dies unabhängig von n),
maximaler Simplexdiameter (woran man die Dynamik des Verfahrens gut ablesen kann),
und Schritttyp: 1 steht für Reflektion, 2 für Expansion, 3 für äussere
und 4 für innere Kontraktion, 5 für massive Kontraktion. Die um 5
erhöhten Werte stehen für die gleichen Schritte nach einer symmetrischen
massiven Kontraktion und die um 10 erhöhten nach einem Simplexneuaufbau.
- Und den Höhenlinienplot, falls Sie diesen gewünscht hatten.
|