NP-полнота задачи 0–1 целочисленного программирования

В задаче 0–1 целочисленного программирования дан целочисленный набор линейных неравенств, и требуется определить, существует ли бинарный вектор \(x\in\{0,1\}^n\), удовлетворяющий им. В форме курса вход задаётся матрицей \(A\) и вектором \(b\), а условие имеет вид \(Ax^{T}\ge b^{T}\).1

Задача NP-полна. Принадлежность \(NP\) следует из полиномиальной проверки заданного бинарного решения, а NP-трудность — из сведения SAT: каждой скобке КНФ сопоставляется одно линейное неравенство, истинное ровно тогда, когда скобка выполнена.1

Что важно запомнить
  • Искомые переменные ограничены значениями 0 и 1.
  • Проверка готового бинарного вектора выполняется за полиномиальное время, поэтому задача принадлежит \(NP\).
  • В сведении SAT каждая скобка превращается в линейное неравенство.1
  • Положительный литерал даёт коэффициент \(+1\), отрицательный — \(-1\). Свободная часть учитывает число отрицательных литералов.

Постановка задачи

Пусть дана целочисленная матрица \(A=(a_{ij})\) размера \(p\times n\) и целочисленный вектор \(b=(b_1,\ldots,b_p)\). Требуется установить, существует ли \(x\in\{0,1\}^n\), для которого \(Ax^{T}\ge b^{T}\).1

Сведение SAT к 0–1 ЦП

Пусть \(K=C_1\wedge\cdots\wedge C_p\) — КНФ от переменных \(x_1,\ldots,x_n\). Для строки, соответствующей скобке \(C_i\), коэффициент при \(x_j\) выбирают так:

  • \(a_{ij}=1\), если в \(C_i\) входит \(x_j\).
  • \(a_{ij}=-1\), если в \(C_i\) входит \(\neg x_j\).
  • \(a_{ij}=0\), если переменная в скобке отсутствует.

Если в \(C_i\) имеется \(r_i\) отрицательных литералов, полагают \(b_i=1-r_i\).1

Для бинарного набора левая часть равна числу истинных положительных литералов минус число ложных отрицательных литералов. Неравенство \(\sum_j a_{ij}x_j\ge1-r_i\) выполняется тогда и только тогда, когда хотя бы один литерал скобки \(C_i\) истинен. Поэтому вся система имеет бинарное решение ровно тогда, когда исходная КНФ выполнима.

Матрица и вектор строятся за полиномиальное время и имеют полиномиальный размер. Следовательно, \(SAT\prec 0\text{-}1\text{ ЦП}\). Вместе с полиномиальной проверяемостью решения это даёт NP-полноту.1

Пример простыми словами

Скобке \(x_1\vee\neg x_2\vee x_3\) соответствует неравенство \(x_1-x_2+x_3\ge0\): здесь один отрицательный литерал, поэтому правая часть равна \(1-1=0\). Набор \((0,1,0)\) нарушает неравенство и действительно делает всю скобку ложной. Любой набор, делающий хотя бы один её литерал истинным, удовлетворяет неравенству.

Частые ошибки
  • Смешивать decision problem с задачей оптимизации целевой функции. В доказательстве NP-полноты рассматривается вопрос существования бинарного допустимого решения.
  • Забывать ограничение \(x_j\in\{0,1\}\). Без него получается другая задача.
  • Перепутать знак коэффициента отрицательного литерала: для \(\neg x_j\) используется \(-1\), а изменение правой части компенсирует константу из \(1-x_j\).

Другие вопросы

Источники

  1. 1 Сапоженко А. А. Некоторые вопросы сложности алгоритмов М.: МГУ, факультет ВМК, 2001 г., §6, теорема 6.1: ВЫП ≺ 0–1 ЦЛП