Филатов_Отчет5_Системный_Анализ
.docФедеральное агентство по образованию
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Факультет технической кибернетики
Кафедра компьютерных систем и программных технологий
ОТЧЕТ
по расчетному заданию №5
по системному анализу
Вариант 18
Студент гр.3081/2: Филатов Ю.К.
Преподаватель: Сабонис С.С.
Санкт-Петербург
2011
-
Решить задачу коммивояжера методом ветвей и границ в соответствии с матрицей по вариантам.
-
Решить задачу коммивояжера с использованием жадных алгоритмов и алгоритмов локальных улучшений
-
Метод ветвей и границ
i j |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
∞ |
9 |
8 |
49 |
47 |
13 |
2 |
7 |
∞ |
15 |
40 |
46 |
22 |
3 |
8 |
12 |
∞ |
55 |
39 |
7 |
4 |
35 |
29 |
40 |
∞ |
49 |
62 |
5 |
37 |
34 |
35 |
39 |
∞ |
37 |
6 |
12 |
17 |
5 |
44 |
36 |
∞ |
|
|
|
|
|
|
|
Для определения нижней границы множества воспользуемся операцией редукции или приведения матрицы по строкам, для чего необходимо в каждой строке матрицы D найти минимальный элемент.
di = min(j) dij
i j |
1 |
2 |
3 |
4 |
5 |
6 |
min |
1 |
∞ |
9 |
8 |
49 |
47 |
13 |
8 |
2 |
7 |
∞ |
15 |
40 |
46 |
22 |
7 |
3 |
8 |
12 |
∞ |
55 |
39 |
7 |
7 |
4 |
35 |
29 |
40 |
∞ |
49 |
62 |
29 |
5 |
37 |
34 |
35 |
39 |
∞ |
37 |
34 |
6 |
12 |
17 |
5 |
44 |
36 |
∞ |
5 |
|
|
|
|
|
|
|
|
Затем вычитаем di из элементов рассматриваемой строки. В связи с этим во вновь полученной матрице в каждой строке будет как минимум один ноль. Такую же операцию редукции проводим по столбцам, для чего в каждом столбце находим минимальный элемент:
dj = min(i) dij
di = min(j) dij |
|
|
|
|
|
|
|
i j |
1 |
2 |
3 |
4 |
5 |
6 |
|
1 |
#ЗНАЧ! |
1 |
0 |
41 |
39 |
5 |
|
2 |
0 |
#ЗНАЧ! |
8 |
33 |
39 |
15 |
|
3 |
1 |
5 |
#ЗНАЧ! |
48 |
32 |
0 |
|
4 |
6 |
0 |
11 |
#ЗНАЧ! |
20 |
33 |
|
5 |
3 |
0 |
1 |
5 |
#ЗНАЧ! |
3 |
|
6 |
7 |
12 |
0 |
39 |
31 |
#ЗНАЧ! |
|
min |
0 |
0 |
0 |
5 |
20 |
0 |
|
После вычитания минимальных элементов получаем полностью редуцированную матрицу, где величины di и dj называются константами приведения.
i j |
1 |
2 |
3 |
4 |
5 |
6 |
|
1 |
ура |
1 |
0 |
36 |
19 |
5 |
|
2 |
0 |
ура |
8 |
28 |
19 |
15 |
|
3 |
1 |
5 |
ура |
43 |
12 |
0 |
|
4 |
6 |
0 |
11 |
ура |
0 |
33 |
|
5 |
3 |
0 |
1 |
0 |
ура |
3 |
|
6 |
7 |
12 |
0 |
34 |
11 |
ура |
|
|
|
|
|
|
|
|
|
Сумма констант приведения определяет нижнюю границу H:
H = ∑di + ∑dj
H = X+X+X= 115
Элементы матрицы 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 |
|
1 |
|
|
1 |
|
|
|
|
2 |
9 |
|
|
|
|
|
|
3 |
|
|
|
|
|
4 |
|
4 |
|
0 |
|
|
11 |
|
|
5 |
|
0 |
|
28 |
|
|
|
6 |
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
Наибольшая сумма констант приведения равна 2 8 для ребра (5,4), следовательно, множество разбивается на два подмножества 45) и (5*,4*).
Нижняя граница гамильтоновых циклов этого подмножества:
H(5*,5*) = 115+28=143
Исключение ребра ребра (5,4) проводится путем исключения всех элементов 5-ой строки и 4-го столбца, в которой элемент d54 заменяем на ∞, для исключения образования негамильтонова цикла.
В результате получим другую сокращенную матрицу (5 x 5), которая подлежит операции приведения.
i j |
1 |
2 |
3 |
5 |
6 |
|
1 |
ура |
1 |
0 |
19 |
5 |
0 |
2 |
0 |
ура |
8 |
19 |
15 |
0 |
3 |
1 |
5 |
ура |
12 |
0 |
0 |
4 |
6 |
0 |
11 |
ура |
33 |
0 |
6 |
7 |
12 |
0 |
11 |
ура |
0 |
|
0 |
0 |
0 |
11 |
0 |
|
i j |
1 |
2 |
3 |
5 |
6 |
|
1 |
ура |
1 |
0 |
8 |
5 |
|
2 |
0 |
ура |
8 |
8 |
15 |
|
3 |
1 |
5 |
ура |
1 |
0 |
|
4 |
6 |
0 |
11 |
ура |
33 |
|
6 |
7 |
12 |
0 |
0 |
ура |
|
|
|
|
|
|
|
|
Нижняя граница подмножества (5,4) равна:
H(5,4) =115+11 = 126
(5,4)
(*5,*4)
Шаг №2
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
С этой целью для всех клеток матрицы с нулевыми элементами заменяем поочередно нули на ∞ и определяем для них сумму образовавшихся констант приведения.
i j |
1 |
2 |
3 |
5 |
6 |
|
1 |
ура |
1 |
0 |
8 |
5 |
|
2 |
0 |
ура |
8 |
8 |
15 |
|
3 |
1 |
5 |
ура |
1 |
0 |
|
4 |
6 |
0 |
11 |
ура |
33 |
|
6 |
7 |
12 |
0 |
0 |
ура |
|
|
|
|
|
|
|
|
i j |
1 |
2 |
3 |
5 |
6 |
|
1 |
|
|
1 |
|
|
|
2 |
9 |
|
|
|
|
|
3 |
|
|
|
|
6 |
|
4 |
|
7 |
|
|
|
|
6 |
|
|
0 |
1 |
|
|
|
|
|
|
|
|
|