Максимальний потік на мережі. Приклад знаходження максимального потоку методом Форда-Фалкерсона

Транспортне завдання
Може виникати у фізиці, економіці тощо.
На окремі компоненти транспортної мережі
(Мережа залізничних, автомобільних і т.д.
шляхів; мережу трубопроводів і т.д.) накладено
обмеження – їх максимально допустима
навантаження.
Необхідно визначити максимально
можлива кількість пасажирів, товару,
продукту і т.д., яке можна провезти по цій
мережі та яким чином.
Ми збудуємо графову дискретну модель
цієї транспортної задачі і вирішимо її в цій
моделі.

Математик Джордж Бернард Данциг, з 1941 року
працюючи у відділі статистичного управління Військово-повітряних сил США у Вашингтоні, вперше вирішив
завдання про максимальний потік під час підготовки
повітряний мост під час блокади Західного Берліна.
1951 року Джордж Данциг вперше сформулював
завдання в загальному вигляді. У 1955 році, Лестер Форд і
Делберт Фалкерсон вперше побудували алгоритм,
спеціально призначений для вирішення цього завдання.
Їхній алгоритм отримав назву алгоритм ФордаФалкерсона.
У 2010 році дослідники Джонатан Келнер і
Александер Мондри із МТІ разом зі своїми
колегами Деніелем Спілманом з Єльського
університету та Шень-Хуа Тенем з ПівденноКаліфорнійського університету продемонстрували
чергове вдосконалення алгоритму.

Даний орієнтований граф
(транспортна мережа) G = (V, E), вершина
графа s (джерело) та вершина t (стік).
Кожній дузі (i, j) приписано деяку
пропускна здатність з (i, j) 0 (без
втрати спільності вважаємо її
цілою величиною),
визначальна максимальне значення
потоку, який може протікати по
цій дузі.

потоком
в
мережі
називають
цілісну функцію f(i, j), задану
на безлічі дуг E і володіє
наступними властивостями:
1. Обмеження потоку пропускної
здатністю
Для будь-якої дуги (i, j) E виконується
нерівність f(i, j) c(i, j).

2. Збереження потоку
Для будь-якої вершини q V,
виконується рівність
q s
і
q t
f(i, q) f(q, j)
i V
(i, q) E
j V
(q, j) E
Т. е. сума потоку, що заходить в q, дорівнює
сумі потоку, що виходить із q (потік без
втрат та накопичень)

Потрібно визначити значення
максимального потоку, який
можна пропустити від джерела s до
стоку t, та її розподіл за дугами.

приклад
У компанії Lycky Puck у Ванкувері є фабрика
(джерело s), що виробляє хокейні шайби, а в
Вінніпеге - склад (стік t), де ці шайби зберігаються.
Компанія орендує місця на вантажівках інших фірм
для доставки шайб із фабрики на склад. Оскільки
вантажівки їздять певними маршрутами (ребрами)
між містами (вершинами) та мають обмежену
вантажопідйомність, компанія Lycky Puck може
перевозити не більше c(u,v) ящиків на день між кожною
парою міст u та v. Компанія Lycky Puck не може
вплинути на маршрути та пропускну спроможність. Її
завдання – визначити, яка найбільша кількість
ящиків на день можна відвантажувати, а потім виробляти
саме така кількість, оскільки не має сенсу
робити шайб більше, ніж можна відправити на
склад.

Методи вирішення задачі
Лінійне програмування
Уявити задачу про максимальний потік як задачу
лінійного програмування. Змінними є
потоки по ребрам, а обмеженнями - збереження потоку
та обмеження пропускної спроможності.
Алгоритм Форда-Фалкерсона
Знайти будь-який шлях, що збільшує. Збільшити потік по
всім його ребрам на мінімальну з їх залишкових
пропускних можливостей. Повторювати, поки
збільшує шлях є. Алгоритм працює тільки
для цілих пропускних можливостей.

10.

Приклад 1
Дамо формулювання завдання про максимальне
потоці термінах лінійного програмування.
Нехай ХKM - обсяг перевезень з пункту К пункт М.
К = 0,1,2,3, М = 1,2,3,4, причому перевезення можливі
лише в пункт з великим номером. Отже, всього
є 9 змінних ХKM, а саме, Х01, Х02, Х03, Х12
Х13, Х14, Х23, Х24, Х34.
s=0
t=4

11.

Завдання лінійного програмування,
націлена на максимізацію потоку, має вигляд:
F → max,
Х01 + Х02 + Х03 = F
-Х01 + Х12 + Х13 + Х14 = 0
-Х02 -Х12 + Х23 + Х24 = 0
-Х03-Х13-Х23 + Х34 = 0
-Х14 -Х24 -Х34 = - F
Х01 ≤ 2
Х02 ≤ 3
Х03 ≤ 1
Х12 ≤ 4
Х13 ≤ 1
Х14 ≤ 3
Х23 ≤ 1
Х24 ≤ 2
Х34 ≤ 2
ХКМ ≥ 0, К, М = 0, 1, 2, 3, 4
F≥0.

12.

Розрізом
називають безліч дуг,
видалення яких із мережі призводить до
«розриву» всіх шляхів, що ведуть з s до t.
Пропускна здатність розрізу – це
сумарна пропускна спроможність дуг, його
складових.
!!! Знайти розрізи у прикладі 1

13.

Теорема Л. Форда та Д. Фалкерсона:
Величина кожного потоку з s у t не
перевершує
пропускний
здібності
мінімального розрізу, що поділяє s і t,
причому потік, що досягає цього значення,
Існує.
(Величина
максимального
потоку
в
транспортної
мережі
дорівнює
величині
мінімального розрізу в ній)
!!! Знайти мінімальний розріз у прикладі 1

14.

З алгоритмічної точки зору ця
теорема малопродуктивна.
Генерація всіх підмножин дуг та
перевірка,
є
чи
чергове
підмножина розрізом – «лобове рішення»,
призводить до високої складності алгоритму.
Крім того, цей факт не допомагає
знайти спосіб розподілу максимального
потоку дугами.

15.

Алгоритм Форда-Фалкерсона
«Техніка міток» Л. Форда та Д. Фалкерсона
полягає в послідовному
(ітераційному, пошуком завширшки) побудові
максимального потоку шляхом пошуку на кожному
кроку збільшуючого ланцюга, тобто шляху,
якому можна збільшити потік.
У цьому вузли (вершини графа)
спеціальним чином позначаються. Звідси і
виник термін "мітка".

16.

Алгоритм Форда-Фалкерсона
Що являє собою мітка
вершини?
перша цифра у мітці – це номер
вершини, з якої йде потік у
цю вершину;
друга цифра у мітці – чисельне
значення потоку, який можна
передати на цю вершину.

17.

Алгоритм Форда-Фалкерсона
На кожному кроці алгоритму вершини мережі
можуть бути в одному з трьох станів:
вершина немає мітки;
вершині присвоєно мітку, і вона не
переглянуто, тобто не всі суміжні з нею
вершини оброблені;
вершині присвоєно мітку, і вона
переглянуто.

18.

Алгоритм Форда-Фалкерсона
Як тільки вершина-стік стає
поміченою, це говорить про те, що
черговий ланцюжок, що збільшує потік
знайдено, підсумковий сумарний потік
необхідно збільшити на величину потоку
знайденого ланцюжка, і перейти до
наступний крок алгоритму.

19.

Алгоритм Форда-Фалкерсона
Дуга e=(u, v) мережі є допустимою
дугою з u до v щодо потоку f, якщо
e=(u, v) та f(e) прямі);
e=(v, u) та f(e)>0 (дуги другого типу,
зворотні).
Друга умова говорить про те, що
допустимими є і дуги, що входять до
вершину u, якими «вже пропущено
ненульовий потік». Крайній випадок: якщо матриця вся одного кольору – відповідь 0.
Додамо фіктивні витік та стік. Від початку до всіх білих вершин проведемо ребра, вагою B (ціна перефарбування в чорний). Від чорних вершин до стоку проведемо ребра, вагою W (ціна перефарбування в білий). І між усіма сусідніми вершинами (будь вони одного чи різних кольорів) - ставимо ребро вагою G (сіра лінія). Розмір максимального потоку буде відповіддю завдання.
Джерело: Всеукраїнська шкільна олімпіадаз інформатики, 2007, День 1
  • Завдання з обмеженням вершини.Нехай треба знайти величину максимального потоку і на вершини накладено обмеження скільки вони можуть пропустити.
    Рішення
    Все, що нам треба – це розділити кожну вершину на дві, і між ними поставити ребро, вагою в обмеження пропускної спроможності даної вершини.
  • Мінімальний розріз.Дано граф. Скільки вершин треба видалити, щоб не існувало шляху з A до B?
    Рішення
    У класичній задачі про мінімальний розріз видаляти потрібно ребра. Не проблема! Розіб'ємо вершини на 2, і поставимо між ними ребро, вагою в 1. Тоді відповідь до завдання – знаходження мінімального розрізу у графі (що є максимальним потоком).
    Джерело: Харківська зимова школа з програмування, 2009, День 3
  • Автор віршів.Є детермінований кінцевий автомат з одним початковим станом A і одним кінцевим B. Кожен перехід задається трійкою чисел (i, j, k), перехід зі стану i стан j по ребру k.
    Після переходу автоматом з i в j по ребру k, стираються всі переходи з i по ребру k, а також всі переходи в j по ребру k. Потрібно вивести кількість шляхів з A до B таким автоматом.
    Рішення
    Завдання зводиться до знаходження максимальної кількості шляхів, причому з однієї вершини не виходять більше одного ребра одного кольору. Зведемо завдання до знаходження максимального потоку. Для кожної вершини створимо k+1 вершину в перебудованій мережі. Перша вершина буде входом, решта вершин представлятиме кольори. З вершини входу проведемо по ребру пропускною здатністю 1 кожну з k вершин, відповідних кольору. З вершини відповідних кольору i проведемо всі ребра кольору i у входи кінців ребер. Знайшовши максимальний потік у такій мережі, отримаємо максимальна кількістьшляхів, що задовольняють необхідному властивості.
  • Колекціонування монет.Є nколекціонерів та mвидів монет. Для вступу в клуб необхідно мати не менше однієї монети кожного типу. Ви (у Вас номер 1) можете змінюватись з колекціонерами наявними монетами. Будь-який колекціонер обміняє монету свою монету aна Вашу монету bякщо у нього більшеоднієї монети типу aі немає жодної монети типу b. Ви, своєю чергою, можете порушувати це правило. Потрібно набрати якомога більше типів монет за відомою ситуацією у всіх колекціонерів.
    Рішення
    Збудуємо мережу. Створимо кожному за типу монет по одній вершині. Ці вершини будуть відповідати Вашим монетам. Потрібно зібрати якнайбільше унікальних монет, тому проведемо ребро пропускної спроможності 1 у стік з кожної такої вершини. У вершини, що відповідають монетам, які у Вас є від початку, проведемо ребро, пропускна спроможність якого дорівнює кількості таких монет у Вас.
    Для кожного члена клубу (крім 1, тобто Вас) заведемо по одній вершині. Ця вершина може приймати не більше однієї монети, якої він не має і віддавати
    трохи більше k-1 монети, яких він k (k > 1). Звичайно, член клубу віддає одну монету замість однієї отриманої.
    Таким чином, у кожну таку вершину потрібно провести ребро пропускної спроможності 1 з вершин відповідних монет, яких немає цього члена клубу. А з цих вершин потрібно провести ребра пропускною спроможністю k i - 1 у вершину i, що відповідає монетам, яких у члена клубу більше однієї.
    Побудована мережа відбиває процеси обміну у клубі. Максимальний потікв такій мережі дорівнюватиме максимальній кількості монет, які можуть бути зібрані Вами.
    Джерело: Харківська зимова школа з програмування, 2009, День 4
  • Циркуляція.Система охолодження реактора є набір труб, що з'єднують вузли. По трубах тече рідина, причому кожної труби суворо визначено напрям, у якому вона має по ній текти. Вузли системи охолодження занумеровані від 1 до N. Система охолодження повинна бути спроектована таким чином, щоб для кожного вузла за одиницю часу кількість рідини, що втікає у вузол, дорівнювала кількості рідини, що випливає з вузла. Кожна труба має пропускну здатність c ij . Крім того, для забезпечення достатнього охолодження потрібно, щоб трубою протікало не менше l ij одиниць рідини за одиницю часу. Тобто для труби, що веде з i-го вузла в j-ий, має виконуватися l ij ≤ f ij ≤ c ij .
    Дано опис системи охолодження. Потрібно з'ясувати, яким чином можна пустити рідину трубами, щоб виконували всі зазначені умови.
    Рішення
    Це завдання знаходження циркуляції у мережі із заданими нижніми обмеженнями на ребра. Якщо по ребру (u, v) повинен проходити потік у відрізку , то в перебудованій мережі буде три ребра (звідки, куди, вага): (u, v, r - l), (S, v, l), (u, T, l). S, T - додатково введені стік та витік відповідно. Фактично ми пропускаємо ребро необхідний мінімальний потік, після чого балансуємо його так, щоб отримати циркуляцію.

  • Нехай заданий орієнтований граф G= , в якому напрямок кожної дуги vÎVозначає напрямок руху потоку (наприклад потік автомобілів), пропускна здатність кожної дуги дорівнює d(v).На безлічі вершин Eвиділено дві вершини tі s. Вершина tє джерелом потоку, s- Стоком. Потрібно визначити максимальний потік, який може бути пропущений з вершини tв s .

    Позначимо через x(v)величину потоку, що рухається дугою v. Очевидно, що

    0£ x(v) £ d(v) , vÎV . (6. 1)

    У кожній вершині iÎE(t,s)обсяг потоку вхідного дорівнює обсягу потоку, що виходить, тобто. справедлива рівність

    (x(v)| i V + (i)) = (x (v) | i V - (i))

    (x(v)|iÎV + (i)) - (x(v)|iÎV - (i))=0.(6.2)

    Для вершини t

    (x(v)|iÎV + (i)) -(x(v)|iÎV - (i))=-Q,(6.3)

    для вершини s

    (x(v)|i V + (i)) -(x(v)| i Î V - (i)) = Q.(6.4)

    Величина Qє величиною потоку, що виходить із вершини tі входить у вершину s.

    Потрібно визначити

    Q ® max(6.5)

    за обмежень (6.1-6.4).

    Величини Q, x(v) , vÎV,що задовольняють обмеженням (6.1-6.4) називатимемо потоком у мережі, і якщо вони максимізують величину Q, то максимальним потоком. Неважко бачити, що значення Q=0, x(v)=0, vVє потоком в мережі.

    Завдання (6.1-6.5) є завданням лінійного програмування і його можна вирішити алгоритмами симплекс-метода.

    Розіб'ємо безліч вершини Е на дві частини, що не перетинаються, Е1 і Е2 таким чином, щоб tÎE1, sÎE2. Розрізом V(E1,E2), що розділяє tі sбудемо називати безліч V(E1,E2)ÌVтаке, що для кожної дуги v V (E1, E2)або h1(v)ÎE1і h2(v)ÎE2, або h1(v)ÎE2і h2(v)ÎE1.

    Розіб'ємо безліч V(E1,E2)на дві частини V(E1,E2,+),V(E1,E2,-)наступним чином:

    V(E1,E2,+)=(vÎV(E1,E2)| h1(v)ÎE1і h2(v)ÎE2)

    V(E1,E2,-)= ( vÎV(E1,E2)| h2(v)ÎE1і h1(v)ÎE2)

    Пропускною здатністю розрізу називатимемо

    Q(E1,E2) = (x(v)| vV(E1,E2,+))-(x(v)| vV(E1,E2,-))

    Справедлива наступна

    Теорема 1. (Про максимальний потік та мінімальний розріз).

    У будь-якій мережі величина максимального потоку із джерела tу стік sдорівнює мінімальній пропускній здатності Q(E1,E2)серед усіх розрізів V(E1,E2), що розділяють вершини tі s.

    Зауважимо, що у максимальному потоці

    x(v)=d(v) , vÎV(E1,E2,+),

    x(v)=0 , vÎV(E1,E2,-).

    Нехай Q, x(v), vV, -деякий потік у мережі, послідовність

    t=i(0),v(1),i(1),v(2),i(2),...,v(k),i(k)=s,

    є ланцюгом, що з'єднують вершини tі s. Задамо на цьому ланцюгу напрямок руху від вершини tдо s. Дуга v(j)з цього ланцюга називається прямий, якщо його напрямок збігається з напрямком руху від tдо s, і зворотної інакше. Цей ланцюг називатимемо шляхом збільшення потокуякщо для прямих дуг vланцюги x(v)< d(v) і для зворотних x(v) > 0. По цьому ланцюзі можна пропустити додатковий потік qз tдо sвеличиною q = min (q1, q2),де q1=min (d(v) -x(v)), мінімум береться за всіма прямими дугами ланцюга, q1=min (x(v))мінімум береться по всіх зворотних дугах ланцюга.

    Теорема 2.

    Потік Q, x(v) , vÎV, максимальний тоді і тільки тоді, коли немає шляху збільшення потоку.

    Пропонований алгоритм вирішення задачі про максимальний потік в мережі, заснований на пошуку шляху збільшення потоку tв s, який у свою чергу заснований на процесі розміщення позначок вершин. Говоритимемо, що

    вершина iпозначена позначкою q(i)>0, а також відома дуга пряма дуга v(i)через яку надійшов цей потік, або позначена позначкою якщо до неї дійшов деякий додатковий потік величиною q(i)>0, а також відома зворотна дуга v(i), якою надійшов цей потік;

    вершина i переглянута, якщо позначено усі сусідні з нею вершини.

    Якщо позначено вершину s, то знайдено шлях збільшення потоку величиною q, що пропускається цим шляхом. Для опису алгоритму нам знадобиться також масив SPW, в якому розміщуються номери помічених вершин у порядку їх позначки. З 1- номер у масиві SPWпроглядається вершини, С2- Номер останньої поміченої вершини в цьому масиві.

    Алгоритм розрахунку максимального потоку в мережах

    КРОК 1. Початкові присвоєння.Поточного значення А тмаксимального потоку в мережі надають значення 0. КРОК 2. Вибір незалежних маршрутів у мережі та визначення потоків у них.З усієї безлічі можливих маршрутів у мережі від джерела до стоку вибираємо незалежні маршрути М 1 , … , М k, що не мають загальних вершин, крім початкової (джерела v і) та кінцевої (стоку v з). Для кожного вибраного маршруту М i(1£ i£ k) визначаємо максимальний потік А(М i).КРОК 3. Коригування поточного значення максимального потоку в мережі.Додаємо знайдені на КРОКУ 2значення максимальних потоків у незалежних маршрутах М 1 , … , М kдо поточного загального максимального потоку в мережі: А т:= А т + А(М 1)+ А(М 2)+…+ А(М k).КРОК 4. Корекція мережі.Знайдені на КРОКУ 2максимальні потоки А(М 1), … , А(М k) віднімаємо з пропускної спроможності відповідних дуг мережі. Дуги з нульовою залишковою пропускною здатністю видаляємо. КРОК 5. Перевірка завершення роботи алгоритму.Якщо після корекції у мережі не залишилося маршрутів із джерела v іу стік v з, то максимальний потік в мережі дорівнює знайденому поточному А:= А талгоритм завершує свою роботу, оскільки всі пропускні можливості мережі вичерпані. Якщо ж у коригованій мережі існують маршрути із джерела v іу стік v з, то перехід на КРОК 2та продовження виконання алгоритму . приклад 2.Знайти максимальний потік у мережі на рис.1.15 за цим алгоритмом. Рішення. КРОК 1. Початкові присвоєння. А т: = 0.

    І ітерація. КРОК 2. Вибір незалежних маршрутів у мережі та визначення потоків у них.В якості М 1 візьмемо маршрут( v і =V 1 , V 2 , V 5 , v с = V 7), розглянутий у прикладі 1. Для нього А(М 1) = 10.

    Також нескладно виділити незалежний від М 1 маршрут М 2 = (v і =V 1 , V 3 , V 6 , v с = V 7). Виконаємо для нього розрахунок максимальної пропускної здатності та скоригуємо пропускну здатність дуг: А(М 2)= min{d 13 , d 36 , d 67 } = min{45, 40, 30} = 30. d 13 ¢ = d 13 - 30 = 15, d 36 ¢ = d 36 - 30 = 10, d 67 ¢ = d 67 - 30 = 0.

    КРОК 3. Коригування поточного значення максимального потоку в мережі. А т:= А т + А(М 1)+ А(М 2) = 0 + 10+ 30 = 40.КРОК 4. Корекція мережі.Знайдені на КРОКУ 2максимальні потоки А(М 1), А(М 2) у маршрутах М 1 , М 2 віднімаємо з пропускної спроможності їх дуг. Дуги з нульовою залишковою пропускною здатністю видаляємо. Результат дано на рис.1.16 а. а) б) Рис.1.16. Результат коригування мережі після ітерацій Iі IIКРОК 5. Перевірка завершення роботи алгоритму.У коригованій мережі (рис.1.16 а) існують маршрути із джерела v іу стік v з, наприклад М 3 = (v і =V 1 , V 4 , V 2 , V 5 , v с = V 7). Продовження виконання алгоритму .

    ІІ ітерація. КРОК 2.Як єдиний незалежний маршрут приймемо М 3 = (v і =V 1 , V 4 , V 2 , V 5 , v с = V 7). Для нього:

    А(М 3)= min{d 14 , d 42 , d 25 , d 57 } = min{15, 10, 10, 15} = 10.

    d 14 ¢ = d 14 - 10 = 5, d 42 ¢ = d 42 - 10 = 0, d 25 ¢ = d 25 - 10 = 0, d 57 ¢ = d 57 - 10 = 5.

    КРОК 3. А т:= А т + А(М 3) = 40 + 10= 50.

    КРОК 4. Корекція мережі.Максимальний потік А(М 3) віднімаємо з дуг маршруту М 13 . Результат дано на рис.1.16 б.

    КРОК 5.У коригованій мережі не залишилося маршрутів із джерел стік. А:= А т:= 50 завершення роботи алгоритму. Відповідь:максимальний потік мережі на рис.1.15 дорівнює 50.

    Якщо в мережі задано кілька джерел, її добудовують, вводячи нове спільне джерело, яке з'єднують з вихідними джерелами дугами, що мають необмежену пропускну здатність. Потім завдання вирішують за звичайним алгоритмом. Шуканими потоками через вихідні джерела будуть потоки по доданих дугах, що входять в них з нового загального джерела. Аналогічно надходять за наявності у мережі кількох стоків.

    Мережеве планування

    Будь-яке завдання з проектування чи побудові досить складного об'єкта ( проект) можна розбити на ряд дрібніших складових кроків. Від правильного виборупослідовності виконання цих кроків залежить терміни виконання всього проекту.

    Весь комплекс дій щодо виконання проекту подають у вигляді сукупності подійі робіт. Подіями називають окремі етапи проекту. Роботами називають процес виконання. Весь комплекс подій та робіт, необхідних для виконання проекту, може бути представлений у вигляді двополюсної мережі Г =({v і, v з} , V, X), в якій:

    а все подіїпозначені безліччю вершин V,серед них виділено вихідна подія v та(початок робіт) та завершальна подія v з(завершення виконання всього проекту), внутрішні вершини мережі задають проміжні події- етапи, які необхідно виконати у процесі реалізації проекту,

    б) усі роботипозначені дугами, що з'єднують між собою пари подій - вершин.

    Графічне зображенняданої мережі називають мережевим графіком.Для позначення послідовності дій у мережевий графік вводять також фіктивні роботи, які пов'язані з виконанням будь-яких дій. Відповідні роботи позначають штриховими дугами.

    Як приклад розглянемо організацію деякого виробництва. Проект вимагає виконання наступних робіт:

    I) маркетингові дослідження; II) передпроектні дослідження з обладнання; III) організація мережі збуту; IV) проведення рекламної кампанії; V) розробка технічного завдання на виробниче обладнання; VI) розробка технічної документації на виробничі приміщення та комунікації; VII) закупівля стандартного обладнання VIII) проектування та виготовлення нестандартного обладнання, IX) будівництво виробничих приміщень та монтаж комунікацій, X) монтаж стандартного обладнання, XI) монтаж нестандартного обладнання, XII) пусконалагоджувальні роботи.

    Дані роботи позначимо у мережевому графіку дугами із відповідними номерами.

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

    1) початок робіт (вихідна подія); 2) завершення маркетингових досліджень; 3) завершення передпроектних досліджень; 4) організація мережі збуту; 5) організація рекламної кампанії; 6) підготовка технічного завдання на виробниче обладнання; приміщення та комунікації, 8) завершення закупівлі стандартного обладнання, 9) завершення проектування та виготовлення нестандартного обладнання, 10) завершення будівництва виробничих приміщень та монтажу комунікацій, 11) завершення встановлення обладнання та пусконалагоджувальних робіт,

    12) завершення проекту (завершальна подія).

    Події зіставляємо вершини з відповідними номерами. Мережевий графіквиконання проекту дано на рис. 1.17:



    Рис.1.17. Мережевий графік виконання проекту

    Потоки у мережах

    Завдання про максимальний потік

    Нехай задана мережа, що складається з безлічі вершин Е і безлічі дуг, що з'єднують деякі впорядковані пари вершин, взятих з Е. Припускатимемо, що вона є симетричним графом, тобто якщо дуга () входить в мережу, то в неї входить і симетрична Дуга (), хоча реально такої дуги може і не бути. Для визначеності привласним вершин мережі такі номери: . Кожна вершина характеризується інтенсивністю. Вершини, котрим , назвемо джерелами, вершини, котрим , - стоками, інші - проміжними. Шляхами мережі прямують деякі потоки - однорідна речовина (газ, рідина) або транспорт - із джерел у стоки. Кожній дузі () мережі поставлено у відповідність число, зване пропускною здатністю дуги. Під пропускною спроможністю дуги розуміється максимальний потік, який може пропустити за одиницю часу. Нехай і для інших вершин, тоді - єдине джерело, - єдиний стік, а - проміжні вершини мережі.

    Ставиться завдання визначити для заданої мережі максимальну величину потоку із джерела в стік. Під потоком в мережі з джерела в стік будемо розуміти сукупність потоків () по всіх дугах мережі, де - потік по дузі (), , що дорівнює кількості переміщуваної по ній субстанції в одиницю часу. Математично завдання про максимальний потік формулюється наступним чином: знайти невід'ємні значення для всіх, що максимізують

    (3.9)

    при обмеженнях:

    (3.11)

    Умова (3.9) відображає величину максимального потоку, що дорівнює кількості речовини, що витікає з джерела, або припливає в стік. Умови (3.10) означають, що потік за кожною дугою повинен бути невід'ємним і не перевищувати її пропускну здатність; з умови (3.11) випливає, що кількість речовини, що притікає до будь-якої проміжної вершини, дорівнює кількості речовини, що випливає з неї.

    Досі ми розглядали мережі з єдиним джерелом та стоком. Насправді, однак, кількість джерел і стоків може бути довільним. Покажемо, що за допомогою незначних змін топології завдання такого типу можуть бути зведені до розглянутих.

    Проілюструємо це з прикладу.

    Розглянемо мережу, що складається з трьох джерел та двох стоків (Рис. 3.10). Нехай, для певності, дана мережаописує таке завдання.

    Місця видобутку нафти розташовані у географічних пунктах. З місць видобутку нафту транспортують на нафтопереробні заводи через деякі проміжні пункти. Сукупність пунктів з транспортними магістралями, що з'єднують їх, зобразимо у вигляді мережі на Рис. 3.10 дуги відповідають транспортним магістралям, а вершини - окремим пунктам (місцям видобутку, заводам, станціям перекачування або залізничним станціям). Пропускні можливості транспортних магістралей приписані дугам мережі. Щоб визначити, яку максимальну кількість нафти можна транспортувати з місць видобутку на нафтопереробні заводи, необхідно розширити мережу, додавши одне фіктивне джерело та один фіктивний стік (фіктивні дуги на малюнку нанесені штриховими лініями).

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


    Рис. 3.10. Введення фіктивного джерела та стоку

    приклад 3.

    Наведемо приклад розв'язання задачі про максимальний потік в Excel. Розглянемо деяку транспортну мережу (Рис. 3.11). Припустимо також, що транспортні потоки можуть йти в обох напрямках деяких дуг (очевидно, цей випадок є більш загальним та складним для вирішення, ніж випадок односторонніх транспортних потоків). На малюнку позначені максимальні пропускні здібності в обох напрямках: наприклад з пункту 3 пункт 6 може бути транспортований потік інтенсивністю 4 одиниці, і такий же потік - з пункту 6 пункт 3 (нулі у закінчень деяких дуг означають неможливість транспортування у відповідному напрямку). Потрібно визначити максимальну пропускну спроможність мережі загалом, тобто. максимальне значення потоку.

    Рис. 3.11. Мережевий графік прикладу 3.

    Рішення.

    Так як передбачається, що для кожного проміжного вузла мережі повний вхідний потік повинен дорівнювати повному вихідному потоку, то завдання може бути сформульована наступним чином:

    Максимізувати за обмежень:

    Введемо дані на робочий лист відповідно до Мал. 3.12.

    Рис. 3.12. Дані для вирішення задачі про максимальний потік

    Діапазон осередків A6: Q6 відведемо під розрахункові значення змінних. У комірки A8:A14, а також у цільову комірку F13 введемо такі формули

    C6+D6+I6-E6-H6-J6

    G6+N6+H6+K6-L6-I6-M6-P6

    F13 (цільова)

    Після запуску Пошуку рішення введемо такі обмеження:

    У вікні діалогу Пошуку рішення для діапазону змінних осередків вкажемо A6:Q6.

    В результаті рішення отримаємо відповідь: ; потоки в дугах представлені нижче

    Пункти (вузли)

    Пункти (вузли)

    Слід зазначити, що це завдання має єдине оптимальне рішення, тобто при максимальному потоці 17 одиниць може бути різне розподіл потоків по дугах.

    Поділіться з друзями або збережіть для себе:

    Завантаження...