Оптимизация
Комбинаторная оптимизация и TSP
Задача коммивояжёра - объехать 50 городов оптимальным маршрутом. Звучит просто, но число возможных маршрутов - 50!/2 ≈ 10⁶⁴. Перебор займёт дольше возраста Вселенной. Как же UPS и FedEx ежедневно планируют миллионы маршрутов? Как микросхемы проектируются с минимальной длиной проводников? Ответ - в интеллектуальных методах: **branch-and-bound, метод отсечений, Lin-Kernighan и аппроксимирующие алгоритмы с математическими гарантиями**.
- **Логистика**: UPS ежедневно решает миллионы TSP-подобных задач - алгоритм ORION на основе LK экономит 100M миль в год
- **VLSI дизайн**: компоновка микросхем - комбинаторная оптимизация; branch-and-cut в Cadence/Synopsis инструментах решает задачи с 10⁶ переменными
- **Планирование производства**: job-shop scheduling (в какой последовательности обрабатывать детали) - MIP с Gurobi/CPLEX решает задачи, ранее считавшиеся неразрешимыми
Предварительные знания
Branch and Bound: систематический поиск с отсечением
**Branch and Bound** (B&B) - универсальный алгоритм для задач целочисленной оптимизации. Он систематически исследует пространство решений, отсекая ветви дерева поиска, которые заведомо не могут дать лучшего результата, чем уже найденное решение.
**Выбор следующего узла**: - **Best-First**: узел с наименьшим LB → быстрое нахождение хорошего incumbent - **Depth-First (LIFO)**: уйти глубоко → быстро найти допустимое решение, меньше памяти - **Best-Bound + Depth-First**: гибрид - стандарт в commercial solvers **Выбор переменной для ветвления (branching variable)**: - **Most fractional**: переменная xᵢ с |xᵢ*-0.5| минимальным → наибольшая неопределённость - **Strong branching**: оценить обе ветви → лучший bound, дорого - **Pseudo-costs**: история изменений bound → быстрое приближение к strong branching
Что такое «прунинг» (pruning) в алгоритме Branch and Bound и когда он применяется?
Метод отсечений: Gomory Cuts и MIP
**Метод отсечений** (Cutting Planes) улучшает LP relaxation, добавляя **дополнительные неравенства** (cuts), которые отсекают дробные решения LP, но не отсекают ни одного целого решения. Это делает LP bound теснее и ускоряет B&B.
**Branch-and-Cut** = Branch and Bound + Cutting Planes - стандарт в commercial MIP solvers (CPLEX, Gurobi). **Алгоритм**: 1. Решить LP relaxation в узле B&B дерева 2. Если дробное решение - искать violated cuts 3. Добавить cuts → улучшить LP bound → повторить 4. Если cuts не помогают - ветвиться **Реальные задачи** решаемые с Branch-and-Cut: - **TSP**: маршруты с 1000+ городов за секунды - **Scheduling**: расписание больниц, авиарейсов - **Facility Location**: где открывать склады - **Network Design**: проектирование коммуникационных сетей
Что гарантирует корректность Gomory cuts - почему они не отсекают оптимальное целое решение?
Продвинутый локальный поиск: Lin-Kernighan для TSP
Для большинства NP-трудных комбинаторных задач точные методы (B&B) слишком медленны при n > 1000. **Локальный поиск** - эффективная эвристика: начать с некоторого решения и итеративно улучшать его, меняя «соседние» конфигурации.
**Or-opt** (Or, 1976): переместить группу из 1, 2 или 3 узлов в другую позицию маршрута - эффективнее 2-opt для несимметричных задач. **Tabu Search**: запрещать обратный переход после каждого move (tabu list). Позволяет выходить из локальных минимумов, двигаясь «вверх». **VNS (Variable Neighborhood Search)**: систематически менять окрестность, переключаясь между 2-opt, 3-opt, Or-opt, когда текущая окрестность истощена. **Качество vs время**:
| Метод | Качество | Время для n=10K |
|---|---|---|
| 2-opt | ~5-10% от опт | < 1 мин |
| LK | ~1-2% | 1-10 мин |
| LKH | < 0.5% | 10-60 мин |
| Exact (B&B) | оптимум | часы-дни |
Почему Lin-Kernighan (LK) обычно даёт лучшее качество, чем фиксированный 2-opt или 3-opt?
Аппроксимирующие алгоритмы: гарантированное качество
**Аппроксимирующий алгоритм** - полиномиальный алгоритм с доказанной гарантией качества: результат не хуже чем ρ × OPT, где ρ - **коэффициент аппроксимации**. Это теоретически обоснованная замена точного алгоритма для NP-трудных задач.
**PTAS (Polynomial-Time Approximation Scheme)**: для любого ε>0 существует алгоритм с гарантией (1+ε) за время poly(n). Время может зависеть от ε экспоненциально: O(n^{1/ε}). **FPTAS (Fully Polynomial)**: время poly(n, 1/ε). Для Knapsack задачи. **Примеры**: - Euclidean TSP: PTAS (Arora, 1998) - для геометрической версии! - Metric TSP: нет PTAS (иначе P=NP), но есть 1.5-аппроксимация Christofides - Knapsack: FPTAS через динамическое программирование с масштабированием весов
Почему алгоритм Christofides имеет гарантию 1.5 для метрического TSP, а для общего TSP такой гарантии нет?
Ключевые идеи
- **Branch and Bound**: систематический перебор с LP relaxation как нижней оценкой; прунинг отсекает ветви где LB ≥ incumbent
- **Cutting Planes / Gomory Cuts**: добавляют неравенства, отсекающие дробные LP решения не задевая целые; Branch-and-Cut = B&B + Cuts
- **Lin-Kernighan**: переменная глубина k-opt с candidate lists; практически лучший алгоритм для TSP, обычно в 0-2% от оптимума
- **Аппроксимирующие алгоритмы**: Christofides (1.5× для метрического TSP), жадный Set Cover (ln n×), MAX-CLIQUE не аппроксимируем лучше O(n^{1-ε})
Связанные темы
Комбинаторная оптимизация объединяет методы из разных областей:
- Целочисленное программирование — B&B и метод отсечений - основные алгоритмы для решения задач ILP и MIP
- Метаэвристики — Simulated Annealing, Genetic Algorithms - альтернативы локальному поиску при очень больших n или высокой сложности neighborhood
- Байесовская оптимизация — Для дорогостоящих комбинаторных задач (NAS, hyperparameter search) Bayesian Opt - эффективная black-box альтернатива
Вопросы для размышления
- Для задачи с 1000 городами и временем до 1 минуты: какой алгоритм вы выберете - точный B&B, LK или Christofides - и почему?
- Christofides даёт гарантию 1.5. Означает ли это, что на практике результат всегда близок к 1.5×OPT, или реальное качество намного лучше?
- Если задача NP-трудна и нет аппроксимации лучше O(n^{1-ε}), как можно применять её на практике для реальных больших инстанций?