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), перегляньте цю статтю .