В известной работе 1983 г. Х. Ленстры « Целочисленное программирование с фиксированным числом переменных» говорится, что целочисленные программы с фиксированным числом переменных разрешимы во временном полиноме по длине данных.
Я интерпретирую это следующим образом.
- Целочисленное программирование в целом все еще является NP-полным, но если мой типичный размер задачи (скажем, около 10.000 переменных, произвольное количество ограничений) практически осуществим, то я мог бы построить алгоритм, который масштабируется полиномиально по количеству ограничений, но не количество переменных и ограничений.
- Результат также применим для двоичного программирования, так как я могу принудительно заставить любое целое число 0-1, добавив соответствующее ограничение.
Правильна ли моя интерпретация?
Имеет ли этот результат какие-либо практические последствия? То есть, есть ли доступная реализация или она используется в популярных решателях, таких как CPLEX, Gurobi или Mosek?
Некоторые цитаты из бумаги:
Для наших целей эта длина может быть определена как n · m · log (a + 2), где a обозначает максимум абсолютных значений коэффициентов A и b. Действительно, такого полиномиального алгоритма, скорее всего, не существует, поскольку рассматриваемая проблема является NP-полной
[...]
Предполагалось [5], [10], что для любого фиксированного значения n существует полиномиальный алгоритм для решения задачи целочисленного линейного программирования. В настоящей статье мы доказываем эту гипотезу, демонстрируя такой алгоритм. Степень полинома, по которой время выполнения нашего алгоритма может быть ограничено, является экспоненциальной функцией от n.
источник
Ответы:
Таким образом, задача является линейно параметризованной с фиксированным параметром числом переменных.
1) Да, целочисленное линейное программирование "по-прежнему" NP-завершено. Время выполнения приведенного выше теоретического результата зависит только линейно от количества ограничений, поэтому оно хорошо масштабируется по количеству ограничений. Однако я не знаю фактической реализации этого алгоритма.
2) Да, заставить переменные принимать двоичные значения просто, как вы заметили.
источник
Вот несколько моментов, касающихся практического значения результатов типа Lenstra, и возможных реализаций в CPLEX, Gurobi и т. Д. Одним из ключевых шагов в большинстве таких алгоритмов для IP является переход на «хорошие» или «тонкие» направления, т.е. гиперплоскости, вдоль которых ширина многогранника не слишком велика (полином по переменным и размеру данных). Но Махаджан и Ральфс (препринт здесь ) показали, что проблема выбора оптимальной дизъюнкции является NP-полной. Таким образом, было бы трудно создать практически эффективные реализации этого класса алгоритмов.
Большинство алгоритмов, реализованных в таких пакетах, как CPLEX, можно классифицировать как методы ветвления и вырезания. Это семейство методов, как правило, хорошо работает на экземплярах IP, которые выполнимы, и часто способны находить почти оптимальные решения. Но в центре внимания алгоритмов типа Lenstra находятся наихудшие случаи IP, с которых невозможно начать, и цель состоит в том, чтобы доказать их целочисленную невозможность (и они изучают сложность этой задачи). AFAIK, нет класса проблем с практической значимостью, которые соответствуют этому описанию. Таким образом, люди из CPLEX / Gurobi, вероятно, не будут реализовывать алгоритмы типа Lenstra в ближайшее время.
источник