Модуль I·Статья III·~4 мин чтения
Линейное программирование как основа ЦЛП
Основы дискретной оптимизации и комбинаторика
Превратить статью в подкаст
Выберите голоса, формат и длину — AI запишет аудио
Линейное программирование как основа ЦЛП
Мост между непрерывным и дискретным
Целочисленные задачи по природе своей дискретные. Но ключевой инструмент их решения — линейное программирование, непрерывная задача. Идея: «расслабить» целочисленные ограничения до непрерывных, решить гораздо более простую задачу, и использовать результат для нахождения целочисленного оптимума. Это «LP-релаксация» — фундамент методов Branch-and-Bound, режущих плоскостей и аппроксимационных алгоритмов.
Геометрия линейного программирования
Стандартная форма ЛП: min cᵀx при Ax ≤ b, x ≥ 0.
Допустимое множество — пересечение полупространств — политоп (выпуклый многогранник).
Ключевая теорема: оптимальное решение ЛП всегда достигается в вершине политопа (при наличии оптимума). Вершина — точка, в которой n ограничений «активны» (выполняется равенство).
Число вершин: до C_{m+n}^n ≈ m^n/n! (экспоненциально). Но симплекс-метод на практике работает быстро, обходя лишь O(m) вершин. Метод Кармаркара (1984): полиномиальный — O(n^{3.5}), движется «через центр» политопа.
ЛП-релаксация ЦЛП
ЦЛП: min cᵀx при Ax ≤ b, x ∈ {0,1}ⁿ.
ЛП-релаксация: min cᵀx при Ax ≤ b, 0 ≤ x ≤ 1. (Убираем целочисленность)
Ключевые факты:
- ЛП-оптимум ≤ ЦЛП-оптимум (нижняя оценка для задачи минимизации!)
- Если ЛП-оптимум целочисленный → это и есть ЦЛП-оптимум
- «Зазор целочисленности»: OPT_ЦЛП / OPT_ЛП — показывает «потери» от дробности
Пример: задача рюкзака с W=5, n=3: (c₁,w₁)=(4,3), (c₂,w₂)=(3,2), (c₃,w₃)=(2,1).
ЦЛП-оптимум: x=(0,1,1), c=5. ЛП-релаксация: оптимум x=(0, 1, 1, 2/3) на самом деле достигается при x₁=2/3, x₂=1, x₃=0 по соображениям жадности — нужно считать точнее, но ЛП-оптимум может быть 5.67, ЦЛП = 5. Зазор ≈ 13%.
Totally Unimodular Matrices
Определение: матрица A называется вполне унимодулярной (TU), если определитель каждой квадратной подматрицы ∈ {−1, 0, +1}.
Теорема (Хоффман-Крускал): если A — TU-матрица и b целочисленный, то вершины политопа {x: Ax ≤ b, x ≥ 0} — целочисленные. Следовательно, ЛП-оптимум = ЦЛП-оптимум — решать ЦЛП через ЛП!
Примеры TU-матриц:
- Матрица инцидентности двудольного графа (строки — вершины, столбцы — рёбра)
- Матрица «ограничений» задачи о максимальном потоке
- Матрица «расписания» для задач с упорядоченными отрезками
Следствие: задача максимального паросочетания, задача о максимальном потоке, задача кратчайшего пути — все решаются ЛП!
ЛП-двойственность для аппроксимационных алгоритмов
Двойственность ЛП: для задачи (P): min cᵀx при Ax ≥ b, x ≥ 0 двойственная (D): max bᵀy при Aᵀy ≤ c, y ≥ 0.
Слабая двойственность: любое допустимое y дает bᵀy ≤ cᵀx для любого допустимого x. Следствие: bᵀy — нижняя оценка оптимума (P).
Метод Primal-Dual: строим допустимое целочисленное решение x^ и допустимое двойственное y^ параллельно. Гарантия: cᵀx^ ≤ ρ · bᵀy^ ≤ ρ · OPT → ρ-аппроксимация.
Пример: Set Cover через Primal-Dual
Каждый элемент u ∈ U должен быть покрыт хотя бы одним выбранным множеством. ЦЛП: min Σⱼ cⱼxⱼ при Σⱼ: u∈Sⱼ xⱼ ≥ 1, xⱼ ∈ {0,1}.
Двойственная: max Σᵤ yᵤ при Σᵤ: u∈Sⱼ yᵤ ≤ cⱼ, yᵤ ≥ 0.
Primal-Dual алгоритм: пока существует непокрытый u: увеличиваем yᵤ до тех пор, пока какое-то ограничение двойственной задачи не стало «жёстким» → добавляем это Sⱼ в решение.
Гарантия: ln n-аппроксимация (ln n — максимальная степень вершины в гиперграфе покрытия).
Полный разбор: задача о кратчайшем пути через ЛП
Граф: V = {1,2,3,4}, рёбра: (1,2)=2, (1,3)=4, (2,3)=1, (2,4)=5, (3,4)=2. Найти кратчайший путь от 1 до 4.
ЛП-формулировка потока: xᵢⱼ ≥ 0 — поток по ребру (i,j). Задача: min Σ dᵢⱼ xᵢⱼ при балансных ограничениях (поток 1 из источника, −1 в сток, 0 везде).
Решение: симплекс даёт x₁₂=1, x₂₃=1, x₃₄=1 (путь 1→2→3→4, стоимость = 2+1+2 = 5). Решение целочисленное (матрица сетевых задач — TU)!
Двойственное ЛП — потенциалы вершин: max π₄ − π₁ при πⱼ − πᵢ ≤ dᵢⱼ. Оптимум: π₁=0, π₂=2, π₃=3, π₄=5. Двойственный оптимум = 5 = примальный ✓ (сильная двойственность).
Симплекс-метод: ключевые детали
Симплекс-метод (Данциг, 1947) последовательно перемещается между вершинами политопа, на каждом шаге улучшая значение целевой функции. Алгоритм:
- Найти стартовую вершину (фаза I)
- Проверить условие оптимальности: коэффициенты сокращённой стоимости ≥ 0
- Если нет — выбрать переменную с отрицательной сокращённой стоимостью (правило Бленда, Данцига, наибольшего наклона) и сделать поворот
В худшем случае симплекс посещает экспоненциальное число вершин (пример Кли-Минти, 1972), но на практике обычно требуется лишь O(m+n) шагов. Это явление до сих пор не имеет полного теоретического объяснения — гипотеза Хирша о диаметре политопа была опровергнута лишь в 2010 г.
Внутренние методы
Метод Кармаркара (1984) и его наследники (примал-дуальный метод следящего пути) движутся через внутреннюю часть политопа, имеют гарантированную полиномиальную сложность O(n^{3.5} L), где L — размер записи задачи. На практике для очень больших ЛП (миллионы переменных) внутренние методы конкурируют с симплексом — выбор зависит от структуры разреженности матрицы A.
ЛП в машинном обучении
ЛП лежит в основе многих методов: SVM с L1-штрафом сводится к ЛП, оптимальный транспорт между дискретными распределениями — это ЛП, ранжирование документов через LP-relaxation. Современные нейросети используют ЛП-релаксации внутри слоёв (например, для дифференцируемого решения комбинаторных задач — Pointer Networks).
§ Акт · что дальше