Змішане цілочисельне лінійне програмування на Python


75

Чи існує вирішувач змішаного цілочисельного лінійного програмування (MILP) для Python?

Чи може GLPK python вирішити проблему MILP? Я читав, що це може вирішити змішану цілочисельну проблему.
Я дуже новачок у проблемі лінійного програмування. Тому я досить розгублений і не можу насправді диференціювати, якщо змішане цілочисельне програмування відрізняється від змішаного цілочисельного лінійного програмування (MILP).


7
я не надто впевнений, чому голос проти, але я насправді шукав години, і насправді не був впевнений, чи є MILP таким самим, як MIP.
asun

Відповіді:


138

Pulp - це інтерфейс моделювання пітонів, який підключається до вирішувачів, таких як CBC (з відкритим кодом), CPLEX (комерційний), Gurobi (комерційний), XPRESS-MP (комерційний) та YALMIP (з відкритим кодом).

Ви також можете використовувати Pyomo для моделювання проблеми оптимізації, а потім викликати зовнішній вирішувач, а саме CPLEX, Gurobi GLPK та бібліотеку вирішувачів AMPL.

Ви також можете зателефонувати до GLPK з GLPK / Python , PyGLPK або PyMathProg .

Ще однією мовою моделювання є CMPL , яка має інтерфейс python для розв'язувачів MIP (лише для лінійних програм).

Усі вищезазначені розв'язувачі вирішують змішані цілочисельні лінійні програми , тоді як деякі з них (CPLEX, GUROBI та XRESS-MP точно) можуть вирішувати змішані цілі числові квадратичні програми та квадратично обмежені квадратичні програми (а також конічні програми, але це, ймовірно, виходить за рамки цього питання).

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

Зверніть увагу, що CPLEX та GUROBI також мають власні API-інтерфейси python, але вони (а також) XPRESS-MP є комерційними продуктами, але безкоштовними для академічних досліджень. CyLP схожий на Pulp вище, але взаємодіє з розв'язувачами COIN-OR CBC та CGL та CLP.

Зауважте, що є велика різниця у ефективності комерційних та безкоштовних інструментів вирішення проблем : останні значно відстають від перших. SCIP - це, мабуть, найкращий некомерційний вирішувач (оновлення див. Нижче). Його інтерфейс python, PySCIPOpt, тут .

Крім того, погляньте на це питання SO .

Нарешті, якщо вас цікавить простий вирішувач обмежень (не оптимізація), тоді подивіться на python-constraint .

Сподіваюся, це допоможе!

ОНОВЛЕННЯ

Більше вирішувачів та інтерфейсів python, які потрапили до мого радару:

MIPCL , який, здається, є одним із найшвидших і найшвидших некомерційних вирішувачів MIP, має інтерфейс python, який має досить добру документацію . Однак зауважте, що API Python не включає розширену функціональність, яка постачається разом із власною оболонкою MIPCLShell . Мені особливо подобається посібник MIPCL-PY , який демонструє безліч моделей, що використовуються в Operations Management, на додаток до деяких дрібних реалізацій. Це сам по собі дуже цікавий вступний посібник, незалежно від того, яким вирішувачем / API можна скористатися.

Інструменти оптимізації Google , які включають безліч функціональних можливостей, таких як

  • Вирішувач програмування обмежень та вирішувач лінійного програмування ( не MIP )
  • Інтерфейс для розв'язувачів MIP (підтримує CBC, CLP, GLOP, GLPK, Gurobi, CPLEX та SCIP)
  • Спеціалізовані алгоритми для графіків, для проблеми подорожуючого продавця, проблеми маршрутизації транспортного засобу, а також для проблем із упаковкою сміття та ранцем

Він має велику документацію щодо декількох традиційних проблем АБО та простих реалізацій. Я не міг знайти повну документацію по API Python, хоча існують деякі приклади тут . Мені дещо незрозуміло, як інші вирішувачі підключаються до інтерфейсу та чи доступні методи цих вирішувачів.

CVXOPT , пакет з відкритим кодом для опуклої оптимізації, який взаємодіє з GLPK (з відкритим кодом) та MOSEK (комерційний). Він універсальний, оскільки може вирішувати багато класів задач (особливо лінійних, напіввизначених, опуклих нелінійних) другого порядку. Єдиним недоліком є ​​те, що моделювання складних проблем може бути громіздким, оскільки користувачеві потрібно передавати дані способом "Matlab-y" (тобто вказати матрицю, резус-вектори тощо). Однак його можна викликати з інтерфейсів моделювання PICOS і ...

CVXPY , вбудована в пітон мова оптимізації для опуклих задач оптимізації, яка містить CVXOPTвирішувач за замовчуванням, але вона може підключатися до звичайних розв'язувачів MIP .

Дякуємо RedPanda за те, що він зазначив, що вони також CVXOPT/CVXPYпідтримують вирішувачі MIP.

Щоб отримати дуже вичерпну статтю про можливості оптимізації моделювання пакетів та об’єктно-орієнтованих мов (не обмежуючись Python), перегляньте цю статтю .


привіт, дякую за відповідь. Я шукав багато опудал, які ви розмістили. Навіть встановив два з них (PuLP та GLPK) перед тим, як опублікувати це. Через назви я досить плутався між MILP та MIP. У будь-якому разі, дякую за роз'яснення. Оцінено.
asun

3
До речі, існує надзвичайно важливий інтерфейс Python для SCIP, який можна знайти тут: github.com/SCIP-Interfaces/PySCIPOpt
mattmilten

1
cvxoptа cvxpyтакож підтримує змішане цілочисельне програмування. Ось стаття порівняльного аналізу cvxoptнабагато швидше, ніж pulp: scaron.info/blog/linear-programming-in-python-with-cvxopt.html
RedPanda

1
Я не думаю, що Гуробі є відкритим джерелом, як зазначено у першому реченні відповіді.
Олівер Анджеліл,

3
@OliverAngelil Складність розв'язувача MIP не порівнянна зі складністю підпрограм звичайного числового аналізу, таких як операції з масивами, розв'язування систем рівнянь тощо. Це в основному з двох причин. По-перше, у вирішувачі закладено багато історичних знань, що охоплюють десятки років ретельних досліджень та деталей, пов’язаних із впровадженням. По-друге, вирішення проблем MIP є активною сферою досліджень, вчені розсувають межі того, що можна вирішити з року в рік. Комерційні вирішувачі впроваджують нові досягнення регулярно, оновлюючи свої версії приблизно раз на рік.
Іоанніс

4

Я використовував пакет Gekko Python для вирішення проблем MILP. Ви можете вирішити свої моделі локально або на їх віддаленому сервері.

GEKKO - це пакет Python для машинного навчання та оптимізації змішаних цілих та диференціальних алгебраїчних рівнянь. Він поєднується з широкомасштабними вирішувачами для лінійного, квадратного, нелінійного та змішаного цілочисельного програмування (LP, QP, NLP, MILP, MINLP) . Режими роботи включають регресію параметрів, узгодження даних, оптимізацію в режимі реального часу, динамічне моделювання та нелінійний прогнозний контроль. GEKKO - це об’єктно-орієнтована бібліотека Python для полегшення локального виконання APMonitor.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.