Лучшая книга по внедрению Симплексного метода?

14

Я заинтересован в реализации SM для задачи LP, однако я слышал о возможных подводных камнях: книга Кормена говорит, что возможно иметь входные данные, которые приведут к тому, что наивная реализация будет вести себя экспоненциально. Я также слышал, что наивная реализация может зацикливаться на каких-то данных.

Есть ли книга / бумага / источник, объясняющий нюансы практической реализации СМ?

Заранее спасибо.

Ицхака
источник
1
Цикл: см. En.wikipedia.org/wiki/Bland's_rule
Maverick Woo

Ответы:

13

Я настоятельно рекомендую статью Биксби, «отца» CPLEX, в которой рассматриваются не только аспекты реализации (пересмотренного) симплексного алгоритма: Роберт Э. Биксби , « Решение реальных линейных программ: десятилетие и более прогресса , операции» Исследования (50) 2002, 3-15 .

VB Le
источник
12

Симплексный алгоритм отсутствует в P. CLRS, следовательно, утверждает, что, хотя на практике он работает «хорошо», есть некоторые входные данные, заставляющие алгоритм работать в экспоненциальном времени. Это строго связано с алгоритмом, а не с его реализацией: вы столкнетесь с этим независимо от того, как именно вы реализуете алгоритм. Однако LP находится в P. Это было доказано Хачианом в 1979 году, однако его алгоритм эллипсоида не практичен. Сегодня методы внутренних точек широко используются. Первый был обнаружен Кармаркаром в 1984 году.

Если вы заинтересованы в практической реализации, взгляните на:

GUROBI, бесплатный для академического использования, на данный момент является лучшим доступным оптимизатором (как для последовательной, так и для параллельной версий с общей памятью):

http://www.gurobi.com

библиотека GLPK:

http://www.gnu.org/software/glpk/

это проект с открытым исходным кодом, обеспечивающий реализацию для:

  • простые и двойственные симплекс-методы
  • прямой двойственный метод внутренней точки
  • метод разветвления
  • переводчик для GNU MathProg
  • прикладной программный интерфейс (API)
  • автономный LP / MIP решатель
Массимо Кафаро
источник
12
В самом деле. Я настоятельно рекомендую НЕ пытаться реализовать симплекс самостоятельно, если в этом не весь смысл упражнения. Если вы просто хотите использовать его, стандартные методы гораздо лучше. Кроме того, CPLEX является бесплатным для академического использования, если это подходит для вас.
Суреш Венкат
1
Существуют ли какие-либо распространенные (например, MPI) реализации с открытым исходным кодом LP?
Томек Тарчински,
3
@Tomek LP является P-полным и вряд ли будет иметь эффективное распараллеливание.
Маркус Ритт
@Tomek: Simphony предоставляет распределенную версию, которая в настоящее время работает в любой среде, поддерживаемой протоколом передачи сообщений PVM (MPI еще не поддерживается). Тот же исходный код также может быть скомпилирован для архитектур с разделяемой памятью с использованием любого OpenMP-совместимого компилятора. См. Branchandcut.org и сильно связанный веб-сайт COIN-OR: coin-or.org
Massimo Cafaro,
9
CPLEX, вероятно, является лучшей реализацией LP, доступной в настоящее время (вот почему люди так много за нее платят), но в значительной степени все широко используемые реализации будут работать значительно лучше, чем все, что вы программируете сами. Это включает в себя пакеты Matetic, Maple и MATLAB. Существует множество реализаций, в том числе несколько хороших бесплатных (QSopt, для одной, которая бесплатна, если вы не планируете использовать ее в коммерческих целях), поэтому программирование самостоятельно стоит только для обучения.
Питер Шор
9

В книге Вандербея по линейному программированию рассматриваются многие детали низкого уровня ... Но, как предлагают другие ответы / комментарии, реализация LP Solver - трудная и неблагодарная задача. Вероятно, стоит пойти дальше с решателем ... (Есть также несколько программ с открытым исходным кодом ...)

Сариэль Хар-Пелед
источник
6

Это не только наивные реализации, которые иногда ведут себя экспоненциально. На самом деле, я думаю, что все известные детерминированные и рандомизированные правила имеют суперполиномиальные входные данные для наихудшего случая. Большинство известных входных данных, которые приводят к этому наихудшему поведению, имеют высокую степень структурированности, связанный с этим вопрос

Структура патологических случаев для симплексных алгоритмов

Однако на практике СМ работает хорошо. Это было формализовано введением сглаженного анализа, который в основном представляет собой анализ наихудшего случая со слегка возмущенными входными данными. Согласно этому анализу, SM является многопоточным, другими словами, для каждого входа (даже патологического) есть небольшое возмущение, которое позволяет алгоритму работать хорошо. Это понимание было преобразовано в рандомизированный алгоритм, который работает в polytime. Однако, насколько я понимаю, до сих пор идут споры о том, можно ли считать этот алгоритм «истинным» симплексным алгоритмом. Я также не знаю, реализуют ли что-то подобное в стандартных пакетах, но вы сможете найти какую-то реализацию, если будете искать вокруг, потому что результат более 5 лет.

Артем Казнатчеев
источник
1

Вы можете проверить Luenberger, Ye, линейное и нелинейное программирование, 3-е изд. Это кажется довольно всеобъемлющим, но я еще не успел сказать, полностью ли он отвечает на ваш вопрос.

marshallf
источник