Альтернатива функции fmincon MATLAB с открытым исходным кодом?
-
09-06-2019 - |
Вопрос
Существует ли альтернатива MATLAB с открытым исходным кодом fmincon
функция для ограниченной линейной оптимизации?Я переписываю программу MATLAB для использования Python / NumPy / СциПи и это единственная функция, эквивалента которой я не нашел.Решение, основанное на NumPy, было бы идеальным, но подойдет любой язык.
Решение
Является ли ваша проблема выпуклой?Линейный?Нелинейный?Я согласен, что SciPy.optimize, вероятно, справится с этой задачей, но fmincon - это своего рода базука для решения задач оптимизации, и вам будет лучше, если вы сможете ограничить его одной из приведенных ниже категорий (повышая уровень сложности для эффективного решения)
Линейная программа (LP) Квадратичная программа (QP) Выпуклая квадратично ограниченная квадратичная программа (QCQP) Коническая программа второго порядка (SOCP) Полуопределенная программа (SDP) Нелинейная выпуклая задача Невыпуклая задача
Существуют также комбинаторные задачи, такие как линейные программы со смешанным целым числом (MILP), но вы не упомянули о каких-либо ограничениях интегральности, достаточно сказать, что они относятся к другому классу задач.
Пакет CVXOpt будет вам очень полезен, если ваша проблема выпуклая.
Если ваша проблема не является выпуклой, вам нужно выбрать между поиском локального решения или глобального.Многие выпуклые решатели "как бы" работают в невыпуклой области.Поиск хорошего приближения к глобальному решению потребовал бы некоторой формы Имитации Отжига или генетического алгоритма.Поиск глобального решения потребует перечисления всех локальных решений или комбинаторной стратегии, такой как ветвление и граница.
Другие советы
Программное обеспечение для оптимизации Python:
OpenOpt ( Открытый ОПТ ) http://openopt.org (этот основан на numpy, как вы пожелаете, с автоматической дифференциацией с помощью FuncDesigner)
Пьомо https://software.sandia.gov/trac/coopr/wiki/Package/pyomo
Пакет Python с открытым исходным кодом,СциПи, имеет довольно большой набор процедур оптимизации, включая некоторые для многомерных задач с ограничениями (я полагаю, это то, что делает fmincon).После установки SciPy введите следующее в командной строке Python
справка (scipy.optimize)
Итоговый документ является обширным и включает в себя следующее, которое, я полагаю, может быть вам полезно.
Constrained Optimizers (multivariate)
fmin_l_bfgs_b -- Zhu, Byrd, and Nocedal's L-BFGS-B constrained optimizer
(if you use this please quote their papers -- see help)
fmin_tnc -- Truncated Newton Code originally written by Stephen Nash and
adapted to C by Jean-Sebastien Roy.
fmin_cobyla -- Constrained Optimization BY Linear Approximation
GNU Октава это еще один клон MATLAB, в котором может быть то, что вам нужно.
Для численной оптимизации в Python вы можете ознакомиться с решателями OpenOpt:
Взгляните на http://www.aemdesign.com/downloadfsqp.htm.
Там вы найдете C-код, который обеспечивает ту же функциональность, что и fmincon
.(Однако, используя другой алгоритм.Вы можете ознакомиться с руководством, если вас интересуют подробности.)
Это открытый исходный код, но не под лицензией GPL.
Существует программа под названием SciLab ( Скалабор ) это клон MATLAB.
Я вообще им не пользовался, но у него открытый исходный код и, возможно, есть функция, которую вы ищете.
Я не знаю, есть ли это там, но есть дистрибутив python под названием Восторженная мысль возможно, там есть то, что вы ищете.Он был разработан специально для анализа данных и содержит более 60 дополнительных библиотек.