2014-10-09 2 views
0

Я должен применить эвристический алгоритм для нахождения минимума или максимума функции.Эвристический алгоритм для нахождения минимального значения из функции

Я понял, что означает эвристика, но где я могу найти алгоритм для его применения на Rosenbrock function, например.

(C++, JAVA, C# или даже псевдокод может быть очень полезным).

ответ

2

Простейшим и наиболее очевидным решением было бы использовать алгоритм Random walk. Он работает, начиная со случайной точки в поисковом пространстве и затем посещая ее случайный сосед.

Аналогичный, но более разумный алгоритм - это Холм, поднимающийся. Опять же, вы начинаете с произвольной точки, но на этот раз вы выбрали лучшего соседа.

Другой, технически эвристический алгоритм: Случайная выборка, что означает только выбор любой точки из поискового пространства и запоминание лучшего из найденных.

Улучшение по сравнению с случайным выборкой - Имитированный отжиг Алгоритм. Это своего рода сплав случайной выборки и восхождения на холм: вы начинаете с выбора случайных точек в пространстве поиска, но по мере того, как время идет, вы, как правило, придерживаетесь более качественных.

В Википедии вы можете найти более подробную информацию и примеры псевдокодов из всего вышеперечисленного.

Целый ряд различных решений - это Генетические алгоритмы. Вы можете начать изучать их, читая http://www.obitko.com/tutorials/genetic-algorithms/index.php. К сожалению, у него нет образцов кода.

1

Статья в Википедии, в которой вы ссылаетесь, упоминает adaptive coordinate descent, который является современным эволюционным алгоритмом, как метод минимизации функции Rosenbrock. Googling, который находит несколько документов с псевдокодом и алгоритмами, включая this one. В документе даже содержится ссылка на actual code in Matlab.

Вы также можете использовать максимизацию ожиданий со случайным перезапуском, хотя это, вероятно, значительно менее эффективно, чем адаптивное сведение координат.

Смежные вопросы