Процесс разбиения множеств на подмножества сопровождается построением дерева ветвлений.
11. Если в результате ветвлений получаем матрицу
12. Сравниваем длину гамильтонова контура с нижними границами оборванных ветвей. Если длина контура не превышает их нижних границ, то задача решена. В противном случае развиваем ветви подмножеств с нижней границей, меньшей полученного контура, до тех пор, пока не получим маршрут с меньшей длиной или не убедимся, что такого не существует.
3. Математическая модель задачи коммивояжера
Задача коммивояжера может быть сформулирована как целочисленная введением булевых переменных
Условия (2) – (4) в совокупности обеспечивают, что каждая переменная
Однако этих ограничений не достаточно для постановки задачи коммивояжера, так как они не исключают решения, где вместо простого цикла, проходящего через n вершин, отыскиваются 2 и более отдельных цикла (подцикла), проходящего через меньшее число вершин. Поэтому задача, описанная уравнениями (2) – (4) должна быть дополнена ограничениями, обеспечивающими связность искомого цикла.
Для того, чтобы исключить при постановке задачи все возможные подциклы в систему ограничений задачи включают следующее ограничение:
4. Алгоритм решения
Дана матрица расстояний, представленная в таблице 1. Необходимо с помощью алгоритма Литтла решить задачу коммивояжера.
Табл.1
ji | 1 | 2 | 3 | 4 | 5 | 6 |
1 | ∞ | 7 | 16 | 21 | 2 | 17 |
2 | 13 | ∞ | 21 | 15 | 43 | 23 |
3 | 25 | 3 | ∞ | 31 | 17 | 9 |
4 | 13 | 10 | 27 | ∞ | 33 | 12 |
5 | 9 | 2 | 19 | 14 | ∞ | 51 |
6 | 42 | 17 | 5 | 9 | 23 | ∞ |
1) Справа к таблице присоединяем столбец Ui, в котором записываем минимальные элементы соответствующих строк. Вычитаем элементы Ui из соответствующих элементов строки матрицы.
ji | 1 | 2 | 3 | 4 | 5 | 6 | Ui |
1 | ∞ | 7 | 16 | 21 | 2 | 17 | 2 |
2 | 13 | ∞ | 21 | 15 | 43 | 23 | 13 |
3 | 25 | 3 | ∞ | 31 | 17 | 9 | 3 |
4 | 13 | 10 | 27 | ∞ | 33 | 12 | 10 |
5 | 9 | 2 | 19 | 14 | ∞ | 51 | 2 |
6 | 42 | 17 | 5 | 9 | 23 | ∞ | 5 |
2) Внизу полученной матрицы присоединяем строку Vj, в которой записываем минимальные элементы столбцов. Вычитаем элементы Vj из соответствующих столбцов матрицы.
ji | 1 | 2 | 3 | 4 | 5 | 6 |
1 | ∞ | 5 | 14 | 19 | 0 | 15 |
2 | 0 | ∞ | 8 | 2 | 30 | 10 |
3 | 22 | 0 | ∞ | 28 | 14 | 6 |
4 | 3 | 0 | 17 | ∞ | 23 | 2 |
5 | 7 | 0 | 17 | 12 | ∞ | 49 |
6 | 37 | 12 | 0 | 4 | 18 | ∞ |
Vj | 0 | 0 | 0 | 2 | 0 | 2 |
3) В результате вычислений получаем матрицу, приведенную по строкам и столбцам, которая изображена в виде таблицы 2.
Табл.2
ji | 1 | 2 | 3 | 4 | 5 | 6 |
1 | ∞ | 5 | 14 | 17 | 019 | 13 |
2 | 03 | ∞ | 8 | 02 | 30 | 8 |
3 | 22 | 04 | ∞ | 26 | 14 | 4 |
4 | 3 | 00 | 17 | ∞ | 23 | 04 |
5 | 7 | 07 | 17 | 10 | ∞ | 47 |
6 | 37 | 12 | 08 | 2 | 18 | ∞ |
4) Находим константу приведения
Таким образом, нижней границей множества всех гамильтоновых контуров будет число
5) Находим степени нулей полностью приведенной матрицы. Для этого как бы заменяем в ней все нули на знак «∞» и устанавливаем сумму минимальных элементов соответствующей строки и столбца. Степени нулей записаны в правых верхних углах клеток, для которых
6) Определяем максимальную степень нуля. Она равна 19 и соответствует клетке (1;5). Таким образом, претендентом на включение в гамильтонов контур является дуга (1;5).
7) Разбиваем множество всех гамильтоновых контуров
ji | 1 | 2 | 3 | 4 | 6 |
2 | 0 | ∞ | 8 | 0 | 8 |
3 | 22 | 0 | ∞ | 26 | 4 |
4 | 3 | 0 | 17 | ∞ | 0 |
5 | ∞ | 0 | 17 | 10 | 47 |
6 | 37 | 12 | 0 | 2 | ∞ |
8) Матрицу гамильтоновых контуров
ji | 1 | 2 | 3 | 4 | 5 | 6 | |
1 | ∞ | 5 | 14 | 17 | ∞ | 13 | 5 |
2 | 0 | ∞ | 8 | 0 | 30 | 8 | |
3 | 22 | 0 | ∞ | 26 | 14 | 4 | |
4 | 3 | 0 | 17 | ∞ | 23 | 0 | |
5 | 7 | 0 | 17 | 10 | ∞ | 47 | |
6 | 37 | 12 | 0 | 2 | 18 | ∞ | |
14 |
9) Делаем дополнительное приведение матрицы контуров
10) Находим константу приведения для множества контуров
Следовательно, нижняя граница множества
11) Сравниваем нижние границы подмножеств
то дальнейшему ветвлению подвергаем множество
На рис.1 представлено ветвление по дуге (1;5).
Рис.1
Переходим к ветвлению подмножества
ji | 1 | 2 | 3 | 4 | 6 |
2 | 03 | ∞ | 8 | 02 | 8 |
3 | 22 | 04 | ∞ | 26 | 4 |
4 | 3 | 00 | 17 | ∞ | 04 |
5 | ∞ | 010 | 17 | 10 | 47 |
6 | 37 | 12 | 010 | 2 | ∞ |
12) Узнаем степени нулей матрицы. Претендентами на включение в гамильтонов контур будут несколько дуг (5;2) и (6;3). Для дальнейших расчетов выберем дугу (6;3). Разбиваем множество