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

2.2. Решение задачи коммивояжера.

ОАО «ЖТК» («Железнодорожная торговая компания») отправляет менеджера по обучению региональных представителей в 5 субъектов страны, в которых расположены филиалы компании - Татарстан, Башкортостан, Кировская область, Нижегородская область и Пермский край. Менеджеру нужно проработать маршрут, чтобы посетить каждый регион единожды и вернуться обратно в головной офис. Ниже приведена таблица стоимости проездов в сотнях рублей. Определить оптимальный маршрут менеджера при минимальных затратах.

i/j

Головной офис (1)

Татарстан (2)

Пермский край (3)

Кировская область (4)

Нижегородская область (5)

Башкортостан (6)

Головной офис (1)

31

15

19

8

55

Татарстан (2)

19

22

31

7

35

Пермский край (3)

25

43

53

57

16

Кировская область (4)

5

50

49

39

9

Нижегородская область (5)

24

24

33

5

14

Башкортостан (6)

34

26

6

3

36

Составим экономико-математическую модель.

-целевая функция, где Ci j - затраты на переход из i-го города в j-й.

При ограничениях:

Для определения нижней границы множества воспользуемся операцией редукции или приведения матрицы по строкам, для чего необходимо в каждой строке матрицы найти минимальный элемент: di = min(j) dij

Табл. 1

i / j

1

2

3

4

5

6

di

1

31

15

19

8

55

8

2

19

22

31

7

35

7

3

25

43

53

57

16

16

4

5

50

49

39

9

5

5

24

24

33

5

14

5

6

34

26

6

3

36

3

Затем вычитаем di из элементов рассматриваемой строки. В связи с этим во вновь полученной матрице в каждой строке будет как минимум один ноль.

Табл. 2

i /j

1

2

3

4

5

6

1

23

7

11

0

47

2

12

15

24

0

28

3

9

27

37

41

0

4

0

45

44

34

4

5

19

19

28

0

9

6

31

23

3

0

33

dj

0

19

3

0

0

0

Такую же операцию редукции проводим по столбцам, для чего в каждом столбце находим минимальный элемент: dj = min(i) dij

Табл. 3

i /j

1

2

3

4

5

6

1

4

4

11

0

47

2

12

12

24

0

28

3

9

8

37

41

0

4

0

26

41

34

4

5

19

0

25

0

9

6

31

4

0

0

33

После вычитания минимальных элементов получаем полностью редуцированную матрицу, где величины di и dj называются константами приведения.

Сумма констант приведения определяет нижнюю границу H:

H = ∑di + ∑dj =8+7+16+5+5+3+0+19+3+0+0+0 = 66

Элементы матрицы dij соответствуют расстоянию от пункта i до пункта j.

Поскольку в матрице 6 городов, то D является матрицей 6x6 с неотрицательными элементами dij 0

Каждый допустимый маршрут представляет собой цикл, по которому коммивояжер посещает город только один раз и возвращается в исходный город.

Определим ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

С этой целью для всех клеток матрицы с нулевыми элементами заменяем поочередно нули на(бесконечность) и определяем для них сумму образовавшихся констант приведения, они приведены в скобках. То есть, считаем штрафы, которые мы можем получить, если не поедим в какой-либо субъект.

d(1,5) = 4 + 0 = 4; d(2,5) = 12 + 0 = 12; d(3,6) = 8 + 4 = 12; d(4,1) = 4 + 9 = 13; d(5,2) = 0 + 4 = 4; d(5,4) = 0 + 0 = 0; d(6,3) = 0 + 4 = 4; d(6,4) = 0 + 0 = 0;

Табл. 4

i j

1

2

3

4

5

6

1

4

4

11

0(4)

47

2

12

12

24

0(12)

28

3

9

8

37

41

0(12)

4

0(13)

26

41

34

4

5

19

0(4)

25

0(0)

9

6

31

4

0(4)

0(0)

33

Наибольшая сумма констант приведения равна (4 + 9) = 13 для ребра (4,1), следовательно, множество разбивается на два подмножества (4,1) и (4*,1*), то есть к корню дерева добавляем ветки принятия и отвержения. Включение ребра (4,1) проводится путем исключения всех элементов 4-ой строки и 1-го столбца, в которой элемент d14 заменяем на , для исключения образования негамильтонова цикла, так как менеджер не может ехать обратно из Головного офиса в Кировскую область.

Нижняя граница гамильтоновых циклов этого подмножества, то есть сумма на ветке отвержения: H(4*,1*) = 66 + 13 = 79

В результате получим другую сокращенную матрицу (5 x 5), которая подлежит операции приведения, но т.к. в каждой строке и столбце уже имеется 0,то не будем ее редуцировать. Соответственно нижняя граница подмножества (4,1), то есть на ветке принятия равна: H(4,1) = 66 + 0 = 66

Табл.5

i /j

2

3

4

5

6

1

4

4

0

47

2

12

24

0

28

3

8

37

41

0

5

0

25

0

9

6

4

0

0

33

Снова считаем штрафы табл. 5

d(1,5) = 4 + 0 = 4; d(2,5) = 12 + 0 = 12; d(3,6) = 8 + 9 = 17; d(5,2) = 0 + 4 = 4; d(5,4) = 0 + 0 = 0; d(6,3) = 0 + 4 = 4; d(6,4) = 0 + 0 = 0;

Табл. 6

i /j

2

3

4

5

6

1

4

4

0(4)

47

2

12

24

0(12)

28

3

8

37

41

0(17)

5

0(4)

25

0(0)

9

6

4

0(4)

0(0)

33

Наибольшая сумма констант приведения равна (8 + 9) = 17 для ребра (3,6), следовательно, множество разбивается на два подмножества (3,6) и (3*,6*). То есть к корню дерева добавляем ветки принятия и отвержения. Включение ребра (3,6) проводится путем исключения всех элементов 3-ой строки и 6-го столбца, в которой элемент d63 заменяем на , для исключения образования негамильтонова цикла. Нижняя граница гамильтоновых циклов этого подмножества:

H(3*,6*) = 66 + 17 = 83

В результате получим другую сокращенную матрицу (4 x 4), которая подлежит операции приведения. В каждой строке табл. 7 мы имеем 0, но не в каждом столбце он есть, соответсвенно, редуцируем табл.7.

Сумма констант приведения сокращенной матрицы: ∑di + ∑dj = 4

После операции приведения редуцированная матрица будет иметь вид:

Табл. 7

i /j

2

3

4

5

1

4

4

0

2

12

24

0

5

0

25

0

6

4

0

33

dj

0

4

0

0

Нижняя граница подмножества (3,6), то есть ветка принятия, равна: H(3,6) = 66 + 4 = 70

Считаем штрафы для Табл. 7.

d(1,3) = 0 + 8 = 8; d(1,5) = 0 + 0 = 0; d(2,5) = 8 + 0 = 8; d(5,2) = 0 + 4 = 4; d(5,4) = 0 + 0 = 0; d(6,4) = 4 + 0 = 4;

Табл.8

i/ j

2

3

4

5

1

4

0(8)

0(0)

2

8

24

0(8)

5

0(4)

21

0(0)

6

4

0(4)

33

Наибольшая сумма констант приведения равна (0 + 8) = 8 для ребра (1,3), следовательно, множество разбивается на два подмножества (1,3) и (1*,3*), тогда к дереву решению добавляем ветки принятия и отвержения. Включение ребра (1,3) проводится путем исключения всех элементов 1-ой строки и 3-го столбца. Нарисуем маршрут нашего пути. Чтобы цикл не замкнулся, мы должны поставить на H(6,4) в Табл.9.

6

3

1

4

В результате получим другую сокращенную матрицу (3 x 3), которая подлежит операции приведения, но т.к. в каждом столбце и строке есть хотя бы один 0, то сумма констант приведения сокращенной матрицы: ∑di + ∑dj = 0, тогда

Нижняя граница подмножества (1,3) равна: H(1,3) = 70 + 0 = 70.

Нижняя граница гамильтоновых циклов этого подмножества:

H(1*,3*) = 70 + 8 = 78

Табл. 9.

i /j

2

4

5

di

2

24

0

0

5

0

0

0

6

4

33

4

Редуцируем Табл.9 по строкам.

Табл. 10

i /j

2

4

5

2

24

0(53)

5

0(0)

0(24)

6

0(29)

29

Считаем штрафы в Табл.10.

d(2,5) = 24 + 29 = 53; d(5,2) = 0 + 0 = 0; d(5,4) = 0 + 24 = 24; d(6,2) = 29 + 0 = 29;

Наибольшая сумма констант приведения равна (24 + 29) = 53 для ребра (2,5), следовательно, множество разбивается на два подмножества (2,5) и (2*,5*).

Нижняя граница гамильтоновых циклов этого подмножества:

H(2*,5*) = 70 + 53 = 123.

Нижняя граница подмножества (2,5) равна: H(2,5) = 70 + 4 = 74

Включение ребра (2,5) проводится путем исключения всех элементов 2-ой строки и 5-го столбца, в которой элемент d52 заменяем на , для исключения образования негамильтонова цикла. В результате получим другую сокращенную матрицу (2 x 2), которая подлежит операции приведения.

Сумма констант приведения сокращенной матрицы: ∑di + ∑dj = 0

После операции приведения сокращенная матрица будет иметь вид:

Табл.11

i/j

2

4

5

0

6

0

В соответствии с этой матрицей включаем в гамильтонов маршрут ребра (5,2) и (6,4), так как в каждых строках и столбцах по одному 0.

2

Итак, наш исходный маршрут:

5

Т=((1;3), (3;6), (6;2), (2;5), (5;4), (4;1)).

6

V(Т) = 5+15+16+26+5+7=74.

4

1

3

Маршрут оптимален, так как ветки

отвержения имеют большую стоимость,

чем наш проработанный маршрут, тогда

матрица маршрута будет выглядеть так:

Итак, для того, чтобы менеджеру ОАО «ЖТК» как можно дешевле для фирмы объехать все регионы, он должен из Головного офиса отправиться в Пермский край, оттуда в Башкортостан, после в Татарстан, оттуда в Нижегородскую область, а затем в Кировскую область, откуда вернуться обратно в Головной центр, и тогда он потратит всего 7400 рублей.

Проведем анализ решения. Предположим, что менеджер не может поехать из Головного офиса в Пермский край в связи с тем, что прямой транспорт ходит раз в неделю, а нужно начать объезд как можно раньше, тогда пойдем по ветке отвержения (1*,3*), то есть обратимся к таблице возврата- 7, в которой на элемент d13 поставим . И тогда редуцируем нашу таблицу. Табл. 7В.

i /j

2

3

4

5

1

4

0

2

12

24

0

5

0

25

0

6

4

0

33

dj

0

12

0

0

Нижняя граница подмножества (3,6) равна 78.

Считаем штрафы для Табл. 7.

d(1,3) = 0 + 8 = 8; d(1,5) = 0 + 0 = 0; d(2,5) = 8 + 0 = 8; d(5,2) = 0 + 4 = 4; d(5,4) = 0 + 0 = 0; d(6,4) = 4 + 0 = 4;

Табл.8В

i/ j

2

3

4

5

1

4

0(0)

2

0(13)

24

0(8)

5

0(4)

13

0(0)

6

4

0(4)

33

Наибольшая сумма констант приведения равна (0 + 13) = 13 для ребра (2,3), следовательно, множество разбивается на два подмножества (2,3) и (2*,3*), тогда к дереву решению к ветке отвержения (1*,3*) добавляем ветки принятия и отвержения (2,3). Включение ребра (2,3) проводится путем исключения всех элементов 2-ой строки и 3-го столбца. Нарисуем маршрут нашего пути. Чтобы цикл не замкнулся, мы должны поставить на H(6,2) в Табл.9.

6

3

2

1

4

В результате получим другую сокращенную матрицу (3 x 3), которая подлежит операции приведения, но т.к. в каждом столбце и строке есть хотя бы один 0, то сумма констант приведения сокращенной матрицы: ∑di + ∑dj = 0, тогда

Нижняя граница подмножества (1,3) равна: H(2,3) = 78 + 0 = 78.

Нижняя граница гамильтоновых циклов этого подмножества:

H(2*,3*) = 78 + 13 = 91

Табл. 9В.

i/ j

2

4

5

1

4

0(37)

5

0(4)

0(0)

6

0(33)

33

Таблица редуцирована, в каждых строках и столбцах хотя бы по одному нулю. Считаем штрафы в Табл.9.

d(1,5) = 4 + 33 = 37; d(5,2) = 4 + 0 = 4; d(5,4) = 0 + 0 = 0; d(6,4) = 33 + 0 = 33;

Наибольшая сумма констант приведения равна (4 + 33) = 37 для ребра (1,5), следовательно, множество разбивается на два подмножества (1,5) и (1*,5*).

Нижняя граница гамильтоновых циклов этого подмножества:

H(1*,5*) = 78 + 37 = 115.

Нижняя граница подмножества (1,5) равна: H(1,5) = 78 + 0 = 78

Включение ребра (1,5) проводится путем исключения всех элементов 1-ой строки и 5-го столбца, в которой элемент d54 заменяем на , для исключения образования негамильтонова цикла. В результате получим другую сокращенную матрицу (2 x 2), которая подлежит операции приведения.

Сумма констант приведения сокращенной матрицы: ∑di + ∑dj = 0

После операции приведения сокращенная матрица будет иметь вид:

Табл.10В

i/ j

2

4

5

0

6

0

В соответствии с этой матрицей включаем в гамильтонов маршрут ребра (5,2) и (6,4), так как в каждых строках и столбцах по одному 0.

3

Итак, наш исходный маршрут:

6

Т=((1;5), (5;2), (2;3), (3;6), (6;4), (4;1)).

2

V(Т) = 5+8+24+22+16+3=78.

4

1

5

Матрица маршрута будет выглядеть так:

Составим дерево решений.

Н=66

41

36

13

25

23

54

15

62

52

64

Итак, если менеджер ОАО «ЖТК» не может начать свой маршрут с Пермского края, он должен из Головного офиса отправиться в Нижегородскую область, оттуда в Татарстан, после в Пермский край, после в Башкортостан, а затем в Кировскую область, откуда вернуться обратно в Головной центр, и тогда он потратит всего 7800 рублей. Мы видим, что маршрут не оптимален в таком случае, хотя из всех веток отвержения он имел наименьшую стоимость.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]