Netwerkstroming Algoritmiek. 2 Vandaag Netwerkstroming: definitie en toepassing Het rest-netwerk Verbeterende paden Ford-Fulkerson algoritme Minimum Snede.

Slides:



Advertisements
Verwante presentaties
H3 Tweedegraads Verbanden
Advertisements

Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Gelijkmatige toename en afname
havo B Samenvatting Hoofdstuk 6
H1 Basis Rekenvaardigheden
Een manier om problemen aan te pakken
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Fibonacci & Friends Met dank aan Gerard Tel.
1 Datastructuren Heapsort College 4. 2 Vandaag  Kort: ADT vs Datastructuur  Heaps en Heapsort  Tijd over: ondergrenzen voor sorteren; nog sneller sorteren.
1 Datastructuren Zoekbomen II Invoegen en weglaten.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II) College 6.
Dijkstra Kortste pad algoritme.
vwo A Samenvatting Hoofdstuk 12
Differentieer regels De afgeleide van een functie f is volgens de limietdefinitie: Meestal bepaal je de afgeleide niet met deze limietdefinitie, maar.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Assenstelsels en het plotten van Functies in LOGO
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
1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.
1 Optuigen van datastructuren 2 Dynamische order statistics (2)
Optuigen van datastructuren
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
WIS21.
Vwo C Samenvatting Hoofdstuk 15. Formules en de GR Met de GR kun je bijzonderheden van formules te weten komen. Eerst plot je de grafiek. Gebruik eventueel.
Massa’s en massaverhoudingen bij een chemische reactie
Klik ergens op het witte deel van deze pagina om verder te gaan
Optuigen van datastructuren Datastructuren Onderwerp 11.
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
T U Delft Groep Parallelle en Gedistribueerde Systemen PGS College in345 Deel 2 Cees Witteveen Parallelle en Gedistribueerde Systemen Faculteit Informatie.
H4 Differentiëren.
Hoofdstuk 9 havo KWADRATEN EN LETTERS
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 6 Cees Witteveen.
Gecijferdheid les 1.4 Grootst gemene deler Kleinst gemene veelvoud
Grafentheorie Graaf Verzameling knopen al dan niet verbonden door takken, bijv:
Recursie…. De Mandelbrot Fractal De werking… De verzameling natuurlijke getallen… 0 ∞-∞
Significante cijfers Wetenschappelijke notatie a • 10b
Tekstbronnen Wat moet je er mee?. Lees de vraag Welke informatie heb je nodig? Weet je al iets over dit onderwerp? Over welke tijd gaat het? Over welk.
Reactievergelijkingen Een kwestie van links en rechts kijken.
Een werkvorm om actief en concreet tot participatie te komen
Inhoud Breuken (optellen, aftrekken, vermenigvuldigen en delen).
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.
Les 1. Wat voor les krijgen we nu? Tijdens de lessen over hoofdstuk 9, 10 en 11 krijg je op een andere manier les. Het doel is om je zelfstandigheid te.
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 –…
Significante cijfers Wetenschappelijke notatie
Gerandomiseerde algoritmes
Kortste Paden Algoritmiek.
Doorzoeken van grafen Algoritmiek.
Netwerkstroming Algoritmiek.
NP-volledigheid Algoritmiek.
All-Pairs Shortest paths
Datastructuren voor graafrepresentatie
Minimum Opspannende Bomen
Hoofdstuk 9 M&O + in groepjes Havo3 iPad.
Modelleren en Programmeren voor KI Practicumopdracht 4: SAT Solver
Significante cijfers © Johan Driesse © 2013 – Johan Driesse.
3 vmbo-KGT Samenvatting Hoofdstuk 10
Gehele getallen optellen en aftrekken
Tellen met kaarten.
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.
Transcript van de presentatie:

Netwerkstroming Algoritmiek

2 Vandaag Netwerkstroming: definitie en toepassing Het rest-netwerk Verbeterende paden Ford-Fulkerson algoritme Minimum Snede Maximum Stroming Stelling Variant: Edmonds-Karp Toepassing: koppelingen in bipartite grafen

Algoritmiek3 Netwerkstroming Modelleert transport van goederen over bijv. een wegennetwerk Toepassingen in –Logistiek –Subroutine in algoritmen –…

Algoritmiek4 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). s t a dc b

Algoritmiek5 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.)

Opmerking We volgen de notatie van het boek In de literatuur wordt vaak met alleen niet- negatieve waardes van stroming gerekend (en dus in plaats van f(v,u) = - f(u,v) is een van de waardes f(v,u) en f(u,v) gelijk aan 0; de regel van behoud van stroming verandert.) Dit maakt voor de principes achter stroming niets uit; het is een kwestie van notatie Algoritmiek6

7 Voorbeeld s t a dc b s t a dc b Stromingsfunctie Alleen positieve waardes zijn getoond Capaciteiten: Bijv.: f (b,a) = – 2

Algoritmiek8 Maximum stroming Waarde van stroming: Probleem dat we bekijken: –Gegeven: stromingsnetwerk –Gevraagd: vind een stroming met zo groot mogelijke waarde s t a dc b Waarde: 3 Geen maximum stroming Waarde: 3 Geen maximum stroming s t a dc b

Algoritmiek9 Opmerkingen `Negatieve’ stromingen: notationele truc (CLRS) Je kan weglaten: alle knopen –Die geen pad vanuit s hebben –Die geen pad naar t hebben Als (v,w)  A en (w,v)  A dan f(v,w) = 0. Voor elke w, behalve s, t: Ook:

Algoritmiek10 Ford-Fulkerson methode Ford-Fulkerson (1962) vonden een methode om een maximum stroming in een stromingsnetwerk te berekenen. Later veel verbeteringen en snellere methoden gevonden. Idee: –Begin met een stroming die overal 0 is. –Stapsgewijs wordt de stroming verbeterd met behulp van het rest-netwerk en verbeterende paden. –Bewijs vertelt dat als zo’n verbetering niet meer mogelijk is, dan is de stroming een maximum stroming.

Algoritmiek11 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!

Algoritmiek12 Helpt, maar niet genoeg om altijd een maximum stroming te vinden s t a dc b Hier wel: s t a d Hier niet:

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

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

Algoritmiek15 Een lemma en een opmerking Stel f is een stroming in G, en g is een stroming in het restnetwerk G f. 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 G f hebben maken we een stroming in G f. –Een pad van s naar t in G f heet een verbeterend pad.

Algoritmiek16 Ford-Fulkerson Begin met een stroming f zodat voor alle v, w: f (v,w) = 0. repeat Maak het rest-netwerk G f. Vind een pad p in G f van s naar t. Bereken x = min { c f (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 G f ) Output f.

Algoritmiek17 Over Ford-Fulkerson algoritme FF vindt een stroming in G. FF gebruikt soort greedy aanpak. –Verbeteringen over verbeterend pad: steeds of stroom toevoegen, of stroom weghalen in tegengestelde richting. Geeft FF ook een maximum stroming? Ja, maar er is wel een interessant bewijs voor nodig. In gedegenereerde gevallen gebruikt FF veel (exponentiele) tijd.

Algoritmiek18 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. De capaciteit van een snede (S,T) is De stroming over een snede (S,T) is

Algoritmiek19 Over sneden en stromingen Voor elke s-t-snede (S,T): –f(S,T)  c(S,T) –f(S,T) = | f | Eenvoudig uit definities te bewijzen Eenvoudig uit definities te bewijzen

Algoritmiek20 Maximum stroming minimum snede stelling De volgende uitspraken zijn equivalent 1.f is een maximum stroming in G. 2.Het restnetwerk G f bevat geen verbeterende paden (paden van s naar t). 3.| f | = c(S,T) voor een s-t-snede (S,T) in G. Bewijs 1  2. Als G f 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 |.

Algoritmiek21 Slot bewijs MSMS-stelling 2  3: Stel G f bevat geen verbeterend pad. Schrijf S = { v | er is een pad van s naar v in G f }, en T = N – S. (S,T) is een snede. (t  T anders is er een verbeterend pad.) Voor elke 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). s v w S

Over de maximum-stroming minimum-snede-stelling Bewijst correctheid van Ford-Fulkerson-algoritme Verkeersopstoppingen en oorlogshandelingen: bruggen over rivieren (en tunnels) Algoritmiek22

Algoritmiek23 Edmonds-Karp Probleem van FF: geen grens op looptijd. Edmonds-Karp: kortste verbeterende pad. Begin met een stroming f zodat voor alle v, w: f (v,w) = 0. repeat Maak het rest-netwerk G f. Vind het kortste pad p in G f van s naar t. (Met BFS.) Bereken x = min { c f (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 G f ) Output f. Gebruikt O(na 2 ) tijd. Zonder bewijs hier. Gebruikt O(na 2 ) tijd. Zonder bewijs hier.

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

Algoritmiek25 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.

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 Algoritmiek26

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 s 2 naar t 1 in nieuwe graaf –Er is altijd een optimale oplossing die alleen de ‘nieuwe’ kanten weglaat -> neem de bijbehorende knopen Algoritmiek27 v v1v1 v2v2

Algoritmiek28 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

Algoritmiek29 Bipartite grafen Bipartite graaf –G = (N  M, F) –Elke kant heeft een eindpunt in N en een eindpunt in M. ( F  N x M )

Veel toepassingen van bipartite grafen Relatie tussen twee verschillende soorten objecten: –Personen of machines en taken –Zalen en lessen –… Algoritmiek30

Algoritmiek31 Koppeling 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 koppeling, niet maximaal, niet maximum

Algoritmiek32 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 Traditioneel: het huwelijksprobleem

Algoritmiek33 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. st

Algoritmiek34 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

Algoritmiek35 Equivalent Stel G=(N  M, F) is een bipartite graaf, en H=(N  M  {s,t}) is het bijbehorende stromingsnetwerk. De volgende beweringen zijn equivalent 1.G heeft een koppeling met x kanten. 2.H heeft een s-t-stroming met waarde x. 3.H heeft een integer s-t-stroming met waarde x. 2  3: zagen we net.

Algoritmiek36 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. st

Algoritmiek37 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.

Algoritmiek38 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. st

Algoritmiek39 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.

Algoritmiek40 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.

Algoritmiek41 Tijd Schrijf n = |N|+|M|. Ieder verbeterend pad zal altijd de stromingswaarde met precies 1 ophogen. Een koppeling heeft hooguit min(|N|,|M|) < n kanten, dus is de maximum stromingswaarde kleiner dan n. Er worden dus minder dan n verbeterende paden gebruikt door Ford-Fulkerson: n iteraties van hoofdloop. Iedere iteratie kost O(n+a) tijd (vinden van pad in graaf, maken van verbeterende netwerk.) Totale tijd is O(n (n+a)) = O(na).

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 Algoritmiek42

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

Afronden bij matrices Toepassing: afronding Lijkt op opgave 5 van practicum… Gegeven: 2 dimensionale matrix A met reals Gevraagd: rond alle getallen omhoog of omlaag af naar een integer zodat we een matrix B krijgen met –De som van elke rij in B is een de juiste afronding is van de som van die rij in A –De som van elke kolom in B is de juiste afronding van de som van die kolom in A Dus: afronding in B mag ook “niet juist zijn” (dus: 1.35 mag naar 2 en naar 1), maar voor de rijen en kolommen moet het wel juist zijn (daar dus: 1.35 altijd naar 1) Algoritmiek44

Voorbeeld Algoritmiek

Oplossing: eerste en laatste stap Verander input naar getallen tussen 0 en 1: –Neem van iedere waarde alleen deel achter de komma (of punt) –Dus: wordt 0.45 Kolomsommen en rijsommen veranderen mee Los probleem nu op Vertaal terug naar oorspronkelijke probleem door bij elk getal oorspronkelijke waarde voor de komma weer op te tellen Algoritmiek46

Voorbeeld Algoritmiek ?? ?? ?? ??

Voorbeeld Algoritmiek ?? ??

Voorbeeld Algoritmiek Deel achter komma nemen Deel voor komma optellen

Afrondingsprobleem oplossen met stroming Afrondingsprobleem na modificatie is generaliseerde koppeling in vermomming… Neem een bipartite graaf met: –Voor elke rij een knoop met capaciteit gewenste som –Voor elke kolom een knoop met capaciteit gewenste som –Tussen elke rij-knoop en kolom-knoop een kant met capaciteit 1 Algoritmiek50

Voorbeeld Algoritmiek51 rijenkolommen c=2 c= ?? ?? s t

Voorbeeld Algoritmiek52 rijenkolommen c=2 c=

Wrap-up algoritme Stap 1: trek deel voor de komma af Stap 2: maak bipartite graaf met generaliseerde koppelingsprobleem Stap 3: los generaliseerde koppelingsprobleem op met stromingsalgoritme Stap 4: vertaal antwoord van koppelingsprobleem naar afrondingen in matrix (1 betekent: omhoog; 0: omlaag) Algoritmiek53

Variaties van afrondingen Practicumopgave 5: onnauwkeurigheden: principe blijft hetzelfde – werk de details zelf uit, en stel evt. wat vragen op het werkcollege… Wat lastiger: als je ook naar beneden mag afronden (kan ook met stroming, met gebruik van ondergrenzen) Algoritmiek54

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