Введение в дискретную оптимизацию: задачи, модели, сложность
Почему дискретная оптимизация везде? → Масштаб проблемы → Классические задачи дискретной оптимизации → Целочисленное линейное программирование (ЦЛП) → Теория сложности: NP-полнота → Полный разбор: задача о рюкзаке
Определения
- Задача коммивояжёра (TSP)
- — дано n городов с расстояниями dᵢⱼ между ними. Найти кратчайший маршрут, посещающий каждый город ровно один раз и возвращающийся в начало.
- Задача о рюкзаке (Knapsack)
- — n предметов с ценностями cᵢ и весами wᵢ. Рюкзак вмещает W кг. Выбрать набор предметов максимальной суммарной ценности.
- Задача покрытия множества (Set Cover)
- — дано универсальное множество U и семейство подмножеств S₁,...,Sₘ. Выбрать минимальное подсемейство, покрывающее U. Применения: минимальное число пожарных депо для покрытия всего города.
- MAX-CUT
- — граф G=(V,E). Разбить V на два множества S, V∖S, максимизируя число рёбер между ними. Применения: кластеризация данных, VLSI layout.
- Пример (TSP как ЦЛП)
- — xᵢⱼ ∈ {0,1} — использование ребра (i,j). Ограничения: Σⱼ xᵢⱼ = 1 (въезд в каждый город), Σᵢ xᵢⱼ = 1 (выезд), yᵢ − yⱼ + n xᵢⱼ ≤ n−1 для i≠j≠1 (устранение подмаршрутов).
- Класс P
- — задачи, решаемые за полиномиальное время O(nᵏ). Примеры: сортировка O(n log n), кратчайший путь в графе O(n²), линейное программирование O(n^{3.5}).
- Класс NP
- — задачи, решение которых можно проверить за полиномиальное время. Например: TSP — данный маршрут можно проверить за O(n). Но найти оптимальный — неизвестно как.
- NP-полные задачи
- — самые «трудные» в NP. Любая NP-задача полиномиально сводится к любой NP-полной. Первая NP-полная задача: SAT (Кук, 1971).
- Что это значит практически
- — три стратегии для NP-трудных задач:
- Данные
- — W = 10 кг, 4 предмета: (c₁,w₁) = (6,4), (c₂,w₂) = (5,3), (c₃,w₃) = (4,2), (c₄,w₄) = (3,1).
- Оптимум
- — {1,2,3,4} с c = 18. Но при n = 50 предметах — 2⁵⁰ > 10¹⁵ вариантов, перебор нереален.
Компания FedEx доставляет 15 миллионов посылок в день. Маршрут каждого грузовика — это последовательность остановок. Как назначить маршруты, чтобы суммарный пробег был минимальным? Это задача маршрутизации транспорта — дискретная задача оптимизации. Или: авиакомпания должна составить расписание п...
Кажется, что можно просто перебрать все варианты. Но масштаб делает это невозможным. Задача коммивояжёра (найти кратчайший маршрут через n городов): число возможных маршрутов = (n−1)!/2. При n = 20: ≈ 60 квинтиллионов маршрутов. При 1 миллиарде операций в секунду перебор займёт 60 миллиардов лет ...
Решение? Умные алгоритмы, которые находят оптимум (или хорошее приближение) за разумное время.
Задача коммивояжёра (TSP): дано n городов с расстояниями dᵢⱼ между ними. Найти кратчайший маршрут, посещающий каждый город ровно один раз и возвращающийся в начало.