4.6.5 Метод ветвей и границ в задаче о коммивояжёре
Показателем эффективности является длина гамильтонова цикла. При вычислении оценки снизу будем учитывать, что каждый гамильтонов цикл графа, представленного в виде матрицы смежности (расстояний), входит только по одному элементу из каждой строки и каждого столбца.
Поэтому, если все элементы каждой строки или столбца уменьшить на какое-то число, то сам гамильтонов цикл не изменится, а длина его уменьшится на это число. Это число принимаем за оценку снизу.
Основная “изюминка” метода ветвей и границ заключается в способе вычисления нижней границы подмножеств и указании дуги , включение или невключение в маршрут которой разбивает множество гамильтоновых циклов на подмножества.
Длина оптимального маршрута отличается от длины маршрута в задаче с неприведённой матрицей на сумму констант приведения: ,
где: - константа приведения по строкам, определяется как (минимальный элемент в i – й строке);
- константа приведения по столбцам, определяется как (минимальный элемент в j – м столбце).
Длина маршрута: .
Исключение какой-либо дуги из маршрута означает замену длины данного маршрута на бесконечность: .
Включение дуги в маршрут приводит к исключению строки и столбца, а также, для предотвращения построения негамильтонового цикла, к исключению дуги : .
Выбор дуги . В оптимальный маршрут должны входить дуги, для которых в приведённой матрице смежности . Невключение этих дуг резко увеличивает оценку снизу. Константами приведения являются минимальные элементы в строке и столбце. После замены на бесконечность, сумма минимальных элементов строки и столбца будет минимальной.
Алгоритм поиска гамильтонова цикла
Осуществить приведение матрицы смежности по строкам и столбцам и определить значение и для каждой строки и столбца, где и . Матрицу приводим по правилу: , т.е. из каждого элемента вычитаем сумму констант приведения. Эта сумма равна нижней оценке границы исходного множества решений: .
Для всех элементов, у которых найти и выбрать - максимальное приращение оценки. Определить и - строку и столбец.
Вычёркиваем строку равную и столбец равный , а также накладываем запрет на дугу, образующую цикл с ранее выбранными дугами, если он не гамильтонов.
Разбиваем множество решений на два подмножества, включающее дугу и не включающее эту дугу. Если не выбраны все вершины графа, то переходим к пункту 1, иначе формируем гамильтонов цикл. Длина цикла будет определена суммой нижних оценок длин путей, полученных при каждом приведении матрицы.
Примечание. После получения оптимального решения необходимо проверить нет ли лучшего решения среди нерассмотренных подмножеств. Если такое есть, то необходимо выполнить весь алгоритм для подмножества с меньшей оценкой снизу.
Пример решения задачи о коммивояжёре
Имеем граф с шестью вершинами и следующей матрицей смежности (таблица 4.14). Найти методом ветвей и границ гамильтонов цикл наименьшей длины.
Таблица 4.14 - Матрица смежности
i/j | 1 | 2 | 3 | 4 | 5 | 6 |
1 |
| 68 | 73 | 24 | 70 | 9 |
2 | 58 |
| 16 | 44 | 11 | 92 |
3 | 63 | 9 |
| 86 | 13 | 18 |
4 | 17 | 34 | 76 |
| 52 | 70 |
5 | 60 | 18 | 3 | 45 |
| 58 |
6 | 16 | 82 | 11 | 60 | 48 |
|
Приведем данную матрицу по строкам и столбцам.
Таблица 4.15 - Приведённая матрица смежности с константами приведения по строкам и столбцам
i/j | 1 | 2 | 3 | 4 | 5 | 6 |
|
1 |
| 59 | 64 | 15 | 61 | 0 | 9 |
2 | 47 |
| 5 | 33 | 0 | 18 | 11 |
3 | 54 | 0 |
| 77 | 4 | 9 | 9 |
4 | 0 | 17 | 59 |
| 35 | 53 | 17 |
5 | 57 | 15 | 0 | 42 |
| 55 | 3 |
6 | 5 | 71 | 0 | 49 | 37 |
| 11 |
| 0 | 0 | 0 | 15 | 0 | 0 |
|
Сумма констант приведения даёт некоторую нижнюю границу длин всех гамильтоновых путей: . Улучшили оценку за счёт приведения матрицы по столбцам. Нижняя оценка длин всех гамильтоновых путей: .
Теперь нужно просмотреть все нулевые элементы матрицы и выбрать тот, для которого сумма констант приведения матрицы, получаемых заменой на была бы максимальной.
Подсчитаем эти суммы:
Максимальная сумма соответствует дуге .
Множество разбиваем на два подмножества, одно из которых включает дугу - подмножество В, а другое – не включает – подмножество А. В матрице элемент заменяем на бесконечность, из элементов четвёртой строки вычитаем 17, а из элементов первого столбца вычитаем 5.
Таблица 4.16 - Матрица смежности подмножества
i/j | 1 | 2 | 3 | 4 | 5 | 6 |
1 |
| 59 | 64 | 0 | 61 | 0 |
2 | 42 |
| 5 | 18 | 0 | 81 |
3 | 49 | 0 |
| 62 | 4 | 9 |
4 |
| 0 | 42 |
| 18 | 36 |
5 | 52 | 15 | 0 | 27 |
| 55 |
6 | 0 | 71 | 0 | 34 | 37 |
|
Находим оценку снизу подмножества : .
Включение дуги автоматически исключает из пути дуги .Также нужно исключить дугу , которая образует негамильтонов цикл с дугой .
Таблица 4.18 - Матрица смежности подмножества
i/j | 2 | 3 | 4 | 5 | 6 |
1 | 59 | 64 |
| 61 | 0 |
2 |
| 5 | 18 | 0 | 81 |
3 | 0 |
| 62 | 4 | 9 |
5 | 15 | 0 | 27 |
| 55 |
6 | 71 | 0 | 34 | 37 |
|
Эту матрицу можно привести по четвёртому столбцу, тем самым улучшить оценку на 18. Находим оценку снизу подмножества : .
Сравниваем две оценки: . Для дальнейшего разбиения выбираем подмножество . .
Таблица 4.19 - Приведённая матрица смежности подмножества
i/j | 2 | 3 | 4 | 5 | 6 |
1 | 59 | 64 |
| 61 | 0 |
2 |
| 5 | 0 | 0 | 81 |
3 | 0 |
| 44 | 4 | 9 |
5 | 15 | 0 | 9 |
| 55 |
6 | 71 | 0 | 16 | 37 |
|
Находим дугу в матрице, которая максимально увеличивает нижнюю оценку при её исключении, т.е. имеет максимальную сумму констант приведений:
Максимальная сумма констант приведений соответствует дуге . Исключение дуги приводит к улучшению оценки на 68: , . . Включение дуги в путь вызывает исключение в матрице первой строки и шестого столбца. Необходимо запретить контур , тем самым исключить из рассмотрения дугу .
, для разбиения выбираем множество .
Таблица 4.20 - Матрица смежности подмножества
i/j | 2 | 3 | 4 | 5 |
2 |
| 5 | 0 | 0 |
3 | 0 |
| 44 | 4 |
5 | 15 | 0 | 9 |
|
6 | 71 | 0 |
| 37 |
Подсчитываем сумму констант: .
Выбираем дугу , считаем оценку снизу подмножества : . Включение дуги приводит к исключению третьего столбца и шестой строки. Так же исключаем контур , запрещая дугу .
Таблица 4.21 - Матрица смежности подмножества
i/j | 2 | 4 | 5 |
2 |
| 0 | 0 |
3 | 0 |
| 4 |
5 | 15 | 9 |
|
Матрицу можно привести по пятой строке на девять единиц. Нижняя оценка подмножества : . Сравниваем две оценки: . Для дальнейшего разбиения выбираем подмножество , .
Таблица 4.22 - Приведённая матрица смежности подмножества
i/j | 2 | 4 | 5 |
2 |
| 0 | 0 |
3 | 0 |
| 4 |
5 | 6 | 0 |
|
Подсчитываем сумму констант, для которых : . Исключение дуги , приводит к улучшению нижней оценки подмножества на 10: . Включение дуги запрещает третью строку и второй столбик.
Таблица 4.23 - Матрица смежности подмножества
i/j | 4 | 5 |
2 |
| 0 |
5 | 0 |
|
Эта матрица прямо указывает на то, что в искомый маршрут необходимо включить дуги . При этом нижняя оценка подмножества G увеличится на 10 и станет равной: . . Подмножества Н останется без изменения: .
Таким образом получили следующий гамильтонов цикл: (4, 1, 6, 3, 2, 5, 4). Длина его L = 102.
Сопоставляя длину найденного маршрута с нижней границей длин маршрутов подмножеств, которые не были рассмотрены до конца, видим, что рассмотрение большинства из них не имеет смысла, так как их нижняя граница превышает . Но может оказаться, что среди гамильтоновых путей подмножества , у которого нижняя граница равна 97, имеется путь меньшей длины.
Необходимо исследовать данное подмножество по матрице подмножества (таблица 10.7.3). Нужно рассмотреть два подмножества . Исключение дуги приводит к увеличению оценки подмножества : . Подмножество можно исключить из пути, так как .
Для подмножества включение дуги означает изъятие из матрицы шестой строки и первого столбца. Необходимо запретить дугу .
Таблица 4.24 - Матрица смежности подмножества
i/j | 2 | 3 | 4 | 5 | 6 |
1 | 59 | 64 | 0 | 61 |
|
2 |
| 5 | 18 | 0 | 81 |
3 | 0 |
| 62 | 4 | 9 |
4 | 0 | 42 |
| 18 | 36 |
5 | 15 | 0 | 27 |
| 55 |
Матрицу можно привести по шестому столбцу путём вычитания из всех элементов столбца 9. Тогда нижняя оценка подмножества увеличится на 9: . И она станет больше, чем у подмножества . Значит лучшего решения в подмножестве К нет.
Рисунок 4.25 - Гамильтонов путь
Построим дерево, иллюстрирующее алгоритм решения.
U
А B
J K C D
E
F
G H
Рисунок 4.26 – Решение задачи о коммивояжёре в виде дерева
- Дискретная математика
- 6.050102 “Компьютерная инженерия” содержание
- 1 Теория множеств 7
- 2 Математическая логика 15
- 3 Формальные теории 35
- 4 Теория графов 47
- 5 Элементы теории чисел 80
- 6 Теория алгоритмов 121
- Введение
- 1 Теория множеств
- 1.1 Множества и подмножества
- 1.1.1 Элементы множества
- 1.2 Аксиомы теории множеств
- 1.3 Способы задания множеств
- 1.4 Операции над множествами
- 1.5 Элементы алгебры множеств
- 1.5.1 Определение алгебры множеств
- 1.5.2 Основные законы алгебры множеств
- 1.5.3 Принцип двойственности
- 2 Математическая логика
- 2.1 Функции алгебры логики (булевые функции)
- 2.1.1 Способы задания булевых функций
- 2.1.2 Логические функции одной переменной
- 2.1.3 Логические функции двух переменных
- 2.2.6 Функционально полные системы булевых функций
- 2.3 Алгебра буля
- 2.3.1 Определение алгебры. Теорема Стоуна
- 2.3.2 Законы алгебры логики
- 2.3.3 Разложения функций по переменным
- 2.3.4 Приведение логических функций
- 2.3.5 Импликанты и имплициенты булевых функций
- 2.3.6 Методы минимизации логических функций
- 2.4 Алгебра жегалкина
- 2.4.1 Преобразование функций в алгебре Жегалкина
- 2.4.2 Переход от булевой алгебры к алгебре Жегалкина
- 3 Формальные теории
- 3.1 Основные принципы построения формальных теорий исчисления
- 3.2 Определение исчисления высказываний
- 3.2.1 Метатеоремы исчисления высказываний
- 3.2.2 Схемы исчисления высказываний
- 3.3 Исчисление предикатов
- 3.3.1 Определение формальной теории pl
- 3.3.2 Принцип резолюции в исчислении предикатов
- 3.3.3 Схемы доказательств в исчислении предикатов
- 4 Теория графов
- 4.1 История теории графов
- 4.2 Основные определения
- 4.3 Способы представления графов
- 4.3.1 Матрицей смежности
- 4.3.2 Матрицей инцидентности
- 4.4 Пути в графах
- 4.4.1 Задача о кратчайшем пути
- 4.4.2 Алгоритм Дейкстры нахождения кратчайшего пути в графе
- 4.5 Транспортные сети
- 4.5.1 Потоки в транспортных сетях
- 4.5.2 Задача нахождения наибольшего потока в транспортной сети
- 4.5.3 Алгоритм Форда и Фалкерсона нахождения максимального потока транспортной сети
- 4.5.4 Транспортная задача
- 4.6 Обходы в графах
- 4.6.1 Эйлеровы графы
- 4.6.2 Алгоритм Флёри нахождения эйлерова цикла
- 4. Если получился цикл, но не ейлеров, то отбрасываем данную последнюю вершину и повторяем пункт 2.
- 4.6.3 Гамильтоновы циклы
- 4.6.4 Метод ветвей и границ.
- 4.6.5 Метод ветвей и границ в задаче о коммивояжёре
- 4.7 Деревья
- 4.7.1 Построение экономического дерева
- 4.7.2 Алгоритм Краскала
- 5 Элементы теории чисел
- 5.1 Модулярная арифметика
- 5.1.1 Алгоритм Евклида для нахождения наибольшего общего делителя
- 5.1.2 Вычисление обратных величин
- 5.1.3 Основные способы нахождения обратных величин
- 5.1.4 Китайская теорема об остатках
- 5.2 Кодирование
- 5.2.1 Оптимальное кодирование
- 5.3 Обнаружение и исправление ошибок
- 5.3.1 Общие понятия
- 5.3.2 Линейные групповые коды
- 5.3.2 Код Хэмминга
- 5.3.3 Циклические коды
- 5.3.4 Построение и декодирование конкретных циклических кодов
- 5.4 Сжатие информации
- 5.4.1 Исключение повторения строк в последующих строках
- 5.4.2 Алгоритм lzw
- 6 Теория алгоритмов
- 6.1. Основные понятия
- 6.1.1 Основные требования к алгоритмам
- 6.1.2 Блок–схемы алгоритмов
- 6.1.3 Представление данных
- 6.1.4 Виды алгоритмов
- 6.1.5 Правильность программ
- 6.1.6 Эффективность алгоритмов
- 6.1.7 Сходимость, сложность, надежность
- 6.2 Универсальные алгоритмы
- 6.2.1 Основные понятия
- 6.2.2 Машины Тьюринга
- 6.2.3 Рекурсивные функции
- 6.2.5 Тезис Черча-Тьюринга
- 6.2.6 Проблема самоприменимости
- 6.3 Языки и грамматики
- 6.3.1 Общие понятия
- 6.3.2 Формальные грамматики
- 6.3.3 Иерархия языков
- 6.4 Параллельные вычисления
- Рекомендованная литература