Я решил радикально отредактировать свой ответ, основываясь на некоторых комментариях.
Я не использовал TAO. Из рассмотрения документации кажется, что единственный способ, которым TAO может решить ограниченные задачи оптимизации (исключая особый случай только рамочных ограничений), состоит в том, чтобы преобразовать задачу в вариационное неравенство, используя условия Каруша-Куна-Такера (KKT) , которые необходимы при квалификации ограничений (тип, который я обычно вижу, это условие точки Слейтера ), и достаточны при выпуклости цели и ограничений (в более общем случае - тип 1). ЕслиfЕсли он невыпуклый, то формулировка вариационного неравенства с использованием условий KKT НЕ эквивалентна исходной задаче оптимизации, поэтому, строго говоря, если вам нужен глобальный оптимум для задачи оптимизации, вы не должны выражать его как вариационное неравенство. В любом случае было бы трудно найти глобальный оптимум для оптимизации с ограничением по PDE (см. Ниже), поэтому, возможно, игнорирование этой детали хорошо. Учитывая то, что сказал Вольфганг, я бы скептически относился к использованию TAO; Я уже настроен скептически, потому что он не реализует методы решения нелинейных программ (НЛП) как НЛП, а не вариационные неравенства.
Я не эксперт по оптимизации с ограничением PDE; коллеги и сотрудники шахты работают над проблемами оптимизации, связанными с ODE. Я знаю, что для навязчивых формулировок Ларри Биглер (и другие) будет использовать методы коллокации, чтобы дискретизировать PDE и сделать его очень большим, разреженным НЛП, а затем он решит его, используя методы внутренней точки. Чтобы действительно решить проблему с глобальной оптимальностью, вам также необходимо генерировать выпуклые релаксации, но, насколько я знаю, этот подход не используется, потому что проблемы оптимизации, связанные с PDE, приводят к таким большим НЛП, что было бы трудно решить их глобальная оптимальность. Я упоминаю эти детали только потому, что формулировка проблемы сильно влияет на выбор пакета решения. Для неинтрузивных формулировок повторные решения PDE дают информацию о градиенте для алгоритмов оптимизации.
Некоторые люди, которые изучают проблемы оптимизации, связанные с ODE, используют аналогичный подход, заключающийся в дискретизации проблемы с использованием коллокации и численного метода, а затем ослаблении результирующей НЛП для получения выпуклой формулировки, используемой в алгоритме глобальной оптимизации. Альтернативный подход к оптимизации с ограничением ODE состоит в том, чтобы ослабить проблему и затем дискретизировать ODE, что является подходом, принятым в моей лаборатории. Можно было бы ослабить некоторые классы проблем оптимизации, связанных с PDE, но я не знаю какой-либо существующей работы, проделанной над этой проблемой. (В какой-то момент это был потенциальный проект в моей лаборатории.)
В конечном счете, важна не дифференцируемость исходного PDE, а дифференцируемость дискретизации по отношению к переменным решения.
Если дискретизированная задача является дважды дифференцируемой по отношению к переменным решения, следующие пакеты будут вычислять локальное решение:
- IPOPT - это программа для определения внутренних точек с открытым исходным кодом, разработанная Андреасом Вехтером из IBM. Это очень качественный код. Как решатель изнутри, он лучше подходит для целевых функций с большими разреженными матрицами Якоби и будет полезен для оптимизации с ограничением по PDE.
- SNOPT - это коммерческий решатель последовательного квадратичного программирования, который является еще одним высококачественным кодом. Это лучше для целевых функций с небольшими, плотными якобиевыми матрицами, поэтому я не ожидаю, что это будет полезно для оптимизации с ограничением по PDE, но вы можете попробовать.
- NLopt - это небольшой открытый исходный код, написанный Стивеном Джонсоном в MIT, который содержит базовые реализации ряда алгоритмов нелинейной оптимизации. Все алгоритмы должны быть адекватными для решения связанных задач.
fmincon
В Matlab реализован ряд алгоритмов (включая внутреннюю точечное и последовательное квадратичное программирование) для нелинейной оптимизации
- GAMS и AMPL являются коммерческими языками моделирования, используемыми для формулирования задач оптимизации, и содержат интерфейсы для большого числа решателей нелинейного программирования. Я знаю, что у GAMS есть пробная версия, которую можно использовать для небольших проблем, и экземпляры проблем также можно отправлять на сервер NEOS для решения.
Однако возможно, что дискретизация может быть дифференцирована только один раз по отношению к переменным решения, и в этом случае вы должны использовать прогнозируемый наибольший спуск или какой-либо другой метод оптимизации первого порядка при вычислении локального решения. Поскольку многие исследования сосредоточены на проблемах, где могут использоваться методы второго порядка (и когда вы можете их использовать, их превосходные свойства сходимости делают их лучшим выбором), я не смог найти много реализаций наискорейшего спуска, которые не были бы решениями. к домашним задачам. GNU Scientific Library имеет реализацию, но это только для демонстрационных целей. Вы, вероятно, должны были бы написать свою собственную реализацию.
Если проблема является непрерывной только по отношению к переменным решения, то вы можете использовать прямые методы для ее локального решения. Существует отличный обзор прямых методов Колды, Льюиса и Торсона . Наиболее широко известным из этих методов является симплекс-алгоритм Нелдера-Мида . Не гарантируется сходство к локальному минимуму в нескольких измерениях, но в любом случае оно нашло значительное практическое применение.
Выбор пакета действительно зависит от языка, который вы хотите использовать для решения проблемы, если решение связанной с ограничением задачи является только частью алгоритма, который вы хотите реализовать (или если это единственный шаг в вашем алгоритме, в этом случае языки моделирования стать более жизнеспособным для производственного кода), тип и размер проблемы, и, если вам нужен параллелизм.