Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 1 / 35 TOKY V SÍTÍCH Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2013/2014, Lekce 10 Doc. Josef Kolář (ČVUT)Toky v sítích II
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 2 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 2 / 35 Výsledky midtermu Po + UT 1 x 4b + 1 x 7b + 1 x x 14b
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 3 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 3 / 35 Toky v sítích Seznámíme se s následujícími pojmy: síť, kapacita hran, tok v síti, velikost toku maximální tok, řez sítě, kapacita řezu, zlepšující cesta algoritmus Forda-Fulkersona, sítě s omezeným tokem párování, maximální párování, přiřazovací úloha Skripta kap. 8, str. 148 – 155
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 4 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 4 / 35 Síť S = G,q,s,t G = H, U je orientovaný graf q: H N je kapacita hran, q(u,v) = q uv s U je zdroj sítě S, t U je spotřebič sítě S Definice sítě (Přípustným) tokem v síti S je přiřazení f: H Z splňující podmínky: 0 f(u,v) q(u,v) pro všechny hrany (u,v) H (u,v) H f(u,v) - (v,u) H f(v,u) = 0 pro všechny uzly u U, u s,t Velikost |f| toku f je rozdíl (s,v) H f(s,v) - (v,s) H f(v,s) = (v,t) H f(v,t) - (t,v) H f(t,v) 0 t
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 5 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 5 / 35 Jaká je maximální velikost s t toku v síti? Jak se maximální velikost toku určí? Jak je maximální tok rozložen do jednotlivých hran? zdroje spotřebiče st Variantní zadání: sítě s více zdroji a spotřebiči sítě s omezenou kapacitou uzlů sítě s omezeným minimálním tokem (ukážeme později) 0 r(u,v) f(u,v) q(u,v) sítě s oceněným tokem c(f) = f(u,v). c(u,v) ( (u,v) H) cena toku hledá se (přípustná) cirkulace s minimální cenou Základní úlohy na síti
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 6 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 6 / 35 Řez sítě - hranový řez, který odděluje zdroj s od spotřebiče t {U s, U t } - odpovídající rozklad množiny uzlů H(U s U t ) - hranový řez určený rozkladem uzlů V: Pro libovolný tok f a řez sítě H(U s U t ) platí |f| q(U s U t ) Kapacita řezu sítě: q(U s U t ) = q(u,v) přes hrany (u,v), u U s, v U t UsUs UtUt Maximální tok a řezy sítě
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 7 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 7 / 35 Velikost toku tedy nepřekročí kapacitu (žádného) řezu sítě. Jak poznáme, že daný tok je maximální? ++ ++ -- -- ++ V: Tok f je maximálním tokem v síti S=G, q, s, t neexistuje (neorientovaná) cesta (tzv. zlepšující cesta) P=u 0,u 1,...,u n , u 0 =s, u n =t taková, že platí: f(u i, u i+1 ) < q(u i, u i+1 ) pro hrany (u i, u i+1 )H (s t) f(u i+1, u i ) > 0 pro hrany (u i+1, u i )H (s t) Zvýšení toku podél zlepšující cesty: a = min(q(u i, u i+1 ) - f(u i, u i+1 )) b = min(f(u i+1, u i )) = min ( a, b ) Řešení základní úlohy
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 8 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 8 / 35 Algoritmus Forda-Fulkersona V: (max flow - min cut) Velikost maximálního toku sítě je rovna kapacitě jejího minimálního řezu. Ford-Fulkerson (S) 1for ( Edge (u,v) in H(G) ) f(u,v) = 0; 2while ( NajdiCestu(S) ) ZvyšTok(S); 3 return f;
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 9 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce 10 9 / 35 boolean NajdiCestu (Node s) { 1 for ( Node u in U(G) ) stav[u]=FRESH; 2 p[s] = +s; d[s] = ; stav[s] = OPEN; 3 do { u = "libovolný otevřený uzel"; 4 stav[u] = CLOSED; 5 for ( Node v in (u) ) { 6 if ( (stav[v]==FRESH) && (f(u,v)<q(u,v)) ) { 7 stav[v]=OPEN; p[v]=+u; d[v]=min(d[u],q(u,v)-f(u,v)); 8 } } 9 for ( Node v in -1 (u) ) { 10 if (stav[v]==FRESH) && (f(v,u)>0) ) { 11 stav[v]=OPEN; p[v]=-u; d[v]=min(d[u],f(v,u)); 12 } } 11 } while ( ( "neexistuje otevřený uzel" ) || (u == t) ); 12 return (u == t); 13 } NajdiCestu hledá zlepšující cestu prohledáváním sítě d[u] průběžně počítané , stav[u], p[u] (+ pro , - pro ) Algoritmus Forda-Fulkersona
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 10 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 void ZvyšTok (Node s) { 1 x = t; = d[t]; 2 do { v = x; sgn = p[v]; u = abs(sgn); 3 if (sgn>0) f(u,v) += ; 4 else f(v,u) -= ; 5 x = u; 6 } while ( v==s ); } ? Složitost ? NajdiCestu... O(|U|+|H|)ZvyšTok... O(|U|) ? Celý algoritmus ? O(|U|. |H|**2), O(|U|**2. |H|), O(|U|**3) Další zrychlení pro speciální případy (planární sítě) O(|U| 2 )... až na O(|U|. lg|U|) Algoritmus Forda-Fulkersona ts x=vu ++ u -- u ++
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 11 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Příklad 3 z kontrolní otázky s2 t1 t2 s1 s t 9
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 12 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 4/4 8/4 6/ /4 s2 t1 t2 s1 s t Příklad 3 z kontrolní otázky 10.1
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 13 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Příklad 3 z kontrolní otázky /4 8/4 6/ /68/66/6 9/6 10/4 s2 t1 t2 s1 s t
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 14 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 4/4 8/7 6/4 2 5 / / /68/66/6 9/9 10/7 s2 t1 t2 s1 s t Příklad 3 z kontrolní otázky 10.1
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 15 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 4/4 8/8 6/5 2 5 / / /68/66/6 9/9 10/8 s2 t1 t2 s1 s t Příklad 3 z kontrolní otázky 10.1
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 16 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 4/4 8/8 6/5 2 5 / / /68/66/6 9/9 10/8 s2 t1 t2 s1 s t Příklad 3 z kontrolní otázky 10.1
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 17 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 4/4 8/8 6/5 2 5 /5 4 3/1 4 / /68/66/6 9/9 10/8 s2 t1 t2 s1 s t Příklad 3 z kontrolní otázky 10.1
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 18 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 4/4 8/8 6/5 2 5 /5 4 3/3 4 / /3 10/68/86/6 9/9 10/8 s2/ 13 t1/ 8 t2/ 9 s1/ 4 s t q(H s x H t )=17 Příklad 3 z kontrolní otázky 10.1
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 19 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Přípustný tok hranou (u,v) musí splňovat podmínku 0 ≤ r(u,v) ≤ f(u,v) ≤ q(u,v) Metoda řešení: převod na základní úlohu s t r1/q1 r2/q2 r3/q3 r4/q4 r1 r4 r1 r3 r2 q1-r1 q2-r2 q3-r3 q4-r4 r4 r3 s's't't' Sítě s omezeným minimálním tokem
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 20 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 ? Co dál ? Nalezneme maximální tok s' t'. ?Nasycuje nově přidané hrany? ANO – vrátíme se do původní sítě, kde už máme přípustný tok a zlepšujeme jej standardně podél zlepšujících cest (ale nesmí klesnout pod hodnotu omezení ve hranách, kde to je požadováno!!!) NE - úloha nemá řešení Sítě s omezeným minimálním tokem Max flow – min cut teorém platí, pokud upravíme definici kapacity hranového řezu (odečítají se minima toku ve směru t s) q(U s U t ) = q(u,v) - r(x,y), kde (u,v) U s U t, (x,y) U t U s
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 21 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Sítě se zápornými toky: r(u,v)<0 nebo i q(u,v)<0 pro r(u,v) q(u,v) 0 obrátíme orientaci hrany (u,v) na (v,u) a určíme meze 0 -q(v,u) -r(v,u) pro r(u,v) < 0 < q(u,v) přidáme opačně orientovanou hranu (v,u) s kapacitou q(v,u) = -r(u,v), minimum v obou hranách bude 0 Tok v neorientované síti: předp. nulový minimální tok neorientovanou hranu nahradíme dvojicí opačně orientovaných hran se stejnou kapacitou q(u,v) = q(v,u) výsledný tok je rozdílem toků a má směr většího ze dvou Další varianty sítě -3 / -11 / 3-3 /
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 22 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Cirkulace splňuje podmínku (u,v) H f(u,v) - (v,u) H f(v,u) = 0 pro všechny uzly u U (předpokládáme síť s omezením 0 r(u,v) f(u,v) q(u,v) ) Cirkulace v síti Základní otázka – KDY existuje přípustná cirkulace? Právě tehdy, když každý hranový řez má nezápornou kapacitu q(U1 U2) = (u,v) U1 U2 q(u,v) - (x,y) U2 U1 r(x,y) 0, Interpretace: "může odtéct aspoň tolik, kolik musí přitéct" pro konkrétní tok (cirkulaci) je pochopitelně f(u,v) - f(x,y) = 0 u
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 23 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Algoritmus určení přípustné cirkulace Vstup: síť S s omezeními r (minimální tok) a q (kapacita), f je libovolná cirkulace v síti (např. nulová) 1.Najdeme hranu (u,v) s nepřípustným tokem, pokud neexistuje, cirkulace je přípustná - STOP. 2.a) je-li f(u,v) < r(u,v), položíme =r(u,v)-f(u,v) b) hledáme zlepšující cestu C(v u), pokud neexistuje, pak přípustná cirkulace neexistuje - STOP c) zvýšíme cirkulaci kružnicí C (u,v) pro (u,v) uvažujeme kapacitu , pokračujeme krokem 1. 3.a) je-li f(u,v) > q(u,v), položíme =f(u,v)-q(u,v) b) hledáme zlepšující cestu C(u v), pokud neexistuje, pak přípustná cirkulace neexistuje - STOP c) zvýšíme cirkulaci kružnicí C (v,u) pro (v,u) uvažujeme kapacitu , pokračujeme krokem 1. Určení nějaké přípustné cirkulace
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 24 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Hledání přípustné cirkulace - ilustrace Situace podle bodu 2: tok f(u,v) pod dolní mezí r(u,v), f(u,v) < r(u,v) tok hranou (u,v) zvyšujeme o hodnotu =r(u,v)-f(u,v) >0 u v Situace podle bodu 3: tok f(u,v) nad kapacitou q(u,v) f(u,v) > q(u,v) tok hranou (u,v) snižujeme o hodnotu =f(u,v)-q(u,v) > 0 u v orientace zvýšení cirkulace
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 25 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Opět: převodem na základní úlohu Variantní určení přípustné cirkulace 1/5 3/5 4/6 2/6 4/6 2/6 1/4 2/4 (4+2)-(1+3)= 2 > 0 (1+2)-(4+2)= -3 < 0 s t 2 3 Spočteme rozdíly dolních mezí toku vystupující minus vstupující hrany Kladné uzly napojíme na t, do záporných vedeme z s
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 26 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Opět: převodem na základní úlohu Variantní určení přípustné cirkulace 1/5 3/5 4/6 2/6 4/6 2/6 1/4 2/4 s t 2 3 Určíme nové kapacity q’(u,v) = q(u,v)-r(u,v) Opakujeme pro všechny uzly i hrany Nalezneme maximální s t tok
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 27 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Variantní určení přípustné cirkulace 1/5 3/5 4/6 2/6 4/6 2/6 1/4 2/4 s t 2 3 Dostali jsme maximální tok, který saturuje přidané hrany? Nalezneme maximální s t tok
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 28 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Variantní určení přípustné cirkulace 1/5 3/5 4/6 2/6 4/6 2/6 1/4 2/4 s t 2 3 Určíme nový tok přičtením dolní meze toku f’(u,v) = f(u,v)+r(u,v) Provedeme pro všechny hrany Odstraníme s, t a všechny přidané hrany
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 29 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Variantní určení přípustné cirkulace 1/5 3/5 4/6 2/6 4/6 2/6 1/4 2/ Získali jsme přípustnou cirkulaci
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 30 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Nejlevnější cirkulace S – síť s kapacitou q, dolní mezí toku r a jednotkovou cenou toku c: H Z (cena může být i záporná) Cena cirkulace f:C(f) = (u,v) H f(u,v).c(u,v) Zlepšující kružnice – definuje se analogicky jako zlepšující cesta: má jednu ze dvou možných orientací hrany ve směru (vpřed) musí mít rezervu q(u,v) – f(u,v) > 0 hrany proti směru (vzad) musí mít rezervu f(u,v) – r(u,v) > 0 hrana vpřed hrana vzad
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 31 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Nejlevnější cirkulace Cena zlepšující kružnice – je rovna součtu jednotkových cen hran vpřed minus součet jednotkových cen hran vzad. Je-li cena zlepšující kružnice p a změníme-li tok podle ní o hodnotu , pak celková cena cirkulace vzroste o hodnotu .p. Věta Přípustná cirkulace f je nejlevnější cirkulací v síti S právě tehdy, když v síti S neexistuje vzhledem k cirkulaci f žádná zlepšující kružnice se zápornou cenou. Přírůstková síť S f vzhledem k toku f má stejné uzly jako S a hrany H' pro (u,v) H: f(u,v) < q(u,v) je (u,v) H' a má kapacitu q’(u,v) = q(u,v) - f(u,v) pro (u,v) H: f(u,v) > r(u,v) je (v,u) H' a má kapacitu q’(v,u) = f(u,v) - r(u,v) Zlepšující cesta (kružnice) v S = orientovaná cesta (cylus) v S'
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 32 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Algoritmus nalezení nejlevnější cirkulace 1.Nalezneme přípustnou cirkulaci f v síti S, pokud neexistuje, končíme. 2.Sestrojíme přírůstkovou síť S f vzhledem k cirkulaci f. 3.Jednotkové ceny považujeme za délky hran v síti S f a najdeme zde cyklus se zápornou délkou. Pokud neexistuje, f je nejlevnější cirkulace. 4.V síti S sestrojíme zlepšující kružnici odpovídající nalezenému cyklu, provedeme úpravu cirkulace podél této kružnice a pokračujeme krokem 2.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 33 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Aplikace toků - maximální párování Párování v grafu - "nezávislá" podmnožina hran (žádné dvě nemají společný uzel). Perfektní párování pokrývá všechny uzly. Maximální párování pokrývá co nejvíce uzlů. Při ohodnocených hranách můžeme hledat nejlevnější maximální párování. Nejdražší párování má největší součet cen.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 34 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Přiřazovací úloha - určit nejlevnější perfektní párování v úplném bipartitním grafu K n,n. Příklad na maximální párování v neorientovaném bipartitním grafu G s rozkladem uzlů U = X Y X Y původní graf Nalezneme maximální tok pomocí algoritmu Ford-Fulkerson – získáme maximální párování (hrany s nenulovým tokem). s t Úlohy na párování
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 35 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Kontrolní otázky 10.1Určete maximální tok ze zdrojů do spotřebičů v sítích G 1 až G 3. Dvojitě vytažené uzly v síti G 3 mají kapacitu omezenu uvedenou hodnotou.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 36 / 15Doc. Josef Kolář (ČVUT)Toky v sítích IIGRA, LS 2013/14, Lekce / 35 Kontrolní otázky 10.2Předpokládejte, že síť má tvar kořenového stromu, zdroj sítě je umístěn v kořeni s. Navrhněte efektivní algoritmus, který pro každý list u i stromu uvažovaný jako jediný spotřebič určí maximální tok s u i Předpokládejte, že síť má tvar kořenového stromu, zdroj sítě je umístěn v kořeni s. Navrhněte efektivní algoritmus pro určení takových minimálních kapacit jednotlivých hran, které zajistí, že do všech listů {u i } stromu lze současně dopravit maximální tok velikosti 1.