Sieć (graf skierowany) Siecia (grafem skierowanym) G = (V, A) nazywamy zbiór wierzchołków V oraz zbiór łuków A V V. V = {A, B, C, D, E, F}, A = {(A, B),(A, D),(A, C),(B, C),...,}
Ścieżki i cykle Ciag wierzchołków w sieci G = (V, A) połaczonych odpowiednio skierowanymi łukami nazywamy ścieżka w G. Cyklem nazywamy ścieżkę złożona z niepowtarzajacych się wierzchołków, za wyjatkiem pierwszego i ostatniego, rozpoczynajac a się i kończac a w tym samym wierzchołku. Ścieżka A, C, F i cykl B, E, D, B.
Sieć acykliczna Sieć nazywamy acykliczna jeżeli nie zawiera żadnego cyklu. W takiej sieci można ponumerować wierzchołki w ten sposób, że dla każdego łuku (i, j) A zachodzi i < j. Jest to tzw. uporzadkowanie topologiczne wierzchołków.
Sieć (graf nieskierowany) W niektórych zastosowaniach sieć jest nieskierowana. Wówczas krawędź {i, j}, łacz ac a dwa wierzchołki i oraz j, interpretujemy jako parę łuków (i, j) i (j, i).
Przepływ w sieci o minimalnym koszcie Fabryka, ulokowana w mieście 1, ma wysłać 5 jednostek towaru do dwóch sklepów. Sklep 1 znajduje się w mieście 4 i zamówił 2 jednostki towaru a sklep 2 znajduje się w mieście 5 i zamówił 3 jednostki towaru. Mapa połaczeń między fabryka a sklepami jest zadana w postaci sieci G = (V, A). Każdy łuk (i, j) A ma dwa parametry: koszt c ij transportu 1 sztuki towaru po (i, j) oraz pojemność u ij oznaczajac a maksymalna liczbę jednostek towaru, jaka może być przewożona po (i, j). Jaki jest najtańszy plan transportu towaru z fabryki to sklepów?
Model liniowy i rozwiazanie min z = 5x 12 + 2x 13 + 8x 31 + 1x 23 + 2x 24 + 4x 34 + 1x 35 + 3x 45 x 12 + x 13 x 31 = 5 x 24 + x 23 x 12 = 0 x 34 + x 35 x 23 x 13 = 0 x 45 x 24 x 34 = 2 x 35 x 45 = 3 0 x 12 9, 0 x 13 4, 0 x 31 3, 0 x 23 6, 0 x 24 4 0 x 34 4, 0 x 35 9, 0 x 45 7
Ogólne sformułowanie problemu Zadana jest sieć G = (V, A). Dla każdego łuku (i, j) A sa zadane koszt c ij i pojemność u ij 0. Dla każdego wierzchołka i V zadana jest liczba b(i) oznaczajaca podaż/popyt w tym wierzchołku. Jeżeli b(i) > 0, to i jest dostawca; jeżeli b(i) < 0, to i jest odbiorca; jeżeli b(i) = 0, to i jest wierzchołkiem pośrednim. Niech x ij 0 będzie zmienna oznaczajac a przepływ po łuku (i, j) A. min z = (i,j) A c ij x ij {j:(i,j) A} x ij {j:(j,i) A} x ji = b(i) i N 0 x ij u ij (i, j) A Zakładamy, że i V b(i) = 0, czyli problem jest zbilansowany.
Model w AMPL set V; set A within V cross V; param c{a}; param u{a} >=0; param b{v}; var x{a}>=0; minimize koszt: c1{i in V}: c2{(i,j) in A}: sum{(i,j) in A} c[i,j]*x[i,j]; sum{(i,j) in A} x[i,j]- sum{(j,i) in A} x[j,i]=b[i]; x[i,j]<=u[i,j];
Model w AMPL param N:=1,2,3,4,5; param: A: c u := 1,2 5 9 1,3 2 4 2,3 1 6 2,4 2 4 3,1 8 3 3,4 4 4 3,5 1 9 4,5 3 7 param b:= 1 5 2 0 3 0 4-2 5-3
Własności problemu Jeżeli podaż/popyt w wierzchołkach oraz pojemności łuków sa całkowite, to każde bazowe rozwiazanie dopuszczalne tego problemu jest całkowitoliczbowe. Zatem, jeżeli problem ma optymalne rozwiazanie, to algorytm sympleksowy zwróci optymalne rozwiazani całkowitoliczbowe. Dla problemy najtańszego przepływu opracowano specjalna wersję algorytmu sympleks, zwana sieciowym algorytmem sympleksowym. Algorytm ten nie wykonuje operacji dzielenia (zobacz literatura).
Problem najkrótszej ścieżki Niech G = (V, A) będzie zadana siecia. Dla każdego łuku (i, j) A zadany jest nieujemny koszt przejazdu c ij 0. Należy wyznaczyć najtańsza (najkrótsza) ścieżkę między zadana para wierzchołków s i t w G. Ścieżka 1-3-5 jest najkrótsza ścieżka między wierzchołkami 1 i 5. Jej koszt wynosi 3.
Model liniowy min z = 5x 12 + 2x 13 + 8x 31 + 1x 23 + 2x 24 + 4x 34 + 1x 35 + 3x 45 x 12 + x 13 x 31 = 1 x 24 + x 23 x 12 = 0 x 34 + x 35 x 23 x 13 = 0 x 45 x 24 x 34 = 0 x 35 x 45 = 1 x ij 0,(i, j) A
Drzewo najkrótszych ścieżek Najkrótsze ścieżki od wierzchołka s do każdego wierzchołka sieci można zadać w postaci drzewa najkrótszych ścieżek. Unikalna ścieżka od s = 1 do j w drzewie jest najkrótsza ścieżka od s do j w sieci. Drzewo można przedstawić za pomoca jednej tablicy pred[1..n]. W przykładzie pred = [0, 3, 1, 2, 3].
Algorytm Dijkstry Jeżeli wszystkie koszty połaczeń sa nieujemne, to drzewo najkrótszych ścieżek w zadanej sieci można wyznaczyć efektywnie z pomoca algorytmu Dijkstry. W każdym kroku algorytm wyznacza podział wierzchołków na dwa rozłaczne podzbiory: S i S. Do S należa wierzchołki, do których najkrótsza ścieżka od s jest już znana a do S należa pozostałe wierzchołki. Algorytm sukcesywnie dodaje kolejne wierzchołki do S dopóki S = V.
Przykład Inicjalizacja: S =, S = {1, 2, 3, 4, 5, 6}
Przykład Wybierz wierzchołek i S o najmniejszej wartości d(i) i przenieś go do S. Wykonaj aktualizację następników i. S = {1}, S = {2, 3, 4, 5, 6}.
Przykład Wybierz wierzchołek i S o najmniejszej wartości d(i) i przenieś go do S. Wykonaj aktualizację następników i. S = {1, 2}, S = {3, 4, 5, 6}
Przykład Wybierz wierzchołek i S o najmniejszej wartości d(i) i przenieś go do S. Wykonaj aktualizację następników i. S = {1, 2, 4}, S = {3, 5, 6}
Przykład Wybierz wierzchołek i S o najmniejszej wartości d(i) i przenieś go do S. Wykonaj aktualizację następników i. S = {1, 2, 4, 3}, S = {5, 6}
Przykład Wybierz wierzchołek i S o najmniejszej wartości d(i) i przenieś go do S. Wykonaj aktualizację następników i. S = {1, 2, 4, 3, 6}, S = {6}
Example Wybierz wierzchołek i S o najmniejszej wartości d(i) i przenieś go do S. Wykonaj aktualizację następników i. S = {1, 2, 4, 3, 6, 5}, S =
Przykład Drzewo najkrótszych ścieżek od wierzchołka 1:
Algorytm Dijkstry Liczba elementarnych operacji w algorytmie Dijkstry jest proporcjonalna do V 2, czyli do kwadratu liczby wierzchołków w sieci. Jest to więc algorytm efektywny, za pomoca którego można rozwiazywać problemy o dużych rozmiarach. Algorytm Dijkstry nie jest poprawny, jeżeli w sieci występuja ujemne koszty. W takim przypadku należy zastosować inne algorytmy (literatura).
Rozpatrzmy pewien projekt opisany w poniższej tabeli: Czynność Bezpośredni poprzednik Czas trwania A (Szkolenie pracowników) - 2 B (Zakup materiałów) - 5 C (Produkcja części 1) A,B 6 D (Produkcja części 2) A,B 2 E (Testowanie części 2) D 1 F (Połaczenie części 1 i 2) C,E 5 1 Jaki jest czas trwania tego projektu? 2 Które czynności sa krytyczne, tj. wydłużenie czasu trwania których czynności spowoduje wydłużenie czasu trwania całego projektu?
Sieć czynności A(2) 3 C(6) F(5) 5 6 1 0 D(2) E(1) B(5) 2 4 Projekt można przedstawić w postaci sieci, której łuki reprezentuja czynności a wierzchołki zdarzenia oznaczajace momenty rozpoczęcia oraz zakończenia odpowiednich czynności. Łuki kreskowane oznaczaja czynności fikcyjne, wymuszajace porzadek wykonywania czynności. Otrzymana sieć musi być acykliczna (dlaczego?). Zatem wierzchołki można ponumerować za pomoca uporzadkowania topologicznego.
Sieć czynności Niech ET(i) oznacza najwcześniejszy możliwy czas zajścia zdarzenia i N: ET(1) = 0 ET(i) = max {j: (j,i) A} (ET(j)+t ji ) i = 2,...,n (0,) 1 A(2) (5,) 3 0 C(6) (11,) (16,) 5 F(5) 6 D(2) E(1) B(5) (5,) 2 4 (7,) Najwcześniejszy moment zajścia zdarzenia 6 wynosi 16. Zatem czas trwania projektu wynosi 16 i jest to długość najdłuższej ścieżki w sieci czynności.
Sieć czynności Niech LT(i) oznacza najpóźniejszy możliwy czas zajścia zdarzenia i N, który nie spowoduje wydłużenia czasu trwania projektu. LT(n) = ET(n) LT(i) = min {j: (i,j) A} (LT(j) t ij ) i = n 1,...,1 (0,0) 1 A(2) (5,5) 3 0 C(6) (11,11) (16,16) 5 F(5) 6 D(2) E(1) B(5) (5,5) 2 4 (7,10)
Sieć czynności Wielkość TF(i, j) = LT(j) ET(i) t ij nazywamy całkowitym zapasem czynności(i, j). Czynności dla których TF(i, j) = 0 nazywamy krytycznymi. Jeżeli projekt ma się zakończyć terminowo, to momenty rozpoczęcia czynności krytycznych nie moga być opóźnione a ich czasy trwania nie moga być wydłużone. Czynności krytyczne tworza ścieżkę krytyczna w sieci. (0,0) 1 A(2) 3 0 B(5) (5,5) (11,11) (16,16) C(6) F(5) 3 5 6 0 0 0 0 D(2) 3 3 E(1) 2 4 (5,5) (7,10) Czynności B, C i F sa krytyczne. Tworz a one ścieżkę krytyczna w sieci.
Diagram Gantta Diagram Gantta dla projektu: B C D E A 0 5 11 F 16
Analiza kosztowa projektu Przypuśćmy, że chcemy skrócić czas trwania projektu do T. Jednostkowy koszt skrócenia czynności (i, j) wynosi c ij, ale czas trwania (i, j) nie może być krótszy niż t ij. Czas trwania których czynności należy skrócić aby osiagn ać założony czas trwania projektu przy możliwie najmniejszym koszcie? Rozwiazanie uzyskujemy za pomoca następujacego modelu liniowego: min c 13 δ 13 + c 12 δ 12 + +c 56 δ 56 ET 1 = 0 ET 2 ET 1 + 5 δ 12 ET 3 ET 1 + 2 δ 13 ET 3 ET 2 ET 4 ET 3 + 2 δ 34 ET 5 ET 4 + 1 δ 45 ET 5 ET 3 + 6 δ 35 ET 6 ET 5 + 5 δ 56 ET 6 T 0 δ 13 2 t 13,...,0 δ 56 5 t 56
Problem maksymalnego przepływu Niech G = (N, A) będzie zadana siecia. Dla każdego łuku (i, j) A jest zadana pojemność u ij 0. Należy wyznaczyć maksymalny przepływ od zadanego źródła s do zadanego ujścia t w G. Przykładowa sieć ze źródłem s = 1 and ujściem t = 5 oraz maksymalnym przepływem o wartości 13.
Model liniowy max z = x 12 + x 13 x 31 x 24 + x 23 x 12 = 0 x 31 + x 34 + x 35 x 23 x 13 = 0 x 45 x 24 x 34 = 0 0 x 12 9, 0 x 13 4,...,0 x 45 7
Minimalny przekrój Podział wierzchołków sieci na dwa rozłaczne zbiory S i S taki, że s S, t S nazywamy przekrojem. Pojemnościa przekroju nazywamy sumę pojemności łuków (i, j) takich, że i S, j S. Minimalnym przekrojem nazywamy przekrój o najmniejszej pojemności. Przykładowy przekrój, gdzie S = {1, 3} i S = {2, 4, 5}. (1, 2),(3, 4),(3, 5) i pojemność przekroju wynosi 22. Odpowiednimi łukami sa
- minimalny przekrój Wartość maksymalnego przepływu w sieci jest równa pojemności minimalnego przekroju w tej sieci. Wartość maksymalnego przepływu = pojemność minimalnego przekroju = 13
Zastosowania W punktach A 1, A 2, A 3 znajduja się pompy wodne, dostarczajace odpowiednio 15, 5 i 10 litrów wody na godzinę. Woda jest dostarczana do punktów B 1, B 2, które potrzebuja 10 i 15 litrów wody na godzinę. System rur jest zadany w postaci sieci, której łuki reprezentuja rury o zadanych przepustowościach (w litrach na godzinę). Czy jest możliwe spełnienie zapotrzebowania odbiorców na wodę? Jeżeli nie, to które elementy wodociagu należy zmodernizować?
Zastosowania Rozwiazanie: Nie jest możliwe spełnienie zapotrzebowania na wodę obu punktów. Zielone rury należa do minimalnego przekroju. Powinny być zmodernizowane w pierwszej kolejności.
Zastosowania Układ komunikacyjny pewnego miasta składa się z dróg i skrzyżowań. Każda droga i skrzyżowanie posiada pewna przepustowość oznaczajac a liczbę samochodów, które moga przejechać przez ta drogę lub skrzyżowanie w ciagu 1 minuty. Ile samochodów może przejechać przez ten układ w ciagu 1 minuty? Które elementy tego systemu sa najsłabsze i powinny być zmodernizowane w pierwszej kolejności?
Zastosowania Rozwiazanie: W ciagu 1 minuty 27 samochodów może przejechać przez ten system. Należy w pierwszej kolejności zmodernizować fragmenty s A1 is B1 B2.
Zastosowania G = (N, A) modeluje sieć energetyczna, w której łuki reprezentuja linie wysokiego napięcia. W wierzchołku 1 znajduje się elektrownia, która dostarcza prad do miejsca 8. Jaka jest minimalna liczba linii, które musza ulec awarii, żeby prad nie był dostarczany do miejsca 8?
Zastosowania Rozwiazanie: Wszystkie łuki maja przepustowość równa 1 i szukamy minimalnego przekroju w G. Usunięcie łuków z przekroju rozłacza wierzchołki 1 i 8. W tym przypadku co najmniej trzy linie musza ulec awarii.
Sieć rezydualna Niech x będzie przepływem w sieci G. Konstruujemy sieć rezydualna G(x) następujaco: 1 Dla każdego łuku (i, j) A tworzymy dwa łuki: (i, j) z pojemnościa r ij = u ij x ij (j, i) z pojemnościa r ji = x ij 2 Usuwamy wszystkie łuki o pojemności 0.
Sieć rezydualna Jeżeli w sieci rezydualnej G(x) istnieje ścieżka od s do t, to jest możliwe zwiększenie przepływu od s do t wzdłuż tej ścieżki. Przepływ może być zwiększony o wartość równa minimalnej przepustowości łuku na tej ścieżce.
Sieć rezydualna Przepływ x jest maksymalny w G = (N, A) wtedy i tylko wtedy, gdy w odpowiedniej sieci rezydualnej G(x) nie istnieje ścieżka od s do t. Ponadto, jeżeli S jest zbiorem wierzchołków osiagalnych z s a S jest zbiorem wierzchołków nieosiagalnych z s w G(x), to zbiory te tworza minimalny przekrój w G.
Algorytm Fulkersona - Forda Rozpoczynamy od przepływu równego 0. Wówczas sieci G i G(x) sa takie same. Wyznaczamy ścieżkę 1-2-3-4 w G(x) i przesyłamy 2 jednostki przepływu wzdłuż tej ścieżki.
Algorytm Fulkersona - Forda Wyznaczamy ścieżkę 1-3-4 w sieci rezydualnej i przesyłamy 3 jednostki przepływu wzdłuż tej ścieżki.
Przykład Wyznaczamy ścieżkę 1-3-2-4 w sieci rezydualnej i przesyłamy 1 jednostkę przepływu wzdłuż tej ścieżki.
Przykład Nie istnieje ścieżka od s do t w sieci rezydualnej. Zatem przepływ o wartości 6 jest maksymalny. Minimalny przekrój odpowiada podziałowi S = {1} i S = {2, 3, 4}.