Допуск для терминации в оптимизации Nelder-Mead - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь оптимизировать определенную функцию, используя метод Нелдера-Мида, и мне нужна помощь в понимании некоторых аргументов.Я довольно новичок в мире числовых оптимизаций, поэтому, пожалуйста, прости меня за незнание того, что может быть очевидно для более опытных пользователей.Я отмечаю, что я уже посмотрел на minimal (method = 'Nelder-Mead') и на scipy.optimize.minimize , но это оказалось не так сильно, как хотелось бы надеяться.Я пытаюсь оптимизировать функцию $ f $ при двух условиях: (i) я хочу, чтобы оптимизация прекратилась, как только значение $ f $ опустилось ниже определенного значения, и (ii) когда аргумент приблизился к оптимальному значению, я нехочу, чтобы оптимизатор снова увеличил шаг (т. е. как только он опустится ниже порогового значения и останется ниже в течение нескольких итераций, я бы хотел, чтобы оптимизация прекратилась).Вот код оптимизации, который я использую:

scipy.optimize.minimize(fun=f, x0=init_pos, method="nelder-mead",
                        options={"initial_simplex": simplex, 
                                 "disp": True, "maxiter" : 25, 
                                 "fatol": 0.50, "adaptive": True})

, где f - моя функция ( f: RxR -> [0, sqrt (2)) ).Я понимаю, что x0=init_pos - это начальные значения для f , "initial_simplex": simplex - это начальный треугольник (в моем 2D-случае), "maxiter" : 25 означает, что оптимизатор выполнит до 25 итераций перед завершением.

Вот вещи, которые я не понимаю / в которых я не уверен:

  1. На сайте 1 написано "fatol: Absolute error in func (xopt) между итерациями, приемлемыми для сходимости. "Поскольку оптимальным значением для моей функции является f (xopt) = 0 , означает ли "fatol": 0.50, что оптимизация завершится, как только f (x) будет иметь значение 0,5 илиМеньше?Если нет, как мне изменить условие завершения (в моем случае, как мне убедиться, что оно останавливается один раз f (x) <= 0,5 </em>)?Я в порядке, если оптимизатор запускает еще несколько итераций вокруг области, давая <0,5 </em>, но сейчас он имеет тенденцию выпадать из почти оптимальной области совершенно случайным образом, и я хотел бы иметь возможность предотвратитьэто (если возможно).

  2. Аналогично, насколько я понимаю, "xatol: абсолютная ошибка в xopt между итерациями, которая приемлема для сходимости".означает, что оптимизация завершится, как только разница между оптимальными и существующими аргументами будет не более xatol.Поскольку в принципе я априори не знаю, что такое xopt , означает ли это на практике, что когда | x_n - x_ (n + 1) |, оптимизатор остановится?Если нет, есть ли способ добавить ограничение, чтобы остановить функцию, когда она приблизилась к оптимальной точке?

Буду признателен, если кто-то сможет ответить или дать мне более точную ссылку, чемдокументация SciPy.

...