Почему NLopt не может найти глобальный минимум?
Я использую NLopt (оболочку Python) для глобальной оптимизации функции Egg holder(диапазон x_i = [-512, 512].
Я использую GN_ORIG_DIRECT безградиентный алгоритм, который является алгоритмом глобальной оптимизации. Я обнаружил, что моя оптимизация останавливается на минимуме (-935,337), близком к глобальному минимуму (долине), указанному на странице функций держателя яйца (min=-959,647 для x,y = 512, 404.2319). Если я использую любое случайное предположение (далеко или даже близко к глобальному минимуму), алгоритм устанавливается в -935,337. Если я использую начальное предположение, близкое к глобальному минимуму, но использую алгоритм локального минимума, то только алгоритм сходится к глобальному минимальному значению. Это показывает, что алгоритм может найти глобальный минимум. Я не знаю, что происходит не так. Я что-то пропустил?
Зеленая точка (слева) на рисунке - это глобальный минимум, а красная точка (справа) рядом с ней - это точка, найденная после оптимизации. Точка на заднем плане - первоначальная догадка, далекая от обоих.
Кто-нибудь может подсказать, что может быть причиной такой проблемы? Я не использую никаких ограничений.
Спасибо за ваши предложения!
Изменить: я пробовал другие функции с 1 переменной, и я могу найти минимум. Я также попробовал функцию Drop-Wave, и алгоритм сходился к правильным значениям.