- •Введение. Классификация математических моделей.
- •Раздел: Линейное программирование Построение математических моделей
- •Анализ математической модели на чувствительность после нахождения оптимального решения.
- •Алгебраический метод решения задач лп. Стандартная форма линейных оптимизационных моделей
- •Симплекс-метод
- •Раздел: Двойственная задача лп. Тема: Взаимосвязь прямой и двойственной задачи.
- •Матричные вычисления.
- •Тема: Анализ построенной математической модели на чувствительность с использованием обратной матрицы и соотношений двойственности.
- •Раздел: Транспортная модель Тема: Методы получения начального решения
- •Тема: Метод потенциалов
- •Тема: Связь в транспортной задаче между методом потенциалов и симплекс-методом
- •Усложненные задачи транспортного типа.
- •Модели на сетях (графах). Теория графов.
- •Минимизация сети
- •Алгоритм нахождения кратчайшего пути для сетей без циклов
- •Определение кратчайшего расстояния для сетей с циклами
- •Представление задачи о кратчайшем пути в виде транспортной задачи с промежуточными пунктами.
- •Тема: Максимальный поток Алгоритм определения максимального потока
Определение кратчайшего расстояния для сетей с циклами
Сети содержат циклы, возникающие из-за возможности двустороннего движения; если дуга ориентирована (движение одностороннее), то расстояние в другом направлении полагается равным бесконечности.
Пусть требуется определить кратчайший маршрут между вершиной 1 и любым другим узлом сети. Расстояния dij запишем в виде таблицы, строки и столбцы которой представляют узлы.
|
1 |
2 |
3 |
4 |
Ui |
1 |
|
15 |
11 |
|
0 |
2 |
3 |
|
4 |
1 |
15 (12) |
3 |
8 |
1 |
|
5 |
11 |
4 |
|
∞ |
3 |
|
16 (13) |
Vj |
0 |
15(12) |
11 |
16(13) |
|
Пусть Vj – сумма длин дуг из узла 1 в узел j. Vj = min {Ui + dij} , где Ui – расстояние до узла i i
V1=0 U1=V1=0 Ui=Vj, если i=j
Предположим i=1. Найти Vj – Ui для всех j.
Если dij ≥ Vj – Ui для всех j, то между узлами i и j не существует более короткого пути. i = i + 1, вычисления повторить.
Если dij < Vj – Ui , то вычислить новое значение V’j = Ui +dij .
Vj заменяется на V’j и берется следующий узел, i = i + 1.
Если значение Vj изменилось, то повторить шаг 2, используя измененные значения.
3. Полученные значения Vj определяют кратчайшее расстояние между узлами 1 и любым из узлов j. Для получения соответствующих цепей, найти столбец n, соответствующий узлу, до которого ищется кратчайшее расстояние. Найти строку i, для которой выполняется равенство Vn=Ui+din .Этот узел предшествует узлу n. Рассмотреть столбец I и для него найти соответствующую строку, т.е. предшествующий узел и т.д., пока не дойдем до 1 узла.
U1 = V1 = 0
V2 = min {U1 + d12} = 15 ; U2 = 15
V3 = min {U1 + d13 ; U2 + d23 } = min {11;19} = 11 ; U3 = 11
i=1,2
V4 = min {U2 + d24 ; U3 + d34 } = min {16;16} = 16 ; U4 = 16
i=2,3
2) j=1 j=3 j=3 j=4
i = 1 |
1 |
2 |
3 |
4 |
Vj – U1 |
* |
15 |
11 |
* |
d1j |
* |
15 |
11 |
* |
Vj-U1<=d1j - пересчитывать расстояния не требуется
i = 2 |
1 |
2 |
3 |
4 |
Vj – U2 |
- 15 |
* |
- 4 |
1 |
d2j |
3 |
* |
4 |
1 |
Vj-U2<=d2j - пересчитывать расстояния не требуется
i = 3 |
1 |
2 |
3 |
4 |
Vj – Ui |
- 11 |
4 |
* |
5 |
d3j |
8 |
1 |
* |
5 |
V2-U3>d32 – расстояние до 2 узла пересчитываем: Vj’=Ui+dij, т.е. V2’=U3+d32=11+1=12, U2’=12
i = 4 |
1 |
2 |
3 |
4 |
Vj – Ui |
* |
- 4 |
- 5 |
* |
d4j |
* |
∞ |
3 |
* |
Так как вычислялось новое значение V’j, то нужно заново пересчитать шаг 2.
Предположим, что шаг 2 пересчитан и пересчитано новое значение V4’.
Найдем цепь, соединяющую узлы 1 и 4, т.е. n=4. Начинаем с последнего узла. Ему соответствует столбец 4. Для него должно выполняться равенство:
Vn = din + Ui. V4=Ui+di4 – равенство выполняется для строки 2, переходим к узлу 2 и соответственно к столбцу 2.
Ст. 4 : 13 = d24 + U2. ; i = 2
Ст. 2 : 12 = d32 + U3. ; i = 3
Ст. 3 : 11 = d13 + U1. ; i = 1
Итак, искомая цепь с кратчайшим маршрутом 4 ← 2 ← 3 ← 1
Рассмотрим еще один пример:
i \ j |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Ui |
1 |
|
2 |
8 |
11 |
9 |
|
|
4 |
2 |
4 |
|
3 |
|
5 |
1 |
|
0 |
3 |
1 |
4 |
|
∞ |
|
2 |
|
3 |
4 |
5 |
|
9 |
|
|
2 |
23 |
15(6) |
5 |
2 |
∞ |
|
|
|
7 |
9 |
5 (2) |
6 |
|
8 |
3 |
5 |
1 |
|
10 |
1 |
7 |
|
|
|
10 |
4 |
2 |
|
11 |
Vj |
4 |
0 |
3 |
15(6) |
5 (2) |
1 |
11 |
|
1)
U2 = V2 = 0;
V1 = U2 + d21 = 0 + 4 = 4 = U1
V3 = min {U1 + d13 ; U2 + d23} = 3 = U3
V4 = min {U1 + d14} = 15 = U4
V5 = min {U1 + d15 ; U2 + d25 } = 5 = U5
V6 = min {U2 + d26 ; U3 + d36 ; U4 + d46 ; U5 + d56 } = {1;5;17;12} = 1 = U6
V7 = min {U4 + d47 ; U5 + d57 ; U6 + d67 } = {38;14;11} = 11 = U7
2)
i = 1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Vj – Ui |
* |
- 4 |
- 1 |
11 |
1 |
* |
* |
d1j |
* |
2 |
8 |
11 |
9 |
* |
* |
i = 2 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Vj – Ui |
4 |
* |
3 |
* |
5 |
1 |
* |
d2j |
4 |
* |
3 |
* |
5 |
1 |
* |
i = 3 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Vj – Ui |
1 |
- 3 |
* |
12 |
* |
- 2 |
* |
d3j |
1 |
4 |
* |
∞ |
* |
2 |
* |
i = 4 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Vj – Ui |
- 11 |
* |
- 12 |
* |
* |
- 14 |
- 4 |
d4j |
5 |
* |
8 |
* |
* |
2 |
23 |
i = 5 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Vj – Ui |
- 1 |
- 5 |
* |
* |
* |
- 4 |
6 |
d5j |
2 |
∞ |
* |
* |
* |
7 |
9 |
i = 6 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Vj – Ui |
* |
- 1 |
2 |
14 |
4 |
* |
10 |
d6j |
* |
8 |
3 |
5 |
1 |
* |
10 |
i = 7 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Vj – Ui |
* |
* |
* |
- 5 |
- 9 |
- 10 |
* |
d7j |
* |
* |
* |
10 |
4 |
2 |
* |
V’j = dij + Ui. или
V’4 = d64 + U6 = 1 + 5 = 6
V’5 = d65 + U6 = 1 + 1 = 2
И еще шаг …
3)
7 ← 5 ← 6 ← 2 11
7 ← 6 ← 2 11
6 ← 2 2
5 ← 6 ← 2 2
4 ← 6 ← 2 6
3 ← 2 3
1← 2 4
1← 3 ← 2 4
1 ← 5 ← 6 ← 2 4