- •Санкт-петербургский университет
- •Введение
- •Литература
- •Графический способ решения задачи линейного программирования
- •Симплекс–метод
- •Алгоритм симплекс-метода
- •Транспортная задача. Общие понятия
- •Математическая постановка транспортной задачи
- •Методы нахождения опорного плана
- •1. Метод северо-западного угла
- •2. Метод минимального элемента
- •3. Метод аппроксимации Фогеля
- •Метод потенциалов нахождения оптимального плана транспортной задачи
- •Выбор кратчайшего пути
- •Задача коммивояжера
Выбор кратчайшего пути
Кроме транспортной задачи, являющейся классической сетевой задачей, можно укажем ещё некоторые задачи на сетях: задача назначений, выбор кратчайшего пути, задача коммивояжера.
Математическая постановка задачи назначений выглядит следующим образом: , где
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 – другая вершина, связанная с данной. В дальнейшем эти метки изменяются.
Начальный шаг. Выделенной вершине x0 присваивается метка (0;x) и остается неизменной. Каждой из остальных вершин графа присваивается метка (+;x), которая может меняться.
Общий шаг. Поочередно рассматриваются вершины с конечными значениями меток . Вначале имеется лишь одна такая вершина x0. Выберем вершину xj, имеющую конечную метку j. Рассмотрим все дуги xjxm, выходящие из вершины xj и имеющие длину ljm. Сравниваем имеющиеся уже метки с числом j+ljm, где j+ljm – сумма метки вершины xj и длины дуги, ведущей из xj в xm. Если mj+ljm, то метка xm сохраняется. Если m>j+ljm, то вершине xm присваивается новая метка (j+ljm;xm). Этот шаг прекращается, пока для любой дуги xjxm разность меток вершин не будет превосходить длину дуги m-jljm.
Вычисление длины кратчайшего пути. Длина кратчайшего пути из выделенной вершиныx0 в вершину xj равна окончательной метке вершины xj. Если j=+, то не существует пути из вершины x0 в xj.
Построение кратчайшего пути. Данное построение осуществляется из 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 согласно алгоритму Форда.
Начальный шаг. Вершине x0 присваивается метка (0;x), остальным метка (+;x),
Общий шаг.
Начнем с вершины 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, то полученные метки будут окончательными.
Из вершины 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 будет окончательной.
Из вершины 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, то оставляем прежнюю метку, причем она не является окончательной.
Так как вершина x3 имеет метку (15;x2) и из нее выходит единственная дуга (3;7), ведущая в непомеченную вершину x7, то получаем 7=3+l37=15+13=28 и метку (28;x3), являющейся неокончательной.
Вершина x4 имеет метку (33;x1) и из нее выходят две дуги (4;6) и (4;8). Вычисляем: 6=4+l46=33+9=42, что больше, чем 22 и, следовательно, остается прежняя метка (22; x1); 8=4+l48=33+15=48 и присваивается новая метка (48;x4).
Вершина x5 имеет метку (17;x2) и из нее выходит одна дуга (5;7). Вычисляем 7=5+l57=17+8=25. Так как предыдущая метка вершины x7 (28;x3) больше, то полученная метка (25;x5) будет окончательной.
Из вершины x6выходит единственная дуга (6;8), для которой 8=6+l68=22+13=35. Так как полученная метка (35;x6) меньше, чем уже имеющаяся (48;x4), то вершине приписываем метку (35;x6).
Из вершины 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.