Альтернатива с открытым исходным кодом функции MATLAB fmincon?

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

Вы пробовали Jmodelica? Помимо OpenModelica, это реализация языка Modelica с открытым исходным кодом. Я думаю, что у Modelica тоже есть оболочки для Python. В пакете Jmodelica есть инструмент оптимизации под названием Optimica, если я не ошибаюсь.

Foad 24.11.2017 12:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
35
1
32 534
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Есть программа под названием SciLab, которая является клоном MATLAB.

Я вообще не использовал его, но он имеет открытый исходный код и может иметь ту функцию, которую вы ищете.

GNU Octave - еще один клон MATLAB, который может иметь то, что вам нужно.

Я не знаю, есть ли он там, но есть дистрибутив Python под названием Задумывался, который может иметь то, что вы ищете. Он был разработан специально для анализа данных и имеет более 60 дополнительных библиотек.

Два других человека добавили ссылки, которые не были уверены, соответствуют ли их предложения тому, что хотел исходный плакат. Почему голоса против. Здесь было бы неплохо сделать комментарий.

wcm 21.10.2008 16:33

Пакет 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:

http://openopt.org/NLP

http://openopt.org/Problems

Программное обеспечение для оптимизации Python:

На самом деле он не написан на Python, но я бы добавил этот инструмент в список, поскольку у него есть Python API (называемый GEKKO), который позволяет вам получить доступ к некоторым очень мощным решателям из скриптов Python (включая IPOPT и APOPT). Подробности см. На сайте APMonitor.com. Он в первую очередь предназначен для управления и оптимизации динамических систем.

Bill 16.07.2019 02:09

Другие вопросы по теме