CVXOPT VS. OpenOpt

11

Кстати, есть ли еще какая-нибудь высококачественная библиотека выпуклой оптимизации общего назначения для Python / C ++, на которую стоит обратить внимание?

updogliu
источник

Ответы:

11

CVXOPT только решает (гладкие и негладкие) выпуклые задачи, предоставляя доступ к нескольким сторонним выпуклым решателям с гарантированным уровнем сложности в худшем случае. Вы можете задать линейные, выпуклые квадратичные, линейные полуопределенные и многие другие выпуклые типы ограничений.

OpenOpt решает общие (гладкие и негладкие) нелинейные программы, включая задачи с целочисленными ограничениями. В отличие от CVXOPT, он не имеет программного обеспечения для решения полуопределенных программ. Все решатели были написаны самим Дмитрием Крошко и не имеют большой истории, поэтому тестирование, вероятно, было ограничено. OpenOpt сам по себе не является интерфейсом для сторонних разработчиков.

Однако существует OpenOpt Framework (http://openopt.org/OOFramework), который взаимодействует с IPOPT (упоминается в другом комментарии; он не может решить негладкие проблемы), CVXOPT и некоторыми другими решателями, доступными в Python.

Помимо этого интерфейса, между этими пакетами нет никакой связи. Методы совершенно разные; единственными общими вещами могут быть язык Python и доступ к LAPACK.

Для выпуклых задач я также хотел бы порекомендовать
CVX: программное обеспечение Matlab для дисциплинированного выпуклого программирования http://cvxr.com/cvx ,
за которое авторы получили очень престижную премию Била-Хейса-Орчарда в этом году за выдающиеся достижения в области вычислительного математического программирования. , Это написано в Matlab, хотя.
У них также есть Python '' версия '', называемая CVXPY http://www.stanford.edu/~ttinoco/cvxpy/ , но CVXPY - это всего лишь очень хороший и полезный '' дисциплинированный '' интерфейс к CVXOPT, в котором может убедиться, что когда программа синтаксически корректна, это проблема выпуклой оптимизации.

Арнольд Ноймайер
источник
4

OpenOpt, по большей части, просто интерфейс для других решателей. CVXOPT является одним из решателей с открытым исходным кодом, лежащих в основе OpenOpt, поэтому, если у вас нет коммерческого решателя, который вы хотите использовать, вы, вероятно, захотите установить CVXOPT в любом случае. AFAIK, CVXOPT является современным среди библиотек с открытым исходным кодом, по крайней мере, для конусного программирования второго порядка и полуопределенного программирования.

Марк Шиверс
источник
1
Я не думаю, что имеет смысл говорить, что CVXOPT является основным решателем открытого исходного кода, лежащим в основе OpenOpt. Почему это более основной , чем, скажем, IPOPT, или дюжина других , лежащих в основе решателей?
Дэвид Кетчес
возможно, основной SOCP решатель является более точным (?)
Марк Шиверс