← к оглавлению
Эвристические алгоритмы — устные вопросы 23–24
Имитация отжига и генетический алгоритм на примере задачи коммивояжёра (TSP). Формулировки — по лекции курса.
23. Алгоритм имитации отжига (Simulated Annealing)
Суть
Стохастический метод глобальной оптимизации по аналогии с охлаждением металла. Главная идея — иногда принимать ухудшающие решения, чтобы выйти из локального минимума. На высокой температуре алгоритм исследует пространство (допускает плохие переходы), на низкой — становится жадным (только улучшения).
Правило принятия
Если f(x′) < f(x) — принять всегда. Иначе принять с вероятностью P = exp(−(f(x′) − f(x)) / T).
x = initial_solution
T = initial_temperature
while T > Tmin:
x_new = random_neighbor(x)
dE = f(x_new) - f(x)
if dE < 0: x = x_new
else: accept with probability exp(-dE / T)
decrease_temperature()
return best_solution
Расписания понижения температуры
- Геометрическое (основное): T_{k+1} = α·T_k, 0.8 ⩽ α ⩽ 0.999.
- Линейное (редко): T_{k+1} = T_k − c.
- Логарифмическое (медленно, но гарантирует сходимость): T_k = C / log(1+k).
Применение к TSP
Решение = перестановка городов. Стоимость = длина маршрута. Соседи = инверсия отрезка пути / случайное перемешивание подмножества.
Спросят: зачем принимать плохие переходы, роль температуры (высокая — исследование, низкая — жадность), почему лог-расписание сходится.
24. Генетический алгоритм
Суть
Эволюционная оптимизация: поддерживаем популяцию решений-кандидатов и улучшаем её через отбор / скрещивание / мутацию. Полезен для огромных дискретных пространств, отсутствия гладкости, множества локальных экстремумов, NP-трудных задач.
Fitness
Каждое решение оценивается fitness-функцией F(x). Для минимизации часто F(x) = 1 / (1 + f(x)).
Цикл алгоритма
- Инициализация популяции (часто случайные решения).
- Оценка fitness.
- Отбор родителей (лучшие кандидаты).
- Скрещивание (crossover).
- Мутация (случайные модификации — поддерживают разнообразие).
- Формирование нового поколения.
- Повтор до критерия останова.
Применение к TSP
Решение = перестановка городов. Мутация = инверсия отрезка. Скрещивания, сохраняющие корректность перестановки:
- PMX (Partially Matched Crossover): выбираем две точки, копируем средний сегмент, остальные элементы восстанавливаем через отображение.
- OX (Order Crossover): копируем подотрезок, остальные города добавляем в порядке второго родителя.
Спросят: чем отличается от отжига (популяция vs одно решение), зачем мутация (разнообразие, выход из локальных минимумов), как скрещивание сохраняет корректность перестановки.
Отжиг vs генетика: оба — стохастические эвристики для NP-трудных задач, оба умеют выходить из локальных минимумов. Отжиг ведёт одно решение, постепенно «остывая». Генетика ведёт популяцию, комбинируя решения скрещиванием. Общий приём для TSP: соседство/мутация через инверсию отрезков маршрута.