3.2 Комивояжер
.rtf
Задача коммивояжера.
Возьмем в качестве произвольного маршрута:
X0 = (1,2);(2,3);(3,4);(4,5);(5,6);(6,1)
Тогда F(X0) = 14 + 34 + 24 + 9 + 30 + 1 = 112
Для определения нижней границы множества воспользуемся операцией редукции или приведения матрицы по строкам, для чего необходимо в каждой строке матрицы D найти минимальный элемент.
di = min(j) dij
i j |
1 |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
14 |
40 |
33 |
16 |
51 |
14 |
2 |
48 |
M |
34 |
4 |
11 |
24 |
4 |
3 |
57 |
85 |
M |
24 |
38 |
52 |
24 |
4 |
30 |
50 |
44 |
M |
9 |
31 |
9 |
5 |
18 |
42 |
24 |
31 |
M |
30 |
18 |
6 |
1 |
38 |
31 |
19 |
32 |
M |
1 |
Затем вычитаем di из элементов рассматриваемой строки. В связи с этим во вновь полученной матрице в каждой строке будет как минимум один ноль.
i j |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
M |
0 |
26 |
19 |
2 |
37 |
2 |
44 |
M |
30 |
0 |
7 |
20 |
3 |
33 |
61 |
M |
0 |
14 |
28 |
4 |
21 |
41 |
35 |
M |
0 |
22 |
5 |
0 |
24 |
6 |
13 |
M |
12 |
6 |
0 |
37 |
30 |
18 |
31 |
M |
Такую же операцию редукции проводим по столбцам, для чего в каждом столбце находим минимальный элемент:
dj = min(i) dij
i j |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
M |
0 |
26 |
19 |
2 |
37 |
2 |
44 |
M |
30 |
0 |
7 |
20 |
3 |
33 |
61 |
M |
0 |
14 |
28 |
4 |
21 |
41 |
35 |
M |
0 |
22 |
5 |
0 |
24 |
6 |
13 |
M |
12 |
6 |
0 |
37 |
30 |
18 |
31 |
M |
dj |
0 |
0 |
6 |
0 |
0 |
12 |
После вычитания минимальных элементов получаем полностью редуцированную матрицу, где величины di и dj называются константами приведения.
i j |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
M |
0 |
20 |
19 |
2 |
25 |
2 |
44 |
M |
24 |
0 |
7 |
8 |
3 |
33 |
61 |
M |
0 |
14 |
16 |
4 |
21 |
41 |
29 |
M |
0 |
10 |
5 |
0 |
24 |
0 |
13 |
M |
0 |
6 |
0 |
37 |
24 |
18 |
31 |
M |
Сумма констант приведения определяет нижнюю границу H:
H = ∑di + ∑dj
H = 14+4+24+9+18+1+0+0+6+0+0+12 = 88
Элементы матрицы dij соответствуют расстоянию от пункта i до пункта j.
Поскольку в матрице n городов, то D является матрицей nxn с неотрицательными элементами dij ≥ 0
Каждый допустимый маршрут представляет собой цикл, по которому коммивояжер посещает город только один раз и возвращается в исходный город.
Длина маршрута определяется выражением:
F(Mk) = ∑dij
Причем каждая строка и столбец входят в маршрут только один раз с элементом dij.
Шаг №1.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
С этой целью для всех клеток матрицы с нулевыми элементами заменяем поочередно нули на М(бесконечность) и определяем для них сумму образовавшихся констант приведения, они приведены в скобках.
i j |
1 |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
0(26) |
20 |
19 |
2 |
25 |
2 |
2 |
44 |
M |
24 |
0(7) |
7 |
8 |
7 |
3 |
33 |
61 |
M |
0(14) |
14 |
16 |
14 |
4 |
21 |
41 |
29 |
M |
0(12) |
10 |
10 |
5 |
0(0) |
24 |
0(20) |
13 |
M |
0(8) |
0 |
6 |
0(18) |
37 |
24 |
18 |
31 |
M |
18 |
dj |
0 |
24 |
20 |
0 |
2 |
8 |
0 |
d(1,2) = 2 + 24 = 26; d(2,4) = 7 + 0 = 7; d(3,4) = 14 + 0 = 14; d(4,5) = 10 + 2 = 12; d(5,1) = 0 + 0 = 0; d(5,3) = 0 + 20 = 20; d(5,6) = 0 + 8 = 8; d(6,1) = 18 + 0 = 18;
Наибольшая сумма констант приведения равна (2 + 24) = 26 для ребра (1,2), следовательно, множество разбивается на два подмножества (1,2) и (1*,2*).
Исключение ребра (1,2) проводим путем замены элемента d12 = 0 на M, после чего осуществляем очередное приведение матрицы расстояний для образовавшегося подмножества (1*,2*), в результате получим редуцированную матрицу.
i j |
1 |
2 |
3 |
4 |
5 |
6 |
di |
1 |
M |
M |
20 |
19 |
2 |
25 |
2 |
2 |
44 |
M |
24 |
0 |
7 |
8 |
0 |
3 |
33 |
61 |
M |
0 |
14 |
16 |
0 |
4 |
21 |
41 |
29 |
M |
0 |
10 |
0 |
5 |
0 |
24 |
0 |
13 |
M |
0 |
0 |
6 |
0 |
37 |
24 |
18 |
31 |
M |
0 |
dj |
0 |
24 |
0 |
0 |
0 |
0 |
26 |
Нижняя граница гамильтоновых циклов этого подмножества:
H(1*,2*) = 88 + 26 = 114
Включение ребра (1,2) проводится путем исключения всех элементов 1-ой строки и 2-го столбца, в которой элемент d21 заменяем на М, для исключения образования негамильтонова цикла.
В результате получим другую сокращенную матрицу (5 x 5), которая подлежит операции приведения.
После операции приведения сокращенная матрица будет иметь вид:
i j |
1 |
3 |
4 |
5 |
6 |
di |
2 |
M |
24 |
0 |
7 |
8 |
0 |
3 |
33 |
M |
0 |
14 |
16 |
0 |
4 |
21 |
29 |
M |
0 |
10 |
0 |
5 |
0 |
0 |
13 |
M |
0 |
0 |
6 |
0 |
24 |
18 |
31 |
M |
0 |
dj |
0 |
0 |
0 |
0 |
0 |
0 |
Сумма констант приведения сокращенной матрицы:
∑di + ∑dj = 0
Нижняя граница подмножества (1,2) равна:
H(1,2) = 88 + 0 = 88 ≤ 114
Поскольку нижняя граница этого подмножества (1,2) меньше, чем подмножества (1*,2*), то ребро (1,2) включаем в маршрут с новой границей H = 88
Шаг №2.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
С этой целью для всех клеток матрицы с нулевыми элементами заменяем поочередно нули на М(бесконечность) и определяем для них сумму образовавшихся констант приведения, они приведены в скобках.
i j |
1 |
3 |
4 |
5 |
6 |
di |
2 |
M |
24 |
0(7) |
7 |
8 |
7 |
3 |
33 |
M |
0(14) |
14 |
16 |
14 |
4 |
21 |
29 |
M |
0(17) |
10 |
10 |
5 |
0(0) |
0(24) |
13 |
M |
0(8) |
0 |
6 |
0(18) |
24 |
18 |
31 |
M |
18 |
dj |
0 |
24 |
0 |
7 |
8 |
0 |
d(2,4) = 7 + 0 = 7; d(3,4) = 14 + 0 = 14; d(4,5) = 10 + 7 = 17; d(5,1) = 0 + 0 = 0; d(5,3) = 0 + 24 = 24; d(5,6) = 0 + 8 = 8; d(6,1) = 18 + 0 = 18;
Наибольшая сумма констант приведения равна (0 + 24) = 24 для ребра (5,3), следовательно, множество разбивается на два подмножества (5,3) и (5*,3*).
Исключение ребра (5,3) проводим путем замены элемента d53 = 0 на M, после чего осуществляем очередное приведение матрицы расстояний для образовавшегося подмножества (5*,3*), в результате получим редуцированную матрицу.
i j |
1 |
3 |
4 |
5 |
6 |
di |
2 |
M |
24 |
0 |
7 |
8 |
0 |
3 |
33 |
M |
0 |
14 |
16 |
0 |
4 |
21 |
29 |
M |
0 |
10 |
0 |
5 |
0 |
M |
13 |
M |
0 |
0 |
6 |
0 |
24 |
18 |
31 |
M |
0 |
dj |
0 |
24 |
0 |
0 |
0 |
24 |
Нижняя граница гамильтоновых циклов этого подмножества:
H(5*,3*) = 88 + 24 = 112
Включение ребра (5,3) проводится путем исключения всех элементов 5-ой строки и 3-го столбца, в которой элемент d35 заменяем на М, для исключения образования негамильтонова цикла.
В результате получим другую сокращенную матрицу (4 x 4), которая подлежит операции приведения.
После операции приведения сокращенная матрица будет иметь вид:
i j |
1 |
4 |
5 |
6 |
di |
2 |
M |
0 |
7 |
8 |
0 |
3 |
33 |
0 |
M |
16 |
0 |
4 |
21 |
M |
0 |
10 |
0 |
6 |
0 |
18 |
31 |
M |
0 |
dj |
0 |
0 |
0 |
8 |
8 |
Сумма констант приведения сокращенной матрицы:
∑di + ∑dj = 8
Нижняя граница подмножества (5,3) равна:
H(5,3) = 88 + 8 = 96 ≤ 112
Поскольку нижняя граница этого подмножества (5,3) меньше, чем подмножества (5*,3*), то ребро (5,3) включаем в маршрут с новой границей H = 96
Шаг №3.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
С этой целью для всех клеток матрицы с нулевыми элементами заменяем поочередно нули на М(бесконечность) и определяем для них сумму образовавшихся констант приведения, они приведены в скобках.
i j |
1 |
4 |
5 |
6 |
di |
2 |
M |
0(0) |
7 |
0(2) |
0 |
3 |
33 |
0(8) |
M |
8 |
8 |
4 |
21 |
M |
0(9) |
2 |
2 |
6 |
0(39) |
18 |
31 |
M |
18 |
dj |
21 |
0 |
7 |
2 |
0 |
d(2,4) = 0 + 0 = 0; d(2,6) = 0 + 2 = 2; d(3,4) = 8 + 0 = 8; d(4,5) = 2 + 7 = 9; d(6,1) = 18 + 21 = 39;
Наибольшая сумма констант приведения равна (18 + 21) = 39 для ребра (6,1), следовательно, множество разбивается на два подмножества (6,1) и (6*,1*).
Исключение ребра (6,1) проводим путем замены элемента d61 = 0 на M, после чего осуществляем очередное приведение матрицы расстояний для образовавшегося подмножества (6*,1*), в результате получим редуцированную матрицу.
i j |
1 |
4 |
5 |
6 |
di |
2 |
M |
0 |
7 |
0 |
0 |
3 |
33 |
0 |
M |
8 |
0 |
4 |
21 |
M |
0 |
2 |
0 |
6 |
M |
18 |
31 |
M |
18 |
dj |
21 |
0 |
0 |
0 |
39 |