Альтернатива с открытым исходным кодом для функции MATLAB fmincon? - PullRequest
31 голосов
/ 08 сентября 2008

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

Ответы [ 8 ]

27 голосов
/ 13 октября 2008

Является ли ваша проблема выпуклой? Линейный? Нелинейная? Я согласен, что SciPy.optimize, вероятно, справится с этой задачей, но fmincon - это своего рода базука для решения задач оптимизации, и вам будет лучше, если вы сможете ограничить ее одной из нижеуказанных категорий (повышая уровень сложности решения. эффективно)

Линейная программа (LP) Квадратичная программа (QP) Выпуклая квадратично-квадратичная программа (QCQP) Программа второго конуса (SOCP) Полуопределенная программа (SDP) Нелинейная выпуклая задача Невыпуклая задача

Существуют также комбинаторные задачи, такие как смешанные целочисленные линейные программы (MILP), но вы не упомянули какие-либо ограничения целостности, достаточно сказать, что они попадают в другой класс задач.

Пакет CVXOpt будет вам полезен, если ваша проблема выпуклая.

Если ваша проблема не выпуклая, вам нужно выбрать между поиском локального решения или глобальным решением. Многие выпуклые решатели «своего рода» работают в невыпуклой области. Для нахождения хорошего приближения к глобальному решению потребуется некоторая форма имитации отжига или генетический алгоритм. Поиск глобального решения потребует перечисления всех локальных решений или комбинаторной стратегии, такой как Branch and Bound.

17 голосов
/ 06 декабря 2009

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

13 голосов
/ 16 сентября 2008

Пакет 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
4 голосов
/ 08 сентября 2008

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

3 голосов
/ 19 апреля 2009

Для численной оптимизации в Python вы можете взглянуть на решатели OpenOpt:

http://openopt.org/NLP

http://openopt.org/Problems

1 голос
/ 14 января 2009

Посмотрите на http://www.aemdesign.com/downloadfsqp.htm.

Там вы найдете код C, который обеспечивает те же функции, что и fmincon. (Однако, используя другой алгоритм. Вы можете прочитать руководство, если вас интересуют подробности.)

Это с открытым исходным кодом, но не под GPL.

1 голос
/ 08 сентября 2008

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

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

0 голосов
/ 08 сентября 2008

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

...