Решение задачи коммивояжера
Возьмем в качестве произвольного маршрута:
X0 = (1,2);(2,3);(3,4);(4,5);(5,6);(6,1)
Тогда F(X0) = 287 + 602 + 181 + 344 + 435 = 1849
Для определения нижней границы множества воспользуемся операцией редукции или приведения матрицы по строкам, для чего необходимо в каждой строке матрицы D найти минимальный элемент.
Di = min(j) dij
I j |
1 |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
287 |
808 |
635 |
871 |
1095 |
287 |
2 |
|
M |
602 |
429 |
665 |
864 |
|
3 |
|
|
M |
181 |
277 |
403 |
|
4 |
|
|
|
M |
344 |
442 |
|
5 |
|
|
|
|
M |
435 |
|
6 |
|
|
|
|
|
M |
|
Затем вычитаем di из элементов рассматриваемой строки. В связи с этим во вновь полученной матрице в каждой строке будет как минимум один ноль.
Такую же операцию редукции проводим по столбцам, для чего в каждом столбце находим минимальный элемент:
dj = min(i) dij
I j |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
M |
0 |
521 |
348 |
584 |
808 |
2 |
|
M |
602 |
429 |
665 |
864 |
3 |
|
|
M |
181 |
277 |
403 |
4 |
|
|
|
M |
344 |
442 |
5 |
|
|
|
|
M |
435 |
6 |
|
|
|
|
|
M |
dj |
|
0 |
|
|
|
403 |
После вычитания минимальных элементов получаем полностью редуцированную матрицу, где величины di и dj называются константами приведения.
I j |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
M |
0 |
521 |
348 |
584 |
405 |
2 |
|
M |
602 |
429 |
665 |
461 |
3 |
|
|
M |
181 |
277 |
0 |
4 |
|
|
|
M |
344 |
39 |
5 |
|
|
|
|
M |
32 |
6 |
|
|
|
|
|
M |
Шаг №1.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
I j |
1 |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
0(348) |
521 |
348 |
584 |
405 |
348 |
2 |
(429) |
M |
602 |
429 |
665 |
461 |
429 |
3 |
(0) |
(0) |
M |
181 |
277 |
0(32) |
|
4 |
(0) |
(0) |
(0) |
M |
344 |
39 |
|
5 |
(0) |
(0) |
(0) |
(0) |
M |
32 |
|
6 |
(0) |
(0) |
(0) |
(0) |
(277) |
M |
|
dj |
|
0 |
|
|
277 |
32 |
0 |
Наибольшая сумма констант приведения равна (429 + ) = 429 для ребра (2,1), следовательно, множество разбивается на два подмножества (2,1) и (2*,1*).
Нижняя граница гамильтоновых циклов этого подмножества:
I j |
1 |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
0 |
521 |
348 |
584 |
405 |
0 |
2 |
M |
M |
602 |
429 |
665 |
461 |
429 |
3 |
|
|
M |
181 |
277 |
0 |
|
4 |
|
|
|
M |
344 |
39 |
|
5 |
|
|
|
|
M |
32 |
|
6 |
|
|
|
|
|
M |
|
dj |
|
0 |
|
|
|
0 |
429 |
В результате получим другую сокращенную матрицу (5 x 5), которая подлежит операции приведения.
После операции приведения сокращенная матрица будет иметь вид:
I j |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
521 |
348 |
584 |
405 |
348 |
3 |
|
M |
181 |
277 |
0 |
|
4 |
|
|
M |
344 |
39 |
|
5 |
|
|
|
M |
32 |
|
6 |
|
|
|
|
M |
|
dj |
|
|
|
|
0 |
348 |
Поскольку нижняя граница этого подмножества (2,1) меньше, чем подмножества (2*,1*), то ребро (2,1) включаем в маршрут.
Шаг №2.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
I j |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
173 |
0(57) |
236 |
57 |
57 |
3 |
(0) |
M |
181 |
277 |
0(32) |
|
4 |
(0) |
(0) |
M |
344 |
39 |
|
5 |
(0) |
(0) |
(0) |
M |
32 |
|
6 |
(0) |
(0) |
(0) |
(236) |
M |
|
dj |
|
|
0 |
236 |
32 |
0 |
Наибольшая сумма констант приведения равна ( + 236) = 236 для ребра (6,5), следовательно, множество разбивается на два подмножества (6,5) и (6*,5*).
Нижняя граница гамильтоновых циклов этого подмножества:
I j |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
173 |
0 |
236 |
57 |
0 |
3 |
|
M |
181 |
277 |
0 |
|
4 |
|
|
M |
344 |
39 |
|
5 |
|
|
|
M |
32 |
|
6 |
|
|
|
M |
M |
|
dj |
|
|
0 |
236 |
0 |
236 |
В результате получим другую сокращенную матрицу (4 x 4), которая подлежит операции приведения.
После операции приведения сокращенная матрица будет иметь вид:
I j |
2 |
3 |
4 |
6 |
di |
1 |
M |
173 |
0 |
57 |
0 |
3 |
|
M |
181 |
0 |
|
4 |
|
|
M |
39 |
|
5 |
|
|
|
M |
|
dj |
|
|
0 |
0 |
0 |
Поскольку нижняя граница этого подмножества (6,5) меньше, чем подмножества (6*,5*), то ребро (6,5) включаем в маршрут.
Шаг №3.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
I j |
2 |
3 |
4 |
6 |
di |
1 |
M |
173 |
0(57) |
57 |
57 |
3 |
(0) |
M |
181 |
0(39) |
|
4 |
(0) |
(0) |
M |
39 |
|
5 |
(0) |
(0) |
(0) |
M |
|
dj |
|
|
0 |
39 |
0 |
Наибольшая сумма констант приведения равна (57 + 0) = 57 для ребра (1,4), следовательно, множество разбивается на два подмножества (1,4) и (1*,4*).
Нижняя граница гамильтоновых циклов этого подмножества:
I j |
2 |
3 |
4 |
6 |
di |
1 |
M |
173 |
M |
57 |
57 |
3 |
|
M |
181 |
0 |
|
4 |
|
|
M |
39 |
|
5 |
|
|
|
M |
|
dj |
|
|
|
0 |
57 |
В результате получим другую сокращенную матрицу (3 x 3), которая подлежит операции приведения.
После операции приведения сокращенная матрица будет иметь вид:
I j |
2 |
3 |
6 |
di |
3 |
|
M |
0 |
|
4 |
|
|
39 |
|
5 |
|
|
M |
|
dj |
|
|
0 |
0 |
Чтобы исключить подциклы, запретим следующие переходы: (4,2),
Поскольку нижняя граница этого подмножества (1,4) меньше, чем подмножества (1*,4*), то ребро (1,4) включаем в маршрут.
Шаг №4.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
I j |
2 |
3 |
6 |
di |
3 |
(0) |
M |
0(39) |
|
4 |
M |
(39) |
39 |
39 |
5 |
(0) |
(0) |
M |
|
dj |
|
|
39 |
0 |
Наибольшая сумма констант приведения равна ( + 39) = 39 для ребра (3,6), следовательно, множество разбивается на два подмножества (3,6) и (3*,6*).
Нижняя граница гамильтоновых циклов этого подмножества:
I j |
2 |
3 |
6 |
di |
3 |
|
M |
M |
|
4 |
M |
|
39 |
|
5 |
|
|
M |
|
dj |
|
|
39 |
39 |
В результате получим другую сокращенную матрицу (2 x 2), которая подлежит операции приведения.
После операции приведения сокращенная матрица будет иметь вид:
I j |
2 |
3 |
di |
4 |
M |
|
|
5 |
|
|
|
dj |
|
|
0 |
Поскольку нижняя граница этого подмножества (3,6) меньше, чем подмножества (3*,6*), то ребро (3,6) включаем в маршрут.
В соответствии с этой матрицей включаем в гамильтонов маршрут ребра (4,3) и (5,2).
В результате по дереву ветвлений гамильтонов цикл образуют ребра:
(2,1), (1,4), (4,3), (3,6), (6,5), (5,2),
Длина маршрута равна F(Mk) = 2606
