Temat: Problem najtaszego przepływu. Definicja problemu, przykład zastosowania. Algorytm Kleina. Algorytm Busackera Gowena. 1. Definicja problemu najtaszego przepływu Wejcie: Graf zorientowany G = <V, E, w, c, b> z funkcjami: kosztu w oraz przepustowoci c, okrelonymi dla wszystkich krawdzi grafu. Dla kadego wierzchołka grafu i V okrelona jest ponadto warto dopływu/odpływu b(i) taka, e. Wyjcie: Funkcja przepływu f, która minimalizuje warto: oraz spełnia warunki: (*) dla wszystkich wierzchołków i V (**) dla wszystkich krawdzi (i, j) E. Załoenia 1. Wszystkie dane, tj. wartoci b(i), w ij, c ij s liczbami całkowitymi. 2. Istnieje co najmniej jedna funkcja przepływu f spełniajca warunki (*) oraz (**). 3. Wartoci kosztu w ij s nieujemne. Ponadto przez W oznaczmy maksymalny koszt krawdzi grafu, a przez C maksymaln skoczon przepustowo krawdzi grafu.
Uwaga W klasycznym sformułowaniu problemu najtaszego przepływu nie wymaga si, aby do sieci naleały wyrónione wierzchołki ródła s i ujcia sieci t, a funkcja przepływu f spełniała warunek: dla wszystkich wierzchołków i V (i {s, t}) Przykład b(2)= 0 (2, 4) 2 2 (3, 3) 0 (2, 2) (1, 5) 2 4 Pary (w ij, c ij ) okrelaj odpowiednio: w ij - koszt krawdzi (i, j) oraz c ij - przepustowo krawdzi (i, j). Pojedyncze wartoci pod krawdzi to wartoci wynikowego najtaszego przepływu f. Warto
2. Problem produkcji i dystrybucji (Glover i Klingman [1976]) Pewna firma ma p fabryk, produkujcych m rónych modeli samochodów pewnej marki. Znanie s specyfikacje zamówie s salonów sprzeday tej marki. Salon okrela, ile sztuk poszczególnych modeli zamawia. Znane s równie koszty transportu aut midzy poszczególnymi fabrykami a salonami. Naley okreli optymaln wielko produkcji kadego modelu w kadej fabryce, tak, aby zrealizowa zamówienia kadego salonu, a łczny koszt transportu i produkcji aut był moliwie najniszy. Przykład p = 2, s = 2, m = 3; Wzły sieci: p 1, p 2 fabryki, r 1, r 2 salony, p i /m j fakt produkcji modelu m j w fabryce p i r i /m j fakt zamówienia modelu m j w salonie r i p 1 /m 1 r 1 /m 1 p 1 r 1 /m 2 r 1 p 1 /m 2 r 1 /m 3 p 2 /m 1 p 2 p 2 /m 2 r 2 /m 1 r 2 p 2 /m 3 r 2 /m 2
Krawdzie sieci: krawdzie produkcji: (p i, p i /m j ) z kosztem oznaczajcym koszt produkcji jednego auta modelu m j przez fabryk p i i przepustowoci oznaczajc maksymaln wielko produkcji modeli m j przez fabryk p i krawdzie transportowe: (p i /m j, r k /m j ) z kosztem transportu jednego auta modelu m j z fabryki p i do salonu r k i przepustowoci oznaczajc maksymaln liczb aut w jednej transzy transportu tego modelu z fabryki p i do salonu r k krawdzie zamówienia: (r i /m j, r i ) z kosztem zerowym i przepustowoci oznaczajc warto zamówienia (liczb aut) na model m j złoonego przez salon r i Wartoci b(k) dla wzłów p i /m j oraz r i /m j s równe zero. Wartoci b(p i ) s sum kosztów krawdzi wychodzcych z p i, a wartoci b(r i ) s sum kosztów krawdzi wchodzcych do wzła r i. Najtaszy przepływ w tak skonstruowanej sieci ustali wysoko produkcji poszczególnych modeli w poszczególnych fabrykach. Przepływ ten musi by maksymalny. Musi te nasyca krawdzie wchodzce do wzłów r i, bo tylko wtedy moliwe bdzie ustalenie takiej wysokoci produkcji poszczególnych modeli w poszczególnych fabrykach, aby wszystkie zamówienia w salonach mogły by zrealizowane. Dodatkowo, wartoci wynikowego przepływu na krawdziach transportowych ustal, ile aut danego modelu z jakiej fabryki i do jakiego salonu przewie, aby łczna warto produkcji i transportu była optymalna (minimalna). 3. Algorytm Kleina Algorytm Kleina opiera si na spostrzeeniu, e powikszanie przepływu f w sieci G, w celu uzyskania najtaszego przepływu, powinno by kontynuowane tak długo, jak długo w sieci rezydualnej G w (f) bd istniały cykle ujemne. Def. Sieci rezydualn G w (f) dla grafu G = <V, E, w, c, b> z ustalonym przepływem f nazywamy sie, w której kada krawd (i, j) E jest zastpiona dwoma krawdziami (i, j) oraz
(j, i). Krawd (i, j) ma koszt w ij i rezydualn przepustowo r ij = c ij - f ij, a krawd (j, i) ma koszt -w ij i rezydualn przepustowo r ji = f ij. Do sieci nale tylko krawdzie z dodatni przepustowoci rezydualn. Przykład Sie G z ustalonym przepływem f b(2)=0 (2, 4) 3 0 (3, 3) 3 (2, 2) (1, 5) 1 1 Pary (w ij, c ij ) okrelaj odpowiednio: w ij - koszt krawdzi (i, j) oraz c ij przepustowo krawdzi. Liczby pod krawdziami to wartoci przepływu f. Sie rezydualna G w (f) b(2)=0 (2, 1) (-2,3) (-3, 3) (2, 1) (1, 4) (-2,1) (-1, 1)
algorytm cycle_canceling; wyznacz wykonalny dla danej sieci G i wartoci b(i) przepływ f ; while ( G w (f) zawiera cykle ujemne ) { wyznacz cykl ujemny CU ; δ = min{r ij : (i, j) CU}; powiksz przepływ o warto δ na cyklu CU ; uaktualnij sie rezydualn G w (f) ; } Przykład Sie G z przepływem f = 0 b(2)=0 (2, 4) (3, 3) (2, 2) (1, 5) Pary (w ij, c ij ) okrelaj odpowiednio: w ij - koszt krawdzi (i, j) oraz c ij przepustowo krawdzi. Aby wyznaczy wykonalny dla tej sieci przepływ dodajemy wzły: s - startowy, t ujcie, a take krawdzie: (s, i) dla wierzchołków i V takich, e b(i)>0. Krawdzie te maj przepustowo równ b(i), (i, t) dla wierzchołków i V takich, e b(i)<0. Krawdzie te maj przepustowo równ -b(i),
4 3 4 2 2 4 5 W tak skonstruowanej sieci wyznaczamy maksymalny przepływ. 3/4 3/3 4/4 1/2 0/2 4/4 1/5
Sie G z ustalonym przepływem wykonalnym f wyglda nastpujco: b(2)= 0 (2, 4) (3, 3) 3 3 0 (2, 2) (1, 5) 1 1 Sie rezydualna G w (f) jest nastpujca: b(2)=0 (2, 1) (-3, 3) (-2,3) (2, 1) (1, 4) (-2,1) (-1, 1)
Ustalamy cykl ujemny CU w sieci G w (f). CU: 4 2 3 4. Jego koszt wynosi -3+1+1=-1. Wyznaczamy warto δ = min{r ij : (i, j) CU}. Dla naszego cyklu δ = 2, a nastpnie powikszamy przepływ o warto δ na cyklu CU i aktualizujemy sie G w (f) b(2)=0 (2, 1) (-2,3) (2, 1) (-1, 2) (-3, 2) (3, 1) (-2,1) (-1, 3) Ustalamy kolejny cykl ujemny CU w sieci G w (f). CU: 4 2 1 3 4. Jego koszt wynosi -3+(-2)+2+1=-2. Wyznaczamy warto δ = min{r ij : (i, j) CU}. Dla naszego cyklu δ = 1, a nastpnie powikszamy przepływ o warto δ na cyklu CU i aktualizujemy sie G w (f) b(2)=0 (2, 2) (-2,2) (3, 3) (-1, 2) (1, 1) (-2,2) (-1, 4)
W sieci G w (f) nie ma ju cyklu ujemnego, wic algorytm si zatrzymuje i wygenerowany jest przepływ wynikowy (najtaszy). b(2)= 0 (2, 4) 2 0 (3, 3) 2 (2,2) 2 4 (1, 5) Koszt algorytmu Kleina: Krok polegajcy na wyznaczeniu przepływu wykonalnego w sieci G mona zrealizowa wykorzystujc dowolny algorytm rozwizujcy problem maksymalnego przepływu, wic czas realizacji tego kroku wynosi O(n 2 m) (gdy uyjemy np. algorytmu Dinica). Ptla główna algorytmu Kleina wykonuje si tak długo, jak długo w sieci rezydualnej G w (f) s ujemne cykle. Górne ograniczenie dla najtaszego przepływu w danej sieci wynosi mwc, a dolne ograniczenie wynosi mwc. Nawet, jeeli w jednym kroku głównej ptli warto przepływu wzronie tylko o jedn jednostk, to tych kroków nie bdzie wicej ni 2mWC. Wszystkie instrukcje w ptli algorytmu Kleina jestemy w stanie zaimplementowa tak, aby ich koszt nie przekroczył łcznie O(nm). Zatem koszt całego algorytmu wynosi O(nm 2 WC). Koszt O(nm 2 WC) powoduje, e algorytm Kleina jest niestety pseudowielomianowy, bo warto W jak i C moe by bardzo dua i wynosi np. 2 n. Znana jest poprawiona wersja algorytmu Kleina algorytm Goldberga Tarjana, którego koszt czasowy wynosi: O(n 2 m 3 logn). Poprawka ta polega na tym, e w pierwszej kolejnoci wybieramy taki cykl CU o ujemnym koszcie, który ma moliwie najniszy koszt
redni (tj. najmniejsz warto ilorazu: koszt cyklu ujemnego/liczba krawdzi w cyklu). Pytanie: Jak wyznaczy cykl ujemny w grafie o minimalnym rednim koszcie? 4. Algorytm Busackera Gowena Kolejny algorytm rozwizujcy problem najtaszego przepływu wykorzystuje pojcia psudoprzepływu i nierównowagi wierzchołka. Def. Pseudoprzepływem w sieci G =<V, E, w, c, b> nazywamy tak funkcj f : E R +, która spełnia jedynie warunek : dla wszystkich krawdzi (i, j) E. Nie musi by spełniony warunek: dla poszczególnych wierzchołków i V Def. Nierównowag (ang. imbalance) wierzchołka i w sieci G z danym pseudoprzepływem f nazwiemy warto: Jeeli wartoci e(i) > 0, to nazwiemy j nadmiarem wierzchołka i, a gdy e(i) < 0, to nazwiemy j deficytem wierzchołka i. Jeeli natomiast e(i) = 0, to powiemy, e wierzchołek i jest zrównowaony. Ponadto, przez N oznaczmy zbiór wierzchołków z nadmiarem, a przez D zbiór wierzchołków z deficytem. Algorytm Busackera-Gowena dy do takiej sytuacji, w której sie nie bdzie zawierała wierzchołków z nadmiarem. Jeeli wierzchołek k ma nadmiar, to rozładowanie tego nadmiaru bdzie realizowane przez zwikszanie przepływu wzdłu najkrótszej cieki z tego wierzchołka do jakiego wierzchołka l, który ma deficyt. W sieci powstaje pseudo przepływ, który ostatecznie staje si przepływem. Długo cieki jest przy tym mierzona sum wag krawdzi na tej ciece, a nie liczb krawdzi.
Niech d oznacza tablic długoci najkrótszych cieek z wierzchołka k do pozostałych wierzchołków w sieci rezydualnej G(f). Odległoci te mona wyznaczy stosujc, na przykład, algorytm Dijkstry. Jeeli wyznaczymy najkrótsze cieki z wzła k do pozostałych wierzchołków, to powinnimy te zredukowa wagi w ij sieci rezydualnej. Nowa waga krawdzi (i, j) musi by pomniejszona o rónic midzy minimalnymi odległociami d(j) i d(i), bo skoro wykrylimy krótsze połczenie midzy wzłami i oraz j ni wynosi waga w ij, to połczenie wierzchołków i oraz j, moe by zrealizowane niszym kosztem. Nowa waga krawdzi w ij bdzie równa w ij (d(j)- d(i)). algorytm succesive_shortest_path; f = 0; for (i V) e(i) = b(i); N = {i: e(i)>0}; D = { i: e(i)<0}; while (N ) { wybierz wierzchołek k N i wierzchołek l D ; wyznacz najkrótsze odległoci d(j) z wzła k do pozostałych wzłów sieci rezydualnej G(f) ; for ((i, j) E ) w ij = w ij (d (j)- d (i)); niech P bdzie najkrótsz ciek midzy wzłami k oraz l ; δ = min { e(k), -e(l), min{r ij : (i, j) P}}; zwiksz o δ przepływ na ciece P ; uaktualnij sie rezydualn G(f), zbiory N i D oraz wartoci nadmiaru/deficytu ; }
Przykład Sie G z przepływem f = 0 i pocztkowymi wartociami nierównowagi wierzchołków. Zbiór wierzchołków z nadmiarem N ={1}, zbiór wierzchołków z deficytem D = {4} e(2)=0 (2, 4) (3, 3) e(1)=4 e(4)= -4 (2, 2) (1, 5) e(3)= 0 Wybieramy wzeł k ze zbioru N i wzeł l ze zbioru D. k = 1, l = 4. Wyznaczamy, stosujc na przykład algorytm Dijkstry, minimalne odległoci midzy wzłem k a pozostałymi wierzchołka sieci. Tabela minimalnych odległoci ma w naszym przykładzie nastpujc zawarto: d: 0 2 2 3. 1 2 3 4 Redukujemy wagi krawdzi w sieci rezydualnej: w 12 =w 12 (d(2) - d(1)) = 2 (2 0) = 0 w 13 =w 13 (d(3) - d(1)) = 2 (2 0) = 0 w 23 =w 23 (d(3) - d(2)) = 1 (2 2) = 1 w 24 =w 24 (d(4) - d(2)) = 3 (3 2) = 2 w 34 =w 34 (d(4) - d(3)) = 1 (3 2) = 0
Wyznaczamy najkrótsz ciek P z wzła 1 do 4. P: 1-3 - 4 e(2)= 0 (0, 4) (2, 3) e(1)=4 e(4)= -4 (0, 2) (0, 5) e(3)= 0 Wyznaczamy warto δ, o któr mona zwikszy przepływ na ciece P, rozładowujc nadmiar wierzchołka 1 i zmniejszajc deficyt wierzchołka 4. δ = min { e(k), -e(l), min{r ij : (i, j) P}}=min{4, 4, 2, 5} = 2 Zwikszamy przepływ o 2 na ciece P, uaktualniamy sie rezydualn, wartoci nadmiaru/deficytu, zbiory N oraz D. N = {1}, D = {4} e(2)= 0 (0, 4) (2, 3) e(1)=2 e(4)= -2 (0, 2) (0, 3) (0, 2) e(3)= 0
Wybieramy wzeł k ze zbioru N i wzeł l ze zbioru D. k = 1, l = 4. Wyznaczamy minimalne odległoci midzy wzłem k a pozostałymi wierzchołka sieci. Tabela minimalnych odległoci ma w naszym przykładzie nastpujc zawarto: d: 0 0 1 1. 1 2 3 4 Redukujemy wagi krawdzi w sieci: w 12 =w 12 (d(2) - d(1)) = 0 (0 0) = 0 w 23 =w 23 (d(3) - d(2)) = 1 (1 0) = 0 w 24 =w 24 (d(4) - d(2)) = 2 (1 0) = 1 w 31 =w 31 (d(3) - d(1)) = 0 (0 1) = 1 w 34 =w 34 (d(4) - d(3)) = 0 (1 1) = 0 w 43 =w 43 (d(4) - d(3)) = 0 (1 1) = 0 Wyznaczamy najkrótsz ciek P z wzła 1 do 4. P: 1-2 - 3-4 e(2)= 0 (0, 4) (1, 3) e(1)=2 (0, 2) e(4)= -2 (0, 3) (0, 2) e(3)= 0 Ustalamy warto δ, o któr mona zwikszy przepływ na ciece P, rozładowujc nadmiar wierzchołka 1 i zmniejszajc deficyt wierzchołka 4. δ = min { e(k), -e(l), min{r ij : (i, j) P}}=min{2, 2, 4, 2, 3} = 2
Zwikszamy przepływ o 2 na ciece P, uaktualniamy sie rezydualn, wartoci nadmiaru/deficytu, zbiory N oraz D. N =, D = e(2)= 0 (0, 2) (1, 3) (0, 2) e(1)=0 (0, 2) e(4)= 0 (0, 4) (0, 1) e(3)= 0 W sieci rezydualnej nie ma ju wierzchołków w nadmiarem, wic algorytm si zatrzymuje. Wygenerowany w chwili zatrzymania algorytmu przepływ jest wynikowy. Koszt algorytmu Busackera Gowena: Ptla główna algorytmu wykona si maksymalnie nc razy, bo co najwyej C razy musimy rozładowywa nadmiar jednego wierzchołka, a wierzchołków jest n. Załómy, e koszt ustalenia długoci najkrótszych cieek wynosi O(nlogn) (algorytm Dijkstry). Pozostałe instrukcje w ptli mona realizowa kosztem O(n+m). Zatem łczny koszt algorytmu wynosi O(Cn 2 logn+cn 2 m).