Що найшвидше програмне забезпечення (з відкритим кодом) для вирішення змішаної цілочислової проблеми програмування


14

У мене змішана ціла проблема програмування. І я зараз використовую GLPK як свій вирішувач. Але я виявив, що GLPK добре підходить для проблеми лінійного програмування, але для змішаного цілого програмування це потребує набагато більшого часу, тому не відповідає нашій вимозі. Я так шукаю іншого програмного забезпечення. Чи є інші хороші інструменти з відкритим кодом для вирішення змішаної цілочислової проблеми програмування з швидкою швидкістю? Спасибі!


Ви бачили порівняння з SCIP ?
Алі

Відповіді:


14

Якщо ви хочете щось з відкритим кодом, ви, мабуть, захочете спробувати код CBC COIN (у них також є кілька інших вирішувачів MILP, як, наприклад, філія-ціна, або SYMPHONY).

Gurobi та CPLEX будуть значно швидшими, і станом на зустріч INFORMS 2011 або 2012 років, Gurobi був швидшим за CPLEX (хоча показники продуктивності, звичайно, залежать від проблеми). Що стосується мілп, вирішеного в моїй тезі, Гуробі був приблизно в 15-100 разів швидшим, ніж CBC, а CPLEX був майже таким же швидким, як Гуробі, але дуже трохи повільніше (як у 12-80 разів швидше).

Хоча найгірший показник дійсно експоненційний, час виконання буде сильно залежати від структури проблеми. Навряд чи вам вдасться вирішити MILP з мільйонами змінних, якщо ви не використовуєте спеціальну структуру (можливо, якщо це стохастична програма, яку можна розкласти на багато набагато менших проблем), але цілком можливо вирішити нетривіальну MILP з тисячами змінні менше ніж за хвилину. (Звичайно, на вирішення цих проблем також знадобиться година чи більше.)

Як зазначає Брайан Борчерс, у обох CPLEX та Gurobi доступні безкоштовні ліцензії для деяких дослідників, один із цих двох програмних пакетів справді найкраще використовувати як вирішувач MILP загального призначення.


6

Змішані цілочисельні задачі лінійного програмування вирішити набагато складніше, ніж задачі лінійного програмування. З точки зору складності обчислень, LP можна вирішити в поліномічний час, тоді як розв’язання MILP - це проблема NP-Hard. Відомі алгоритми розв’язання MILP мають найгіршу експоненційну складність.

Існують і інші програмні пакети для змішаного цілочисленного лінійного програмування, які ви можете подивитися, включаючи SCIP (безкоштовно для академічного використання), CPLEX (комерційний, але має можливість академічного ліцензування) та GUROBI (також комерційний з можливістю академічного ліцензування.) Один чи більше з цих пакунків може бути значно швидше, ніж GLPK у ваших проблемах, але не сподівайтесь, що будь-який з них буде настільки ж швидким у вирішенні MILP, як і у вирішенні LP подібного розміру.


4

Якщо ви хочете спробувати купу різних вирішувачів, спробуйте рамки моделювання Julia JuMP . Це дозволяє записати свою модель як модель JuMP, а потім вимкнути розв'язувачі одним рядком коду. Наприклад, для проблем з MILP ви можете вибрати серед вирішувачів Bonmin, Cbc, Couenne, CPLEX, GLPK, Gurobi та MOSEK. Через це, якщо ви пишете це в JuMP, ви можете просто спробувати всі вирішувачі, про які згадував Джефф, і побачити, що працює, без того, щоб писати купу коду. Ваші власні особисті тести стануть найкращим джерелом знань про те, які найшвидші алгоритми є для ваших проблем.


Чи додає рамки JuMP значно більше витрат?
naught101

1
Ні, JuMP робиться за допомогою макросів, так що це під час компіляції. Насправді, те, що JuMP використовує макроси для перезапису коду та використання автодиференціації для обчислення ефективних функцій для градієнтів, якобійців та гессіанців, так це буде швидше у тих випадках, коли б вам інакше не надали аналітичну форму для градієнта / Якобійська / Гессіанська. Ви можете фактично перевірити через, @code_llvmщоб перевірити отриманий код складання, щоб побачити, що код клею по суті є нічим (це також тому, що Джулія наївно використовує функціональні покажчики та ті ж бітові масиви, що і C / Fortran).
Кріс Ракаукас

@ChrisRackauckas Який вирішувач краще працює для нелінійних проблем із нелінійними обмеженнями?
скан

Це зовсім інше питання, якщо його, мабуть, не слід ставити в коментарі, але я схильний використовувати JuMP з NLopt або IPOPT залежно від необхідних обмежень і чи потрібна глобальна чи локальна оптимізація.
Кріс Ракаукас

3

Після інших пропозицій я використовував (комерційний) GAMS для багатьох проектів. Це дуже прямо вперед; все, що вам потрібно зробити, - це скласти математичну постановку вашої проблеми. Він підбирає змінні, обмеження, цільові функції та всі вхідні дані. Потім він пропонує ряд розв'язувачів (оптимізаторів) для будь-якого випадку. Залежно від вашого випадку, ви додаєте більш складні рішення.

Безумовно, ЛЕГКО варто подивитися. Рамка з відкритим кодом.

Термін "швидкий" дуже розпливчастий! Вам потрібно бути більш конкретним; Швидкий за кількістю повторень? кількість оцінок? витрачений час? поєднання цих?

Однак якщо ви не шукаєте програмне забезпечення, а просто хочете вирішити проблему, я можу запропонувати використовувати глобальний оптимізатор NSGA-II, який є оптимізатором з відкритим кодом з дуже високою репутацією та продуктивністю.

Якщо ви надасте більше інформації, я міг би точно вказати.


1
Вам потрібно серйозно розглянути [openMDAO] [1], який розробляється / підтримується NASA і він досить гнучкий!
T3rmInAt0r
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.