Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Филатов_Отчет5_Системный_Анализ

.doc
Скачиваний:
10
Добавлен:
10.12.2018
Размер:
451.58 Кб
Скачать

Федеральное агентство по образованию

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет технической кибернетики

Кафедра компьютерных систем и программных технологий

ОТЧЕТ

по расчетному заданию №5

по системному анализу

Вариант 18

Студент гр.3081/2: Филатов Ю.К.

Преподаватель: Сабонис С.С.

Санкт-Петербург

2011

  1. Решить задачу коммивояжера методом ветвей и границ в соответствии с матрицей по вариантам.

  1. Решить задачу коммивояжера с использованием жадных алгоритмов и алгоритмов локальных улучшений

  1. Метод ветвей и границ

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

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Овал 3(5,4) =115+11 = 126

(5,4)

(*5,*4)

Прямая со стрелкой 6Прямая со стрелкой 7

Овал 4Овал 5

Шаг №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