Комбнаторные_алгоритмы-Перебор_с_возвратом.ppt
- Количество слайдов: 38
Перебор с возвратом
Решение многих задач можно найти с помощью методов исчерпывающего перебора, но сложность таких методов может оказаться астрономической. Современный компьютер может исполнять несколько миллиардов базовых инструкций в секунду, или несколько миллионов операций более высокого уровня. Рекурсивные алгоритмы 2
Насколько велик миллион? Ø Ø Миллион перестановок означает все возможные упорядочивания 10 или 11 объектов; Миллион подмножеств означает все возможные комбинации около 20 элементов.
Перебор с возвратом Позволяет систематически исследовать все возможные конфигурации области поиска: Ø Всевозможные расположения объектов (перестановки); Ø Всевозможные наборы объектов (подмножества); Ø Перечисление всех деревьев графа; Ø Перечисление всех путей между вершинами графа; …. .
Перебор с возвратом Ø Ø Главное правило: каждая возможная конфигурация должна быть сконфигурирована ровно 1 раз. Запрет как на повторение, так и на пропуск конфигураций, означает, что нужен четкий порядок их генерирования.
Перебор с возвратом Ø Решение моделируется в виде вектора , в котором каждый элемент выбирается из конечного упорядоченного множества Множество S называется пространством состояний.
Перебор с возвратом Ø Ø На каждом этапе алгоритма пробуем расширить данное частичное решение, добавляя следующий элемент в конец последовательности. После расширения проверяется, не получилось ли полное решение, в этом случае решение выводится или вычисляется, а в противном, происходит попытка другого расширения решения.
Перебор с возвратом Ø Ø Ø Создается дерево, в котором каждая вершина представляет частичное решение. Если узел y создан в результате перехода от узла x, то эти узлы соединяются ребром. Процесс создания решений соответствует процессу обхода в глубину дерева перебора с возвратом.
Реализация алгоритма bool finished=false; backtrack (int a[], int k, data input) { int c[MAXCANDIDATES]; int ncandidates; int i; if (is_a_solution(a, k, input)) process_solution(a, k, input); else {k=k+1; construct_candidates(a, k, input, c, &ncandidates); for (i=0; i<ncandidates; i++) { a[k]=c[i]; make_move(a, k, input); back_track(a, k, input); unmake_move(a, k, input); if (finished) return; } }
Функции Ø Ø Ø is_a_solution(a, k, input) – составляют ли первые k элементов вектора a полное решение; construct_candidates(a, k, input, c, ncandidates) – записывает в массив с полный набор возможных кандидатов на k-ю позицию вектора a при заданном содержимом первых k-1 позиций; process_solution(a, k, input) – обработка полного решения;
Функции Ø Ø Ø make_move(a, k, input) – модификация структуры данных в ответ на перемещение; unmake_move(a, k, input) – отмена модификации данных; finished – глобальный флаг завершения программы, который можно установить в любой прикладной процедуре.
Пространство состояний Для того, чтобы при переборе с возвратом не повторялись состояния, нужно правильно генерировать: Ø Подмножества заданного множества (2 n); Ø Перестановки заданного множества (n!); Ø Пути в графе; Ø … Рекурсивные алгоритмы 12
Генерация всех путей в графе Ø Ø Не существует явной формулы для определения количества решений в зависимости от количества вершин и ребер; Начальной точкой любого пути от вершины s к вершине t всегда является вершина s, то есть Возможными кандидатами на второе место в пути являются все вершины, смежные с s. Вектор решений a должен иметь достаточно места для представления всех n вершин.
Дерево поиска путей s=1 2 t=3 4 6 5
Отсечение вариантов поиска Ø Отсечением (pruning) называется метод прекращения поиска решения, как только установлено, что данное частичное решение невозможно расширить до полного.
Задача коммивояжера Ø Допустим, найден маршрут t со стоимостью Ct; Ø Потом в процессе продолжения поиска получаем частичное решение с суммой стоимости вершин Ø В этом случае не нужно продолжать исследование узла, так как любой маршрут с таким префиксом будет дороже, чем маршрут t. Рекурсивные алгоритмы 16
Применение симметрии Ø Отсечение частичных решений, идентичных рассмотренным ранее, требует умения распознавать симметричные области поиска; Ø Если в задаче коммивояжера рассмотрены все маршруты, начинающиеся с вершины 1, то нет смысла рассматривать маршруты, начинающиеся с других вершин, так как все маршруты являются циклами. Ø Таким образом для n вершин существует только (n -1)! Рекурсивные алгоритмы 17
Отсечение вариантов Ø Комбинаторный поиск можно использовать совместно с методами отсечения для решения задач оптимизации, размер которых составляет элементов. Рекурсивные алгоритмы 18
Судоку Ø В наиболее распространенной форме это квадрат размером 9 x 9 клеточек, некоторые из которых содержат цифры от 1 до 9, остальные пустые. Ø Решение головоломки состоит в заполнении пустых клеточек таким образом, чтобы каждая строка, каждый столбец и каждый малый квадрат размером 3 х3 клетки, содержали все цифры от 1 до 9 без повторений. Рекурсивные алгоритмы 19
Примеры 5 3 7 6 1 9 9 1 5 3 8 6 4 8 7 3 6 6 2 4 1 8 3 4 1 5 7 8 1 8 9 7 7 1 2 5 6 3 2 8 9 5 2 Рекурсивные алгоритмы 4 6 20
Уровни сложности Ø Ø Ø Головоломка низкого уровня предназначена для решения человеком; Головоломка средней сложности решается только программой; Головоломка высокого уровня сложности решается полным перебором с возвратом без отсечений за неизмеримое время. Рекурсивные алгоритмы 21
Переборное решение Ø Ø Ø Пространством состояний будут пустые клетки, каждая из которых в конечном итоге будет заполнена какой-либо цифрой; Кандидатами на заполнение пустой клетки (i, j) являются целые числа от 1 до 9, которых еще нет в строке i, столбце j и в малом квадрате, содержащим клетку (i, j). Возврат осуществляется, когда больше нет кандидатов на заполнение клетки.
Переборное решение Вектор решения содержит значения ячеек, а для хранения их координат используется дополнительный массив. Ø На очередном шаге выбираем открытую ячейку, которую хотим заполнить и определяем кандидатов на ее заполнение. Ø Для пустой головоломки существует 6 670 903 752 021 072 936 960 решений. Ø
Выбор очередной клетки Ø Выбор произвольной клетки; Ø Выбор клетки с наименьшим количеством кандидатов Рекурсивные алгоритмы 24
Выбор кандидата Ø Локальный выбор (выбирать только числа, которых нет в текущей строке, текущем столбце, текущем квадрате); Ø Просмотр вперед (если выбор текущего частичного решения не оставляет кандидатов для какой-либо другой клетки). Рекурсивные алгоритмы 25
Эвристические методы поиска Ø Произвольная выборка (random sampling); Ø Градиентный спуск (gradient descent); Ø Имитация отжига (simulated annealing). Рекурсивные алгоритмы 26
Компоненты поиска Ø Ø Представление пространства решений: полное, но краткое описание множества возможных решений задачи. Для задачи коммивояжера пространство решений состоит из (n-1)! элементов, каждый элемент – массив, содержащий n-1 вершин. Функция стоимости, определяющая качество каждого решения.
Произвольная выборка Ø Ø Метод Монте-Карло. Последовательно создаются и оцениваются произвольные решения; Процесс прекращается, как только будет найдено достаточно хорошее решение или когда нам надоест ждать его получения. Элементы необходимо выбирать из пространства решений равномерно.
Произвольная выборка Используется, если: Ø Пространство решений содержит высокую долю приемлемых решений; Ø Пространство решений не является однородным. Подходит для нахождения большого простого числа. Не подходит для задачи коммивояжера, пространство решений которой состоит в основном из «плохих» решений.
Локальный поиск Ø Ø Ø Стратегия исследования прилегающего пространства вокруг каждого элемента пространства решений. Каждый элемент x в пространстве решений можно рассматривать как вершину с исходящим ребром (x, y), направленным к каждому кандидату на решение y, являющемуся соседом x. Поиск выполняется по направлению к наиболее перспективному кандидату вблизи этой вершины.
Локальный поиск Ø Для задачи коммивояжера механизмом перехода можно считать обмен местами произвольной пары вершин текущего маршрута, понижающий стоимость маршрута: 1 1 6 2 3 5 4 6 2 5 3 4
Локальный поиск Используется, если: Ø Пространство решений является высокооднородным; Ø Стоимость оценки изменения намного ниже стоимости глобальной оценки.
Локальный поиск Ø Не подходит для поиска в пространстве, содержащем большое число «возвышенностей» . Ø Для задачи коммивояжера подходит больше, чем произвольная выборка. Рекурсивные алгоритмы 33
Имитация отжига Ø Представляет собой эвристическую процедуру поиска, которая допускает случайные переходы, ведущие к худшим решениям; Ø Шаг назад, позволяющий избежать зацикливания на оптимальном локальном решении. Ø Идея является аналогией физического процесса остывания расплавленных материалов и сопутствующего перехода в твердое состояние. Рекурсивные алгоритмы 34
Имитация отжига Ø В термодинамике энергетическое состояние системы определяется энергетическим состоянием каждой составляющей его частицы. Ø Вероятность перехода системы из энергетического состояния ei в энергетическое состояние ej при температуре T определяется формулой: Ø где k. B = 1, 38 x 10 -23 Дж/К - постоянная Больцмана. Рекурсивные алгоритмы 35
Имитация отжига Ø Вероятность перехода из высокоэнергетического состояния в низкоэнергетическое очень высока; Ø Существует ненулевая вероятность перехода из низкоэнергетического состояния в высокоэнергетическое, причем переходы малой амплитуды вероятнее. Ø Чем выше температура, тем выше вероятность «плохих» переходов. Ø Минимизация полной энергии представляет собой задачу комбинаторной оптимизации. Рекурсивные алгоритмы 36
Имитация отжига (параметры) Ø Первоначальная температура системы: обычно 1; Ø Функция понижения температуры: обычно tk=atk-1, где 0, 8<a<0, 99, то есть экспоненциальное понижение температуры, а не линейное; Ø Количество итераций перед понижением температуры: обычно от 100 до 1000 итераций; Ø Критерии остановки: если за последние несколько итераций значение текущего решения не изменилось. Рекурсивные алгоритмы 37
Другие эвристические методы Ø Генетические алгоритмы; Ø Нейронные сети; Ø Алгоритм муравейника. Рекурсивные алгоритмы 38
Комбнаторные_алгоритмы-Перебор_с_возвратом.ppt