Я пытаюсь реализовать алгоритм Nelder-Mead для оптимизации функции. Страница Википедии о Nelder-Mead удивительно ясна обо всем алгоритме, за исключением критерия его остановки. Там это печально говорит:
Проверьте сходимость [требуется уточнение] .
Я попробовал и протестировал пару критериев сам:
Стоп , если , где ε мала и где х я это я -я вершина симплекса, заказал у минимума ( е ( х 1 ) ) до высокой ( F ( х N + 1 )) значения функции. Другими словами, когда максимальное значение симплекса почти равно минимальному значению. Я обнаружил, что это не работает должным образом, так как это не дает никаких гарантий относительно того, что функция делает внутри симплекса. В качестве примера рассмотрим функцию: Это, конечно, тривиальная задача для оптимизации, но давайте скажем, что мы делаем это с NM, и пусть наши две симплексные точки будут x 1 = - 1 и x 2 = 1 . Алгоритм будет сходиться здесь, не находя своего оптимума.
Второй вариант предполагает оценку центроида симплекса: остановите, если . Это предполагает, что если нижняя точка симплекса и центроида имеют такие сходные значения, симплекс достаточно мал, чтобы вызвать сходимость.
Это правильный способ проверки на сходимость? Или есть проверенный способ проверить это? Я не смог найти никаких источников по этому поводу, так как большинство поисковых хитов фокусируется на сложности алгоритма.