Netwerkstroming Algoritmiek.

Slides:



Advertisements
Verwante presentaties
Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Advertisements

Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.
toolbox deco-procedure
Vervolgbijeenkomst 2 Procesfasering bij Leren Leren.
Een manier om problemen aan te pakken
Datastructuren Analyse van Algoritmen en O
Graph Begrippen: knoop, vertices kant, zijde, edge
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Fibonacci & Friends Met dank aan Gerard Tel.
NP-volledigheid Algoritmiek © Hans Bodlaender, Oktober 2002.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II) College 6.
Dijkstra Kortste pad algoritme.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Leiderverkiezing Olympus College 14 april 2008 David N. Jansen.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 5 Cees Witteveen.
TU Delft Groep Parallelle en Gedistribueerde Systemen Voorbeeld uitwerking reductie bewijs in3120 Cees Witteveen.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 Oplossing Langste Pad Probleem Cees Witteveen
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica In3005 Deel 2 College 3 Cees Witteveen
1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.
Optuigen van datastructuren
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
WIS21.
Netwerken / Internet ICT Infrastructuren David N. Jansen.
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 3 Cees Witteveen.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 2 Cees Witteveen.
H4 Differentiëren.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 6 Cees Witteveen.
Golf Basisbegrippen & Uitleg
Grafentheorie Graaf Verzameling knopen al dan niet verbonden door takken, bijv:
Recursie…. De Mandelbrot Fractal De werking… De verzameling natuurlijke getallen… 0 ∞-∞
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
Doorzoeken van grafen Algoritmiek. Algoritmiek: Divide & Conquer2 Vandaag Methoden om door grafen te wandelen –Depth First Search –Breadth First Search.
Kortste Paden Algoritmiek. 2 Vandaag Kortste Paden probleem All pairs / Single Source / Single Target versies DP algoritme voor All Pairs probleem (Floyd’s.
Netwerkstroming Algoritmiek. 2 Vandaag Netwerkstroming: definitie en toepassing Het rest-netwerk Verbeterende paden Ford-Fulkerson algoritme Minimum Snede.
Heuristieken en benaderingsalgoritmen Algoritmiek.
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Datastructuren voor grafen Algoritmiek. 2 Grafen Model van o.a.: –Wegennetwerk –Elektrische schakeling –Structuur van een programma –Computernetwerk –…
Gerandomiseerde algoritmes
Kortste Paden Algoritmiek.
Doorzoeken van grafen Algoritmiek.
De vraag is je beste vriend
HERZIENING INFORMATICA DEEL 1.
Reken je (niet) rijk.
NP-volledigheid Algoritmiek.
Lesbrief Vervoer H2.
All-Pairs Shortest paths
Datastructuren voor graafrepresentatie
Minimum Opspannende Bomen
Benaderingsalgoritmen
Hoofdstuk 9 M&O + in groepjes Havo3 iPad.
Modelleren en Programmeren voor KI Practicumopdracht 4: SAT Solver
havo A Samenvatting Hoofdstuk 10
Bewerkingen 5de leerjaar.
Big Data.
Modderdorp UNPLUGGED Bron: csunplugged.org.
Modderdorp Bron: csunplugged.org.
Big Data.
Modderdorp Bron: csunplugged.org.
Slim tellen.
3 vmbo-KGT Samenvatting Hoofdstuk 10
Modderdorp UNPLUGGED Bron: csunplugged.org.
Kiezen met Kaarten.
Tellen met kaarten.
Slim tellen.
Tellen met kaarten.
Doolhof. doolhof doolhof Maak een routine die de ‘hekken’ tussen de cellen weghaalt Maak een 2-dimensionale array met kolommen en rijen aangeklikt.
GGD en KGV.
Vermenigvuldigen en delen. Toepassen.
Transcript van de presentatie:

Netwerkstroming Algoritmiek

Netwerkstroming Toepassingen in Logistiek Video-streaming Subroutine in algoritmen … Algoritmiek

Vandaag Netwerkstroming: wat was dat ook alweer? Minimum Snede Maximum Stroming Stelling Variant: Edmonds-Karp Toepassing: koppelingen Algoritmiek

Een stromingsnetwerk Een stromingsnetwerk bestaat uit Een gerichte graaf G=(N,A) Voor elke pijl (v,w) Î A een capaciteit c(v,w) ³ 0. Twee speciale knopen: bron s (source) en put t (sink). 2 Vraag naar anti-parallele pijlen 3 a b 4 1 2 s 3 2 t 2 2 d c 4 Algoritmiek

Meerdere bronnen/putten Introduceer superbron en superput Capaciteiten van arcs hangt af van toepassing Alleen als de goederen hetzelfde zijn! 3 a b 4 1 2 3 2 2 2 d c 4 t s 3 a b 4 1 2 3 2 2 2 d c 4 Algoritmiek

Stroming Schrijf als (v,w) Ï A: c(v,w) = 0. Een stroming (van s naar t) is een functie f: V x V ® R, zodat Voor alle v,w in N: f (v,w) £ c(v,w). (Capaciteitseis). Voor alle v,w in N: f (v,w) = – f (w,v). (Scheve symmetrie.) Voor elke knoop v in N – {s,t}: (Behoud van stroming.) LET OP: derde editie en later van Cormen heeft geen scheve symmetrie. Alles werkt hetzelfde, maar formules veel ingewikkelder. Algoritmiek

Maximum stroming Waarde van stroming: Probleem dat we bekijken: Gegeven: stromingsnetwerk Gevraagd: vind een stroming met zo groot mogelijke waarde Algoritmiek

Ford-Fulkerson methode Begin met een stroming die overal 0 is. Stapsgewijs wordt de stroming verbeterd met behulp van het rest-netwerk en verbeterende paden. Intuïtie: als er een pad van s naar t is met pijlen waarvan de capaciteit nog niet volledig benut is, dan kunnen we de stroming verhogen via dit pad MAAR: dit is niet altijd genoeg Soms moeten we oude stromen her-routeren: verminder stroming in tegenovergestelde richting Algoritmiek

Een verbeterend pad: simpeler versie Stel, we hebben een stromingsnetwerk G=(N,A), met capaciteiten c, en een stroming f van s naar t. Stel, er is een pad van s naar t in G met voor elke pijl (v,w) op het pad: f (v,w) < c(v,w). Dan kunnen we de stroming verbeteren met behulp van dit pad. Bereken x= min {c(v,w) – f(v,w) | (v,w) op pad}. Voor elke pijl (v,w) op pad, zet f’(v,w) = f (v,w)+x, en zet f’(w,v) = f (w,v) – x. Voor elk ander paar knopen v, w, zet f’(v,w) = f (v,w). Dit is weer een stroming, en de waarde is x>0 hoger geworden! Algoritmiek

Helpt, maar niet genoeg om altijd een maximum stroming te vinden 2 1 a b 1 Hier wel: 2 s 3 2 t 2 2 d c 1 1 a 2 Hier niet: 2 t s 2 d 2 Algoritmiek

Verbeteren door in tegenovergestelde richting te verminderen 1 a 0/1 a 2/2 2 2 t 2/2 t s s 2 0/2 2 d 2/2 d a 1/1 a 2/2 a 1/2 1/2 2/2 t s 1/2 d 2/2 d d Algoritmiek

Rest-netwerk Stel f is een stroming in netwerk G=(N,A) met capaciteiten c. Definieer het rest-netwerk (residual network) Gf: Voor elke pijl (v,w) in A: Als f (v,w) < c(v,w), dan is (v,w) een pijl in Gf. Als f (v,w) > 0, dan is (w,v) een pijl in Gf. Voor elk paar knopen v, w: cf(v,w) = c(v,w) – f (v,w) Rest-netwerk laat mogelijke verbeteringen zien. Er is een pijl, d.e.s.d. als restcapaciteit cf positief. Algoritmiek

Een lemma en een opmerking Stel f is een stroming in G, en g is een stroming in het restnetwerk Gf. Dan is f +g een stroming in G met waarde |f|+|g|. Volgt snel uit definitie. Als we een pad van s naar t in Gf hebben maken we een stroming in Gf. Een pad van s naar t in Gf heet een verbeterend pad. Algoritmiek

Ford-Fulkerson Begin met een stroming f zodat voor alle v, w: f (v,w) = 0. repeat Maak het rest-netwerk Gf. Vind een pad p in Gf van s naar t. Bereken x = min { cf(v,w) | (v,w) op p}. for all (v,w) op p do f(v,w) = f(v,w) + x; f(w,v) = – f(v,w); until (er is geen pad van s naar t in Gf) Output f. Algoritmiek

Over Ford-Fulkerson algoritme FF gebruikt soort greedy aanpak. Geeft FF ook een maximum stroming? Ja, maar er is wel een interessant bewijs voor nodig. Algoritmiek

Sneden Een s-t-snede in een netwerk G=(N,A) is een partitie van de knopen in twee verzamelingen S en T, zodat S È T = N S Ç T = Æ s Î S; t Î T Haal je pijlen tussen S en T weg, dan zijn s en t niet meer verbonden Algoritmiek

Sneden Een s-t-snede (S,T) met S È T = N S Ç T = Æ s Î S; t Î T. De capaciteit van een snede (S,T) is De stroming over een snede (S,T) is Algoritmiek

Voorbeeld S 2/2 1/3 a b 1/4 1/2 s 1/3 0/2 t 1/2 1/2 d c 1/4 Algoritmiek

Over sneden en stromingen Voor elke s-t-snede (S,T): f(S,T) £ c(S,T) f(S,T) = | f | Dus |f| £ c(S,T) Volgt uit de definities Algoritmiek

Maximum stroming minimum snede stelling De volgende uitspraken zijn equivalent f is een maximum stroming in G. Het restnetwerk Gf bevat geen verbeterende paden (paden van s naar t). | f | = c(S,T) voor een s-t-snede (S,T) in G. Bewijs 1 ® 2. Als Gf wel een verbeterend pad bevat, dan kunnen we een stroming met hogere waarde maken: f is dan niet maximum. 3 ® 1. We zagen net: | f | £ c(S,T) voor elke s-t-snede (S,T). Als | f | = c(S,T) dan bestaat er dus geen stroming met een hogere waarde dan | f |. Algoritmiek

Slot bewijs MSMS-stelling 2 ® 3: Stel Gf bevat geen verbeterend pad. Schrijf S = { v | er is een pad van s naar v in Gf }, en T = N – S. (S,T) is een snede. (t Î T anders is er een verbeterend pad.) Voor elk paar knopen v Î S, w Î T: f(v,w) = c(v,w) want anders zit w ook in S. Dus is | f | = f (S,T) = c(S,T). w LET OP SCHEVE SYMMETRIE v s S Algoritmiek

Over de maximum-stroming minimum-snede-stelling Bewijst correctheid van Ford-Fulkerson algoritme Looptijd: hebben we het later nog over Algoritmiek

Vinden van sneden Stromingsalgoritmen kunnen ook gebruikt worden voor het vinden van sneden. Toepassing o.a. voor bepalen van betrouwbaarheid van netwerken. Algoritme komt uit bewijs… Algoritmiek

Vinden van minimum snede Gegeven: gerichte graaf G=(N,A), knopen s, t. Gevraagd: wat is het minimum aantal pijlen dat we uit G moeten halen zodat er geen pad meer is van s naar t? Geef alle pijlen capaciteit 1. Vind maximum stroming, bijv. met FF. Bepaal S: alle knopen bereikbaar uit s. Neem alle pijlen tussen S en N – S. Algoritmiek

Weglaten van knopen Gegeven: gerichte graaf G=(N,A), knopen s, t. Gevraagd: wat is het minimum aantal knopen dat we uit G moeten halen zodat er geen pad meer is van s naar t (we mogen s en t niet weglaten)? … oftewel: verzameling W van minimum formaat, zodat W deelverzameling van N-{s,t} en elk pad van s naar t een knoop in W gebruikt Algoritmiek

Oplossing: vertaal probleem naar vraag over pijlen Vervang elke knoop als in plaatje: Minimum knoop-separator van s naar t in oorspronkelijke graaf correspondeert met minimum snede van s2 naar t1 in nieuwe graaf Er is altijd een optimale oplossing die alleen de ‘nieuwe’ kanten weglaat -> neem de bijbehorende knopen v v1 v2 Algoritmiek

Ongerichte grafen Gegeven: ongerichte graaf G=(N,A), knopen s, t. Gevraagd: wat is het minimum aantal kanten dat we uit G moeten halen zodat er geen pad meer is van s naar t? Vervang elke kant door twee pijlen en gebruik algoritme voor gerichte grafen Knoop-samenhang van ongerichte grafen: combineer de stappen Algoritmiek

Een verbetering: Edmonds-Karp Probleem van FF: geen grens op looptijd (in het algemeen). Edmonds-Karp: gebruik kortste verbeterende pad. Begin met een stroming f zodat voor alle v, w: f (v,w) = 0. repeat Maak het rest-netwerk Gf. Vind het kortste pad p in Gf van s naar t. (Met BFS.) Bereken x = min { cf(v,w) | (v,w) op p}. for all (v,w) op p do f(v,w) = f(v,w) + x; f(w,v) = – f(v,w); until (er is geen pad van s naar t in Gf) Output f. Gebruikt O(na2) tijd. Zonder bewijs hier. Algoritmiek

Variant Stel: stroming over pijl kost geld Maximum stroming met minimum kosten Kan ook in polynomiale tijd Gebruikt weer verbeterende paden, maar in een ander rest-netwerk Vak: Algoritmen en netwerken Algoritmiek

Koppelingen en toewijzingen Algoritmiek

Toewijzingen en koppelingen Welke fabriek levert aan welke klant? Welke colleges volg je deze periode? Orgaandonatie Feestje! Maar wie danst met wie? Hoe modelleer je dit d.m.v. een graaf? Algoritmiek

Model: bipartite grafen Bipartite graaf G = (N È M, F) Elke kant heeft een eindpunt in N en een eindpunt in M. ( F Í N x M ) Algoritmiek

Koppeling koppeling, niet maximaal, niet maximum Koppeling: Verzameling kanten die geen eindpunt gemeenschappelijk hebben. Koppeling F is een maximum koppeling als er geen koppeling met meer kanten bestaat. Koppeling F is een maximale koppeling als er geen kant e Ï F bestaat met F È {e} ook een koppeling. maximum maximaal, niet maximum Algoritmiek

Maximum bipartite koppeling probleem Gegeven: bipartite graaf G. Gevraagd: zoek een maximum koppeling in G. Toepassingen o.a.: Roostering Taak toewijzen bij Personen in bedrijf Machines Orgaandonatie Traditioneel: het huwelijksprobleem Algoritmiek

Oplossingsmethode Modelleer als stromingsprobleem. Neem twee extra knopen, s en t, met pijlen (s,v) voor elke v Î N, en (w,t) voor elke w in M, en richt alle kanten in F van N naar M. Geef alle kanten capaciteit 1. Gebruik Ford-Fulkerson (of iets anders) s t Algoritmiek

Stroming en koppeling 1 Als we een koppeling hebben: Stuur 1 stroom van s naar elk beginpunt van een kant in koppeling Stuur 1 stroom over elke kant in de koppeling Stuur 1 stroom van elk eindpunt van kant in koppeling naar t. Alle andere pijlen krijgen 0 stroom. 1 1 1 1 1 s 1 t 1 1 1 Algoritmiek

Correctheid 1 Dit is een stroming. De waarde van de stroming is die over de snede ({s} È N, M È {t}): precies gelijk aan het aantal kanten in de koppeling. Of: Als we x kanten in koppeling, dan zijn er x knopen in N beginpunt van kant in koppeling, dus gaat er x stroom uit s. Algoritmiek

Stroming en koppeling 2 Als we een integer stroming hebben: Over elke pijl gaat 0 of 1 stroom, want capaciteiten allemaal 1. Neem kant in koppeling als 1 stroom over corresponderende pijl. 1 1 1 1 1 s 1 t 1 1 1 Algoritmiek

Correctheid 2 Laat K de gevonden verzameling kanten zijn. K is een koppeling: Elke knoop in N krijgt hooguit 1 stroom binnen uit s. Dus er gaat ook hooguit 1 stroom uit Dus, knopen in N zijn eindpunt van hooguit 1 kant in K. Net zo voor de knopen in M. (Gebruik t.) Als de stroming waarde x heeft, dan: Is de stroming over de snede ({s} È N, M È {t}) x. Zijn er x pijlen van N naar M met 1 stroom. Zitten er x kanten in K. Algoritmiek

Integer stroming Waarom krijgen we hier een integer stroming? Als alle capaciteiten gehele getallen zijn, dan Is er een maximum stroming waarbij alle stromingswaarden gehele getallen zijn Wordt zo’n maximum stroming door Ford-Fulkerson (en de meeste andere algoritmen voor het stromingsprobleem) gevonden Algoritmiek

FF vindt integer stroming? De rest-capaciteit van een pijl in het rest-netwerk is c(v,w)-f(v,w) Als alle capaciteiten gehele getallen zijn, en stroming is integer, dan zijn de rest-capaciteiten integer In het bijzonder de rest-capaciteit van het verbeterende pad De nieuwe stroming is dan ook weer integer De kleinste rest-capaciteit op het pad bepaalt hoeveel de stroming toeneemt Algoritmiek

Looptijd Ford-Fulkerson Als alle capaciteiten gehele getallen zijn, dan neemt de stroming in iedere iteratie van FF met een integer toe (tenminste 1) Dus hoogstens F iteraties (waarbij F de waarde van de maximum stroming is), of Hoogstens de capaciteit van de kleinste snede Of hoogstens de capaciteit van de uitgaande pijlen van s (ingaande pijlen van t) Looptijd: O(F (n+a)) Algoritmiek

Looptijd koppeling Schrijf n = |N|+|M|. Aantal uitgaande pijlen van s of ingaande pijlen van t: min(|N|,|M|) < n kanten, dus is de maximum stromingswaarde kleiner dan n. Totale tijd is O(n (n+a)) = O(na). Merk op: FF is sneller hier dan Edmonds-Karp Algoritmiek

Algoritme voor maximum bipartite koppeling Bouw stromingsnetwerk. Vind maximum stroming van s naar t met stromingsalgoritme dat integer stroming oplevert; bijvoorbeeld Ford-Fulkerson. Vertaal stroming terug naar koppeling. Algoritmiek

Belangrijk bij gebruik stroming Bewijs dat stroming idd je probleem oplost Koppeling geeft maximum stroming Maximum stroming geeft koppeling Analyseer je looptijd precies! Ook bij rationele capaciteiten heeft FF nog steeds “beperkt” aantal iteraties Vermenigvuldig met kleinste noemer om integers te krijgen Bij irrationele capaciteiten: willekeurig lang Algoritmiek

Variaties (1) Gegeneraliseerde koppeling: Gegeven: bipartite graaf G=(N È M, F) met voor elke knoop v in N È M een capaciteit c(v) in N Gevraagd: de grootste verzameling kanten F’ Í F zodat iedere knoop v in N È M van maximaal c(v) kanten in F’ eindpunt is Voorbeeld toepassing: N zijn personen die c(v) taken kunnen uitvoeren. M zijn taken met c(w)=1 Algoritmiek

Oplossen van gegeneraliseerde koppeling Verander bipartite graaf in stromingsnetwerk met handig/juist kiezen van capaciteiten van kanten 1 v c(v) w c(w) s t Algoritmiek

Koppelingen in algemene grafen Vertaling naar stroming werkt niet meer! Wel oplosbaar in polynomiale tijd Idee is vergelijkbaar: verbeterend pad Vak: Algoritmen en netwerken Algoritmiek

Stabiele koppelingen Huwelijksprobleem: hoe ga je om met voorkeuren? Stabiele koppeling: bij partner-wissel is er iemand slechter af, dus partners willen niet wisselen Belangrijke toepassing: load balancing, studievoorkeuren Algoritme van Gale-Shapley: Nobelprijs 2012 Algoritmiek

Fabriekslocaties Zo min mogelijk fabrieken openen zodat je iedere klant kan bedienen? Generaliseert gegeneraliseerde koppelingen Geen polynomiaal-tijd algoritme bekend Bestaat mogelijk ook niet Wel veel benaderingsalgoritmen Beide vraagstukken komen later in dit vak terug Algoritmiek

Samenvatting Algoritmen voor stroming in netwerken Ford-Fulkerson, verbetering Edmonds-Karp Toepassing in allerlei koppelingsvragen door modellering als netwerkprobleem Algoritmiek