Я вирішив радикально відредагувати свою відповідь на основі деяких коментарів.
Я не використовував ТАО. З огляду на документацію здається, що єдиним способом, яким 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 має реалізацію, але це тільки для демонстраційних цілей. Ймовірно, вам потрібно буде кодувати власну реалізацію.
Якщо проблема є лише безперервною щодо змінних рішень, тоді ви можете використовувати прямі методи для її вирішення локально. Існує відмінне опитування прямих методів Колдою, Льюїсом та Торкзоном . Найбільш широко відомим із цих методів є алгоритм симплекса Nelder-Mead . Це не гарантовано збільшиться до локального мінімуму в кількох вимірах, але все-таки знайшло значне практичне використання.
Вибір пакета дійсно залежить від мови, який ви хочете використовувати для вирішення проблеми, якщо вирішення обмеженої проблеми є лише частиною алгоритму, який ви хочете реалізувати (або якщо це єдиний крок у вашому алгоритмі, в цьому випадку мови моделювання стають більш життєздатними для виробничого коду), типу та розміру проблеми, і якщо вам потрібен якийсь паралелізм.