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