В научной библиотеке GNU есть многомерная функция минимизации рамки. Однако его предостережения явно говорят о том, что при использовании функции с несколькими разными локальными минимумами она просто возвращает одно произвольное решение. Кто-нибудь знает, как вы могли бы адаптировать его, чтобы он возвращал список всех локальных минимумов (с учетом некоторых пороговых критериев)?
Использование GNU Scientific multimin для поиска всех локальных минимумов
Ответы (3)
Он не основан на GNU Scientific, но я нашел этот алгоритм для поиска всех локальных минимумов: http://www.cs.uoi.gr/~lagaris/papers/MINF.pdf
Любой стандартный алгоритм оптимизации ищет локальный минимум где-то «близко» к начальной точке, выбранный им самим или предоставленный вами. Нахождение всех локальных минимумов может быть невычислимой проблемой, потому что у вас может быть бесконечное их количество, даже в конечном диапазоне (например, f (x) = [cos (1 / x)] ^ 2 имеет бесконечное количество локальных минимумов в диапазоне (0, 1]). Предполагая, что у вас есть конечное число локальных минимумов, поиск всех из них является более сложной задачей, чем поиск глобального минимума, который, в свою очередь, является гораздо более сложной проблемой, чем поиск локального минимума где-нибудь. рядом с вами. Не существует простого способа адаптации алгоритмов локальной оптимизации для поиска глобальных минимумов. Даже популярные алгоритмы для поиска глобального минимума, такие как генетические алгоритмы / стратегии эволюции, не гарантируют, что они пройдут все локальные минимумы. Фактически, они пытаются этого избежать.
Лучший способ использовать GSL в этой ситуации - это посмотреть на минимизированную функцию и попытаться угадать, где должны быть минимумы, а затем искать их, используя код GSL.
Оказывается, метод оптимизации роя частиц - неплохой вариант для задачи поиска всех локальных минимумов и глобального минимума функции. Коды PSO для определения местного минимума PSO для определения глобального минимума доступны для справки.