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

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

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

Кафедра ОСУ

Самостоятельная работа студента №12

Задача о коммивояжере

Выполнил: студент группы 8512

Ярусов Н.К.

Проверил: Ротарь В.Г.

ТОМСК

2004

ЗАДАНИЕ

Решить задачу о коммивояжере, используя венгерский метод и алгоритм Флада. Необходимо найти маршрут коммивояжера, который бы включал в себя все города, при этом представлял из себя один единственный обход, т.е. в каждый город коммивояжер будет въезжать и выезжать один раз. Минимизировать транспортные издержки С.

ХОД РАБОТЫ

  1. Задача в формальном виде выглядит следующим образом:

при условиях

Запишем матрицу транспортных издержек Сij, используя код ФИО:

g

1

2

3

4

5

6

1

18 (Р)

21 (У)

19 (С)

16 (О)

3 (В)

2

15 (Н)

12 (К)

16 (О)

13 (Л)

1 (А)

3

11 (Й)

12 (К)

15 (Н)

19 (С)

20(Т)

4

1 (А)

15 (Н)

20 (Т)

15 (Н)

16 (О)

5

3 (В)

10 (И)

25 (Ч)

33 (Я)

21(У)

6

19 (С)

16 (О)

3 (В)

15 (Н)

10 (И)

Этап 1: подготовительный этап, использующий венгерский метод (алгоритм Флада):

  1. Переход g => g´ (ищем в каждой строке матрицы g минимальный элемент). Тогда коэффициент приведения матрицы , следовательно, .

  2. Переход g´ => g´´ (ищем в каждом столбце матрицы g´ минимальный элемент). Тогда коэффициент приведения матрицы , следовательно, .

  3. Операции (1) и (2) этапа 1 обеспечили в каждой строке и в каждом столбце появление хотя бы одного ноля.

  4. Подсчитываем в матрице g´´ для получившихся нулей их оценку, которая складывается из суммы минимальных элементов в строке i и в столбце j, соответствующих позиции ноля.

    g

    1

    2

    3

    4

    5

    6

    g'

    1

    2

    3

    4

    5

    6

    g''

    1

    2

    3

    4

    5

    6

    1

    18

    21

    19

    16

    3

    3

    1

    15

    18

    16

    13

    0

    1

    14

    18

    12

    6

    0/6

    2

    15

    12

    16

    13

    1

    1

    2

    14

    11

    15

    12

    0

    2

    14

    11

    11

    5

    0/5

    3

    11

    12

    15

    19

    20

    11

    3

    0

    1

    4

    8

    9

    3

    0/1

    0/6

    0/8

    1

    9

    4

    1

    15

    20

    15

    16

    1

    4

    0

    14

    19

    14

    15

    4

    0/7

    13

    19

    7

    15

    5

    3

    10

    25

    33

    21

    3

    5

    0

    7

    22

    30

    18

    5

    0/6

    6

    22

    26

    18

    6

    19

    16

    3

    15

    10

    3

    6

    16

    13

    0

    12

    7

    6

    16

    12

    0/11

    8

    0/1

    Σ

    =

    22

    0

    0

    0

    0

    0

    0

    Σ

    =

    0

  5. Находим элемент с максимальной оценкой и вычеркиваем строку и столбец, на пересечении которых он расположен и составляем заново таблицу. Таким образом, ноль, имеющий максимальную оценку, равную 11, находится на позиции i = 6, j = 3. Следовательно, вычеркиваем строку №6 и столбец №3, а также позиции С36 присваиваем ∞.

  6. Пересчитываем матрицу по столбцам, находим оценки нолей в матрице g''(1) и находим элемент с максимальной оценкой, это элемент с максимальной оценкой, равной 11, находящийся в позиции i = 3, j = 4. Следовательно, вычеркиваем строку №3 и столбец №4, а также позиции С46 присваиваем ∞.

    g''(1)

    1

    2

    4

    5

    6

    1

    14

    12

    5

    0/5

    0

    2

    14

    11

    4

    0/4

    0

    3

    0/0

    0/6

    0/11

    0/4

    0

    4

    0/6

    13

    6

    15

    0

    5

    0/6

    6

    26

    18

    0

    0

    0

    0

    0

    0

    Σ

    =

    0

  7. Пересчитываем матрицу по столбцам, находим оценки нолей в матрице g''(2) и находим элемент с максимальной оценкой, это элемент с максимальной оценкой, равной 7 находящийся в позиции i = 5 j = 2. Следовательно, вычеркиваем строку №5 и столбец №2, а также позиции С25 присваиваем ∞.

    g''(2)

    1

    2

    5

    6

    1

    8

    1

    0/1

    0

    2

    14

    0/1

    0/0

    0

    4

    0/2

    7

    2

    0

    5

    0/0

    0/7

    18

    0

    0

    0

    0

    0

  8. Так как все минимальные элементы по строкам и столбцам в матрице g''(3) равны нолю, следовательно, матрица не пересчитывается. Поэтому мы только находим оценки нолей в матрице g''(3) и находим элемент с максимальной оценкой, это элемент с максимальной оценкой, равной 16, находящийся в позиции i = 4, j = 1. Следовательно, вычеркиваем строку №4 и столбец №5, а также позиции С16 присваиваем ∞.

    g''(3)

    1

    5

    6

    1

    1

    0/1

    0

    2

    14

    0/0

    0

    4

    0/16

    2

    0

    0

    0

    0

  9. Получаем конечные пункты маршрута: i = 1, j = 5 и i = 2, j = 6.

g''(4)

5

6

1

1

2

0/0

1

g''(4)

5

6

1

0

2

0

Таким образом, маршрут обхода выглядит следующим образом:

Построим дерево решений:

Соседние файлы в папке 12