Есть ли альтернатива с открытым исходным кодом функции MATLAB fmincon для ограниченной линейной оптимизации? Я переписываю программу MATLAB для использования Python / NumPy / SciPy, и это единственная функция, которой я не нашел эквивалента. Решение на основе NumPy было бы идеальным, но подойдет любой язык.






Есть программа под названием SciLab, которая является клоном MATLAB.
Я вообще не использовал его, но он имеет открытый исходный код и может иметь ту функцию, которую вы ищете.
GNU Octave - еще один клон MATLAB, который может иметь то, что вам нужно.
Я не знаю, есть ли он там, но есть дистрибутив Python под названием Задумывался, который может иметь то, что вы ищете. Он был разработан специально для анализа данных и имеет более 60 дополнительных библиотек.
Два других человека добавили ссылки, которые не были уверены, соответствуют ли их предложения тому, что хотел исходный плакат. Почему голоса против. Здесь было бы неплохо сделать комментарий.
Пакет Python с открытым исходным кодом, SciPy, имеет довольно большой набор процедур оптимизации, в том числе некоторые для многомерных задач с ограничениями (в это я верю 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
Ваша проблема выпуклая? Линейный? Нелинейный? Я согласен с тем, что SciPy.optimize, вероятно, выполнит эту работу, но fmincon - это своего рода базука для решения задач оптимизации, и вам будет лучше, если вы сможете ограничить его одной из категорий ниже (с увеличением уровня сложности для решения эффективно)
Линейная программа (LP) Квадратичная программа (QP) Выпуклая квадратично-ограниченная квадратичная программа (QCQP) Программа конусов второго порядка (SOCP) Полуопределенная программа (SDP) Нелинейная выпуклая задача Невыпуклая задача
Существуют также комбинаторные задачи, такие как смешанные целочисленные линейные программы (MILP), но вы не упомянули никаких ограничений целостности, достаточно сказать, что они относятся к другому классу задач.
Пакет CVXOpt будет вам очень полезен, если ваша проблема выпуклая.
Если ваша проблема не является выпуклой, вам нужно выбрать между поиском локального или глобального решения. Многие выпуклые решатели «вроде» работают в невыпуклой области. Поиск хорошего приближения к глобальному решению потребует некоторой формы имитационного отжига или генетического алгоритма. Поиск глобального решения потребует перечисления всех локальных решений или комбинаторной стратегии, такой как Branch и Bound.
Взгляните на http://www.aemdesign.com/downloadfsqp.htm.
Там вы найдете код C, который обеспечивает ту же функциональность, что и fmincon. (Однако с использованием другого алгоритма. Вы можете прочитать руководство, если вас интересуют подробности.)
Это открытый исходный код, но не под GPL.
Для численной оптимизации в Python вы можете взглянуть на решатели OpenOpt:
Программное обеспечение для оптимизации Python:
OpenOpthttp://openopt.org(этот основан на numpy, как вы хотите, с автоматическим дифференцированием FuncDesigner)
Pyomohttps://software.sandia.gov/trac/coopr/wiki/Package/pyomo
На самом деле он не написан на Python, но я бы добавил этот инструмент в список, поскольку у него есть Python API (называемый GEKKO), который позволяет вам получить доступ к некоторым очень мощным решателям из скриптов Python (включая IPOPT и APOPT). Подробности см. На сайте APMonitor.com. Он в первую очередь предназначен для управления и оптимизации динамических систем.
Вы пробовали Jmodelica? Помимо OpenModelica, это реализация языка Modelica с открытым исходным кодом. Я думаю, что у Modelica тоже есть оболочки для Python. В пакете Jmodelica есть инструмент оптимизации под названием Optimica, если я не ошибаюсь.