Нахождение глобального минимума гладкой, ограниченной, невыпуклой двумерной функции, которая является дорогостоящей для оценки


17

У меня есть ограниченная невыпуклая 2-D функция, минимум которой я бы хотел найти. Функция довольно плавная. Оценка это дорого. Допустимая ошибка составляет около 3% от области функции в каждой оси.

Я попытался запустить реализацию алгоритма DIRECT в библиотеке NLOPT, но он не дал значительного улучшения по сравнению с поиском методом грубой силы с точки зрения количества оценок функций, необходимых для требуемой точности, и были некоторые отклонения.

Какие другие глобальные решатели оптимизации я должен рассмотреть?


Можете ли вы рассчитать градиенты, или вам нужно будет приблизить их по разности?
Арнольд Ноймайер

Мне нужно приблизить их по разности.
Виктор,

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

@Victor Мэй, с чем ты закончил? (Если бы вы могли опубликовать функцию, аналогичную вашей, это действительно помогло бы людям сравнивать и настраивать разные алгоритмы.)
Денис

@ Денис, я пытался ускорить использование алгоритма для отслеживания объекта в видео. Результатом алгоритма была оценка вероятности для каждого местоположения изображения, чтобы содержать отслеживаемый объект. Изображение, содержащее эти оценки вероятности, - это функция, которую я пытался оптимизировать. Я закончил грубым принуждением на нескольких этапах разрешения. Для получения дополнительной информации об рассматриваемом алгоритме отслеживания прочитайте статью «Надежное отслеживание на основе фрагментов с использованием интегральной гистограммы».
Виктор, май

Ответы:


12

Я хотел бы предложить несколько иной подход по сравнению с другими ответами, хотя @barron косвенно обсуждал то же самое.

Вместо прямой оптимизации вашей функции, т. Е. Путем оценки ее по ряду точек точек, которые (будем надеяться) сходятся к (локальному) оптимуму, вы можете использовать концепцию суррогатного моделирования , которая очень хорошо подходит для задач описываемого вами типа (высокая стоимость, гладкая, ограниченная, низкая размерность, т.е. менее 20 неизвестных).Икс1,Икс2,...,ИксКсуррогатное моделирование

В частности, суррогатное моделирование работает путем создания модельной функции вашей истинной функции F R dR . Ключевым моментом является то, что хотя c, конечно, не совсем точно представляет f , его гораздо дешевле оценить.срdрерdрсе

Итак, типичный процесс оптимизации будет выглядеть следующим образом:

  1. Оцените в множестве j начальных точек x 1 , x 2 , , x j . Обратите внимание, что производные не нужны. Также обратите внимание, что эти точки должны быть равномерно распределены по всему пространству поиска, например, с помощью выборки из латинского гиперкуба или аналогичной конструкции, заполняющей пространство.еJИкс1,Икс2,...,ИксJ
  2. На основе этого исходного набора данных создайте модельную функцию . Вы можете использовать перекрестную проверку для проверки вашей модели (то есть использовать только подмножество исходных j точек для создания c , а затем использовать оставшуюся часть набора данных, чтобы проверить, насколько хорошо c предсказывает эти значения)сJсс
  3. Используйте критерий, такой как критерий ожидаемого улучшения (EI), чтобы выяснить, где «заполнить» больше выборок, чтобы сделать более точным путем выборки f . На самом деле это гораздо лучше изучено теоретически, чем может показаться, и критерий EI очень хорошо изучен. Критерий EI также не является жадным критерием, поэтому вы оба получаете хорошее общее улучшение точности модели, в то же время отдавая приоритет точности рядом с потенциальным оптимумом.се
  4. Если ваша модель недостаточно точна, повторите шаг 3, в противном случае используйте свою любимую процедуру оптимизации, чтобы найти оптимальный , который будет очень дешев для оценки (так что вы можете использовать любую процедуру, какую хотите, даже те, которые требуют производных, или просто оцените функцию в мелкой сетке).с

В общем, это то, что подразумевается под EGO, Efficient Global Optimization, как предложил @barron. Я хотел бы подчеркнуть, что для вашего приложения это кажется совершенно подходящим - вы получаете удивительно точную модель, основанную на сравнительно небольшом количестве оценок , и затем можете использовать любой алгоритм оптимизации, какой захотите. Также часто интересно то, что теперь вы можете оценить c на сетке и построить ее, тем самым получая представление об общем виде f . Еще один интересный момент заключается в том, что большинство методов суррогатного моделирования также предоставляют статистические оценки ошибок, что позволяет оценить неопределенность.есе

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

Конечно, все это довольно трудоемко, но многие другие люди сделали очень хорошие реализации. В Matlab я знаю только о программном наборе инструментов DACE DACE бесплатно. TOMLAB также может предлагать пакет Matlab, но стоит денег - однако я считаю, что он также работает в C ++ и обладает гораздо большими возможностями, чем когда-либо у DACE. (Примечание: я являюсь одним из разработчиков новой версии DACE, которая скоро будет выпущена, которая предложит дополнительную поддержку EGO.)

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


Fwiw, Google суррогатная модель открывает Суррогатную Лабораторию Моделирования в Университете Гента и книгу « Проектирование с помощью Суррогатного Моделирования» , 2008 228p 0470770791. Проблема любого очень общего подхода состоит в том, что у вас скоро будет кухонная раковина, полная вариантов методов, больше чем реальные тестовые функции.
Денис


3

Для гладкой функции метод Efficient Global Optimization должен работать достаточно хорошо и быть значительно более эффективным, чем DIRECT. Реализации доступны в TOMLAB (я не использовал его сам) и DAKOTA (с которым у меня был некоторый успех).


1

Поскольку функция гладкая, метод Ньютона будет в подавляющем большинстве наиболее эффективным методом поиска минимума. Поскольку функция не является выпуклой, вам придется применять обычные приемы, чтобы сделать метод Ньютона сходящимся (модификация Левенберга-Марквардта, поиск строк или область доверия для глобализации). Если вы не можете получить производные своей функции, попробуйте либо вычислить ее с помощью конечных разностей, либо использовать обновление BFGS. Если вы подозреваете, что проблема имеет более одного локального минимума, можно просто запустить метод Ньютона из группы случайно или не очень случайно выбранных точек и посмотреть, где они сходятся.


У моей проблемы действительно есть локальные минимумы. Какие есть способы выбора отправных точек?
Виктор

1
Если вы ничего не знаете о проблеме, статистическая выборка по сути является вашим единственным выбором.
Вольфганг Бангерт

@ Вольфганг: Есть идеи, как подойти к «статистической выборке»? Просто попробуйте 10, 100, ... случайные начальные догадки? Есть ли "более строгие" подходы? Я спрашиваю, потому что у меня более или менее похожая проблема (см. Scicomp.stackexchange.com/q/4708/1789 )
Андре

Все зависит от того, что вы знаете о функции. Если вы знаете что-то вроде «типичной шкалы длины» для вашей функции, это указывает на то, как далеко будут разделены локальные экстремумы. Это также даст вам представление о том, сколько очков вы можете начать, и как далеко друг от друга они должны быть выбраны.
Вольфганг Бангерт

0

Поскольку ваши оценки дорогостоящие, вам нужно использовать параллельные вычисления оценок нескольких функций.

Я бы порекомендовал вам взглянуть на этот код . Математика позади описана здесь .


1
этот код и статья написана вами? Если да, можете ли вы прямо сказать об этом в своем ответе? Кроме того, прямо сейчас, вы можете улучшить ответ, предоставив описание вашего предложения.
Никогуаро
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.