Хоча лінійне програмування змішаних цілих чисел (MILP) справді є NP-завершеним, існують вирішувані (нетривіальні) екземпляри лінійного програмування змішаних цілих чисел.
NP-завершений означає, що змішане цілочисельне лінійне програмування:
а) розв'язується в поліном час з недетермінованою машиною Тюрінга (частина НП)
б) поліноміальний час, зведений до 3-SAT (повна частина; для решти обговорення ця частина справді не має значення)
O(2n)n
Це твердження не означає, що "малі" екземпляри є непереборними. На жаль, я не можу зробити точне твердження про те, що мало значить для екземпляра MILP. Я розв'язую проблеми, які мають 3000 або більше бінарних змінних рішень на рутинній основі. Залежно від постановки проблеми, проблеми можуть зайняти менше 0,01 секунди (що стосується відносно недостатньо обмежених проблем) або більше години (що стосується проблем, коли багато обмежень діють), оскільки проблеми здаються мати сприятливу структуру. Я можу сказати, що сучасні вирішувачі LP можуть вирішувати LP з кількома мільйонами змінних безперервного рішення, і що без спеціальної структури, малоймовірно, що проблемний екземпляр десь від 1000 до 10,
Якщо ви думаєте, що у вас є розв'язуваний екземпляр MILP, вам потрібно скористатися алгоритмом зв'язаного зв’язку або зрізання гілок. Кращі реалізації - CPLEX та Gurobi . Вони обидва - комерційні продукти, які мають безкоштовне академічне ліцензування, якщо викопати достатньо. Якщо вам дійсно потрібен вирішальник з відкритим кодом, проекти в співтоваристві COIN-OR більш доречні, хоча пакети вихідних файлів іноді можуть бути витонченими. Найбільш значущі проекти були б СВС гілок і крій вирішувач , симфонічний вирішувач , ВСР гілок по зниженими цінами вирішувач , і абак гілок і крій вирішувач . Усі ці проекти потребують декількох пакетів від COIN-OR, завдяки своїй модульній структурі.
Якщо ви хочете скористатися декількома рішеннями, найкраще скористатися інтерфейсом Open Solver від COIN-OR . Зауважте, що частини цього інтерфейсу дозволять вам встановити лише основні параметри вирішення, а щоб встановити розширені параметри для вирішувачів, вам слід ознайомитися зі списками розсилки COIN-OR для отримання більш детальної інформації. Комерційні рішення MILP набагато швидше (іноді на порядок або більше) швидше, ніж розв'язувачі з відкритим кодом. Іншим варіантом прототипування є використання алгебраїчної мови моделювання на зразок GAMS або AMPL . Обидва пакети програм є комерційними, але мають пробні версії, які можна використовувати в невеликих проблемних екземплярах. Для більш великих проблемних випадків ви можете надіслати файли GAMS або AMPL доСервер NEOS, який потрібно вирішити; цей сервер доступний для громадськості.
Якщо у вас є досить великий екземпляр MILP, жоден із цих розв'язувачів не буде працювати добре. Ви можете розслабити цілі змінні до безперервних змінних, вирішити проблему, а потім обернутись до найближчої колекції цілих змінних, що є можливим рішенням вашого екземпляра проблеми. Оптимальне рішення розслаблення LP вашого MILP дасть вам нижню межу оптимального значення цілі вашої MILP (якщо, звичайно, передбачаючи мінімізацію), а можливе рішення вашої MILP дасть вам верхню межу оптимальної мети значення функції вашої MILP.
Якщо вам справді пощастило, і ваша матриця обмежень абсолютно одномодульна , тоді ви можете використовувати LP-вирішувач, щоб генерувати цілі рішення для вашої MILP, і ви зможете ефективно вирішити свою проблему, незважаючи на великий розмір. Інші класи проблем мають алгоритми швидкого наближення, такі як проблеми з рюкзаком та проблеми з запасом . Спеціалізовані алгоритми розкладання MILP також існують для проблем, які мають особливу структуру, хоча я не знайомий з деталями, оскільки ці теми є дещо спеціалізованими та виходять за межі моєї дипломної роботи.
Мені не відома повністю поліноміальна схема наближення часу (FPTAS) спеціально для MILP, хоча FPTAS класу проблем, що включає MILP, існує (див. Цей документ). Моя рекомендація полягала б у тому, щоб використовувати один із розв’язувачів лінійного програмування зі змішаним цілим цілим числом у поєднанні з часовим обмеженням та відповідними допусками на прогалини оптимальності. Це дозволило б отримати найкраще можливе рішення для вашої MILP протягом визначеного терміну, і якщо вирішувач завершиться успішно до встановленого строку, можливе рішення було б оптимальним для встановлених вами встановлених відхилень оптимальності. Цей хід дій все-таки дасть вам межу якості якості рішення, оскільки ваше можливе рішення буде верхньою межею, а вирішувач може дати вам відповідну нижню межу. Ці гарантії не будуть гарантовано знаходитись у певному факторному оптимальному рішенні, але знову ж таки, будь-який FPTAS буде дорожчати, оскільки наближення стає кращим.
Найголовніше, що ви можете зробити перед тим, як влаштуватися на форму MILP, - це вибрати найсильніший склад, який ви можете знайти; ви можете знайти поради щодо вибору сильних рецептур у Введенні до лінійної оптимізації Берцімаса та Цицикліса. Основна ідея полягає у виборі рецептури, обмеження якої визначають політоп, максимально наближений до опуклого корпусу рецептури (див. Також ці курсові записки ). Вибір сильної рецептури може призвести до величезної зміни у часі, необхідному для вирішення проблеми.