Веб-сайт | www.coin-or.org |
---|
Вычислительная инфраструктура для исследования операций (COIN-OR ) - это проект, направленный на «создание для математического программного обеспечения того, что есть в открытой литературе для математической теории. " Открытая литература (например, исследовательский журнал) предоставляет сообществу операционных исследований (OR) процесс экспертной оценки и архив. Статьи в журналах исследования операций по математической теории часто содержат подтверждающие численные результаты вычислительных исследований. Программные реализации, модели и данные, используемые для получения численных результатов, обычно не публикуются. Статус-кво мешал исследователям воспроизводить результаты вычислений, проводить справедливые сравнения и расширять существующие знания.
Успех Linux, Apache и других проектов популяризировал модель с открытым исходным кодом разработки и распространения программного обеспечения. Группа из IBM Research предложила открытый исходный код как аналогичный, но жизнеспособный способ публикации программного обеспечения, моделей и данных. COIN-OR был задуман как инициатива по продвижению открытого исходного кода в сообществе исследователей вычислительных операций и по предоставлению интерактивных ресурсов и услуг хостинга, необходимых для того, чтобы другие могли запускать свои собственные проекты с открытым исходным кодом.
Веб-сайт COIN-OR был запущен в качестве эксперимента в 2000 году в связи с 17-м Международным симпозиумом по математическому программированию в Атланте, штат Джорджия. В 2007 году у COIN-OR было 25 проектов приложений, включая инструменты для линейного программирования (например, COIN-OR CLP), нелинейного программирования (например, IPOPT ), целочисленное программирование (например, CBC, Bcp и COIN-OR SYMPHONY), языки алгебраического моделирования (например, Coopr ) и многое другое. К 2011 году это количество выросло до 48 проектов. COIN-OR находится в ведении Института исследований операций и управленческих наук, INFORMS, и управляется образовательным некоммерческим фондом COIN-OR.
COIN-OR LP (CLP или Clp) - это решатель линейного программирования с открытым исходным кодом написано на C ++. Он опубликован под Стандартной общественной лицензией, поэтому его можно использовать в проприетарном программном обеспечении без каких-либо ограничений Стандартной общественной лицензии GNU. CLP в первую очередь предназначен для использования в качестве вызываемой библиотеки, хотя может быть создана автономная исполняемая версия. Он разработан, чтобы быть таким же надежным, как и любой коммерческий решатель (хотя и немного медленнее), и иметь возможность решать очень большие проблемы.
CLP разработан для решения таких задач линейного программирования, как:
с до миллионов переменных и / или ограничений. Его основным алгоритмом является симплексный алгоритм .
CLP, который используется в других проектах COIN-OR, таких как SYMPHONY, Branch Cut and Price (BCP), COIN-OR Branch and Cut (CBC ) и другие.
COIN-OR ветвление и вырезание (CBC или Cbc) - это решающая программа смешанного целочисленного программирования с открытым исходным кодом, написанная на C ++. Его можно использовать и как автономный исполняемый файл, и как вызываемую библиотеку (через язык математического программирования (AMPL ) [изначально], Общая система алгебраического моделирования (GAMS) [с использованием ссылки, предоставленные проектами COIN-OR Optimization Services (OS) и GAMSlinks], [через проект CoinMP], AIMMS [через проект AIMMSlinks], PuLP, CMPL, OpenSolver for Excel, JuMP или MiniZinc ).
Однопроцессная или многопроцессорная оптимизация в сетях (SYMPHONY) является открытым исходным кодом Структура Branch and Cut для решения смешанных целочисленных программ (MIP) в гетерогенных сетях. Он может использовать CLP, CPLEX, XPRESS или другие решатели линейного программирования для решения лежащих в основе линейных программ.
SYMPHONY - это вызываемая библиотека, которая реализует как последовательные, так и параллельные версии ветвления, сокращения и цены для решения MILP. Алгоритм перехода, отсечения и цены аналогичен алгоритму перехода и границы, но дополнительно включает в себя методы плоскости отсечения и алгоритмы ценообразования. Пользователь библиотеки может настраивать алгоритм любым количеством способов, предоставляя специфичные для приложения подпрограммы для чтения в пользовательских файлах данных, создания плоскостей резки для конкретных приложений или применения пользовательских правил ветвления, что приводит к индивидуальному алгоритму ветвления и разреза. Большинство компонентов алгоритма, например, управление деревом поиска, управление решением линейного программирования, управление пулом разрезов и управление связью, являются внутренними по отношению к библиотеке, и пользователь не должен их трогать. Исполняемые файлы могут быть созданы в любом количестве конфигураций, от полностью последовательных до полностью параллельных с независимо функционирующими генераторами вырезок, пулами вырезок и решателями LP. Распределенная версия в настоящее время работает в любой среде, поддерживаемой протоколом передачи сообщений PVM. Тот же исходный код также может быть скомпилирован для архитектур с общей памятью с использованием любого OpenMP совместимого компилятора.
SYMPHONY считывает файлы MPS (через программу чтения COIN-OR MPS) и GNU MathProg. SYMPHONY не имеет собственного LP-решателя, но может использоваться с такими решателями, как Clp, Cplex, Xpress, через Osi-интерфейс. Вырезы создаются с использованием библиотеки генерации вырезок COIN: CGL. SYMPHONY также имеет специфические для структуры реализации для таких задач, как задача коммивояжера, проблема маршрутизации транспортного средства и т. Д. SYMPHONY также имеет интерактивную оболочку, в которой пользователь может вводить команды для выполнения и управления программой..
PuLP - это средство моделирования LP / IP, написанное на Python. Он может генерировать файлы MPS или LP и вызывать GLPK, CLP / CBC, CPLEX и Гуроби для решения линейных задач. PuLP - это инструмент оптимизации по умолчанию в SolverStudio для Excel.
SMI - это средство моделирования и решения стохастического программирования, написанное на C ++. Он может читать стохастический MPS и предлагает прямые интерфейсы для построения стохастических программ. Он генерирует детерминированную эквивалентную линейную программу, решает ее и предоставляет интерфейсы для доступа к решениям сценария.