Главная страница

Лаб2. Лабораторная работа 2 по дисциплине Дискретная математика вариант 7 Выполнил студент группы з581П124


Скачать 369.25 Kb.
НазваниеЛабораторная работа 2 по дисциплине Дискретная математика вариант 7 Выполнил студент группы з581П124
Дата04.11.2022
Размер369.25 Kb.
Формат файлаdocx
Имя файлаЛаб2.docx
ТипЛабораторная работа
#770241
страница1 из 2
  1   2

Министерство науки и высшего образования РФ

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

учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра компьютерных систем в управлении

и проектировании (КСУП)

ОТЧЕТ
Лабораторная работа № 2
по дисциплине

«Дискретная математика»

ВАРИАНТ 7

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

группы з-581П12-4 

направления подготовки 09.03.01

Страхова О.В.

(ФИО)
Проверил:

к.т.н., доцент каф. КСУП ТУСУР, (ученая степень, звание)

Жигалова Е. Ф.

(ФИО)

Томск 2022

Цель лабораторной работы

Изучить алгоритм Дейкстры нахождения кратчайшего маршрута на взвешенном (нагруженном) графе, алгоритм Форда – Фалкерсона нахождения максимального потока в транспортной сети, способ минимизации булевых функций с помощью карт Карно.

Задания на лабораторную работу

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

Исходные данные: вершина х0 – начальная; вершина х7 – конечная.

r[0,1] = 12 r[4,7] = 4 r[6,3] = 13 r[5,7] = 28

r[0,2] = 10 r[4,2] = 18 r[6,7] = 15 r[5,4] = 26

r[0,3] = 19 r[2,5] = 21 r[2,1] =4 3 r[6,5] = 11

r[1,4] = 25 r[2,6] = 15 r[3,2] = 32

Значения симметричных элементов получить самостоятельно.

Задание 2. Решить задачу о коммивояжере.

Значения элементов матрицы расстояний:

a(1.1) = ∞ a(2.1) = 153 a(3.1) = 32 a(4.1) = 11 a(5.1) = 22

a(1.2) = 25 a(2.2) = ∞ a(3.2) = 72 a(4.2) = 35 a(5.2) = 63

a(1.3) = 15 a(2.3) = 24 a(3.3) = ∞ a(4.3) = 29 a(5.3) = 34

a(1.4) = 13 a(2.4) = 36 a(3.4) = 18 a(4.4) = ∞ a(5.4) = 16

a(1.5) = 46 a(2.5) = 75 a(3.5) = 124 a(4.5) = 38 a(5.5) = ∞

Задание 3. Решить задачу нахождения максимального потока в транспортной сети с помощью алгоритма Форда – Фалкерсона.

Исходные данные:

Дана сеть S(X,U) x0 – исток сети; x7 – сток сети, где x0 X; x7 X.

r[0,1] = 12 r[4,7] = 4 r[6,3] = 13 r[5,7] = 33

r[0,2] = 10 r[4,2] = 18 r[6,7] = 32 r[5,4] = 26

r[0,3] = 19 r[2,5] = 21 r[2,1] = 3 r[6,5] = 11

r[1,4] = 25 r[2,6] = 15 r[3,2] = 32

Задание:

1. Вычислить значение максимального потока на сети S, применяя алгоритм Форда – Фалкерсона.

2. Построить разрез сети S.

Задание 4. Выполнить минимизацию булевой функции с помощью карты Карно.

f(x,y,z) = .

По результатам выполнения лабораторной работы оформляется отчет.

Задание 1. Решить задачу нахождения кратчайшего маршрута на взвешенном графе с помощью алгоритма Дейкстры.
Исходные данные: вершина х0 – начальная; вершина х7 – конечная.

r[0,1] = 12 r[4,7] = 4 r[6,3] = 13 r[5,7] = 28

r[0,2] = 10 r[4,2] = 18 r[6,7] = 15 r[5,4] = 26

r[0,3] = 19 r[2,5] = 21 r[2,1] =4 3 r[6,5] = 11

r[1,4] = 25 r[2,6] = 15 r[3,2] = 32

Построим граф



За текущую рассматриваемую вершину с постоянной пометкой возьмем вершину X0

Присвоим L(X0)=0 L(Xi)=∞



Найдем прямое отображение для текущей рассматриваемой вершины X0 это будут вершины X1, X2 X3.

Все вершины, входящие в прямое отображение, имеют временные пометки, поэтому пересчитаем их значение:

L(X1)min( ∞ ; 0+12)=12 заменяем метку

L(X2)min( ∞; 0+10)=10 заменяем метку

L(X3)min( ∞ ; 0+19)= 19 заменяем метку

Имеем следующие метки вершин:

L(X1)=12 L(X5)= ∞ L(X2)=10 L(X6)= ∞ L(X3)=19 L(X7)= ∞ L(X4)= ∞

Очевидно, что минимальную метку, равную 10, имеет вершина X2.

За следующую текущую метку принимаем вершину X2, а метка X0 становится постоянной.



Найдем прямое отображение для текущей рассматриваемой вершины X2 это будут вершины X0, X1, X3, X6, X4, X5. Все вершины, кроме X0, входящие в прямое отображение имеют временные пометки, поэтому пересчитаем их значение:

L(X1)min( 12 ; 10+43)=12 оставляем метку

L(X3)min( 19 ; 10+32)=19 оставляем метку

L(X4)min( ∞ ; 10+18)=28 заменяем метку

L(X5)min( ∞; 10+21)=31 заменяем метку

L(X6)min( ∞ ; 10+15)= 25 заменяем метку

Имеем следующие метки вершин:

L(X1) =12 L(X3) = 19 L(X4) =28 L(X6) = 25 L(X5) = 31 L(X7) = ∞



Найдем прямое отображение для текущей рассматриваемой вершины X1, это будут вершины X0, X2, X4. Для X0, X2 метки постоянные. Для X4, временная метка поэтому рассчитаем

L(X4)min( 28 ; 12+25)=28 оставляем метку

Помечаем X1 как рассмотренную вершину



Перейдем к вершине X4. Найдем прямое отображение для текущей рассматриваемой вершины X1: X2, X5, X7. Для X1, X2 метки постоянные. Для X5, X5 временные метки поэтому рассчитаем

L(X5)min( 31 ; 28+26)=31 оставляем метку.

L(X7)min( ∞ ; 28+4)=32 заменяем метку.

Имеем следующие временные метки

L(X3) =19 L(X5) =31 L(X6) =25 L(X7) =32

Помечаем X4 как рассмотренную



Перейдем к вершине X5 найдем прямое отображение для текущей рассматриваемой вершины X6, это будут вершины X2, X4, X6, X7 для X4, X2 метки постоянные. Для X6, X7 рассчитаем их значения.

L(X6)min( 25 ; 31+11)=25 оставляем метку

L(X7)min( 32 ; 31+28)=32 оставляем метку

Имеем следующие временные метки

L(X3) = 19 L(X6) =25 L(X7) =32

Все смежные вершины рассмотрены помечаем вершину X5 как рассмотренную



Перейдем к вершине X3. Найдем прямое отображение для текущей рассматриваемой вершины X3 это буду вершины X0,X2,X6 Для X0,X2 метки постоянные. Для X6 рассчитаем значение.

L(X6)min( 25 ; 19+13)=25 оставляем метку

L(X6) =25 L(X7) =32

Все смежные вершины рассмотрены помечаем вершину X3 как рассмотренную

Перейдем к вершине X6. Найдем прямое отображение для текущей рассматриваемой вершины X6 это будут вершины X2, X3, X5, X7. Для X2, X3, X5 метки постоянные. Для X7 рассчитаем значение.

L(X7)min( 32 ; 25+15)=32 оставляем метку

Имеем следующие временные метки L(X7) = 32

Все вершины рассмотрены, помечаем оставшуюся вершину: X7, как рассмотренную

Все вершины имеют постоянные метки, алгоритм окончен.

Для нахождения кратчайшего пути между вершинами X0 и X7.

Для построения кротчайшего маршрута пройдем обратный путь от X7 к X0. X7 последовательно используем соотношение L(x*i)+c( x*i, xi)=L( xi), где L( xi) - пометка рассматриваемой вершины , L(x*i) - пометка предшествующей вершины вершине xi, с - вес ребра соединяющий вершины x*i и вершину хi ,).

L(X7)=32 L(X5)+c(X5, X7)=31+28 L(X7)

L(X6)+c(X6, X7)=25+15 L(X7) L(X4)+c(X4, X7)=28+4= L(X7)

Это означает, что в вершину, X7 мы попали из вершины X4.

L(X4)=28 L(X1)+c(X1, X4)=12+25=L(X4) L(X2)+c(X2, X4)=10+18 L(X4)

В вершину, X4 мы попали из вершины X2, так как 10 минимальное значение.

Ответ: кротчайший путь из X0 в X7 имеет длину 32 и проходит по вершинам: X0, X2, X4, X7.

Задание 2. 
Решить задачу о коммивояжере.
Исходные данные к задаче нахождения гамильтонова цикла в графе (задача о коммивояжере).

Значения элементов матрицы расстояний:

a(1.1) = ∞ a(2.1) = 153 a(3.1) = 32 a(4.1) = 11 a(5.1) = 22

a(1.2) = 25 a(2.2) = ∞ a(3.2) = 72 a(4.2) = 35 a(5.2) = 63

a(1.3) = 15 a(2.3) = 24 a(3.3) = ∞ a(4.3) = 29 a(5.3) = 34

a(1.4) = 13 a(2.4) = 36 a(3.4) = 18 a(4.4) = ∞ a(5.4) = 16

a(1.5) = 46 a(2.5) = 75 a(3.5) = 124 a(4.5) = 38 a(5.5) = ∞

Решение:

Составим таблицу длин ребер



25

15

13

46

153



24

36

75

32

72



18

124

11

35

29



38

22

63

34

16



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

i j

1

2

3

4

5

di

1

M

25

15

13

46

13

2

153

M

24

36

75

24

3

32

72

M

18

124

18

4

11

35

29

M

38

11

5

22

63

36

16

M

16


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

i j

1

2

3

4

5

1

M

12

2

0

33

2

129

M

0

12

51

3

14

54

M

0

106

4

0

24

18

M

27

5

6

47

20

0

M


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

i j

1

2

3

4

5

1

M

12

2

0

33

2

129

M

0

12

51

3

14

54

M

0

106

4

0

24

18

M

27

5

6

47

20

0

M

dj

0

12

0

0

27


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

i j

1

2

3

4

5

1

M

0

2

0

6

2

129

M

0

12

24

3

14

42

M

0

79

4

0

12

18

M

0

5

6

35

20

0

M


Сумма констант приведения определяет нижнюю границу H:
H = ∑di + ∑dj
H = 13+24+18+11+16+0+12+0+0+27 = 121
Элементы матрицы dij соответствуют расстоянию от пункта i до пункта j.
Поскольку в матрице n городов, то D является матрицей nxn с неотрицательными элементами dij ≥ 0
Каждый допустимый маршрут представляет собой цикл, по которому коммивояжер посещает город только один раз и возвращается в исходный город.
Длина маршрута определяется выражением: F(Mk) = ∑dij
Причем каждая строка и столбец входят в маршрут только один раз с элементом dij.

Шаг №1.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
С этой целью для всех клеток матрицы с нулевыми элементами заменяем поочередно нули на М(бесконечность) и определяем для них сумму образовавшихся констант приведения, они приведены в скобках.

i j

1

2

3

4

5

di

1

M

0(12)

2

0(0)

6

0

2

129

M

0(14)

12

24

12

3

14

42

M

0(14)

79

14

4

0(6)

12

18

M

0(6)

0

5

6

35

20

0(6)

M

6

dj

6

12

2

0

6

0


d(1,2) = 0 + 12 = 12; d(1,4) = 0 + 0 = 0; d(2,3) = 12 + 2 = 14; d(3,4) = 14 + 0 = 14; d(4,1) = 0 + 6 = 6; d(4,5) = 0 + 6 = 6; d(5,4) = 6 + 0 = 6;
Наибольшая сумма констант приведения равна (12 + 2) = 14 для ребра (2,3), следовательно, множество разбивается на два подмножества (2,3) и (2*,3*).

Исключение ребра (2,3) проводим путем замены элемента d23 = 0 на M, после чего осуществляем очередное приведение матрицы расстояний для образовавшегося подмножества (2*,3*), в результате получим редуцированную матрицу.

i j

1

2

3

4

5

di

1

M

0

2

0

6

0

2

129

M

M

12

24

12

3

14

42

M

0

79

0

4

0

12

18

M

0

0

5

6

35

20

0

M

0

dj

0

0

2

0

0

14

Нижняя граница гамильтоновых циклов этого подмножества:
H(2*,3*) = 112 + 12 = 124
Нижняя граница гамильтоновых циклов этого подмножества:

H(2*,3*) = 121 + 14 = 135

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

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

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

i j

1

2

4

5

di

1

M

0

0

6

0

3

14

M

0

79

0

4

0

12

M

0

0

5

6

35

0

M

0

dj

0

0

0

0

0


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

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

Поскольку нижняя граница этого подмножества (2,3) меньше, чем подмножества (2*,3*), то ребро (2,3) включаем в маршрут с новой границей H = 121

Шаг №2.
Определяем ребро ветвления и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).
С этой целью для всех клеток матрицы с нулевыми элементами заменяем поочередно нули на М(бесконечность) и определяем для них сумму образовавшихся констант приведения, они приведены в скобках.

i j

1

2

4

5

di

1

M

0(12)

0(0)

6

0

3

14

M

0(14)

79

14

4

0(6)

12

M

0(6)

0

5

6

35

0(6)

M

6

dj

6

12

0

6

0


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

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

Исключение ребра (3,4) проводим путем замены элемента d34 = 0 на M, после чего осуществляем очередное приведение матрицы расстояний для образовавшегося подмножества (3*,4*), в результате получим редуцированную матрицу.

i j

1

2

4

5

di

1

M

0

0

6

0

3

14

M

M

79

14

4

0

12

M

0

0

5

6

35

0

M

0

dj

0

0

0

0

14


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

H(3*,4*) = 121 + 14 = 135

Включение ребра (3,4) проводится путем исключения всех элементов 3-ой строки и 4-го столбца, в которой элемент d43 заменяем на М, для исключения образования негамильтонова цикла.

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

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

i j

1

2

5

di

1

M

0

6

0

4

0

12

0

0

5

6

35

M

6

dj

0

0

0

6


Сумма констант приведения сокращенной матрицы:

∑di + ∑dj = 6

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

H(3,4) = 121 + 6 = 127 ≤ 135

Чтобы исключить подциклы, запретим следующие переходы: (4,2),

Поскольку нижняя граница этого подмножества (3,4) меньше, чем подмножества (3*,4*), то ребро (3,4) включаем в маршрут с новой границей H = 127

Шаг №3.

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

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

i j

1

2

5

di

1

M

0(35)

6

6

4

0(0)

M

0(6)

0

5

0(29)

29

M

29

dj

0

29

6

0


d(1,2) = 6 + 29 = 35; d(4,1) = 0 + 0 = 0; d(4,5) = 0 + 6 = 6; d(5,1) = 29 + 0 = 29;

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

Исключение ребра (1,2) проводим путем замены элемента d12 = 0 на M, после чего осуществляем очередное приведение матрицы расстояний для образовавшегося подмножества (1*,2*), в результате получим редуцированную матрицу.

i j

1

2

5

di

1

M

M

6

6

4

0

M

0

0

5

0

29

M

0

dj

0

29

0

35


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

H(1*,2*) = 127 + 35 = 162

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

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

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

i j

1

5

di

4

0

0

0

5

0

M

0

dj

0

0

0


Сумма констант приведения сокращенной матрицы:

∑di + ∑dj = 0

Нижняя граница подмножества (1,2) равна:

H(1,2) = 127 + 0 = 127 ≤ 162

Поскольку нижняя граница этого подмножества (1,2) меньше, чем подмножества (1*,2*), то ребро (1,2) включаем в маршрут с новой границей H = 127

В соответствии с этой матрицей включаем в гамильтонов маршрут ребра (4,5) и (5,1).

В результате по дереву ветвлений гамильтонов цикл образуют ребра:

(2,3), (3,4), (4,5), (5,1), (1,2),

Длина маршрута равна F(Mk) = 127
  1   2


написать администратору сайта