Библиотека линейного программирования для C++ на Linux

Вопрос или проблема

В настоящее время я сталкиваюсь с задачей линейного программирования, которую хотел бы решить на C++. Существуют равенства и неравенства, т.е. макс a^{T} x при условии Bx >= c и Dx = e.

Какие активно поддерживаемые библиотеки существуют с хорошим интерфейсом для C++? Что бы вы порекомендовали?

Большое спасибо!

Платформа: Linux (Debian)
Язык программирования: C++ для интерфейса
Лицензия: “бесплатная” (т.е. не обязательно открытая типа “бесплатно”)

Minizinc IDE бесплатна и содержит несколько бесплатных решателей, а также дополнительные сторонние решатели. На странице “программное обеспечение” Minizinc документируется, как реализованы библиотеки и для чего они полезны.

Ответ или решение

Для решения задачи линейного программирования на языке C++ в среде Linux существуют несколько высококачественных библиотек, которые активно поддерживаются и могут удовлетворить ваши требования. Данная область программирования имеет множество решений, каждое из которых имеет свои сильные и слабые стороны. Мы рассмотрим несколько из них, акцентируя внимание на их особенностях, лицензировании и применимости к вашим задачам.

1. Eigen

  • Описание: Eigen – это современная библиотека для работы с линейной алгеброй, которая также поддерживает операции, необходимые для решения задач линейного программирования.
  • Преимущества:
    • Простота в использовании и интеграции в C++ проекты.
    • Широкая функциональность, включая матричные операции и численные методы.
    • Документация и примеры кода помогают быстро освоить библиотеку.
  • Лицензия: MPL2 (Mozilla Public License), что позволяет использовать её без обязательств публикации производных работ.

2. Coin-OR Clp

  • Описание: Clp – это библиотека для решения задач линейного программирования, входящая в семью проектов Coin-OR (Computational Infrastructure for Operations Research).
  • Преимущества:
    • Эффективные алгоритмы для больших задач LP.
    • Хорошо документированная C++ API; множество примеров и тестов.
    • Активная поддержка и обновления от сообщества.
  • Лицензия: EPL (Eclipse Public License); свободное использование в коммерческих и некоммерческих проектах.

3. GLPK (GNU Linear Programming Kit)

  • Описание: GLPK – это набор библиотек и программных утилит для линейного и целочисленного программирования.
  • Преимущества:
    • Поддержка нелинейного программирования и смешанных задач.
    • Широкая функциональность, включая возможности для работы с символьными выражениями и драйверами для различных языков.
    • Переиспользуемые компоненты для интеграции в другие приложения.
  • Лицензия: GPL (GNU General Public License); свободно, но требует обнародования производных работ.

4. Lpsolve

  • Описание: lpsolve — это библиотека для решения задач линейного и смешанного целочисленного программирования.
  • Преимущества:
    • Простой в использовании API.
    • Поддержка наиболее распространенных интерфейсов, включая C/C++.
    • Возможность решать как малые, так и большие задачи, включая неравенства.
  • Лицензия: LGPL (Lesser General Public License); возможность использования в закрытых проектах с минимальными ограничениями.

5. Gurobi

  • Описание: Gurobi – это мощный коммерческий решатель для задач линейного, целочисленного и квадратичного программирования.
  • Преимущества:
    • Один из самых быстрых и эффективных решателей на рынке.
    • Хорошая поддержка C++ API и широкий спектр примеров.
    • Бесплатная лицензия для учебных и исследовательских учреждений.
  • Лицензия: Коммерческая лицензия, но предоставляет бесплатный доступ для академического использования.

Рекомендации

Если вы ищете библиотеку с хорошей производительностью и функциональностью, рекомендуется обратить внимание на Coin-OR Clp и Gurobi (при условии, что вы имеете право использовать последнюю в своей среде). Если же важна возможность интеграции в существующие проекты без ограничения на лицензии, то Eigen или GLPK могут стать отличным выбором.

Заключение

То, какую библиотеку вы выберете, зависит от специфики вашей задачи, требований к производительности и лицензионных ограничений. Исходя из вашего описания, вы имеете доступ к широкому спектру библиотек, которые помогут решить задачу линейного программирования на C++ в системах Linux. Рекомендуется протестировать несколько библиотек на небольших примерах, чтобы оценить их пригодность для ваших нужд.

Оцените материал
Добавить комментарий

Капча загружается...