Глобальная максимизация дорогой целевой функции


12

Я заинтересован в максимизации в глобальном масштабе функции многих ( ) реальных параметров (результат сложного моделирования). Тем не менее, рассматриваемая функция является относительно дорогой для оценки, требующей около 2 дней для каждого набора параметров. Я сравниваю разные варианты, и мне было интересно, есть ли у кого-нибудь предложения.30

Я знаю, что есть набор методов для такого рода процессов, которые включают в себя разработку приближенных функций, а затем их максимизацию (например, Джонс и др. «Эффективная глобальная оптимизация дорогостоящих функций черного ящика» ). Тем не менее, это, кажется, относительно связано с кодом.

У меня есть возможность запускать большое количество симуляций параллельно (более 50). Похоже, это предполагает использование чего-то вроде генетических алгоритмов для этой оптимизации - поскольку я могу создать популяцию возможных решений так же быстро, как и сам.

Вот мои вопросы: 1) Кто-нибудь имеет опыт работы со свободно доступными реализациями такого рода глобальных решателей / рекомендаций? 2) Есть ли здесь причины предпочитать или избегать генетических алгоритмов?

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

ОБНОВИТЬ:

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


Когда вы оцениваете целевую функцию, выдает ли она какую-либо дополнительную информацию, особенно? производные (или приближения) по параметрам? Поскольку сама целевая функция является дорогостоящей для вычисления, возможно, что такие вычисления должны быть доильны для дополнительной информации.
Hardmath

(Год спустя), что вы в итоге сделали - изменив несколько из 30 параметров, модель ...?
Денис

Денис: Я смог использовать некоторую физическую интуицию (и удачу), чтобы угадать наиболее важные параметры, а затем изменить их, чтобы получить «достаточно хороший» результат. (В этом случае поиск точного оптимума не так важен, как поиск достаточно большого ответа.) В итоге мне не понадобилась вся мощь этих техник, но хорошо иметь их под рукой.
AJK

Конечно, это было 2 с половиной года назад, но есть ли у вас выбор уровня точности при оценке вашей целевой функции (детерминированное моделирование), и можно ли сравнить точность с временем выполнения?
Марк Л. Стоун

Ответы:


11

Генетические алгоритмы - очень плохой выбор, когда целевая функция чрезвычайно дорога в оценке - эти методы требуют большого количества функциональных оценок в каждом поколении (что может помочь с параллелизмом) и большого количества поколений (которые по своей сути последовательны). Через два дня на поколение это будет очень медленно.

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

Вы не упомянули, является ли вычисление целевой функции точным или неточным. Часто бывает так, что когда целевая функция рассчитывается с помощью симуляции Монте-Карло, значения довольно шумные. Это может ввести в заблуждение многие алгоритмы оптимизации. Методы поверхности отклика помогают решить эту проблему, сгладив шум.

Вы не упомянули никаких ограничений на параметры. Они ограничены? Есть ли линейные или нелинейные ограничения между параметрами?

Скорее всего, большинство из ваших 30 параметров не так уж важны для проблемы. Я бы предложил использовать экспериментальную методику проверки проектирования, чтобы сначала определить, какой из 30 параметров действительно важен для оптимизации, а затем после установки разумных значений для неважных параметров выполнить оптимизацию по важным параметрам. Такие методы, как выборка из латинского гиперкуба, могут быть очень полезны при отборе относительно несущественных параметров. На этом этапе проверки вы можете легко использовать сотни процессоров.

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

В качестве последнего шага вы можете начать с параметров оптимизации поверхности отклика и попытаться улучшить значения экранированных параметров, корректируя их по одному (спуск по координатам).

Я поддержу рекомендацию DAKOTA как основу для такого рода оптимизации. Если вы собираетесь выполнять эту оптимизацию только один раз, то может быть проще организовать вычисления вручную, но если вы собираетесь делать это многократно, то DAKOTA будет очень полезен.


4
  1. У меня нет никакого опыта с этими видами решателей; некоторые из моих коллег использовали их. DAKOTA кажется программным пакетом, рекомендованным для такого рода задач. Он включает в себя интерфейс, который позволяет пользователю многократно отправлять задания в очередь отправки и использовать выходные данные для исследования параметров, анализа чувствительности и т. Д. Я не достаточно знаком с ним, чтобы знать, будет ли он использовать много симуляций. одновременно.

  2. Предполагая, что ваши параметры непрерывны, если показатель качества изменяется плавно при изменении параметров, то суррогатная модель должна выполнять разумную работу по подгонке показателя качества, а информация о суррогатном деривате должна быть полезной для уточнения сходимости. Для 30 параметров также должны быть полезны детерминированные методы без производной оптимизации; опять же, гладкость должна помочь. Напротив, генетические алгоритмы вообще не будут использовать производную информацию и часто требуют настройки таких параметров, как частота мутаций, скорость рекомбинации и параметры отбора, для достижения хорошей производительности. В качестве алгоритмического выбора я бы использовал генетические алгоритмы как запасной вариант, потому что я ожидал, что хорошо разработанная суррогатная оптимизация или метод детерминированной оптимизации без производных будет иметь лучшее поведение сходимости.


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

Вы правы насчет локальных методов поиска. Существуют глобальные методы поиска (DIRECT, многоуровневый поиск по ветвям и границам), которые не создают суррогатные модели и должны вести себя лучше, чем локальные методы поиска. Я не могу говорить об эффективности распараллеливания этих методов.
Джефф Оксберри

1

Посмотрите на TOMLAB, DAKOTA и OpenMDAO для оптимизации черного ящика.


Правка № 3: Байесовская оптимизация очень похожа на EGO:

https://github.com/mwhoffman/pybo

https://github.com/hyperopt/hyperopt

ограниченные лицензии:

https://github.com/rmcantin/bayesopt

https://github.com/HIPS/Spearmint


Редактировать № 2:

Первый подход заключается в построении метамодели / суррогата (с использованием кригинга / ГП) вокруг дорогостоящей функции и использовании этой дополнительной информации, чтобы найти глобальную оптимальную точку быстрее и с меньшим количеством оценок (EGO).

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

Эвристические подходы носят генетический / рандомизированный характер и не дают никаких гарантий.


Редактировать № 1:

TOMLAB - это инструмент на основе MATLAB, который показывает лучшую скорость / качество оптимизации, согласно статье Сахинидиса. Но это коммерческий инструмент со значительным корпоративным использованием. Я не использую это.

DAKOTA больше подходит для количественной оценки неопределенности, помимо общей оптимизации. На основе c ++ и некоторого старого кода на Fortran. Хотя по лицензии LGPL и двоичным файлам, доступным для скачивания, очень трудно перекомпилировать хотя бы из моего опыта на Win7 с GCC или MSVS / ifort. Имеет зависимости от boost, lapack, cmake для сборки. По сути, это оболочка для многочисленных решателей с открытым исходным кодом и нескольких коммерческих. Это продукт SNL и тесно интегрирован с другими проектами Sandia NL. Я смог успешно интегрировать этот вместо некоторых подпрограмм IMSL. В работе Сахинидиса пропущен массовый параллелизм, возможный с DAKOTA.

OpenMDAO - это программное обеспечение для проектирования на основе оптимизации, разработанное на Python NASA по лицензии APACHE. Я сейчас пробую это.


Добро пожаловать в SciComp! Как написано в настоящее время, ваше сообщение не объясняет, почему было бы неплохо посмотреть на TOMLAB или OpenMDAO (другие ответы уже обсуждают DAKOTA). Мы ищем ответы, которые не только дают рекомендации, но и обсуждают, почему эти рекомендации полезны, потенциальные ловушки и так далее.
Джефф Оксберри

Сначала я поспешил с ответом, а теперь добавил пояснения.
Денфромуфа

0

Если вы не можете позволить себе 30 прогонов, каждый варьируя один параметр, измените их по группам:
например, 8 прогонов, каждый из которых изменяет 4 параметра, затем уточните лучшие 2 прогона / 8 параметров ...
(Я понятия не имею, как компромисс выигрыш информации против общего времени выполнения; многорукий бандит ?)


-3

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

Описание математики, стоящей за кодом, приведено здесь .


1
Это тот же ответ, который вы дали в этом посте . Также кажется, что это твоя собственная работа. Если это правда, пожалуйста, укажите это в своем ответе.
Никогуаро

Можете ли вы предоставить подробную информацию о подходе, описанном в документе и реализованном в программном обеспечении? Какой метод используется? Почему это хорошо? Что предусмотрено в этом подходе, что другие ответы не охватывают?
Никогуаро

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