Почему линейное программирование на P, а целочисленное программирование NP-сложно?


35

Линейное программирование (LP) находится в P, а целочисленное программирование (IP) является NP-сложным. Но поскольку компьютеры могут манипулировать только числами с конечной точностью, на практике компьютер использует целые числа для линейного программирования. Из-за этого не должны ли LP и IP находиться в одном классе сложности?


7
Добавим немного к ответу jmite: во многих случаях ограничения целостности значительно усложняют задачу. Например, проблема дробного ранца может быть решена за полиномиальное время, хотя целочисленная задача о ранце NP-Hard. Так что это не только то, что верно для LP и IP.
user340082710

7
Даже если мы считаем, что компьютеры выполняют операции с целыми числами, это не означает, что возвращаемое решение является целым числом; оно может быть рациональным, т. е. соотношение двух целых чисел. И это дает гораздо больше гибкости. И, конечно, мы не всегда можем преобразовать рациональное решение в реальное решение для ИС. В общем, IP будет иметь больше ограничений на переменные, чем просто запросить интегральное решение. Подумайте о целочисленной программе. 0,1
Мегас

1
Не так сложно манипулировать числами с бесконечной точностью, если хотите, особенно когда они рациональны. Конечная точность - это просто оптимизация для сокращения времени выполнения.

2
@Hurkyl "Не так сложно манипулировать числами с бесконечной точностью, если хотите, особенно когда они рациональны". Существует строгое подмножество действительных чисел, называемых вычислимыми числами, которое включает рациональные числа + числа, такие как sqrt (2) и т. Д. ... и определяется как множество чисел, вычисляемых машиной Тьюринга. Те, которые там не включены, по определению не могут управляться компьютером.
Саша Нуб

1
@SashatheNoob То, что вы говорите, на самом деле не расходится с тем, что сказал Хюркил. У вычислимых чисел нет предопределенного максимального предела того, насколько точными они могут быть (для него произвольно устанавливается любое значение, которое вам нравится, если у машины Тьюринга достаточно памяти - следовательно, бесконечная точность). Сказать, что подмножество вычислимых чисел включает в себя все рациональные числа, вы допускаете, что компьютеры могут манипулировать числами с бесконечной точностью. (Утверждение Херкила абсолютно верно. Тот факт, что точность ограничена для определенных типов данных, является просто оптимизацией.)
BrainSlugs83

Ответы:


9

Я не могу комментировать, так как для этого требуется 50 повторений, но есть некоторые распространенные заблуждения, особенно комментарий Рафаэля «В общем, непрерывный домен означает, что нет грубой силы (и нет хитрой эвристики, чтобы ускорить ее)».

Это абсолютно неверно. Ключевым моментом действительно является выпуклость. За исключением некоторых технических ограничений, минимизация выпуклой функции (или максимизация вогнутой функции) над выпуклым множеством, по существу, тривиальна в смысле сходимости за полиномиальное время.

Грубо говоря, можно сказать, что существует соответствие между выпуклостью задачи в «математической» оптимизации и жизнеспособностью жадных алгоритмов в оптимизации «компьютерных наук». Это в том смысле, что они оба включают локальные методы поиска. Вам никогда не придется отступать в жадном алгоритме, и вам никогда не придется сожалеть о направлении снижения в выпуклой задаче оптимизации. Локальные улучшения целевой функции ВСЕГДА приведут вас ближе к глобальному оптимуму.

Это не так в невыпуклом случае. Здесь может существовать глобальный минимум, но несколько локальных минимумов, к которым всегда будет привлечен алгоритм локального спуска, точно так же, как это делают жадные алгоритмы применительно к NP-задачам. Иногда они находят истинный оптимум, чаще всего нет.


23

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

Трудный ответ на это заключается в том, что мы не знаем, что они не в одном классе сложности. Ни у кого нет доказательств того, что . Если бы мы поняли более глубокие причины, почему проблемы были такими разными, это потребовало бы, чтобы мы поняли, почему классы сложности были разными, чего у нас нет.PNP


21

Линейное программирование является «эффективным», потому что пространство решений может быть представлено одним выпуклым многогранником. Если кто-то пытается найти «самую высокую» вершину на этом многограннике (можно применить линейное преобразование к любой задаче линейного программирования, чтобы «высота» соответствовала величине, которая должна быть максимизирована), то из любой вершины можно перемещаться вдоль ребер к самая высокая точка без необходимости идти "вниз". Что делает целочисленное программирование «трудным», так это то, что не существует непрерывного пространства решений, но вместо этого есть много непересекающихся областей решений, и нет никакого способа постепенно работать над оптимальным решением.


2
Ключевое слово здесь - "выпуклость"
cody

1
Разве это не восхождение на холм - симплекс-метод, о котором ни один вариант не является полиномиальным в худшем случае?
Jbapple

1
Существует множество проблем, которые легче решить в дискретных пространствах (что позволяет осуществлять дискретный поиск), чем в непрерывном пространстве.
Рафаэль

@ Рафаэль: можешь привести примеры таких проблем? Я думал об этом и не могу придумать много.
Коди

@cody Нахождение максимумов / минимумов (одномерных) функций, например. Смотрите здесь для симпатичного примера, который становится доступным только после того, как мы заметили, что мы можем сократить конечное пространство поиска до конечного. Обратите внимание, что LP являются своего рода особыми способами: отмечая, что нам нужно только рассмотреть углы многогранника, мы получаем конечное пространство поиска. В общем, непрерывный домен означает, что нет грубой силы (и нет хитрой эвристики, чтобы ускорить его).
Рафаэль

3

Другие ответы верны, но я нахожу их немного техническими. Предположим, что вы просмотрели (исключили) матрицу и ищете какое-либо решение, и матрица выглядит следующим образом:

column x1 x2 x3 x4 x5 x6 | solution
-----------------------------------
       1           1  1  | 3
          1              | 1
             1     1     | 2
                2  1  1  | 1  

В линейном программировании вы можете теперь установить неполюсные столбцы (x5, x6) на 0, а x4 на 0,5 и найти тривиальное решение. В целочисленном программировании вы не можете просто установить столбцы без опоры в 0. Решение труднее (NP-труднее) найти. Отметим также, что решения находятся в , так что это не имеет прямого отношения к конечной / бесконечной точности.Q

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.