- •«Дискретна математика» до теми: “теорія графів”
- •Зміст Вступ 4
- •Контрольні завдання 20 Список літератури
- •Знаходження найкоротшого шляху між двома вершинами графа
- •Знаходження найкоротшого шляху між будь-якими двома вершинами графа матричним методом
- •3. Задача вибору або про призначення
- •4. Задача про максимальний потік у транспортній мережі
- •Контрольна робота №3.
- •Список літератури
- •39614,М.Кременчук, вул. Першотравнева, 20
4. Задача про максимальний потік у транспортній мережі
Транспортною мережею (s/t-мережі) назвемо зв`язний орієнтований граф без петель, у якого є дві особливі вершини s (джерело) та t (стік). Причому:
з вершини s дуги тільки виходять, а у вершину t – тільки заходять;
кожній дузі транспортної мережі приписана невід`ємна величина, яка називається пропускною спроможністю дуги і позначається cij.
Зафіксуємо деяку вершину s/t-мережі хк. Для поняття потоку транспортної мережі розглянемо дві множини А-множина всіх вершин s/t-мережі, з яких виходить дуга та заходить у вершину хк, та В – множина всіх вершин s/t-мережі, які безпосередньо слідують за вершиною хк. Тоді потоком в s/t-мережі будемо називати невід`ємну величину jij (для деякої дуги uij)=v, якщо виконуються наступні умови:
jij £ cij , для будь-якої дуги графа;
Перша умова говорить, що для будь-якої дуги транспортної мережі потік не перевищує пропускну спроможність транспортної мережі, а друга про те, що для будь –якої вершини транспортної мережі сумарний потік, що входить у вершину, рівний сумарному потоку, що виходить з вершини, тобто потік неподільний.
Нехай Х – множина всіх вершин s/t-мережі. Розіб`ємо її на дві підмножини Х1 та Х2 таким чином, щоб:
Тоді розтином s/t-мережі назвемо множину всіх дуг, що слідують з множини вершин Х1 до множини вершин Х2, позначимо (Х1, Х2). Величина розтину рівна сумі пропускних спроможностей дуг, що створюють розтин, та позначається v(X1, X2).
Задача про визначення максимального потоку в транспортній мережі є основною задачею оптимізації на графах. Її рішення базується на наступній теоремі Форда-Фалкерсона: максимальний потік у транспортній мережі дорівнює величині найменшого розтину в ній.
Задача 4. Транспортну мережу задано графічно. Необхідно знайти максимальний потік в s/t-мережі.
Розв`язок. Кожній дузі графа припишемо пару чисел cij, jij. На початку в s/t-мережі розподілимо нульовий потік, тобто jij=0. Далі для розмітки будь-якої к-ї вершини будемо використовувати позначення к(і+, e(к)) або к(і-, e(к)), де і- номер вершини, з якої ми потрапили до вершини к, ‘+’ - по прямій дузі, ‘-‘ - по зворотній дузі, e(к) – невід`ємна величина, на яку можна збільшити потік (для прямої дуги) або зменшити (для зворотної дуги). Вершина s завжди має особливу помітку (s+, ¥). Помічати вершини по прямих дугах можна, якщо на цих дугах потік можливо збільшити ( cij-jij >0), а по зворотніх – якщо потік можливо зменшити (jij >0). Для вершини к(і+, e(к)) e(к)=min(e(i), cik-jik), а для вершини к(і-, e(к)) e(к)=min(e(i), jik). Перший крок будь-якого етапу полягає у розставленні поміток вершин мережі, доки або не буде помічено вершину t , тоді переходимо на другий крок, або переконаємося, що вершину t помітити неможливо (задачу вирішено).
1-й єтап.
1-й крок. S(s+,¥). Далі помічаємо вершини суміжні з s. 1(s+, min(¥,10-0) , тобто 1(s+,10). Аналогічно 2(s+,15), 3(s+,15). Тепер вершина s розглянута. Для подальшого розгляду вибираємо будь-яку із суміжних помічених вершин. Наприклад, вершину 3. Помічаємо вершини, суміжні з третьою: 2(3+, min(15, 10-0)=10), t(3+, min(15,8-0)=8) Помітили вершину t – переходимо до друго кроку 1-го етапу.
2-й крок. За допомогою поміток вершин будуємо ланцюг, який приводить з вершини s у вершину t: t¬3¬s. На прямих дугах ланцюга потік збільшуємо на величину e(t), а на зворотній – зменшуємо на цю саму величину. На малюнку показано розподіл потоку після виконання першого етапу. Переходимо до другого етапу, який виконуємо аналогічно першому.
2-й етап.
S(s+,¥) |
1(s+,10) 2(s+,15) 3(s+,7) |
t(2+,15) t¬2¬s e(t)=15 |
3-й етап.
S(s+,¥) |
1(s+,10) 3(s+,7) |
4(1+,7) t(1+,7) t¬1¬s e(t)=7 |
Після 2-го та 3-го етапів розподіл потоку у мережі показано на малюнку.
4-й етап.
S(s+,¥) |
1(s+,3) 3(s+,7) |
2(3+,7) |
t(2+,5) t¬2¬3¬s e(t)=5 |
5-й етап.
S(s+,¥) |
1(s+,3) 3(s+,2) |
4(1+,3) |
t(4+,3) t¬4¬1¬s e(t)=3 |
6-й етап.
S(s+,¥) |
3(s+,2) |
2(3+,2) |
S(2-,2)
|
На 1-му кроці 6-го етапу прийшли до побудови контуру навколо вершини s, а в вершину t так і не потрапили. Це свідчить про те, що потік у мережі збільшити неможливо. Будуємо розтин мережі: віднесемо до множини Х1 усі вершини, що помічені на 6-му кроці, а до множини Х2 – ті, що не помічені. Х1={s, 2, 3}, X2={1, 4, t}, (X1, X2)={us1, u2t, u3t}, v(X1, X2)=cs1+c2t+c3t=10+20+8=38. Перевірка: якщо просумувати всі значення e(t): 8+15+7+5+3=38, то отримаємо те саме значення величини розрізу.
Результуючій розподіл потоку в мережі має вигляд
На малюнку також показано розріз найменшої величини, який побудовано у розглянутому прикладі.