Я заинтересован в максимизации в глобальном масштабе функции многих ( ) реальных параметров (результат сложного моделирования). Тем не менее, рассматриваемая функция является относительно дорогой для оценки, требующей около 2 дней для каждого набора параметров. Я сравниваю разные варианты, и мне было интересно, есть ли у кого-нибудь предложения.
Я знаю, что есть набор методов для такого рода процессов, которые включают в себя разработку приближенных функций, а затем их максимизацию (например, Джонс и др. «Эффективная глобальная оптимизация дорогостоящих функций черного ящика» ). Тем не менее, это, кажется, относительно связано с кодом.
У меня есть возможность запускать большое количество симуляций параллельно (более 50). Похоже, это предполагает использование чего-то вроде генетических алгоритмов для этой оптимизации - поскольку я могу создать популяцию возможных решений так же быстро, как и сам.
Вот мои вопросы: 1) Кто-нибудь имеет опыт работы со свободно доступными реализациями такого рода глобальных решателей / рекомендаций? 2) Есть ли здесь причины предпочитать или избегать генетических алгоритмов?
Это физическая проблема, и мои ранние эксперименты показали, что показатель качества меняется довольно плавно, когда я меняю параметры.
ОБНОВИТЬ:
Спасибо вам за помощь! Еще несколько подробностей: мне не нужна никакая информация за пределами места расположения максимума. Симуляция детерминированная, а не Монте-Карло, так что сложность не имеет большого значения. Нет никаких явных границ или ограничений на параметры. Еще одна часть информации, которую я имею (и не упоминал ранее), это ощущение размера максимально необходимого. В то время как я ищу глобальный максимум, я также был бы счастлив с чем-либо такого масштаба или большего - я не знаю, окажет ли это какую-либо помощь. Надеюсь, если я сделаю скрининг более систематически (латинские гиперкубы, как предложено Брайаном Борчером), это проявится.
источник
Ответы:
Генетические алгоритмы - очень плохой выбор, когда целевая функция чрезвычайно дорога в оценке - эти методы требуют большого количества функциональных оценок в каждом поколении (что может помочь с параллелизмом) и большого количества поколений (которые по своей сути последовательны). Через два дня на поколение это будет очень медленно.
Вы не упомянули, откуда возникла эта проблема. Вы статистически анализируете поверхность правдоподобия (в этом случае вам нужно больше, чем просто оптимальные параметры и объективное значение) или просто оптимизируете целевую функцию?
Вы не упомянули, является ли вычисление целевой функции точным или неточным. Часто бывает так, что когда целевая функция рассчитывается с помощью симуляции Монте-Карло, значения довольно шумные. Это может ввести в заблуждение многие алгоритмы оптимизации. Методы поверхности отклика помогают решить эту проблему, сгладив шум.
Вы не упомянули никаких ограничений на параметры. Они ограничены? Есть ли линейные или нелинейные ограничения между параметрами?
Скорее всего, большинство из ваших 30 параметров не так уж важны для проблемы. Я бы предложил использовать экспериментальную методику проверки проектирования, чтобы сначала определить, какой из 30 параметров действительно важен для оптимизации, а затем после установки разумных значений для неважных параметров выполнить оптимизацию по важным параметрам. Такие методы, как выборка из латинского гиперкуба, могут быть очень полезны при отборе относительно несущественных параметров. На этом этапе проверки вы можете легко использовать сотни процессоров.
После уменьшения количества параметров до более разумного размера, я бы использовал метод поверхности отклика для оптимизации оставшихся параметров. Если поверхность отклика действительно является мультимодальной, и вы используете слишком простую модель поверхности отклика (обычно люди просто подгоняют квадратичную модель), то вы можете легко ввести в заблуждение и упустить глобальный максимум. Быть осторожен! На этом этапе вы снова можете использовать множество процессоров, используя экспериментальный дизайн, который дает очень хороший охват пространства параметров. Ищите расчетные точки, где подогнанная модель далека от расчетных значений - это указывает на то, что поверхность отклика не работает должным образом в этой области. Возможно, вам придется строить ответные поверхности в отдельных областях пространства параметров.
В качестве последнего шага вы можете начать с параметров оптимизации поверхности отклика и попытаться улучшить значения экранированных параметров, корректируя их по одному (спуск по координатам).
Я поддержу рекомендацию DAKOTA как основу для такого рода оптимизации. Если вы собираетесь выполнять эту оптимизацию только один раз, то может быть проще организовать вычисления вручную, но если вы собираетесь делать это многократно, то DAKOTA будет очень полезен.
источник
У меня нет никакого опыта с этими видами решателей; некоторые из моих коллег использовали их. DAKOTA кажется программным пакетом, рекомендованным для такого рода задач. Он включает в себя интерфейс, который позволяет пользователю многократно отправлять задания в очередь отправки и использовать выходные данные для исследования параметров, анализа чувствительности и т. Д. Я не достаточно знаком с ним, чтобы знать, будет ли он использовать много симуляций. одновременно.
Предполагая, что ваши параметры непрерывны, если показатель качества изменяется плавно при изменении параметров, то суррогатная модель должна выполнять разумную работу по подгонке показателя качества, а информация о суррогатном деривате должна быть полезной для уточнения сходимости. Для 30 параметров также должны быть полезны детерминированные методы без производной оптимизации; опять же, гладкость должна помочь. Напротив, генетические алгоритмы вообще не будут использовать производную информацию и часто требуют настройки таких параметров, как частота мутаций, скорость рекомбинации и параметры отбора, для достижения хорошей производительности. В качестве алгоритмического выбора я бы использовал генетические алгоритмы как запасной вариант, потому что я ожидал, что хорошо разработанная суррогатная оптимизация или метод детерминированной оптимизации без производных будет иметь лучшее поведение сходимости.
источник
Посмотрите на 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. Я сейчас пробую это.
источник
Если вы не можете позволить себе 30 прогонов, каждый варьируя один параметр, измените их по группам:
например, 8 прогонов, каждый из которых изменяет 4 параметра, затем уточните лучшие 2 прогона / 8 параметров ...
(Я понятия не имею, как компромисс выигрыш информации против общего времени выполнения; многорукий бандит ?)
источник
Вот код, который позволяет эффективно оптимизировать дорогостоящие функции черного ящика, используя многоядерные процессоры.
Описание математики, стоящей за кодом, приведено здесь .
источник