Я працюю в лабораторії, яка займається глобальною оптимізацією змішаних цілих і невипуклих проблем. Мій досвід роботи з вирішенням питань оптимізації з відкритим кодом полягає в тому, що кращі, як правило, написані на компільованій мові, і вони погано працюють у порівнянні з комерційними пакетами оптимізації.
Якщо ви можете сформулювати свою проблему як явну систему рівнянь і вам потрібен безкоштовний вирішувач, найкраща ставка - це, мабуть, IPOPT, як сказав Арон. Інші безкоштовні вирішувачі можна знайти на веб-сайті COIN-OR . Наскільки мені відомо, у нелінійних розв'язувачів немає прив’язок Python, передбачених розробниками; будь-які прив’язки, які ви знайдете, будуть сторонніми. Для отримання хороших рішень вам також доведеться обгортати будь-який нелінійний, опуклий вирішувач, який ви знайдете, у відповідній евристиці стохастичної глобальної оптимізації, або в детермінованому алгоритмі глобальної оптимізації, такому як гілка і пов'язана. Крім того, ви можете використовувати Bonmin або Couenne, обидва вони - детерміновані нерозпуклі оптимізатори для оптимізації, які працюють добре в порівнянні з найсучаснішим рішенням, BARON .
Якщо ви можете придбати комерційний вирішувач оптимізації, ви можете розглянути мову моделювання GAMS , яка включає кілька нелінійних вирішувачів оптимізації. Особливо слід згадати інтерфейси для вирішувачів CONOPT, SNOPT та BARON. (CONOPT і SNOPT - опуклі розв'язувачі.) Рішення kludgey, яке я використовував у минулому, - це використовувати прив'язки мови Fortran (або Matlab) до GAMS, щоб написати файл GAMS і викликати GAMS з Fortran (або Matlab) для обчислення. рішення задачі оптимізації. GAMS володіє мовою Python та дуже чуйним обслуговуючим персоналом, який готовий допомогти, якщо є якісь проблеми. (Відмова: Я не маю приналежності до GAMS, але моя лабораторія має ліцензію GAMS.) Комерційні рішення не повинні бути гіршими, ніжfmincon
; насправді я був би здивований, якби вони не були набагато кращими. Якщо ваші проблеми мають достатньо невеликі розміри, можливо, вам навіть не знадобиться купувати ліцензію GAMS та ліцензії для вирішувачів, оскільки оцінювальна копія GAMS може бути завантажена з їх веб-сайту. В іншому випадку ви, мабуть, захочете вирішити, які вирішувати придбати разом із ліцензією GAMS. Варто відзначити, що BARON вимагає змішаного цілого цілого лінійного програмування і що ліцензії на два найкращі рішачі лінійного програмування змішаного цілого числа CPLEX та GUROBI є безкоштовними для науковців, тому, можливо, вам вдасться піти з просто придбання інтерфейсів GAMS ніж інтерфейси та ліцензії на вирішення, які можуть заощадити чималі гроші.
Цей пункт повторюється: для будь-якого з детермінованих невипуклих розв'язків оптимізації, про які я згадував вище, ви повинні мати можливість сформулювати модель як явний набір рівнянь. В іншому випадку алгоритми невипуклої оптимізації не працюватимуть, оскільки всі вони покладаються на символічний аналіз для побудови опуклих релаксацій для алгоритмів, пов'язаних з розгалуженнями та пов'язаними.
ОНОВЛЕННЯ: Одна думка, яка мені спочатку не прийшла в голову , - це те, що ви також можете викликати Інструментарій для розширеної оптимізації ( TAO ) та PETSc, використовуючи tao4py та petsc4py. та засоби ACTS .
ОНОВЛЕННЯ №2: Виходячи з додаткової інформації, яку ви згадали, найкращі ставки для методів послідовного квадратичного програмування (SQP). Методи SQP, як правило, вважаються більш надійними, ніж методи внутрішніх точок, але мають недолік, що вимагає щільних лінійних рішень. Оскільки ви більше піклуєтесь про надійність, ніж про швидкість, SQP стане вашим найкращим вибором. Я не можу знайти хорошого вирішувача SQP там, написаного на Python (і, мабуть, не міг і Свен Лейфер у Argonne у цьому технічному звіті ). Я здогадуюсь, що алгоритми, реалізовані в таких пакетах, як SciPy та OpenOpt, мають базовий скелет деяких алгоритмів SQP, але без спеціалізованої евристики, яку використовують більш досконалі коди для подолання проблем конвергенції. Ви можете спробувати NLopt, написаний Стівеном Джонсоном в MIT. Я не сподіваюся на це, тому що він не має жодної репутації, про яку я знаю, але Стівен Джонсон - геніальний хлопець, який пише гарне програмне забезпечення (адже він написав співпрацю з FFTW). Він реалізує версію SQP; якщо це гарне програмне забезпечення, дайте мені знати.
Я сподівався, що TAO матиме щось на шляху обмеженого рішення оптимізації, але це не так. Ви, звичайно, могли б використати те, що вони мають створити; у них там багато компонентів. Як ви вже зазначали, для вас це буде набагато більше, і якщо ви збираєтеся в таких проблемах, ви також можете бути розробником ТАО.
З цією додатковою інформацією ви, швидше за все, отримаєте кращі результати, викликаючи GAMS від Python (якщо це взагалі є варіант) або намагаєтеся виправити інтерфейс IPOPT Python. Оскільки IPOPT використовує метод внутрішньої точки, він не буде настільки надійним, але, можливо, реалізація методом внутрішніх точок Андреаса значно краща, ніж реалізація SQP від Matlab, і в цьому випадку ви можете зовсім не принести шкоди надійності. Вам доведеться запустити кілька кейсів, щоб точно знати.
Ви вже знаєте хитрість переформулювати обмеження раціональної нерівності як обмеження поліноміальної нерівності (це у вашій книзі); Причина, яка допоможе BARON та деяким іншим невипуклим розв'язкам, полягає в тому, що він може використовувати терміновий аналіз для створення додаткових дійсних нерівностей, які він може використовувати як скорочення для поліпшення та прискорення конвергенції розв'язувача.
Виключаючи прив’язки GAMS Python та інтерфейс Python до IPOPT, відповідь "ні", ще немає якісних нелінійних програмних рішень для програмування Python. Можливо, @Dominique змінить це з NLPy.
ОНОВЛЕННЯ №3: Більше диких ударів при пошуку розв'язувача на основі Python дало PyGMO , який є набором прив'язки Python до PaGMO, глобального багатообективного рішення оптимізації на основі C ++. Хоча він був створений для багатообективної оптимізації, він також може використовуватися для єдиного об'єктивного нелінійного програмування і має інтерфейси Python для IPOPT та SNOPT, серед інших вирішувачів. Він був розроблений в рамках Європейського космічного агентства , тому сподіваємось, що за ним стоїть громада. Він також був випущений порівняно недавно (24 листопада 2011 р.).