![](/user_photo/2706_HbeT2.jpg)
- •Математическое моделирование
- •Список литературы
- •Программа дисциплины и методические рекомендации по выполнению домашней контрольной работы
- •Раздел 1 Основы моделирования
- •Тема 1.1 Принципы моделирования
- •Тема 1.2 Этапы компьютерного моделирования
- •Тема 1.3 Вычислительный эксперимент
- •Тема 1.4 Классификация моделей
- •Тема 1.5 Математическая модель
- •Раздел 2 Линейное программирование
- •Тема 2.1 Постановка задачи линейного программирования
- •Тема 2.2 Графическое решение задачи линейного
- •Тема 2.3 Симплексный метод
- •Тема 2.4 Двойственные задачи
- •Тема 2.5 Транспортные задачи
- •Раздел 3 Графовые модели
- •Тема 3.1 Основные сведения о теории графов
- •Тема 3.2 Нахождение кратчайших путей в графе
- •Тема 3.3 Потоки на сетях
- •Тема 3.4 Элементы сетевого планирования
- •Раздел 4 Дискретное программирование
- •Раздел 5 Динамическое программирование
- •Раздел 6 Имитационное моделирование
- •Тема 6.1 Общие сведения об имитационном моделировании
- •Тема 6.2 Метод Монте-Карло
- •Тема 6.3 Элементы теории матричных игр
- •Раздел 7 Математические пакеты в моделировании
- •Методические рекомендации к решению задач графическим способом (101–115)
- •Методические рекомендации к решению задач заданных с помощью графовых моделей (198–227)
- •Методические рекомендации к решению задач о максимальном потоке ( 228–257 )
- •Методические рекомендации к решению задач игрового моделирования ( 258–286)
- •Теоретические вопросы домашней контрольной работы по дисциплине "Математическое моделирование"
- •Практические задания
Методические рекомендации к решению задач о максимальном потоке ( 228–257 )
Для решения задачи необходимо рассмотреть алгоритм построения максимального потока:
построить некоторый начальный поток Х0 ={х0ij};
организовать процедуру составления подмножества А вершин, достижимых из истока I по ненасыщенным ребрам. Если в этом процессе сток S не попадет в подмножество А, то построенный поток максимальный и задача решена. Если же S попал в А, то перейти к п.3 алгоритма;
выделить путь из I в S, состоящий из ненасыщенных ребер, и увеличить поток хij по каждому ребру этого пути на Δ = min(rij - хij), где минимум берется по ребрам (i, j) упомянутого пути. Тем самым будет построен новый поток Х1 ={х1ij}. После этого надо возвратиться к п.2 алгоритма.
Применение алгоритма рассмотрим на примере.
Пример. На сети, изображенной на рисунке 4, сформировать поток максимальной мощности, направленный из истока I в сток S, при условии, что пропускные способности ребер в обоих направлениях одинаковы. Выписать ребра, образующие на сети разрез минимальной пропускной способности.
Рисунок 4 - Сеть
Решение. В соответствии с п.1 алгоритма на сети необходимо сформировать начальный поток Х0. Сделаем это, следующим образом. По пути 1–3–4–6 пропустим 1 ед., по пути 1–2–3–4–6 — 1 ед., по пути 1–2–5–6 — 3 ед. В результате потоки хij по ребрам сети будут равны: х12 =4, х13 =1, х23 =1, х25 = 3, х34 = 2, х46 = 2, х56 = 3; потоки по остальным ребрам сети равны нулю. Совокупность перечисленных потоков по ребрам и составит поток Х0 по сети. Видно, что условия (2) и (3), налагаемые на потоки по ребрам сети выполняются. Матрица пропускных способностей ребер данной сети приведена в таблице 15, а матрица построенного потока – в таблице 16.
Таблица 15 – Матрица пропускных способностей ребер
j i |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
0 |
6 |
1 |
0 |
0 |
0 |
2 |
6 |
0 |
2 |
0 |
3 |
0 |
3 |
1 |
2 |
0 |
3 |
0 |
0 |
4 |
0 |
0 |
3 |
0 |
1 |
2 |
5 |
0 |
3 |
0 |
1 |
0 |
5 |
6 |
0 |
0 |
0 |
2 |
5 |
0 |
Таблица 16 – Матрица построенного потока
j i |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
0 |
4 |
1 |
0 |
0 |
0 |
2 |
-4 |
0 |
1 |
0 |
3 |
0 |
3 |
-1 |
-1 |
0 |
2 |
0 |
0 |
4 |
0 |
0 |
-2 |
0 |
0 |
2 |
5 |
0 |
-3 |
0 |
0 |
0 |
3 |
6 |
0 |
0 |
0 |
-2 |
-3 |
0 |
Приступая к выполнению п.2 алгоритма, составим матрицу R– Х0 (таблица 17), элементы rij – хij которой позволяют судить о ненасыщенности ребер сети. Насыщенным ребрам будут соответствовать нулевые элементы, а ненасыщенным – ненулевые. Так, ребро (1, 2) ненасыщенное, поэтому элемент r12 - х012 = 6-4=2≠0, а вот ребро (2,5) насыщенное, поэтому r25 - х025 = 3 – 3 = 0.
Таблица 17 – Матрица R– Х0
j i |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
0 |
2 |
0 |
0 |
0 |
0 |
2 |
10 |
0 |
1 |
0 |
0 |
0 |
3 |
2 |
3 |
0 |
1 |
0 |
0 |
4 |
0 |
0 |
5 |
0 |
1 |
0 |
5 |
0 |
6 |
0 |
1 |
0 |
2 |
6 |
0 |
0 |
0 |
4 |
8 |
0 |
Зная матрицу R– Х0, можно сформировать подмножество А вершин, в которые можно попасть из истока I, двигаясь только по насыщенным путям (т.е. выполнить п.2 алгоритма), а также выделить (если Х0 немаксимален) эти пути и с их помощью увеличить мощность потока (т.е. выполнить п.3 алгоритма).
Вершины подмножества А выделяют постепенно, начиная с истока I. С этой целью просматривают первую строку матрицы R– Х0 (строку I) и выписывают номера i1, i2, ..., ik вершин, соответствующих ненулевым элементам строки. Это и будут вершины, в которые можно попасть из истока I , перемещаясь по ненасыщенным ребрам. Будем записывать выявленные таким образом вершины в виде I||i1,i2,...,ik и называть подобную запись списком вершины I. Далее рассматривают каждую из вершин it полученного списка и составляют для нее аналогичным образом свой список. При этом вершины, встречавшиеся в прежних списках, повторно не выписываются. Если в этом процессе сток S не встретится, - поток максимален и задача решена, если же при составлении очередного списка в нем появится сток S, то поток немаксимален и мощность его можно увеличить.
В примере в данном случае I = 1, S = 6. построим подмножество А, последовательно составляя списки вершин, начиная с вершины 1. Судя по первой строке матрицы R– Х0 (таблица 17) в список вершины 1 войдет одна вершина 2, поскольку только элемент второго столбца этой строки отличен от нуля. Итак: 1 || 2. Теперь переходим к списку вершины 2 как вершины, вошедшей в список вершины 1. во второй строке матрицы два элемента отличны от нуля: 10 и 1. Но 10 соответствует вершине 1, которая уже значится в подмножестве А, поэтому повторно ее в списки не включаем. Элемент 1 соответствует вершине 3, и она встречается впервые, а поэтому включаем ее в список вершины 2. Таким .образом приходим к следующему списку: 2 || 3. Таким же способом получаем и остальные списки. В результате получаем набор:
1 || 2, 2 || 3, 3 || 4, 4 || 5, 5 || 6 (1)
Анализируя списки (1) видно, что сток 6 попал в подмножество А, поскольку оказался в списке одной из вершин подмножества А (в данном случае вершины 5). Значит, существует путь из истока I в сток S (у нас это из 1 в 6), состоящий из ненасыщенных ребер.
Построение ненасыщенного пути из I в S начинают с последнего ребра этого пути. Им будет ребро (in-1, S), где in-1 – вершина, в список которой попал сток S. Далее выписывают ребро (in-2, in-1), где in-2 – вершина, в список которой попала вершина in-1 и так до тех пор, пока на очередном шаге не встретится ребро (I, i1), которым и начинается искомый ненасыщенный путь. Т. обр., ненасыщенный путь из I в S состоит из ребер (I, i1), (i1, i2), …, (in-2, in-1), (in-1, S).
Просматривая списки (1) в примере от конца к началу, замечаем, что ребро (in-1, S) в данном случае является (5,6), ребром (in-2, in-1) – ребро (4,5), …, и наконец, ребро (I, i1) – ребро (1,2). Таким образом, путь из истока 1 в сток 6 по ненасыщенным ребрам пройдет через вершины 1, 2, 3, 4, 5 и 6.
После выделения ненасыщенного пути из истока I в сток S остается с помощью матрицы R– Х0 определить величину Δ = min(rij –хij), на которую нужно увеличить поток по каждому ребру (i,j) выделенного пути, чтобы получить новый поток Х1 большей мощности (на Δ единиц).
В примере, как видно из таблицы 15, по ребру (1, 2) дополнительно можно пропустить 2 ед., по ребрам (2, 3), (3,4), (4,5) и (5,6) – соответственно 1, 1, 1 и 2 ед., так что увеличить поток по всему пути 1–2–3–4–5–6, составленному из указанных ненасыщенных ребер, можно на величину
Для построения матрицы нового потока Х1 к соответствующим элементам х0ij матрицы Х0 прибавляется найденное значение Δ, после чего возвращаемся к п. 2 алгоритма, и так до получения максимального потока.
В примере на величину Δ = 1 возрастут элементы х012, х023, х034, х045 и х056 матрицы Х0 (таблица 16). С учетом соглашения: в теории потоков предполагается, что если из вершины i в вершину j направляется поток величиной хij, то величина потока j из в i равна - хij, т.е.
хji = – хij.
Приходим к матрице нового потока Х1 (таблица 18).
Построенный поток Х1 вновь надо исследовать на оптимальность , т.е.вернуться к операциям п. 2 алгоритма. С этой целью, как и при исследовании потока Х0, составляем матрицу R– Х1 (таблица 19), а по ней – списки вершин, достижимых из истока I по ненасыщенным путям. В результате получаем списки:
1 || 3, 3 || . (2)
Таблица 18 – Матрица нового потока Х1
j i |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
11 |
0 |
0 |
0 |
0 |
0 |
3 |
2 |
4 |
0 |
0 |
0 |
0 |
4 |
0 |
0 |
6 |
0 |
0 |
0 |
5 |
0 |
6 |
0 |
2 |
0 |
1 |
6 |
0 |
0 |
0 |
4 |
9 |
0 |
Таблица 19 – Матрица R– Х1
j i |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
0 |
5 |
1 |
0 |
0 |
0 |
2 |
-5 |
0 |
2 |
0 |
3 |
0 |
3 |
-1 |
-2 |
0 |
3 |
0 |
0 |
4 |
0 |
0 |
-3 |
0 |
1 |
2 |
5 |
0 |
-3 |
0 |
-1 |
0 |
4 |
6 |
0 |
0 |
0 |
-2 |
-4 |
0 |
Как видно из списков (2), сток 6 не попал в список вершин, достижимых из из I по ненасыщенным ребрам. Значит, поток Х1 максимален. Остается нанести его на сеть с указанием направления потоков по отдельным ребрам (рисунок 5).
Рисунок 5 – Решение задачи о максимальном потоке
Используя списки (2), выделим подмножество А и В, на которые оказалось разбито множество всех вершин: А = {1, 3}, B = {2, 4, 5, 6}. А теперь выпишем ребра, образующие разрез А/В минимальной пропускной способности: (1, 2), (3, 2), (3, 4).