Vann i rør Ford Fulkerson method



Like dokumenter
Go with the. Niende forelesning. Mye matematikk i boka her ikke så komplisert, men mye å holde styr på.

Online datingtjeneste The Hungarian Algorithm

MAT1140: Kort sammendrag av grafteorien

Øvingsforelesning 12 Maks flyt

Tall og algebra Matematikk Side 1 av 6

Kanter, kanter, mange mangekanter

Korteste vei i en vektet graf uten negative kanter

Tallinjen FRA A TIL Å

vet vi hvilke fartsgrenser som gjelder der vi er???

Posisjonsystemet FRA A TIL Å

Gangemesteren Nybegynner Scratch PDF

Spøkelsesjakten. Introduksjon

LØSNINGSFORSLAG SIF5015 DISKRET MATEMATIKK Onsdag 18. desember 2002

Kristen homofil Av Ole Johannes Ferkingstad

oppgaver fra abels hjørne i dagbladet

Løsningsforslag for utvalgte oppgaver fra kapittel 9


TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Lage en ny spillverden

Algdat - Øvingsforelesning. Maks flyt

Introduksjon til friskhjulet

Bygge et hus. Steg 1: Vegger. Sjekkliste. Introduksjon

: subs x = 2, f n x end do

Steg for steg. Sånn tar du backup av Macen din

Hva er en algoritme? Har allerede sett på mange algoritmer til nå i IT1101. Forholdet mellom en algoritme og et program. Algoritme program prosess

Oppgaver til julekalenderen 2005 for mellomtrinnet; trinn

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

Øvingsforelesning 9. Flytnettverk, maksimum flyt og maksimum bipartitt matching. Jon Marius Venstad

Diagnosekart for oblig 2, INF3/4130 h07

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Freestanding Monteringsanvisninger. Tips for å komme i gang

Eneboerspillet del 2. Håvard Johnsbråten, januar 2014

Det er frivillig å delta i spørreundersøkelsen, ingen skal vite hvem som svarer hva, og derfor skal du ikke skrive navnet ditt på skjemaet.

Redd verden. Steg 1: Legg til Ronny og søppelet. Sjekkliste. Introduksjon

Ordenes makt. Første kapittel

Matematisk julekalender for trinn, fasit

Kort norsk manual Hvordan komme i gang:

Telle i kor steg på 120 frå 120

INF1000 Metoder. Marit Nybakken 16. februar 2004

LP. Leksjon 9: Kapittel 13: Nettverk strøm problemer, forts.2

ADDISJON FRA A TIL Å

Tilvenning i Blåveiskroken barnehage.

Løsningsforslag julekalender, trinn

3. Introduksjon til prosjektet Hringr. Scratch fra scratch Enkel programmering for nybegynnere

Innkjøpsbudsjett (BA10)

The agency for brain development

Standard salgsbetingelser for forbrukerkjøp av varer over Internett

Legg merke til at summen av sannsynlighetene for den gunstige hendelsen og sannsynligheten for en ikke gunstig hendelse, er lik 1.

Teoriøving 7 + litt om Ford-Fulkerson. Magnus Lie Hetland

Løsningsforslag Øving 5 TMA4140 Diskret matematikk Høsten 2010

LØSNINGSFORSLAG, KAPITTEL 2

Avanserte flytalgoritmer

1. I denne tekstboksen kan du søke etter venner, grupper eller sider.

Hvordan løse Rubiks kube. Mari Røysheim

Du har sikkert allerede startet noen programmer ved å trykke på kontrollknappen. VINDUER = WINDOWS

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

Krefter, Newtons lover, dreiemoment

OPPSETT FASITEN. Feltagenter. Spionmestere

Løsningsforslag - Korteste vei

Matematikk Øvingsoppgaver i numerikk leksjon 3. Løsningsforslag

Go with the. Niende forelesning. Mye matematikk i boka her ikke så komplisert, men mye å holde styr på.

TMA4140 Diskret Matematikk Høst 2016

Skilpadder hele veien ned

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Korteste vei problemet (seksjon 15.3)

THE BREAK-UP. Jonas sitter og spiller Playstation, Caroline står og ser på han. CAROLINE: Jeg tenkte å ta oppvasken. JONAS:

Skattekister. Frisenfeldt Spesialist på klassiske førskole-leker. Midt I din flotte gågate I Moss. Lekehuset

oppgaver fra abels hjørne i dagbladet

Støvsuger 1600 watt. Bruksanvisning

Øgrim Bakken Pettersen Skrindo Thorstensen Thorstensen. Digitalt verktøy for Sigma 1P TI-84

1. INT. FOTOSTUDIO - DAG Kameraet klikker. Anna tar portrettbilder av Dan.

DEN GODE HYRDE / DEN GODE GJETEREN

ECON1210 Oblig. Fredrik Meyer

MÅNEDSBREV FRA BLÅÆR - JUNI 2014

Notat for oblig 2, INF3/4130 h07

Utarbeiding av datasettet «hensynssone for flomutsatt areal» Innspill til prosjekt i Norge Digitalt-/Geovekst-regi

Klargjør for dashbord i it s learning

Om 8 minutter kommer du til å smile som disse gjør! De neste 8 minuttene vil forandre ditt liv!

En eksplosjon av følelser Del 3 Av Ole Johannes Ferkingstad

Sikring og transport av pasient

Bispen. Trollstigen. Bispen (1462 moh) er den mest tilgjengelige av de tre høye toppene på vestre side av Trollstigen. Her sett fra Isterdalen.

Kapittel 3: Litt om representasjon av tall

MONTERINGSANVISNING TERMPORTEN

Friluftsliv er godt for helsa!

CLAUDIA og SOPHIE møtes for å diskutere det faktum at Claudia har et forhold til Sophies far, noe Sophie mener er destruktivt for sin mor.

Newtons (og hele universets...) lover

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

Kort oversikt over. eksport-/import-programmet for. WinMed

Tallregning og algebra

Skogens røtter og menneskets føtter

Fibonaccitallene og det Gylne Snitt

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Alf Prøysen. Jubileumsutgave

Undervisningsopplegg for ungdomstrinnet om koordinatsystemer og rette linjer

ter». Men det er et problem med denne påstanden, for hvis den er absolutt sann, så må den være absolutt usann.

Funksjoner og andregradsuttrykk

Å klippe seg på Gran Canaria

2.2 Flisespikkerier GEOMETRI

Når man skal velge en tørrkjøler er det mange faktorer som spiller inn.

Side 1 av 11

Transkript:

Vann i rør Ford Fulkerson method Problemet Forestill deg at du har et nettverk av rør som kan transportere vann, og hvor rørene møtes i sammensveisede knytepunkter. Vannet pumpes inn i nettverket ved hjelp av et spesielt knytepunkt vi kaller kilden, og det forsvinner ut av nettverket i et annet kalt avløpet. Hvert rør har en tykkelse og dermed en øvre grense for hvor mye vann som kan flyte gjennom det, i tillegg er de laget sånn at vannet bare kan flyte én bestemt vei gjennom dem. Vi kan representere nettverket med en rettet graf, den er da rettet fordi hvert rør bare lar vannet flyte en bestemt vei. Tallene på hver kant representerer hvor mye vann som maksimalt kan flyte gjennom det røret. 2 9 0 Det vi nå ønsker å bestemme er hvor mye vann kan vi maksimalt kan få pumpet inni nettverket gjennom (kilden) slik at alt vannet renner forsvarlig gjennom nettverket og ut gjennom (avløpet). Med forsvarlig mener vi bare at det aldri flyter mer vann gjennom et rør enn det som er kapasiteten, og at alt vann som kommer inn i et knytepunkt også forsvinner ut igjen, forutenom avløpet og kilden. Flyt i nettverket En beskrivelse av hvor mye vann som flyter gjennom alle rørene kaller vi en flyt i nettverket, den må samtidig overholder forsvarlighetskravene nevnt over. Siden alt vannet som kommer inn i hvert knytepunkt også kommer ut, for utenom kilde og avløp, så skjønner vi at alt som blir pumpet inn fra kilden vil ende i avløpet, så får enhver flyt sier vi at verdien til flyten er nettopp hvor mye vann som ender opp i avløpet, eller som blir pumpet ut fra kilden. Å finne den maksimale flyten består da i å finne den flyten som har størst verdi, men la oss i første omgang bare forsøke å lage en metode for lage en gyldig flyt. Gal tilnærming Hvis man virkelig forhaster seg kan man fristes til å tenke at man bare kan sette flyten over hvert rør til å være den maksimale kapasiteten til røret, da burde vel flyten for nettverket bli maksimal? Problemet er da at vi ikke vil opprettholde bevaringsprinsippet for knytepunktene, nemlig at alt som kommer inn også må ut, og at alt som kommer ut må ha kommet inn. Se eksempelknytepunktene under, kapasiteten er påført rørene;

0 00 0 0 0 0 () Overskudd av vann () Underskudd av vann Her ser vi at man i () åpenbart ikke kan la det flyte den maksimale mengden vann gjennom hvert rør, for da vil det komme 2 inn men bare 0 vil slippe ut. Tilsvarende i (B) kan det bli underskudd i knutepunktet. Så vi kan ikke simpelthen si at hver kant skal ha den maksimalt mulige flyten gjennom seg. Naiv tilnærming En litt mer raffinert tilnærming er å forestille seg vann renne gjennom nettverket som en bekk, fra kilde til avløp. Vi ser fort at den maksimale mengden vann som kan renne gjennom en slik bekk er begrenset av det minste røret på veien. Så gitt en vei fra kilden til avløpet kan vi si at flyten på alle rørene langs denne veien skal være lik den minste kapasiteten på veien. Nå ser vi at alt vann som flyter inn i en node også vil flyte ut igjen, siden vi for hver node setter flyten til ett inn- og ett ut-rør til det samme. Etter at vi har bestemt at det skal være flyt langs alle rørene på veien så senker vi kapasiteten på alle rørene med, og hvis ett eller flere rør ikke har noe resterende kapasitet så kan vi se på dem som stengt og fjerne dem fra grafen. Denne prosessen gjentar vi hele tiden så lenge vi finner en vei fra kilde til avløp, og etter hvert som kapasiteten til rør blir 0 så fjernes de fra grafen. Legg merke til at hver gang vi sender en bekk med vann gjennom rørnettet og modifiserer grafen ved å senke kapasitetene på kantene, så lager vi i egentlig en ny graf som viser den gjenværende kapasiteten til rørnettet etter den nye bekken med vann. 2 Det minste røret på stien har kapasitet, kapasiteten til de andre rørene blir minket med, mens de som får 0 i kapasitet fjernes. Metoden over vil gi oss en gyldig flyt, og om vi er heldige kan den også være maksimal. Problemet er at når vi ikke klarer å finne noen veier mellom kilde og avløp, så kan vi egentlig ikke være sikre på at vi har funnet den aller størte flyten, og prøver du ut metoden så vil du se at du rett som det er ikke klarer å beregne den største flyten. Begrensningen som ligger i metoden er at vi gjør et tilfeldig valg av vei fra kilde til avløp, og bestemmer oss for å uten videre fastsette en bestemt mengde flyt langs rørene, uten at vi har

noen mulighet til å angre, nemlig å justere ned på flyten senere. Det vi trenger er en måte å justere flyten på rørene nedover ved et senere tidspunkt om vi ønsker det. Smart tilnærming nta som over, at vi har funnet en vei gjennom rørnettet hvor vi kan sende i flyt gjennom alle rørene. I figuren ser vi en slik vei bestående av først en vei fra til B, så èn enkelt rørledning fra B til C, også tilslutt en vei fra C til. X - Vei E - Direkte kant Rest kapasitet: Flyt: B C E - ant Langs veien X EX 2 fra kilden til avløpet sendes det i flyt. Røret E har i flyt og i resterende kapasitet, så i starten hadde røret som kapasitet. X 2 -Vei La oss si vi fortsetter å forsøke å finne en ny vei fra til, og havner først i knutepunkt C via en vei Y med en flyt på 2 så langt. Hvis det er noen rørledninger videre ut fra C med ledig kapasitet så kan vi velge de videre, så for argumentets skyld antar vi at det ikke er noen rør ut fra C med ledig kapasitet. Husk samtidig at det er en annen rørledning E som går inn i C med i flyt og i ledig kapasitet, som i figuren over. X B Rest kapasitet: Flyt: Y 2 Ny vei som kan føre 2 eller mindre C X 2 Flyt: 2 Y Flyten på 2 som kommer via Y kan åpenbart ikke gå oppover E røret, for rørene fører bare flyt i en bestemt retning. Det vi derimot kan gjøre er å justere ned flyten langs E røret fra til, da vil fortsatt nettoflyten inn i C være +2 = som før. Disse enhetene flyt kan da sendes langs X 2 og til avløpet akkurat som før. Det som er flott nå er at de 2 enhetene flyt vi senket langs E kan vi heller forsøke å sende langs en annen ny vei fra B til, og på den måten har vi totalt økt flyten til med 2. Legg merke til at vi vedlikeholder konserveringsprinsippet ved at flyten inn og ut av B og C fortsatt er den samme. Legg også merke til at den totale flyten i grafen nå har økt med 2 på grunn av den nye veien fra Y og Y 2 som begge fører 2 i flyt. Det vi gjør generelt er at når vi kommer til en node (C her) som ikke har noen rør ut av seg med ledig flyt, så prøver vi å senke flyten inn i denne noden fra et annet knytepunkt (hvis et slikt finnes) slik at flyten i røret (E her) heller kan brukes på en ny vei (Y 2 her) fra sitt knytepunkt (B her) til mål ( her). Vi kan på en måte si at vi får flytene til å samarbeide om å få frem mest mulig flyt.

Det er åpenbart at denne metoden vil la oss fortsette å forbedre flyten i grafen etter at den første metoden vi så på vil være ferdig, men hvordan kan vi vite at vi har den maksimale flyten når selv denne metoden ikke fører frem lenger? La oss undersøke dette ved å anta at vi ikke lenger klarer å finne nye forberingsveier i nettverket. Vi må vite at vi er ferdig Vi er altså i den situasjonen at vi forsøker å lage veier fra kilden og ut i nettverket, men alltid ender opp i knytepunkter hvor alle utover rør er brukt opp, og alle innover rør har 0 i flyt slik at vi ikke kan senke den. Så ved alle disse nodene hvor vi ikke kommer lenger vil flyten ut være maksimal, dvs alle utover rør er brukt opp, og flyten inn vil være 0. Ved konserveringsprinsippet vet vi at alt som strømmer ut fra disse nodene vil ende opp i kilden. Forestiller vi oss en hver annen flyt i det samme nettverket, så ser vi at den umulig kan være større enn den vi har laget nå, for akkurat som vår flyt må den jo levere all flyten ut gjennom disse knytepunktene, og vi bruker jo allerede alle utover rør fra disse knytepunktene til full kapasitet. For å jamføre med boka så er det nettopp disse nodene, i tillegg til alle nodene mellom dem og kilden, som omtales som cut nodes. Et cut er i prinsippet rørene som går på tvers av en en todelt gruppering av knytepunktene i nettverket, hvor kilden er i en gruppering og avløpet i den andre. Hvis man ser på alle disse rørene på tvers så skjønner man at de utgjør en flaskehals for hvor stor flyt som kan strømme gjennom nettet, og forskjellige grupperinger av knytepunkter vil gi oss forskjellige flaskehalser. Det er derfor åpenbart at enhver gyldig flyt ikke kan være større enn noen flaskehals i nettverket. Hvis vi derfor finner en flyt som har lik verdi som en flaskehals, så må dreie seg om den største mulige flyten, og den minste flaskehalsen. Den matematiske påstanden som sier dette er Max-flow-Min-Cut Theorem fra boka. Da er vi klare til å oppsummere vår fantastiske metode for å finne maksimal flyt.. Finn vei fra kilden til avløpet hvor hvert utover rør ikke har brukt opp sin kapasitet, og hvert innover rør ikke er ubrukt. Hvis en slik vei ikke finnes så er nåværende flyt maksimal. 2. La R være den minste av gjenstående kapasiteten blant alle ut-rørene og flyt i innrørene.. Øk flyten på ut-rørene kantene med R, og senk flyten på inn-rørene med R.. Gå til Dette er Ford-Fulkerson metoden. I praksis For å gjøre oss i stand til å finne disse veiene som også kan bestå av rør som rettet inn mot knytepunkter må vi gjøre noen endringer for at vanlige veifinner metoder (dypde først, bredde først) skal fungere. I de fleste representasjoner av grafer på datamaskiner har man ikke mulighet til å vite hvilke kanter (rør) som peker inn mot noden man er i på en rask måte, men det har vi behov for her. Husk at når vi har sent flyt gjennom en rørledning som går fra til B, så ønsker vi at det skal være mulig å justere ned denne flyten når vi en annen gang kommer fra noden B. Måten vi

håndterer dette på er at hver gang vi lager en vei gjennom grafen hvor vi bruker kapasitet i forskjellige kanter, så legger vi til kanter som peker motsatt vei for hver kant som pekte forover. 2 2 9 0 2 9 0 Så nå har vi fortsatt de gamle kantene som viser hvor mye kapasitet som røret har igjen, men vi har også en ny kant som viser hvor mye som flyter gjennom røret med den flyten vi har nå. Den nye grafen til høyre har ingen flyt i seg selv, den bare viser hvor mye flyt som går igjennom rørene og hvor mye som er igjen. Når vi søker etter nye veier så gjør vi det videre i grafen til høyre, og hver gang legger vi til eventuelle bakoverkanter i forhold til orginalgrafen til venstre. Legg merke til at når vi finner veier i grafen til høyre så bruker vi BRE forover kanter, som da enten er vanlige rør fra det opprinnelige vannrørnettet, eller tilsvarer å senke flyten i et rør som egentlig går motsatt vei i den opprinnelige grafen. vslutningsvis kan det nevnes at det er avgjørende for effektiviteten at vi velger forbedringsveiene i en forsvarlig rekkefølge. Den beste måten viser seg å være at man velger den korteste kandidatveien heletiden, dette klarer man med bredde-først søk i grafen til høyre. Dette blir kaldt Edmonds-arp algoritmen. Bedeho Mender IFI Universitet i Oslo