Ich versuche, den Nelder-Mead-Algorithmus zur Optimierung einer Funktion zu implementieren. Die Wikipedia-Seite über Nelder-Mead ist überraschend klar über den gesamten Algorithmus, mit Ausnahme seines Stoppkriteriums. Dort heißt es leider:
Auf Konvergenz prüfen [Klarstellung erforderlich] .
Ich habe selbst einige Kriterien ausprobiert und getestet:
Stoppen Sie, wenn wobei ϵ klein ist und x i der i- te Scheitelpunkt des Simplex ist, geordnet von niedrig ( f ( x 1 ) ) bis hoch ( f () x N + 1 )) Funktionswerte. Mit anderen Worten, wenn der Maximalwert des Simplex fast gleich dem Minimalwert ist. Ich fand, dass dies nicht richtig funktionierte, da dies keine Garantie dafür gibt, was die Funktion im Simplex tut. Betrachten Sie beispielsweise die Funktion: Dies ist natürlich trivial zu optimieren, aber nehmen wir an, wir machen dies mit NM und lassen unsere beiden Simplex-Punkte x 1 = - 1 und x 2 = 1 sein . Der Algorithmus würde hier konvergieren, ohne sein Optimum zu finden.
Die zweite Option beinhaltet die Auswertung des Schwerpunkts des Simplex: stop if . Dies setzt voraus, dass, wenn der niedrigste Punkt des Simplex und der Schwerpunkt solche ähnlichen Werte haben, der Simplex ausreichend klein ist, um Konvergenz zu nennen.
Ist dies ein geeigneter Weg, um die Konvergenz zu überprüfen? Oder gibt es eine etablierte Möglichkeit, dies zu überprüfen? Ich konnte hierzu keine Quellen finden, da sich die meisten Suchtreffer auf die Komplexität des Algorithmus konzentrieren.