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

Выбор кратчайшего пути

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

Математическая постановка задачи назначений выглядит следующим образом: , где

cij – сложность выполнения i-ой работы j-ым исполнителем.

Основные особенности данной задачи: число уравнений 2n-1, число переменных n2.Так как работы делить нельзя, то из 2n-1 заполненной клетки n клеток содержат «1», а в остальных n-1 клетках содержатся «0», считаясь при этом заполненными. В остальном решение как в случае транспортной задачи.

Рассмотрим более подробно решение задачи выбора кратчайшего пути в сетевой модели.

На рис. изображен пример сетевой модели. Величины cijможет выражать длину пути из пункта i в пункт j, стоимость переезда из пункта i в пункт j, время переезда из пункта i в пункт j. При этом, если узлы i и j не связаны друг с другом, то cij=.

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

Алгоритм Форда.

Выделяется некоторая вершина, и указываются длины всех дуг. Требуется для любой вершины найти кратчайший путь, ведущий от выделенной вершины к данной или убедиться в том, что не существует путей, ведущих из исходной вершины в данную вершину.

Суть метода Форда заключается в присваивании каждой вершине двойной метки (, x), где  - некоторое число, а x – другая вершина, связанная с данной. В дальнейшем эти метки изменяются.

  1. Начальный шаг. Выделенной вершине x0 присваивается метка (0;x) и остается неизменной. Каждой из остальных вершин графа присваивается метка (+;x), которая может меняться.

  2. Общий шаг. Поочередно рассматриваются вершины с конечными значениями меток . Вначале имеется лишь одна такая вершина x0. Выберем вершину xj, имеющую конечную метку j. Рассмотрим все дуги xjxm, выходящие из вершины xj и имеющие длину ljm. Сравниваем имеющиеся уже метки с числом j+ljm, где j+ljm – сумма метки вершины xj и длины дуги, ведущей из xj в xm. Если mj+ljm, то метка xm сохраняется. Если m>j+ljm, то вершине xm присваивается новая метка (j+ljm;xm). Этот шаг прекращается, пока для любой дуги xjxm разность меток вершин не будет превосходить длину дуги m-jljm.

  3. Вычисление длины кратчайшего пути. Длина кратчайшего пути из выделенной вершиныx0 в вершину xj равна окончательной метке вершины xj. Если j=+, то не существует пути из вершины x0 в xj.

  4. Построение кратчайшего пути. Данное построение осуществляется из xj путем прохождения через вершины, из которых получена окончательная метка. В обратном направлении полученные вершины и образуют искомый кратчайший путь.

Задача. Построить сеть, заданную следующей таблицей, и найти кратчайшие пути из вершины x0 в каждую вершину сети.

xixj

0;1

0;2

1;3

1;4

1;6

2;3

2;5

2;6

3;7

4;6

4;8

5;7

6;8

7;6

7;8

lij

10

11

8

23

12

4

6

18

13

9

15

8

13

8

17

Построимсеть данной задачи.

Находим кратчайшие расстояния из вершины x0. в xj согласно алгоритму Форда.

  1. Начальный шаг. Вершине x0 присваивается метка (0;x), остальным метка (+;x),

  2. Общий шаг.

  1. Начнем с вершины x0, имеющей конечную метку 0=0. Из нее выходят две дуги (0;1) и (0;2). Дуга (0;1) вершине x1 дает метку 1=0+l01=0+10=10. Так как вершина x1 ещё не имеет меток, то ей присваивается метка (10;x0). Дуга (0;2) вершине x2 дает метку 2=0+l02=0+11=11, и этой вершине присваивается метка (11; x0). Так как нет других путей, ведущих в x1, x2, то полученные метки будут окончательными.

  2. Из вершины x1 выходят три дуги (1;3), (1;4) и (1;6) к вершинам x3, x4 и x6, не имеющие пока меток. Вычислим метки для этих трех вершин: 3=1+l13=10+8=18, 4=1+l14=10+23=33 и 6=1+l16=10+12=22. Соответствующие вершины будут иметь следующие метки: (18;x1), (33;x1)и (22;x1), причем метка вершины x4 будет окончательной.

  3. Из вершины x2 выходят три дуги (2;3), (2;5) и (2;6). Вычислим метки для трех вершин x3, x5 и x6: 3=2+l23=11+4=15, 5=2+l25=11+6=17 и 6=2+l26=11+18=29. Соответствующие вершины будут иметь следующие метки: (15;x2), (17;x2)и (29; x2), причем метка вершины x5 будет окончательной.

Для вершины x3 имеем прежнюю метку (18;x1) и новую метку (15;x2). Так как 15<18, то метка пересматривается и окончательной становится новая метка(15;x2).

Для вершины x6 имеем прежнюю метку (22;x1) и новую метку (29;x2). Так как 22<29, то оставляем прежнюю метку, причем она не является окончательной.

  1. Так как вершина x3 имеет метку (15;x2) и из нее выходит единственная дуга (3;7), ведущая в непомеченную вершину x7, то получаем 7=3+l37=15+13=28 и метку (28;x3), являющейся неокончательной.

  2. Вершина x4 имеет метку (33;x1) и из нее выходят две дуги (4;6) и (4;8). Вычисляем: 6=4+l46=33+9=42, что больше, чем 22 и, следовательно, остается прежняя метка (22; x1); 8=4+l48=33+15=48 и присваивается новая метка (48;x4).

  3. Вершина x5 имеет метку (17;x2) и из нее выходит одна дуга (5;7). Вычисляем 7=5+l57=17+8=25. Так как предыдущая метка вершины x7 (28;x3) больше, то полученная метка (25;x5) будет окончательной.

  4. Из вершины x6выходит единственная дуга (6;8), для которой 8=6+l68=22+13=35. Так как полученная метка (35;x6) меньше, чем уже имеющаяся (48;x4), то вершине приписываем метку (35;x6).

  5. Из вершины x7, имеющей окончательную метку, выходят две дуги (7;6) и (7;8). Вычисляем 6=7+l76=25+8=33 и 8=7+l78=25+17=42. Так как полученная для x6 новая метка (33;x7) больше, чем метка (22; x1). Для вершины x8 полученная новая метка(42;x7) больше имеющейся (35;x6), то последняя метка будет окончательной.

Окончательно, результаты решения сведем в таблицу.

Вершина

Окончательная

метка

Кратчайший путь

Кратчайшее

расстояние L0i

x1

(10; x0)

x0 x1

10

x2

(11; x0)

x0 x2

11

x3

(15; x2)

x0 x2 x3

15

x4

(33; x2)

x0 x1 x4

33

x5

(17; x2)

x0 x2 x5

17

x6

(22; x2)

x0 x1 x6

22

x7

(25; x5)

x0 x2 x5 x7

25

x8

(35; x6)

x0 x1 x8

35

Задание 4.

Построить сетевой график, установить кратчайшие пути и найти расстояние от x1 до всех узлов сети: x12=9; x13=5; x14=5; x29=14-m; x26=4; x32=8; x36=10; x35=8; x43=3+n; x45=4; x48=15-k; x37=3; x58=7; x65=9; x67=3+2k; x69=6; x79=2+m; x7,10=6;x87=11; x8,10=12-n; x9,10=7.

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