КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Оптимізація на мережах
Нехай S є довільна, частково орієнтована мережа, кожному ребру u якої приписане невід'ємне число c(u) - пропускна спроможність. Потоком у мережі S називається пара (f, w), де w - деяка орієнтація всіх неорієнтованих ребер мережі, а f(u) - задана на множині всіх ребер функція з невід'ємними значеннями, що не перевершують пропускних спроможностей, і така, що в кожній внутрішній вершині a виконується закон Кірхгофа, відповідно до якого сума значень потоку по ребрах, що входить у вершину, дорівнює сумі потоків по ребрах, що виходить із вершини. Іншими словами, для f(u) виконуються умови: 0 £ f(u) £ c(u) для усіх вершин мережі; R(a) = 0 для усіх внутрішніх вершин, де а G(a) (відповідно G'(a)) - множина всіх ребер, що виходять із a (відповідно вхідних у a) при орієнтації w. Оскільки сума значень R(a) по усіх вершинах мережі, включаючи полюси, дорівнює нулю (кожне ребро є вихідним для однієї вершини і вхідним для іншої), то R(as) = - R(bs). Значення R = R(as) називається величиною потоку. Розглянемо задачу визначення максимального значення Rmax потоку через мережу S при заданих значеннях пропускних спроможностей. Відповідь може бути отримана у термінах перетинів мережі. Перетином мережі називається множина ребер, при видаленні яких мережа стає незв'язною, причому полюса потрапляють у різні компоненти зв'язності. У мережі на рис. 2.11 прикладами перетинів є {d, e, f}, {b, c, e, g, h}, {d, g, h, i}. Перетин називається простим, якщо при видаленні будь-якого його ребра, він перестає бути перетином. Так, перетини {d, e, f} і {b, c, e, g, h} - прості, а перетин {d, g, h, i} не є таким. Очевидно, що для кожного ребра простого перетину можна зазначити ланцюг, що проходить через це ребро, але не проходить через інші ребра даного перетину. 7 a d h 2 aS 2 c 4 e 3 g bS 3 b 4 i 1 f
Рис.2.12. Задача максимального потоку Якщо у зв'язній мережі віддалиться простий перетин, то мережа розпадеться рівно на дві частини: ліву і праву, що містить aS і bS відповідно. Кожне ребро простого перетину зв'язує вершини з різних частин. Будемо називати ребро перетину прямим, якщо воно в мережі не орієнтоване або орієнтоване зліва праворуч, і оберненим у противному випадку. Буде орієнтоване ребро прямим або оберненим, залежить від вибору перетину. Так, у прикладі ребро е в перетинах {d, e, f} і {b, c, e, g, h} - обернене, а в перетині {a, c, e, g, i}- пряме. Кожному простому перетину W припишемо пропускну спроможність c(W), рівну сумі пропускних спроможностей усіх його прямих ребер. У прикладі на рис.2.12 перетин {d, e, f} має пропускну спроможність 5+1=6, а перетин {b, c, e, g, h} - 3+2+3+2=10. Теорема про максимальну пропускну спроможність мережі сформульована Фордом і Фалкерсоном так: максимальний розмір потоку Rmax через мережу S дорівнює мінімальній пропускній спроможності cmin її простих перетинів. Ця теорема покладена в основу задачі визначення максимальної пропускної спроможності мережі. Розглянемо алгоритм Форда - Фалкерсона для розв'язання цієї задачі. Крок 0.Нехай джерела позначені, але не переглянуті, а всі інші вузли не позначені. Крок 1. Вибрати довільний позначений, але не переглянутий вузол i. Крок 2. Переглянути всі дуги e (i, j) із пропускною спроможністю a е > 0, що з'єднують вузол i з ще не позначеними вузлами j. Приписати позначки вузлам j і відзначити дуги e j = e = (i, j). Тепер вузол i позначений та переглянутий, вузли j позначені, але не переглянуті. Якщо при цьому стік виявився позначеним, то необхідний ланцюг знайдений. У противному випадку після перегляду по всіх дугах (i, j) перейти до кроку 3. Крок 3.Нехай вузол i позначений і переглянутий. Перейти до кроку 1 і повторювати кроки алгоритму доти, поки не залишиться позначених і не переглянутих вузлів. На цьому пошук максимального потоку закінчується. Розглянемо приклад. Нехай необхідно знайти максимальний потік для графа (рис.2.13). 7.7 I c e 16 I 9.8 I 12 I 7 I 8.8 I d s a j 12.1 12 I 5 I f 11 I 6.2 I 11 I 15 I 20 I 7.5 I b t 8 I Рис. 2.13. Заданий граф Позначено: I - ресурси не використані; R - ресурси використані цілком; IR - ресурси використані частково. 1. Вибираємо один із довільних маршрутів (рис.2.14). Нехай це буде маршрут (s, b), (b, t). p1 = min {f(s, b), f(b, t)} = min {6.2; 8} = 6.2.
c I e I I I d I I s a I j I I I f R I I I b t IR Рис.2.14. Перший маршрут
2. Маршрут (s, a), (a, f), (f, t) наведений на рис.2.15. p2 = min {f(s, a), f(a, f), f(f, t)} = min {12.1; 12; 15} = 12; PS[AK1] = 18.2.
I c e I I I d I I s a I j IR R I f R I I IR I
b t IR Рис.2.15. Другий маршрут
3. Маршрут (s, a), (a, b), (b, f), (f, t) наведений на рис.2.16. p3 = min {f(s, a), f(a, b), f(b, f), f(f, t)} = min {0.1; 11; 7.5; 3} = 0.1; PS = 18,3. I c e I I I d I I s a I j R R I f R IR IR I IR b t IR Рис.2.16. Третій маршрут
4. Наступний маршрут (s, c), (c, e), (e, j), (j, t) наведений на рис.2.17. p4 = min {f(s, c), f(c, e), f(e, j), f(j, t)} = min {16; 7.7; 7; 20} = 7; PS = 25.3.
c IR e I IR I d R IR s a R j IR R I f R IR IR IR R b t R Рис.2.17. Четвертий маршрут Таким чином, максимальний потік буде 25.3 одиниць.
Якщо для мережі кожне ребро характеризується деяким числом, що є відстанню між вузлами мережі, то виникає задача визначення найкоротшої відстані між заданими вузлами, тобто початку і стоку. Розглянемо алгоритм Дейкстри для визначення найкоротшого шляху (ланцюга) з початку в стік. Крок 0. Вибрати як перспективну множину вузлів множину S c = S 0 і покласти d i = 0 для i ÎS 0 та d i = ¥ для i Ï S 0. Крок 1. Вибрати вузол i * Î S c, якому відповідає найменше значення di (i Î S0). Знайдений в такий спосіб розмір d i відповідає найкоротшому шляху з деякого джерела у вузол i* (довжиною дуги є c e), а дуга e i (визначена для усіх вузлів i Î S c, крім джерел) є остання дуга шляху. Якщо i * - стік, то процедура пошуку найкоротшого шляху закінчується. Крок 2. Переглянути дуги e = (i *, j) і замінити оцінку d j на min {d j, d i + c e}. Якщо d j була дорівнена ¥, увести вузол j у S c. Якщо d j зменшилася, увести позначення e j = e = (i*, j). Крок 3. Видалити i* із S c і перейти до кроку 1, якщо множина S c не порожня. На цьому пошук найкоротшого шляху закінчується. Розглянемо приклад. Для мережі, показаної на рис.2.18, визначити найкоротший шлях із початку в стік. 7.7 c e 16 9.8 d 12 7 8.8 s a 5 j Поча- 12.1 ток 12 f 11
6.2 7.5 15 20
b t 8 Стік Рис. 2.18. Мережа для визначення найкоротшого шляху
1. Фарбуємо вершину s. Приймемо d(s) = 0; d(a) = d(b) = d(c) = d(e) =d(f) = d(j) = ¥. 2. Поточна змінна y = s. d(a) = min { d(a), d(s) + d(s, a)} = min {(; 0 + 12.1} = 12.1; d(b) = min {d(b), d(s) + d(s, b)} = min {(; 0 + 6.2} = 6.2; d(c) = min {d(c), d(s) + d(s, c)} = min {(; 0 + 16 } = 16; d(d) = min {d(d), d(s) + d(s, d)} = min {(; 0 + (} = ¥; d(e) = min {d(e), d(s) + d(s, e)} = min {(; 0 + (} = ¥; d(f) = min {d(f), d(s) + d(s, f)} = min {(; 0 + (} = ¥; d(j) = min {d(j), d(s) + d(s, j)} = min {(; 0 + (} = ¥; d(t) = min {d(t), d(s) + d(s, t)} = min {(; 0 + (} = ¥; min {d(a), d(b), d(c), d(d), d(e), d(f), d(j), d(t)} = = min {12.1; 6.2; 16; ¥; ¥; ¥; ¥; ¥} = 6.2; d(b) = 6.2. Фарбуємо вершину b. 3. Поточна змінна y = b. d(a) = min {d(a), d(b) + d(b, a)} = min {12.1; 6.2 + ¥} = 12.1; d(c) = min {d(c), d(b) + d(b, c)} = min {16; 6.2 + ¥} = 16; d(d) = min {d(d), d(b) + d(b, d)} = min {¥; 6.2 + ¥} = ¥; d(e) = min {d(e), d(b) + d(b, e) } = min {¥; 6.2 + ¥} = ¥; d(f) = min {d(f), d(b) + d(b, f) } = min {¥; 6.2 + 7.5} = 13.7; d(j) = min {d(j), d(b) + d(b, j) } = min {¥; 6.2 + (} = ¥; d(t) = min {d(t), d(b) + d(b, t) } = min {¥; 6.2 + 8} = 14.2; min {d(a), d(c), d(d), d(e), d(f0, d(j),d(t)} = = min {12.1; 16; ¥; ¥; 13.7; ¥; ¥} = 12.1; d(a) = 12.1. Фарбуємо вершину a. 4. Поточна змінна y = a. d(c) = min {d(c), d(a) + d(a, c)} = min {16; 12.1 + 9.8} = 16; d(d) = min {d(d), d(a) + d(a, d)} = min {¥; 12.1 + 8.8} = 20.9; d(e) = min {d(e), d(a) + d(a, e)} = min {¥; 12.1 + ¥} = ¥; d(f) = min {d(f), d(a) + d(a, f)} = min {13.7; 12.1 + 12} = 13.7; d(j) = min {d(j), d(a) + d(a, j)} = min {¥; 12.1 +¥} = ¥; d(t) = min {d(t), d(b)+d(b, t)} = min {¥; 12.1 + ¥, 6.2+8} = 14.2; min {d(c), d(d), d(e), d(f), d(j), d(t)} = = min {16; 20.9; ¥; 13.7; ¥; ¥} =13.7; d(f) = 13.7. Фарбуємо вершину f. 5. Поточна змінна y = f. d(c) = min {d(c), d(f) + d(f, c)} = min {16; 13.7 + ¥} = 16; d(d) = min {d(d), d(f) + d(f, d)} = min {20.9; 13.7 + ¥} = 20.9; d(e) = min {d(e), d(f) + d(f, e)} = min {¥; 13.7 + ¥} = ¥; d(j) = min {d(j), d(f) + d(f, j)} = min {¥; 13.7 +11} = 24.7; d(t) = min {d(t), d(f) + d(f, t), d(b)+d(b, t)} = min {¥; 13.7 + 15, 6.2+8} = 14.2; min {d(c), d(d), d(e), d(j), d(t)} = min {16; 20.9; ¥; 24.7; 14.2} =14.2; d(t) = 14.2. Фарбуємо вершину t. Висновок. Найкоротший шлях з початку s у стік t тільки один, складається з дуг (s, b) і (b, t) та дорівнює 14.2 одиниць.
Розглянуті положення за теорією графів можуть використовуватися при розв'язанні задач моделювання об'єктів із складною внутрішньою структурою. Алгоритми, побудовані з використанням теорії графів, відрізняються високою швидкодією, а моделі об'єктів і процесів отримуються наочними і простими в програмуванні.
Дата добавления: 2014-11-29; Просмотров: 481; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |