Найкраща книга про реалізацію Simplex методу?


14

Мені цікаво реалізувати завдання SM для LP, проте я чув про можливі підводні камені: у книзі Кормена написано, що можна мати вхідні дані, які змусять наївну реалізацію вести себе в експоненційному часі. Я також чув, що наївна реалізація може містити певні дані.

Чи є книга / папір / джерело, яка пояснює нюанси практичної реалізації ЗМ?

Заздалегідь спасибі.


Відповіді:


13

Я настійно рекомендую доповідь Біксбі, "батька" CPLEX, що проводить опитування не лише щодо реалізації аспектів (переглянутого) симплексного алгоритму: Роберт Е. Біксбі , вирішення лінійних програм у реальному світі: десятиліття та більше прогресу , операції Дослідження (50) 2002, 3-15 .


12

Алгоритм симплексу відсутній у P. CLRS, тому йдеться про те, що, хоча на практиці він працює «добре», є деякі входи, які призводять алгоритм роботи в експоненціальний час. Це суворо пов'язано з алгоритмом, а не з його реалізацією: ви зіткнетеся з цим незалежно від того, як саме ви реалізуєте алгоритм. Однак ЛП є в П. Це довів Хачіан в 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
Massimo

9
CPLEX - це, мабуть, найкраща реалізація LP на даний момент (саме тому люди платять за це стільки), але в значній мірі всі широко використовувані втілення будуть робити набагато краще, ніж все, що ви самі програмуєте. Сюди входять пакети Mathematical, Maple та MATLAB. Навколо існує безліч реалізацій, включаючи кілька досить хороших безкоштовних (QSopt, для одного, який є безкоштовним, якщо ви не плануєте використовувати його в комерційних цілях), тому програмувати його самостійно варто лише для досвіду навчання.
Пітер Шор

9

Книга лінійного програмування Вандербея проходить через багато деталей про низький рівень ... Але, як і запропоновані інші відповіді / коментарі, реалізація розв'язувача LP - це важке і невдячне завдання. Напевно, вирішувати вирішення проблеми з полиці не можна ... (Є також деякі вирішувачі LP з відкритим кодом ...)


6

Це не лише наївні реалізації, які іноді поводяться в експоненціальному часі. Насправді, я вважаю, що всі відомі детерміновані та рандомізовані правила мають надполіномічні вхідні випадки. Більшість відомих джерел, які викликають цю поведінку у найгіршому випадку, є високоструктурованими, пов'язане питання:

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

Однак на практиці СМ працює добре. Це було формалізовано впровадженням згладженого аналізу, який в основному є найгіршим випадком із слабо збуреними вхідними даними . Під цим аналізом СМ є багатопоточним, іншими словами, для кожного введення (навіть патологічного) існує невелике збурення, яке дозволяє алгоритму працювати добре. Це розуміння було перетворено в рандомізований алгоритм, який виконує в політи. Однак, наскільки я розумію, все ще залишаються дебати щодо того, чи цей алгоритм кваліфікується як «справжній» симплексний алгоритм. Я також не знаю, якщо стандартні пакети реалізують щось за цим принципом, але ви повинні мати змогу знайти якусь реалізацію, якщо шукати навколо, зважаючи на те, що результату виповнилося 5+ років.


1

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

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