Transport, Routing- en Schedulingproblemen. ir. H.N. Post

Maat: px
Weergave met pagina beginnen:

Download "Transport, Routing- en Schedulingproblemen. ir. H.N. Post"

Transcriptie

1 Transport, Routing- en Schedulingproblemen ir. H.N. Post 1 mei 2006

2

3 Inhoudsopgave 1 Kortste pad probleem Definities Basisalgoritme Label-setting methoden Dijkstra s algoritme A* Algoritme Overeenkomst tussen Dijkstra en A* Het landmark algoritme Label correcting methoden Naieve label correcting methoden Geavanceerde label correcting methoden Verbeteringen Floyd-Warshall Bidirectionele methoden Bidirectionele versie van Dijkstra s algoritme Bidirectionele schatters Bidirectionele label correcting methoden Resultaten Voorbeelden Literatuur

4 INHOUDSOPGAVE 2 Transport probleem Modellering αβ-algoritme Maximale stroomprobleem Het verbeteren van (α, β) Voorbeelden Literatuur Handelsreiziger probleem Inleiding Een moeilijk probleem Toepassingen Verwante problemen Kortste Hamilton pad Herhaling van steden Meerdere handelsreizigers Het kwadratische toewijzingsprobleem Het langste pad probleem Minimale opspannende bomen Modellering Exacte oplosmethoden Branch & bound met reductie Branch & bound op basis van het toewijzingsprobleem Branch & cut Het gebruik van bovengrenzen Benaderende oplosmethoden Insertie algoritmen

5 INHOUDSOPGAVE Lokale zoek technieken Heuristieken met kwaliteitsgarantie Resultaten Literatuur

6

7 Hoofdstuk 1 Kortste pad probleem Een automobilist wil de kortste weg van Delft naar Amsterdam weten. Gegeven is het wegennet van Nederland waarbij de afstand tussen ieder tweetal kruisingen bekend is. Hoe bepalen we dan de kortste route? Het is mogelijk om alle routes tussen Delft en Amsterdam op te sommen en per route de afstand te bepalen, om vervolgens de kortste uit te kiezen. Het is echter eenvoudig in te zien dat, zelfs wanneer we rekening houden met het niet rijden van rondjes in een route, er miljoenen routes zijn die niet interessant zijn om te bekijken. Je zult bijvoorbeeld nooit van Delft naar Amsterdam via Maastricht rijden. Hieronder wordt uitgelegd hoe dit soort problemen efficiënt opgelost kan worden. In paragraaf 1.1 worden eerst de benodigde definities en notaties gegeven. Het basisalgoritme waarmee het bovenstaande probleem kan worden opgelost wordt behandeld in paragraaf 1.2. In de paragrafen 1.3 en 1.4 worden verschillende varianten van het basisalgoritme beschreven. Vervolgens komen in paragraaf 1.5 bidirectionele varianten van alle algoritmen aan de orde. In paragraaf 1.6 worden resultaten gegeven en besproken. Er worden enkele voorbeelden uitgewerkt in paragraaf 1.7. Tenslotte worden in paragraaf 1.8 literatuurverwijzingen gegeven. 1.1 Definities In deze paragraaf worden enkele definities gegeven en notaties beschreven die in de rest van dit hoofdstuk gebruikt worden. Definitie 1.1 Graaf Een graaf G = (V, E) bestaat uit een verzameling V, waarvan de elementen knopen worden genoemd en uit een verzameling E van paren van verschillende knopen uit V. Deze paren worden de takken van G genoemd. Als de paren niet geordend zijn, dan wordt G een ongerichte graaf genoemd; als de paren wel geordend zijn, dan wordt G een gerichte graaf genoemd. 7

8 1 Kortste pad probleem Definitie 1.2 Pad Twee knopen in een ongerichte graaf heten verbonden als er een tak is van de eerste naar de tweede knoop. Een pad is een reeks van verschillende knopen, waarbij elke knoop verbonden is met de volgende knoop in de reeks. Een graaf is samenhangend wanneer er van iedere knoop naar iedere andere knoop in de graaf een pad bestaat. Voor een gerichte graaf bestaan soortgelijke definities. Alle takken in een pad moeten dezelfde richting hebben. Zo n pad wordt ook wel een gericht pad genoemd. Een gerichte graaf is sterk samenhangend wanneer er een gericht pad bestaat tussen elk tweetal knopen van de graaf. Wanneer de richting van de takken wordt genegeerd en de zo ontstane ongerichte graaf samenhangend is, dan wordt de gerichte graaf zwak samenhangend genoemd. Bij een kortste pad probleem is een gerichte graaf G = (V, E) gegeven. Aan iedere tak (i, j) E worden kosten c ij toegekend. Bij het kortste pad probleem is het de bedoeling om het pad te vinden van een knoop s naar een knoop t van de graaf, waarvoor geldt dat de gecumuleerde kosten van de takken op het pad minimaal is. Aangenomen wordt dat de kosten c ij 0 zijn voor alle takken (i, j) E. Tevens wordt aangenomen dat de graaf G sterk samenhangend is. Het kortste pad probleem kan worden beschouwd als het zo goedkoop mogelijk versturen van één eenheid stroom van knoop s naar knoop t in het netwerk beschreven door de graaf G. min o.d.v. c ij x ij x sj = 1 (i,j) E {j:(s,j) E} {i:(i,t) E} x it = 1 x ij x ji = 0 i V\{s, t} {j:(i,j) E} {j:(j,i) E} x ij {0, 1} (i, j) E Als x ij = 0, betekent dit dat er geen stroom loopt over tak (i, j). Als x ij = 1, dan betekent dit dat er wel stroom loopt. Door t de verzameling V \ {s} te laten doorlopen kunnen de kortste paden van s naar alle overige knopen in een graaf bepaald worden. Door tevens de bronknoop s de hele verzameling V te laten doorlopen kunnen alle kortste paden in de graaf G = (V, E) bepaald worden. 1.2 Basisalgoritme Er zijn meerdere methoden bekend om het kortste pad op te lossen. We onderscheiden twee soorten: label-setting methoden en label-correcting methoden. Al deze methoden bepalen de kortste paden van een bronknoop naar alle overige knopen. Elk van deze oplosmethoden is iteratief en maakt gebruik van afstandslabels. In iedere iteratie worden labels aan knopen toegekend; het afstandslabel l(i) van een knoop i is een bovengrens voor de lengte van het kortste pad van de bronknoop naar knoop i. De methoden verschillen in de manier waarop zij de labels toekennen. Een label-setting algoritme maakt in elke iteratie één label 8

9 1.2 Basisalgoritme permanent, dat wil zeggen dat het label de lengte van het daadwerkelijk kortste pad bevat. Een label-correcting methode daarentegen beschouwt alle labels als tijdelijk, tot aan de laatste iteratie, wanneer alle labels tegelijkertijd permanent worden. Alle methoden werken met een kandidaatverzameling Q van nog te doorzoeken knopen. Algoritme 1.1 beschrijft de meest algemene vorm van de verschillende oplosmethoden voor het kortste pad probleem. Algoritme 1.1 Basisalgoritme Stap 1: Initialisatie Stel Q = {s}, stel l(i) = voor alle i V \ {s} en l(s) = 0. Stap 2: Knoopselectie Zij i Q. Knoop i wordt verwijderd uit Q. Stap 3: Labelaanpassing Voor alle (i, j) E doe: l(j) wordt min {l(j), l(i) + c ij }. Als l(j) in deze stap aangepast wordt, dan wordt π(j) = i en j wordt toegevoegd aan Q, tenzij j al tot Q behoort. Stap 4: Stopcriterium Het algoritme stopt wanneer Q leeg is. Als Q niet leeg is, ga dan naar stap 2. De juistheid van algoritme 1.1 is als volgt in te zien. Tijdens het algoritme is het label l(j) steeds gelijk aan de lengte van een pad van bronknoop s naar knoop j en daarom is l(j) een bovengrens voor de lengte van een kortste pad van bronknoop s naar knoop j. Na beëindiging van het algoritme geldt voor elke knoop j dat het label l(j) gelijk is aan de kosten van het kortste pad van de bronknoop s naar knoop j. Om dit laatste te garanderen moeten de labels voldoen aan de optimaliteitsvoorwaarden uit stelling 1.1. Stelling 1.1 Optimaliteitsvoorwaarden Zij l(j) voor elke knoop j V de kosten van een pad van de bronknoop s naar knoop j. De labels l(j) zijn gelijk aan de kosten van het kortste pad van knoop s naar knoop j dan en slechts dan als zij voldoen aan de volgende optimaliteitsvoorwaarden: l(j) l(i) + c ij voor alle (i, j) E. Bewijs: Eerst wordt de noodzakelijkheid van de optimaliteitsvoorwaarden aangetoond. Stel dat er een tak (i, j) is waarvoor geldt l(j) > l(i) + c ij. Dan zouden de kosten van het kortste pad naar j verkleind kunnen worden door knoop j via knoop i te bereiken, en l(j) is dus niet gelijk aan de kosten van het kortste pad van knoop s naar knoop j. Nu wordt bewezen dat deze voorwaarden ook voldoende zijn. Beschouw hiervoor een oplossing waarbij voor iedere j het label l(j) voldoet aan de optimaliteitsvoorwaarden. Noteer knoop s als i 1 en knoop j als i k. Zij het pad P = {(i 1, i 2 ), (i 2, i 3 ),...,(i k 1, i k )} een pad van bronknoop s naar knoop j. 9

10 1 Kortste pad probleem Uit de optimaliteitsvoorwaarden volgt: l(i k ) l(i k 1 ) + c ik 1,i k l(i k 1 ) l(i k 2 ) + c ik 2,i k 1... (1.1) l(i 2 ) l(i 1 ) + c i1,i 2 = c i1,i 2 De laatste gelijkheid volgt uit l(i 1 ) = l(s) = 0. Door alle ongelijkheden in (1.1) op te tellen, volgt: l(j) = l(i k ) c ik 1,i k + c ik 2,i k c i1,i 2 = (i,j) P c ij Dus l(j) is een ondergrens voor de kosten van elk pad van de bronknoop s naar knoop j. Aangezien l(j) de kosten voorstelt van een pad van de bronknoop s naar knoop j, is het ook een bovengrens voor de kosten van het kortste pad. Derhalve is l(j) gelijk aan de kosten van het kortste pad van knoop s naar knoop j. Dus als voor alle j V het label l(j) de kosten van een pad van knoop s naar knoop j voorstelt en de oplossing voldoet aan de optimaliteitsvoorwaarden (stelling 1.1), dan zijn de labels l(j) gelijk aan de kosten van de kortste paden. Omdat zowel het aantal knopen als het aantal takken eindig zijn en voor alle takken (i, j) E geldt c ij 0, is het aantal iteraties in algoritme 1.1 eindig. Het algoritme stopt wanneer er geen knopen meer zijn waarvoor l(j) > l(i)+c ij. Op dat moment is aan de optimaliteitsvoorwaarden uit stelling 1.1 voldaan en dus stelt l(j) voor elke j V de kosten van het kortste pad van de bronknoop s naar knoop j voor. Het basisalgoritme is derhalve correct. Aan het einde van het algoritme geldt dat π(i) steeds de voorganger van knoop i op het kortste pad van knoop s naar knoop i voorstelt. 1.3 Label-setting methoden Label-setting methoden wijzen tijdelijke labels toe aan de knopen en maken vervolgens per iteratie het label van één knoop permanent. Dit label bevat de kosten van het daadwerkelijke kortste pad vanaf de bronknoop tot deze knoop. In deze paragraaf wordt eerst het algoritme van Dijkstra behandeld. De complexiteit van dit algoritme wordt besproken, waarbij aangegeven wordt welke datastructuren gebruikt kunnen worden om een betere complexiteit te bereiken. Daarna wordt het zogenaamde A* algoritme besproken. Dit algoritme is gebaseerd op methodieken uit de kunstmatige intelligentie. 10

11 1.3 Label-setting methoden Dijkstra s algoritme Het algoritme van Dijkstra vindt de kortste paden van een bronknoop s naar alle overige knopen in een graaf met n knopen. In de kandidaatverzameling Q staan alle knopen met een tijdelijk label dat kleiner is dan oneindig. Elke knoop wordt één keer in Q opgenomen en één keer uit Q verwijderd. In iedere iteratie van het algoritme wordt één knoop uit Q verwijderd. Deze knoop heeft dan een permanent label. Als knoop i een permanent label l(i) heeft, betekent dit dat de kosten van het kortste pad van bronknoop s naar knoop i gelijk is aan l(i). Het idee achter Dijkstra s algoritme is om, beginnend bij bronknoop s alle knopen een permanent label toe te kennen in volgorde van oplopende kosten vanaf s. Aan het begin van het algoritme wordt in de initialisatie aan knoop s een permanent label l(s) = 0 gegeven en aan elke andere knoop i een tijdelijk label l(i) =. Bij iedere iteratie is het label van knoop i gelijk aan de kosten van het kortste afstand van de bronknoop s naar knoop i, over een pad waarop alle knopen een permanent label hebben. In de knoopselectie-stap bepaalt het algoritme de kleinste waarde van de tijdelijke labels. Daarna wordt willekeurig één van de knopen waarvan het label deze waarde heeft gekozen tot knoop i. Het label van deze knoop wordt permanent gemaakt. Vervolgens worden alle knopen die vanuit knoop i bereikt kunnen worden eventueel voorzien van een nieuw tijdelijk label. Het algoritme eindigt wanneer alle knopen een permanent label hebben. Algoritme 1.2 is een formele beschrijving van Dijkstra s algoritme. Het algoritme bepaalt de kosten van knoop s naar alle overige knopen. Door het algoritme n keer aan te roepen, steeds met een andere bronknoop, kunnen de kosten tussen alle knopen bepaald worden. Algoritme 1.2 Dijkstra Stap 1: Initialisatie Stel Q = {s}, stel l(i) = voor alle i V \ {s} en l(s) = 0. Stap 2: Knoopselectie Zij i Q een knoop waarvoor geldt l(i) = min {l(j) : j Q}. Knoop i wordt uit Q verwijderd. Het label van knoop i is nu permanent. Stap 3: Labelaanpassing Voor alle (i, j) E doe: l(j) wordt min {l(j), l(i) + c ij }. Als l(j) in deze stap aangepast wordt, dan wordt π(j) = i en j wordt toegevoegd aan Q, tenzij j al tot Q behoort. Stap 4: Stopcriterium Het algoritme stopt wanneer Q leeg is. Als Q niet leeg is, ga dan naar stap 2. 11

12 1 Kortste pad probleem Wanneer niet alle kortste paden vanuit de bronknoop naar de overige knopen gevraagd worden, maar slechts naar een geselecteerd aantal knopen, dan kan het stopcriterium bij een label-setting methode aangescherpt worden. Het algoritme stopt zodra alle geselecteerde knopen een permanent label hebben. Complexiteit: Het algoritme voert de knoopselectie stap n keer uit. Iedere keer moeten alle knopen met een tijdelijk label doorzocht worden, om zodoende de knoop met het kleinste tijdelijke label vast te stellen. De totale rekentijd voor deze stap is n + (n 1) = O(n 2 ). Voor knoop i voert het algoritme E(i) keer een label aanpassing uit. Als m het aantal takken in de graaf is, wordt de labelaanpassing stap in totaal i V E(i) = m keer uitgevoerd. Omdat iedere labelaanpassing O(1) rekentijd kost, heeft het algoritme in totaal O(m) tijd nodig voor deze operatie. De looptijd van het algoritme van Dijkstra is dus O(m + n 2 ). Er zij opgemerkt dat bij een normaal wegennet geldt m = O(n), waardoor de looptijd ook wel geschreven wordt als O(n 2 ). Heap: De stap die het meeste tijd kost, is de knoopselectie stap. Immers, bij elke iteratie moeten alle knopen met een tijdelijk label doorzocht worden om de knoop te vinden met het kleinste label. De prestatie van het algoritme kan verbeterd worden door de knopen met hun labels op een zodanige manier op te slaan, dat de knoop met het kleinste label sneller gevonden kan worden. Een bekende datastructuur die hiervoor gebruikt kan worden is de zogenaamde heap. In tabel 1.1 is een overzicht gegeven van de operaties die gedaan kunnen worden op een heap H. Tabel 1.1: Heap operaties Operatie Omschrijving Create-Heap(H) Maakt een lege heap H aan. Insert(i, H) Voegt knoop i toe aan de heap H. Delete-Min(i, H) Retourneert knoop i die het kleinste label heeft van alle knopen in H. Knoop i wordt uit de heap H verwijderd. Decrease-Key(i, w, H) Verlaagt het label van knoop i tot de waarde w. In het kortste pad algoritme (zie algoritme 1.3) stelt H de verzameling voor van knopen met een eindig tijdelijk afstandslabel. In de knoopselectie stap hoeven alleen de knopen op deze heap bekeken te worden en dus niet alle knopen. Dijkstra s algoritme voert de operaties Delete-min en Insert ten hoogste n maal uit en de operatie Decrease-Key ten hoogste m maal. Hieronder wordt bij een aantal bekende heapimplementaties aangegeven wat de complexiteit van Dijkstra s algoritme met de betreffende heap-datastructuur is. Binaire heap Een binaire heap heeft O(log n) tijd nodig om de operaties Insert, Decrease-Key en Delete-Min uit te voeren. De andere heap-operaties kosten O(1) tijd. De totale looptijd 12

13 1.3 Label-setting methoden van de binaire heap versie van Dijkstra s algoritme is O(mlog n). Merk op dat deze implementatie voor volle grafen (dit zijn grafen waarvoor geldt m = O(n 2 )) langzamer is dan de originele versie van Dijkstra s algoritme. Als m O(n 2 / log n), zoals het geval is bij een wegennet, dan is de binaire heap implementatie echter sneller dan de originele versie. De binaire heap is een speciaal geval van de hieronder besproken d- heap, namelijk een d-heap met d = 2. d-heap Voor een gegeven parameter d 2 heeft de d-heap implementatie O( d log n) tijd nodig voor de operaties Insert en Decrease-Key. De d-heap implementatie heeft verder O(d d log n) tijd nodig voor de operatie Delete-Min. De totale looptijd van Dijkstra s algoritme met een d-heap is O(m d log n+nd d log n). Om een optimale keuze voor d te vinden, dient deze term geminimaliseerd te worden. Dit resulteert in d = max {2, m/n }. De looptijd van het totale algoritme met deze keuze voor d is O(m d log n). Merk op dat voor ijle grafen (grafen waarvoor geldt m = O(n) ) de looptijd O(n d log n) is. Fibonacci heap De Fibonacci heap voert bijna alle heap-operaties uit in gemiddeld O(1) tijd. Alleen de operatie Delete-min kost O(n log n) tijd. De looptijd van deze versie van Dijkstra s algoritme is O(m + n log n). Algoritme 1.3 Dijkstra s algoritme met heap implementatie Stap 1: Initialisatie Stel Q = {s}, stel l(i) = voor alle i V \ {s} en l(s) = 0. Voer Create-Heap(H) en vervolgens Insert(s, H) uit. Stap 2: Knoopselectie Voer Delete-Min(i, H) uit. Dit levert een knoop i op met het kleinste tijdelijke label. Het label van knoop i is nu permanent en knoop i verwijderd uit de heap H. Stap 3: Labelaanpassing Voor alle (i, j) E geldt: l(j) wordt min {l(j), l(i) + c ij }. Als l(j) in deze stap aangepast wordt, dan wordt π(j) = i en j wordt toegevoegd aan H door Insert(j, H) uit te voeren, tenzij j al tot H behoort. In dat laatste geval wordt Decrease-Key(j, l(i) + c ij, H) uitgevoerd. Stap 4: Stopcriterium Het algoritme stopt wanneer H leeg is. Als H niet leeg is, ga dan naar stap 2. Hoewel de Fibonacci-heap een betere complexiteit heeft dan de d-heap, blijkt in de praktijk dat de prestaties van de Fibonacci-heap tegen kunnen vallen. Dit komt in de eerste plaats doordat deze heap-structuur moeilijk te implementeren is. Daarbij komt dat de constante factor per operatie nogal groot kan zijn. De Fibonacci-heap is dan ook vooral van theoretisch belang. 13

14 1 Kortste pad probleem Buckets: Een andere datastructuur om Dijkstra s algoritme te versnellen is de bucket datastructuur. Deze methode staat bekend als de methode van Dial. Aangenomen wordt dat c ij N voor alle (i, j) E. Het idee is om voor elke mogelijke labelwaarde een lijst van knopen bij te houden waarvan de labels deze labelwaarde hebben. Om een idee te krijgen van het algoritme kan je voor ieder geheel getal een container (bucket) voorstellen. Container b bevat alle knopen i waarvoor geldt l(i) = b. Omdat elk eindig label gelijk is aan de som van een pad (zonder cycles) liggen de mogelijke label waarden tussen 0 en (n 1)C, waarbij C = max (i,j) E c ij. Op deze manier kunnen (n 1)C + 1 mogelijke label waarden gecontroleerd worden in oplopende volgorde, tot de eerste niet lege container is gevonden. Omdat het verwijderen van een knoop i uit een container en het toevoegen van een knoop i aan een container in constante tijd gedaan kan worden is de looptijd van Dial s algoritme O(m + nc). Hoewel het algoritme in principe (n 1)C + 1 containers nodig heeft, kan het eenvoudig worden aangepast zodat er slechts C + 1 containers nodig zijn. Merk namelijk op dat er op z n hoogst C + 1 opeenvolgende containers gevuld kunnen zijn op ieder willekeurig tijdstip. Zodra het einde van de reeks containers bereikt is, kunnen we weer starten bij de eerste container A* Algoritme Vanuit de kunstmatige intelligentie discipline heeft men zich ook bezig gehouden met het kortste pad probleem. Het gaat dan met name om het vinden van het kortste pad van een knoop s naar een knoop t (dus niet van knoop s naar alle knopen, of naar een aantal knopen). In Dijkstra s algoritme (zie algoritme 1.2) kan het stopcriterium in dat geval als volgt aangescherpt worden. Als knoop t een permanent label krijgt kan het algoritme gestopt worden. In Dijkstra s algoritme krijgt een knoop een permanent label wanneer het huidige kortste pad vanaf s korter is dan alle andere paden. Voor knopen met permanente labels geldt dat het kortste pad vanaf s tot deze knopen bekend is. Dijkstra s algoritme vindt het kortste pad van s naar t op volgorde van kortste pad lengtes. Dit suggereert dat het doorzochte gebied met dit algoritme een cirkel rond s is (zie figuur 1.1). Dijkstra s algoritme heeft het nadeel dat er in alle richtingen gezocht wordt. Het zou handig zijn wanneer er direct in de richting van t gezocht wordt. Het A* algoritme vindt het kortste pad van s naar t op een effectievere manier wanneer er een heuristische schatting te maken is van de afstand van iedere knoop tot knoop t, waarvoor geldt dat de schatting kleiner dan of gelijk is aan de werkelijke afstand. Noem h(i) de heuristische schatting van de afstand van knoop i tot knoop t. Dan luidt het A* algoritme als volgt. 14

15 1.3 Label-setting methoden Algoritme 1.4 A* Stap 1: Initialisatie Stel Q = {s}, stel l(i) = voor alle i V \ {s} en l(s) = 0. Stap 2: Knoopselectie Zij i Q een knoop met i = arg min {l(j) + h(j) : j Q}. Knoop i wordt uit Q verwijderd. Het label van knoop i is nu permanent. Als i = t stopt het algoritme. Stap 3: Labelaanpassing Voor alle (i, j) E(i) doe: l(j) wordt min {l(j), l(i) + c ij }. Als l(j) in deze stap aangepast wordt, dan wordt π(j) = i en j wordt toegevoegd aan Q, tenzij j al tot Q behoort. Als knoop j een permanent label had, dan wordt dit label weer tijdelijk gemaakt (knoop j is zojuist opnieuw aan Q toegevoegd). Stap 4: Ga naar stap 2. In dit algoritme staat l(i) voor het voorlopig kortste pad van bronknoop s naar knoop i. De waarde l(i) + h(i) staat voor de voorlopige schatting van het kortste pad van s naar t via knoop i. Het A* algoritme zoekt langs knopen die verwacht worden te liggen op het kortste pad van s naar t (zie figuur 1.1). In het A* algoritme is het kortste pad van knoop s naar knoop i niet altijd vast, zelfs niet wanneer knoop i een permanent label heeft. Daarom wordt in stap 3 van algoritme 1.4 dit permanente label mogelijk weer tijdelijk gemaakt. Het kan dus gebeuren dat een knoop meermalen wordt geselecteerd in de knoopselectie stap. Deze inefficiënte stap kan worden voorkomen door een duaal feasible schatter te gebruiken. Definitie 1.3 Duaal feasible schatter Een schatter h voor het kortste pad naar knoop t is duaal feasible dan en slechts dan als h voldoet aan de volgende voorwaarde: c ij + h(j) h(i) voor iedere tak (i, j) E. Stelling 1.2 Een eenmaal permanent label wordt bij gebruik van een duaal-feasible schatter nooit meer tijdelijk. Bewijs: Stel dat in stap 3 van algoritme 1.4 een knoop j met een permanent label gevonden kan worden, dan geldt: l(i) + c ij < l(j) (1.2) Omdat het label van knoop j permanent is geldt ook (zie stap 2): 15

16 1 Kortste pad probleem Figuur 1.1: Het doorzochte gebied met Dijkstra s algoritme (boven) vergeleken met het A* algoritme (midden) en het landmark algoritme (onder) 16

17 1.3 Label-setting methoden l(j) + h(j) l(i) + h(i) Dit kan herschreven worden als: l(j) l(i) h(i) h(j) (1.3) Omdat h een duaal feasible schatter is geldt: h(i) h(j) c ij (1.4) Uit (1.3) en (1.4) volgt: l(j) l(i) c ij Dit is in tegenspraak met (1.2) dus was het label van knoop j niet permanent. Wanneer de graaf een wegennet voorstelt en de kosten van een tak gezien worden als de lengte van de tak, dan kan de euclidische afstand tot t als schatter gebruikt worden. Uit de driehoeksongelijkheid volgt dat de schatter duaal feasible is. Stellen de kosten van een tak niet de lengte van de tak, maar de bijbehorende rijtijd voor, dan kan als schatter de euclidische afstand gedeeld door de maximale snelheid (gemeten over alle takken) gebruikt worden. Complexiteit en effectiviteit: Waar Dijkstra s algoritme cirkelvormig zoekt rond de bronknoop s totdat knoop t een permanent label krijgt, doet het A* algoritme dit meer gericht in de richting van t. Het aantal iteraties is dus meestal kleiner bij het A* algoritme dan bij Dijkstra s algoritme. Dit blijkt bijvoorbeeld duidelijk uit figuur 1.1. Theoretisch gezien is de complexiteit van het A*-algoritme echter niet beter dan dat van Dijkstra s algoritme. Het zou immers kunnen dat je eerst een flink stuk uit de buurt moet rijden, omdat in de directe rijrichting een blokkade is (door bijvoorbeeld een kanaal of iets dergelijks). In de praktijk scoort het A* algoritme echter beter dan Dijkstra s algoritme en is dus effectiever. Het is echter niet zo dat als het A* algoritme in een bepaalde situatie twee keer zo weinig iteraties nodig heeft dan Dijkstra s algoritme het A* algoritme ook twee keer zo snel klaar is. Dit komt met name omdat het evalueren van de heuristische schatter een rekentechnisch dure aangelegenheid is (denk bijvoorbeeld aan het worteltrekken bij gebruik van de euclidische afstand). De evaluatie is weliswaar O(1), maar nochtans duur. De heap-datastructuur en de bucket-datastructuur die behandeld werden bij Dijkstra s algoritme kunnen uiteraard ook gebruikt worden bij het A*-algoritme. 17

18 1 Kortste pad probleem Overeenkomst tussen Dijkstra en A* Dijkstra s algoritme en het A* algoritme zijn equivalent aan elkaar, zoals blijkt uit de volgende stelling. Stelling 1.3 A* is equivalent met Dijkstra Dijkstra s algoritme met gebruik making van de kosten c ij = c ij + h(j) h(i) voor een tak (i, j) E, is equivalent met het A* algoritme dat de originele kosten c ij en de duaal feasible schatter h gebruikt. Bewijs: Omdat h een duaal feasible schatter is geldt: c ij +h(j) h(i). Hieruit volgt c ij 0, waardoor Dijkstra s algoritme gebruikt kan worden. Zij P het tijdelijke pad van knoop s naar een zekere knoop i. Dan is het label l D (i) van knoop i: l D (i) = (j,k) P c jk = (j,k) P c jk + h(i) h(s) Merk op dat h(s) constant is en dat l (i) = (j,k) P c jk de labelwaarde is die gebruikt wordt in het A* algoritme. In de knoopselectiestap van Dijkstra s algoritme wordt de knoop met het kleinste label gekozen: i = arg min i Q l D (i) = arg min i Q (j,k) P c jk + h(i) h(s) = arg min(l (i) + h(i)) i Q Er vindt een update plaats als in de labelaanpassing-stap blijkt dat: l D (i) + c ij < l D (j) In dat geval geldt dus: l (i) + h(i) h(s) + c ij + h(j) h(i) < l (j) + h(j) h(s) Vereenvoudigd is dit precies de voorwaarde die in het A* algoritme staat: l (i) + c ij < l (j) Hieruit volgt dat Dijkstra s algoritme met de aangepaste kosten c ij algoritme dat gebruik maakt van de kosten c ij. equivalent is met het A* 18

19 1.3 Label-setting methoden Het landmark algoritme In de vorige paragrafen is duidelijk geworden dat het gebruik van een heuristische schatter voor de afstand van een knoop i V naar de doelknoop t het doorzochte gebied flink kleiner maakt. Zo n heuristische schatter h(i) is eigenlijk niets anders dan een ondergrens voor de afstand van knoop i naar knoop t. De vraag is nu of er nog betere (hogere) ondergrenzen gevonden kunnen worden. Hiervoor is het idee van landmarks (wegwijzers) bedacht. In deze paragraaf wordt uitgelegd hoe wegwijzers gebruikt kunnen worden. Opmerking Wanneer op een graaf G meerdere keren een kortste pad van een knoop s naar een knoop t berekend moet worden, kan het zinvol zijn om vooraf wat extra informatie uit te rekenen om daarmee de te maken berekeningen te versnellen. Het landmark algoritme is alleen zinvol in zo n situatie. Een wegwijzer W is een vaste knoop in de graaf G waarvoor geldt dat de kortste paden van alle knopen naar deze knoop bekend zijn. Zij W de verzameling van alle wegwijzers. Zo n verzameling kan bestaan uit een aantal random gekozen wegwijzers. Een meer effectieve methode is om eerst de meest centrale knoop in de graaf te kiezen als wegwijzer. Vervolgens wordt een nieuwe wegwijzer gekozen die het verst van deze wegwijzer af ligt. Daarna wordt de knoop gekozen die het verst van de twee reeds gekozen wegwijzers vandaan ligt. Dit proces wordt herhaald tot er een gegeven aantal wegwijzers bepaald zijn. Opmerking Het geheugengebruik per wegwijzer is fors. Stel dat er een graaf is met knopen. Daar alle kortste paden naar de wegwijzer opgeslagen moeten worden, zijn er dus per wegwijzer afstanden nodig. Stel dat zo n afstand als geheel getal (integer) wordt opgeslagen, betekent dit dat er per wegwijzer 12 Mb geheugen gebruikt wordt. Zij h W (i) de afstand van knoop i V naar wegwijzer W W. Zij d(i, j) de kortste afstand van knoop i V naar knoop j V. Zie figuur 1.2. h W (i) W i d(i, j) j h W (j) Figuur 1.2: De functie van een wegwijzer W Uit figuur 1.2 is direct de volgende driehoeksongelijkheid af te leiden: h W (i) d(i, j) + h W (j) Of te wel: h W (i) h W (j) d(i, j) Als j = t dan is h W (i) h W (t) een onderschatting van de afstand van knoop i naar knoop t. 19

20 1 Kortste pad probleem Het landmark algoritme gebruikt als heuristische schatter voor de afstand van knoop i naar knoop t: h(i) = max W W (h W(i) h W (t)) (1.5) Stelling 1.4 De landmark schatter is duaal feasible De schatter gedefinieerd door (1.5) is duaal feasible. Bewijs: Volgens definitie 1.3 is een schatter h duaal feasible als c ij + h(j) h(i) voor iedere tak (i, j) E. We bewijzen de stelling vanuit het ongerijmde. Stel dat er een tak (i, j) E is waarvoor geldt: h(i) > c ij + h(j). Zij W = arg max (h W (i) h W (t)). Dan geldt dus: W W h(i) = h W (i) h W (t) > c ij + h(j) c ij + h W (j) h W (t) Hieruit volgt: h W (i) > c ij + h W (j) (1.6) Volgens de definitie is h W (i) gelijk aan de kortste afstand van knoop i naar wegwijzer W en h W (j) is dus de kortste afstand van knoop j naar wegwijzer W. Volgens de driehoeksongelijkheid geldt: c ij + h W (j) h W (i) (1.7) Maar (1.6) is in tegenspraak met (1.7). Dus er geldt: c ij + h(j) h(i) en dat betekent dat h een duaal feasible schatter is. Het landmark algoritme is dus hetzelfde als het A*-algoritme (zie algoritme 1.4) waarbij de schatter h gedefinieerd is door (1.5). De effectiviteit van het landmark algoritme is als volgt in te zien. Wanneer een landmark W in de buurt van de doelknoop t ligt dan is h W (i) een zeer goede onderschatting van de kortste afstand van i naar t. Wanneer W gelijk is aan knoop t is de onderschatting h W (i) zelfs exact gelijk aan de kortste afstand van knoop i naar knoop t. Zeker wanneer er sprake is van een obstakel tussen s en t (bijvoorbeeld het IJsselmeer), is het duidelijk dat de schatter op basis van een wegwijzer veel scherper kan zijn dan de hemelsbrede (euclidische) schatter die gebruikt wordt in het A*-algoritme. In figuur 1.1 is duidelijk te zien dat het landmark algoritme effectiever is dan het A*-algoritme. 20

21 1.4 Label correcting methoden 1.4 Label correcting methoden De in de vorige paragraaf besproken algoritmen zijn de zogenaamde label-setting methoden. In iedere iteratie wordt er precies één tijdelijk label permanent gemaakt. Dit gebeurt in de knoopselectie stap. Deze stap neemt de meeste tijd in beslag, dus is met het versnellen hiervan veel tijdwinst te behalen. Onderzoek hiernaar heeft geleid tot het ontwikkelen van alternatieve methoden, de zogenaamde label-correcting methoden. Het verschil tussen label-setting en label-correcting methoden is de manier waarop knoop i in de knoopselectie stap gekozen wordt. Bij label-setting methoden wordt de knoop met het kleinste label verwijderd uit de verzameling Q van kandidaatknopen. Een dergelijke methode heeft ten hoogste n iteraties nodig: elke knoop wordt hoogstens één keer aan Q toegevoegd en hoogstens één keer uit Q verwijderd. Bij de label-correcting methoden wordt de verzameling Q gezien als een rij. De knoop die in de knoopselectie stap uit de verzameling van kandidaatknopen verwijderd wordt, is altijd de eerste knoop uit Q. Dit hoeft dus niet de knoop met het kleinste label te zijn. Door deze strategie wordt aanzienlijke tijdwinst geboekt in de knoopselectie stap, wat echter ten koste gaat van het aantal iteraties. Het is nu immers heel goed mogelijk dat een knoop meerdere malen aan Q wordt toegevoegd en uit Q verwijderd wordt. Algoritme 1.5 beschrijft de algemene vorm van de label-correcting methoden. De label correcting methoden verschillen onderling in de strategie voor wat betreft de positie in Q waar de knoop die Q binnenkomt wordt ingevoegd. Dit gebeurt in stap 3 van het algoritme. Algoritme 1.5 Algemene vorm van een label-correcting methode Stap 1: Initialisatie Stel Q = {s}, stel l(i) = voor alle i V \ {s} en l(s) = 0. Stap 2: Knoopselectie Zij knoop i de eerste knoop uit de kandidaatrij Q. Verwijder knoop i uit Q. Stap 3: Labelaanpassing Voor alle (i, j) E(i) doe: l(j) wordt min {l(j), l(i) + c ij }. Als l(j) in deze stap aangepast wordt, dan wordt π(j) = i en j wordt toegevoegd aan Q, tenzij j al tot Q behoort. De manier waarop knoop j aan Q wordt toegevoegd, verschilt per label-correcting methode. Stap 4: Stopcriterium Het algoritme stopt wanneer Q leeg is. Als Q niet leeg is, ga dan naar stap 2. 21

22 1 Kortste pad probleem Bij label-setting methoden kon het algoritme gestopt worden, zodra in stap 2 geconstateerd wordt dat knoop i gelijk is aan de doelknoop t. In die stap kreeg knoop i immers een permanent label, waarmee het kortste pad van bronknoop s naar knoop i gevonden was. Bij de label-correcting methoden is deze aanscherping van het stopcriterium niet zonder meer mogelijk, daar knoop i later in het algoritme wellicht verbeterd wordt en opnieuw aan Q wordt toegevoegd. Er is echter wel degelijk een versnelling van het algoritme mogelijk. Wanneer in stap 3 geconstateerd wordt dat knoop j gelijk is aan de doelknoop t, dan kan l(j) gezien worden als een bovengrens b. Omdat c ij 0, kan in stap 2 gecontroleerd worden of l(i) < b. Is dat niet het geval, dan wordt stap 3 overgeslagen en rechtstreeks naar stap 4 gesprongen Naieve label correcting methoden De oudste label correcting methoden gebruiken een implementatie van Q waarbij de labels van de knopen in Q geen invloed hebben op de ordening van de knopen in Q. Bellman-Ford: De eerste methode, die we hier beschrijven, is de Bellman-Ford methode. Bij deze methode wordt een knoop die Q binnenkomt altijd achteraan in de rij geplaatst. Hoewel het aantal iteraties ten opzichte van Dijkstra s algoritme hoog is, is de overhead per iteratie kleiner. Deze methode kan sneller zijn dan Dijkstra s algoritme. D Esopo-Pape: De tweede methode is de D Esopo-Pape methode. Deze methode zet een knoop die voor het eerst Q binnenkomt achteraan in Q. Een knoop die echter opnieuw aan Q wordt toegevoegd, wordt aan het begin van Q toegevoegd. Wanneer een knoop i wordt verwijderd uit Q, wordt het label l(i) gebruikt om de labels van knopen in de buurt van knoop i aan te passen. Zodra het label l(i) wordt verbeterd, is het waarschijnlijk dat de eerder aangepaste labels van knopen in de buurt van knoop i ook verbeterd moeten worden. Daarom is het zinvol om knoop i aan het begin van Q te plaatsen, zodat de knopen in de buurt van knoop i een kans krijgen om snel verbeterd te worden. Pallottino: Het algoritme van Pallottino is een verbeterde versie van de methode van D Esopo-Pape. Het heeft dezelfde insertie strategie, maar de kandidatenrij Q bestaat uit twee disjuncte rijen Q en Q. Een knoop i die nog niet in één van deze rijen heeft gezeten wordt toegevoegd aan het einde van Q. Anders wordt de knoop toegevoegd aan het einde van Q. De knoop die geselecteerd wordt is de eerste knoop van Q, als Q tenminste niet leeg is. Anders is het de eerste knoop van Q Geavanceerde label correcting methoden Deze methoden proberen de structuur van de kandidatenrij Q zo te organiseren dat knopen met een klein label zoveel mogelijk aan het begin van Q staan. Hiermee wordt geprobeerd Dijkstra s algoritme te benaderen, waarbij immers steeds de knoop met het kleinste label uit Q gekozen wordt. 22

23 1.4 Label correcting methoden Hoe meer de knopen in Q zijn gesorteerd op oplopende labelwaarden, hoe minder iteraties nodig zijn. Merk op dat, als een knoop j opnieuw in Q binnenkomt, er een knoop i moet zijn die Q verlaat, met l(i) + c ij < l(j). Hoe kleiner l(j) was toen hij de eerste keer Q verliet, hoe minder waarschijnlijk het is dat er een knoop i is waarvoor geldt l(i) + c ij < l(j). Small Label First: Een elegante methode is de Small Label First methode. Bij het opnemen van knoop j in de rij Q wordt gekeken naar het label van de eerste knoop in Q. Als het label van de eerste knoop in Q kleiner is dan l(j), dan wordt j toegevoegd aan het einde van Q. Anders wordt j aan het begin van Q toegevoegd. Threshold: Ook dit algoritme probeert het aantal iteraties beperkt te houden, door in de knoopselectie stap een knoop uit Q te kiezen met een relatief lage labelwaarde. Evenals in het algoritme van Pallottino bestaat de kandidatenrij Q uit twee disjuncte rijen Q en Q. Hierbij bevat Q knopen met een klein label. De rij Q bevat alleen knopen waarvan de labels niet groter zijn dan een drempelwaarde ( threshold ) u. Wanneer een knoop i moet worden toegevoegd aan Q, gaat dit als volgt: Als l(i) u dan wordt knoop i aan het einde van Q toegevoegd. Anders wordt knoop i toegevoegd aan het einde van Q. Een mogelijke keuze voor de drempelwaarde u is als volgt. Aan het begin is u = 1. Wanneer Q leeg is, wordt u aangepast als volgt: waarbij u + t + 1 als min l(i) u + t + 1, i Q u = min l(i) + t anders, (1.8) i Q t = x max (i,j) E c ij (1.9) Nadat u is aangepast, worden de knopen i Q waarvoor geldt l(i) u uit Q verwijderd en geplaatst in Q. De parameter x wordt gekozen op basis van de structuur van de graaf G. Voor een wegennet ligt deze waarde meestal tussen de 0.01 en de De snelheid van het algoritme hangt sterk af van de keuze van x. Het treshold algoritme hangt in zijn algemeenheid sterk af van de keuze van de drempelwaarde u. Wanneer u gekozen wordt als het huidige minimum label, dan is het algoritme identiek aan Dijkstra s algoritme. Wanneer u groter wordt gekozen dan alle mogelijke labelwaarden, dan is en blijft Q leeg. Het algoritme reduceert dan tot de Bellman-Ford methode. 23

24 1 Kortste pad probleem Verbeteringen In deze paragraaf worden een aantal verbeteringen besproken die toegepast kunnen worden op alle label correcting methoden. Parent checking: Wanneer een knoop j zojuist uit Q is verwijderd en de voorganger i = π(j) nog in Q zit betekent dit dat l(j) voor het laatst werd aangepast toen i werd geselecteerd en l(j) gelijk werd gesteld aan l(i)+c ij. Daarna is l(i) aangepast (waardoor knoop i opnieuw aan Q werd toegevoegd). Intuïtief lijkt het niet zinvol om j dan te gebruiken, omdat het zeker is dat l(j) nog verkleind zal worden. Daarom kunnen we beter knoop j overslaan en verder gaan met de eerstvolgende knoop in Q waarvoor geldt dat de voorganger van die knoop niet in Q zit. Dit principe wordt Parent-checking genoemd. Het werd oorspronkelijk toegepast op de Bellman-Ford methode, maar het kan worden gecombineerd met alle besproken label-correcting methoden. Large Label Last: Naar aanleiding van de Small Label First gedachte (zie paragraaf 1.4.2) is het Large Label Last principe bedacht. Zij k de som van de labelwaarden van alle knopen in Q: k = i Q l(i) Het aantal knopen in Q is gelijk aan q = Q. Wanneer de gekozen knoop i, de eerste knoop van Q, in de knoopselectie stap een label l(i) > k/q heeft, dan wordt de knoop direct weer achteraan in Q geplaatst. De knoopselectie stap wordt opnieuw aangeroepen. Op deze manier worden knopen die een label hebben groter dan het gemiddelde label van alle knopen in Q niet gescand. Heuristische schatter: Wanneer een duaal feasible heuristische schatter h bekend is, kan deze eenvoudig toegepast worden bij alle label correcting methoden. Hiervoor worden de kosten van iedere tak als volgt aangepast (vergelijk stelling 1.3): c ij = c ij + h(j) h(i) (1.10) Voorts wordt l(s) geïnitialiseerd op h(s) in plaats van 0. Hierdoor wordt het stop-criterium voor alle label correcting methoden aangescherpt. Zodra in de knoopselectie stap een knoop i met l(i) l(t) gevonden wordt, dan kan knoop i uit Q verwijderd worden, zonder de labelaanpassing stap uit te voeren. Bij de geavanceerde label-correcting methoden (Small Label First en Threshold) zorgt het gebruik van c ij ook tot een betere ordening van Q. Dit geldt ook bij gebruik van het Large Label Last principe. 24

25 1.5 Bidirectionele methoden De duaal feasible schatter h kan gebaseerd zijn op wegwijzers, zoals in het landmark algoritme (zie paragraaf 1.3.4) of op een euclidische afstand, zoals in het A*-algoritme (zie paragraaf 1.3.2) Floyd-Warshall Er bestaat nog een label-correcting algoritme, het Floyd-Warshall algoritme (zie algoritme 1.6), dat de kortste paden bepaalt vanaf alle knopen naar alle knopen in O(n 3 ). Het algoritme maakt gebruik van labels l[i, j] voor elk tweetal knopen i en j. Aan het eind van het algoritme stelt l[i, j] de kosten van het kortste pad voor van knoop i naar knoop j. Algoritme 1.6 Floyd-Warshall Stap 1: Initialisatie Stel l[i, j] = voor alle [i, j] V V. Stel l[i, i] = 0 voor alle i V. Stel l[i, j] = c ij voor alle (i, j) E. Stel k = 0. Stap 2: Knoopselectie Hoog k met 1 op. Stap 3: Labelaanpassing Voor alle [i, j] V V wordt l[i, j] = min {l[i, j], l[i, k] + l[k, j]}. Stap 4: Stopcriterium Het algoritme stopt wanneer k = n. Ga anders naar stap 2. Het is niet mogelijk om dit algoritme te stoppen, voordat alle kortste paden in een graaf bepaald zijn. Als de kortste paden van een gespecificeerd aantal bronknopen naar een gespecificeerd aantal doelknopen bepaald moeten worden, dan is het voordeliger om één van de eerder genoemde label-correcting methoden voor elke bronknoop uit te voeren. Dit geldt met name wanneer het aantal bronknopen veel kleiner is dan het totaal aantal knopen. Dit is bij de meeste routeringsvraagstukken die gebruik maken van een onderliggend wegennet het geval. 1.5 Bidirectionele methoden Alle algoritmen uit de paragrafen 1.3 en 1.4 zoeken unidirectioneel het kortste pad van bronknoop s naar doelknoop t vanuit de bronknoop s. Op deze manier speelt de doelknoop t eigenlijk een ondergeschikte rol (zeker wanneer er geen heuristische schatter gebruikt wordt). Het is mogelijk om bidirectioneel te zoeken door afwisselend vanaf de bronknoop s en de doelknoop t te zoeken. Daarbij wordt het zoeken vanaf de bronknoop aangeduid als voorwaarts zoeken en het zoeken vanaf de doelknoop als achterwaarts zoeken. 25

26 1 Kortste pad probleem Bidirectionele versie van Dijkstra s algoritme De bidirectionele versie van Dijkstra s algoritme (zie algoritme 1.7) gebruikt het oorspronkelijke Dijkstra algoritme voor zowel het voorwaarts als achterwaarts zoeken. Algoritme 1.7 Dijkstra - bidirectioneel Stap 1: Initialisatie Stel Q s = {s}, stel l s (i) = voor alle i V \ {s} en l s (s) = 0. Stel voorts Q t = {t}, stel l t (i) = voor alle i V \ {t} en l t (t) = 0 Stap 2: Knoopselectie - voorwaarts Zij i Q s een knoop waarvoor geldt l s (i) = min {l s (j) : j Q s }. Knoop i wordt uit Q s verwijderd. Als l t (i) < en knoop i / Q t ga dan naar stap 7. Stap 3: Labelaanpassing - voorwaarts Voor alle (i, j) E doe: l s (j) wordt min {l s (j), l s (i) + c ij }. Als l s (j) in deze stap aangepast wordt, dan wordt π s (j) = i en j wordt toegevoegd aan Q s, tenzij j al tot Q s behoort. Stap 4: Knoopselectie - achterwaarts Zij i Q t een knoop waarvoor geldt l t (i) = min {l t (j) : j Q t }. Knoop i wordt uit Q t verwijderd. Als l s (i) < en knoop i / Q s ga dan naar stap 7. Stap 5: Labelaanpassing - achterwaarts Voor alle (j, i) E doe: l t (j) wordt min {l t (j), l t (i) + c ji }. Als l t (j) in deze stap aangepast wordt, dan wordt π t (j) = i en j wordt toegevoegd aan Q t, tenzij j al tot Q t behoort. Stap 6: Ga naar stap 2. Stap 7: Einde van het algoritme Zoek de tak (u, v) E waarvoor l s (u) + c uv + l t (v) minimaal is. Het kortste pad bestaat nu uit het pad van knoop s naar knoop u, de tak (u, v) en het pad van knoop v naar knoop t, mits l s (u)+c uv +l t (v) < l s (i)+l t (i). Anders is het kortste pad gelijk aan het gevonden pad van knoop s naar knoop i en het gevonden pad van knoop i naar knoop t. Nadat het voorwaarts zoeken vanuit bronknoop s en het achterwaarts zoeken vanuit doelknoop t eenzelfde knoop i bereikt heeft, hoeft er alleen nog een eenvoudige post-processing stap gedaan te worden (stap 7 in algoritme 1.7). Als de graaf G homogeen is, wordt het aantal doorzochte knopen ongeveer gehalveerd ten opzichte van de unidirectionele versie van Dijkstra s algoritme. Dit komt omdat er nu twee 26

27 1.5 Bidirectionele methoden doorzochte cirkels zijn, één met als middelpunt knoop s en één met als middelpunt knoop t. In figuur 1.3 wordt dit duidelijk gemaakt Bidirectionele schatters Het lijkt eenvoudig om het A* algoritme (zie algoritme 1.4) ook uit te breiden tot een bidirectionele variant om het doorzochte gebied nog verder te reduceren. Neem aan dat voor iedere knoop v een heuristische schatter h s (v) voor het kortste pad van knoop v naar doelknoop t en een heuristische schatter h t (v) voor het kortste pad van bronknoop s naar knoop v. Het zonder meer gebruiken van de schatter h s voor het voorwaarts zoeken en de schatter h t voor het achterwaarts zoeken leidt tot een complex algoritme, omdat het kortste pad van s naar t niet duidelijk is zodra de doorzochte gebieden (vanuit knoop s en vanuit knoop t) elkaar overlappen. Dit betekent dat het kortste pad vanuit s naar t niet altijd de gevonden overlap in de doorzochte gebieden aandoet. Het algoritme kan dan ook niet stoppen bij het vinden van een overlap tussen beide zoekgebieden. Dit komt omdat er twee onafhankelijke schatters gebruikt worden voor het voorwaarts zoeken en het achterwaarts zoeken. Het maakt overigens niet eens uit dat die twee schatters eventueel duaal feasible (definitie 1.3) zijn. Volgens stelling 1.3 kan het A* algoritme getransformeerd worden tot Dijkstra s algoritme door gebruik te maken van de aangepaste kosten c ij = c ij + h s (j) h s (i) uit (1.10), mits de schatter h s duaal feasible is. Dit betekent dat een bidirectionele versie van het A* algoritme gerealiseerd kan worden door in de bidirectionele versie van Dijkstra s algoritme (algoritme 1.7) deze gemodificeerde kosten te gebruiken. Er wordt dan echter geen gebruik gemaakt van de schatter h t voor het zoeken vanuit de doelknoop t in de richting van de bronknoop s. Om juist het achterwaartse zoeken in de bidirectionele variant van Dijkstra s algoritme aan te passen tot een A* algoritme moet gebruik gemaakt worden van de volgende aangepaste kosten voor de takken: c ij = c ij + h t (i) h t (j) (1.11) Op basis van de aangepaste kosten voor het voorwaartse zoeken (1.10) en het achterwaartse zoeken (1.11) is het logisch om de volgende aangepaste kosten te gebruiken voor de beide richtingen tegelijk: c ij = c ij (h s(j) h s (i)) (h t(i) h t (j)) Deze gemodificeerde kosten zijn niet negatief, omdat zowel h s als h t duaal feasible zijn. Door deze kosten te gebruiken wordt 1 2 (h s(i) h t (i)) gebruikt als schatting voor het kortste pad van knoop i naar knoop t en 1 2 (h t(i) h s (i)) als schatting voor het kortste pad van knoop s naar knoop i. Deze nieuwe schatters voldoen aan de volgende ongelijkheden voor alle knopen i, mits de schatters niet negatief zijn: h s (i) 1 2 (h s(i) h t (i)) 27

28 1 Kortste pad probleem Figuur 1.3: Het doorzochte gebied met de bidirectionele variant van Dijkstra s algoritme (boven) vergeleken met de bidirectionele versie van het A* algoritme (midden) en de bidirectionele versie van het landmark algoritme (onder) 28

29 1.6 Resultaten h t (i) 1 2 (h t(i) h s (i)) Beide ongelijkheden garanderen dat de nieuwe schatters de echte kortste pad waarde niet overschatten (omdat de originele schatters dat immers ook niet deden). De nieuwe schatters zijn weliswaar inferieur ten opzichte van de originele schatters, maar nu kan de bidirectionele variant van het A* algoritme tenminste eenvoudig worden ingekaderd binnen de bidirectionele variant van Dijkstra s algoritme (zie algoritme 1.7). Opmerking Er kan zowel gebruik gemaakt kan worden van een euclidische schatter (A*-algoritme) als van een wegwijzer schatter (landmark-algoritme). In figuur 1.3 is zowel de werking van het bidirectionele A* algoritme als van het bidirectionele landmark algoritme weergegeven Bidirectionele label correcting methoden Van iedere label correcting methode bestaat ook een bidirectionele variant. De bidirectionele variant van Dijkstra s algoritme gebruikt een stopcriterium die niet direct kan worden gebruikt bij label correcting methoden. Wanneer bijvoorbeeld in de voorwaartse knoopselectie stap een knoop i gevonden wordt (waarvan het label l s (i) nu dus permanent is), waarvoor ook l t (i) permanent is, wordt het algoritme gestopt (en naar de post-processing stap gegaan). Bij een label correcting methode hoeft een knoop i die gekozen wordt in de knoopselectie stap echter helemaal geen permanent label l s (i) te hebben. Zodra een knoop v gevonden wordt waarvoor geldt dat zowel l s (v) < en l t (v) < dan is l s (v) + l t (v) een bovengrens voor het kortste pad van s naar t. We kiezen dan l max s = l s (v) en l max t = l t (v) als de maximale labelwaarden voor knopen die respectievelijk vanuit s of vanuit t gelabeld zijn. Alleen knopen i Q s waarvoor geldt dat l s (i) < l max s en knopen j Q t waarvoor geldt dat l t (j) < l max t worden gebruikt in respectievelijk de voorwaartse en de achterwaartse label-aanpassing stap. Zodra een nieuwe knoop v gevonden wordt waarvoor geldt l s (v ) l max s en l t (v ) l max t, dan stellen we l max s = l s (v ) en l max t = l t (v ). Zodra Q s en Q t beide leeg zijn, stopt het algoritme. Ook nu moet de post-processing stap nog worden uitgevoerd. 1.6 Resultaten In tabel 1.2 zijn de iteraties en looptijden weergegeven van de hierboven besproken algoritmen voor wat betreft de unidirectionele varianten. In tabel 1.3 zijn de iteraties en looptijden weergegeven voor de bidirectionele varianten. Het gaat steeds om 100 paar knopen waarbij de snelste route tussen elk paar knopen bepaald moet worden. De looptijden zijn gemeten in seconden op een Dell PC met een 3,4Ghz processor en 1,5 Gb intern geheugen. De gemiddelde rijtijd van de 100 paar knopen is 173 minuten en de gemiddelde afstand is 237 kilometer. Het gebruikte wegennet van Nederland en de grensgebieden van België en Duitsland is van Tele-Atlas (MultiNet 2004). Dit wegennet (zie figuur 1.1) bestaat uit knopen en 29

30 1 Kortste pad probleem takken. Elke tak (i, j) heeft bepaalde attributen. Het is bijvoorbeeld gegeven of je van i j en/of van j i mag rijden. Voorts is van elke tak bekend wat de lengte is en welk type weg wordt voorgesteld. Er worden verschillende weg typen onderscheiden, gebaseerd op de functionele wegklasse (10 soorten) van de tak en de plaats (10 soorten) en het gebied (15 soorten) waarin de tak ligt. Voor elk van de weg typen is een gemiddelde snelheid geschat. Dus voor elke tak (i, j) is een verwachte rijtijd bekend. Tabel 1.2: Looptijden en iteraties (unidirectioneel) 0-schatter A*-schatter Landmark Methode Iteraties Looptijd Iteraties Looptijd Iteraties Looptijd Dijkstra Heap , , ,551 Dial , , ,731 Fibonacci , , ,115 Bellman-Ford Basis , , ,570 Parent-check , , ,490 Large Label Last , , ,007 LLL & Parent , , ,816 d Esopo-Pape Basis , , ,928 Parent-check , , ,825 Large Label Last , , ,951 LLL & Parent , , ,589 Pallottino Basis , , ,354 Parent-check , , ,438 Large Label Last , , ,368 LLL & Parent , , ,997 Small Label First Basis , , ,349 Parent-check , , ,994 Large Label Last , , ,331 LLL & Parent , , ,797 Threshold Basis , , ,828 Parent-check , , ,280 Large Label Last , , ,776 LLL & Parent , , ,115 Dials methode geeft de beste resultaten voor de label setting algoritmen. Hoewel de Fibonacciheap een betere gemiddelde worst-case grens heeft dan de binaire heap, presteert de binaire heap in onze test beter. In het algemeen geldt dat de constante factor in de berekeningen bij de Fibonacci-heap en de complexiteit om de Fibonacci-heap te implementeren in de praktijk bij de meeste toepassingen leidt tot een slechtere prestatie dan de eenvoudige binaire heap. Het gebruik van Parent-Checking werkt goed bij Bellman-Ford en Small Label First. Toepassing bij d Esopo-Pape blijkt nutteloos te zijn. Dit is eenvoudig in te zien als volgt: Wanneer de voorganger π(i) van een zekere knoop i Q toegevoegd moet worden aan Q, wordt dit bij d Esopo-Pape gedaan aan het begin van Q. Daarom zal π(i) de kandidatenrij Q eerder verlaten dan i. In paragraaf toonden we aan dat Pallottino gezien kan worden als een 30

31 1.6 Resultaten verbeterde versie van d Esopo-Pape. Het is daarom geen verassing dat de combinatie van Parent-Checking en Pallottino ook weinig verbetering laat zien. De combinatie van Parent- Checking en het Threshold algoritme is ook niet erg effectief. Tabel 1.3: Looptijden en iteraties (bidirectioneel) 0-schatter A*-schatter Landmark Methode Iteraties Looptijd Iteraties Looptijd Iteraties Looptijd Dijkstra Heap , , ,414 Dial , , ,778 Fibonacci , , ,506 Bellman-Ford Basis , , ,681 Parent-check , , ,776 Large Label Last , , ,660 LLL & Parent , , ,870 d Esopo-Pape Basis , , ,287 Parent-check , , ,472 Large Label Last , , ,802 LLL & Parent , , ,776 Pallottino Basis , , ,327 Parent-check , , ,184 Large Label Last , , ,313 LLL & Parent , , ,121 Small Label First Basis , , ,493 Parent-check , , ,232 Large Label Last , , ,675 LLL & Parent , , ,624 Threshold Basis , , ,224 Parent-check , , ,233 Large Label Last , , ,511 LLL & Parent , , ,506 Het Large Label Last principe blijft erg effectief te zijn voor de meeste label correcting methoden. In alle gevallen neemt het aantal iteraties af. Alleen voor het Threshold algoritme is de overhead in rekentijd groter dan het voordeel van afname van het aantal iteraties. Iedere keer wanneer knopen verplaatst worden van Q naar Q moet de som van de labels in Q opnieuw berekend worden. De afname van het aantal iteraties bij het Threshold algoritme als gevolg van de toepassing van het Large Label Last principe is gering. We mogen concluderen dat de kandidatenrij Q = Q Q in het Threshold algoritme zeer goed geordend is. Het aantal iteraties van de bidirectionele varianten is globaal gezien 50% van het aantal iteraties van de unidirectionele varianten. Dit is precies wat we mogen verwachten, gezien het doorzochte gebied (zie figuur 1.1 en figuur 1.3). Het verschil tussen naieve en geavanceerde label correcting methoden blijkt duidelijk uit het effect van het gebruik van een schatter (heuristisch of op basis van wegwijzers). Naieve label 31

32 1 Kortste pad probleem correcting methoden (Bellman-Ford, d Esopo-Pape, Pallottino) gebruiken de schatter niet in de ordening van Q. De schatter wordt alleen gebruikt in het stopcriterium van het algoritme. De afname van het aantal iteraties ten gevolge van het gebruik van een heuristische schatter is bij een naieve label correcting methode derhalve geringer dan bij een geavanceerde label correcting methode. De landmark methode (met wegwijzers) blijkt zo effectief dat label correcting methoden nauwelijks kunnen concurreren met label setting methoden. Dit komt omdat de ondergrens op basis van wegwijzers zo scherp is. Hierdoor vertonen de labelwaarden van de knopen in Q een veel kleinere fluctuatie. Label correcting methoden proberen een sortering te simuleren, hetgeen duidelijk moeilijker is wanneer de labelwaarden dicht bij elkaar liggen. Er zijn 16 wegwijzers gebruikt (geheugengebruik ruim 180 Mb). Wanneer er voldoende geheugen aanwezig is, is het gebruik van wegwijzers dus zeker aan te bevelen! 1.7 Voorbeelden Het kortste pad probleem kan gebruikt worden om allerlei problemen op te lossen. Niet altijd is direct duidelijk dat een bepaald probleem als kortste pad probleem geformuleerd kan worden. Ter illustratie worden in deze paragraaf een tweetal voorbeelden uitgewerkt. Voorbeeld 1.1 Onderhoudskosten van een telefoon Het koste40 om een telefoon te kopen. Stel dat een telefoon niet langer dan 5 jaar gebruikt kan worden en dat de verwachte onderhoudskosten als volgt zijn. In het eerste jaare20, in het tweede jaare30, in het derde jaare40, in het vierde jaare60 en in het vijfde jaar e 70. Stel dat er nu een telefoon gekocht moet worden. Een gebruikte telefoon heeft geen restwaarde. De komende 6 jaar is er een telefoon nodig. De vraag is op welk(e) moment(en) er een nieuwe telefoon gekocht moet worden om het totaal van aanschaf- en onderhoudskosten voor deze 6 jaar te minimaliseren. Oplossing: De graaf G = (V, E) bestaat uit de verzameling V, waarbij knoop i V het begin van jaar i voorstelt. De verzameling takken E kent de takken (i, j) met i, j V (i < j). Tak (i, j) heeft als kosten de kosten die gevolg zijn van het bezit van een telefoon vanaf het begin van jaar i tot het begin van jaar j, als er een nieuwe telefoon gekocht wordt aan het begin van jaar i die gebruikt wordt tot het begin van jaar j. In tabel 1.4 zijn deze kosten weergegeven. Tabel 1.4: Kostenmatrix bij voorbeeld 1.1 c ij

33 1.7 Voorbeelden De goedkoopste vervangingsstrategie voor de telefoon komt neer op het oplossen van het kortste pad van knoop 1 naar knoop 7 in de graaf G, zoals weergegeven in figuur Figuur 1.4: Graaf met aanschaf- en onderhoudskosten Het zo geformuleerde kortste pad probleem wordt opgelost met behulp van Dijkstra s algoritme. Zij Q de verzameling van kandidaat knopen. Tabel 1.5 geeft een overzicht weer van de verschillende iteratiestappen. Tabel 1.5: Iteraties bij voorbeeld 1.1 Iteratie Q Spilknoop Labelwaarden 1 {1} 1 {0, 60, 90, 130, 190, 260, } 2 {2, 3, 4, 5, 6} 2 {0, 60, 90, 130, 190, 250, 320} 3 {3, 4, 5, 6, 7} 3 {0, 60, 90, 130, 180, 220, 280} 4 {4, 5, 6, 7} 4 {0, 60, 90, 130, 180, 220, 260} 5 {5, 6, 7} 5 {0, 60, 90, 130, 180, 220, 260} 6 {6, 7} 6 {0, 60, 90, 130, 180, 220, 260} 7 {7} 7 {0, 60, 90, 130, 180, 220, 260} De onderstreepte labelwaarden worden in de betreffende iteratie aangepast tot de aangegeven waarde. Op deze manier is het kortste pad van knoop 1 naar knoop 7 eenvoudig terug te leiden. Het label van knoop 7 is als laatste aangepast in iteratie 4 (spilknoop 4). Het label van knoop 4 is als laatste aangepast in iteratie 1 (spilknoop 1). Het kortste pad is dus Dit betekent dat er een telefoon gekocht wordt aan het begin van jaar 1 en aan het begin van jaar 4. De kosten over de periode van 6 jaar zijn:e 260. Voorbeeld 1.2 Boekenkast Een bibliotheek moet kasten bouwen om haar collectie boeken op te slaan. De collectie boeken bestaat uit 200 boeken met een hoogte van 4 inch, 100 boeken met een hoogte van 8 inch en 80 boeken met een hoogte van 12 inch. Elk boek is 0,5 inch dik. Er kunnen drie typen kasten gebouwd worden. Ten eerste kan er een 4-inch hoge kast gebouwd worden, waarin alle boeken met een hoogte van 4 inch passen. Er kan ook een 8-inch kast gebouwd worden, waarin alle boeken met een hoogte kleiner dan of gelijk aan 8 inch opgeslagen kunnen worden. Tenslotte kan er een 12-inch kast gekocht worden, waarin alle boeken passen. Het bouwen van een kast (ongeacht de hoogte) kost $ De bibliotheek wil ook zo min mogelijk ruimte gebruiken voor de opslag, daarom wordt $ 5 per vierkante inch opgeslagen boeken gerekend. (De ruimte 33

34 1 Kortste pad probleem voor opslag van een boek wordt gegeven door de hoogte van de kast maal de dikte van een boek). De vraag is welke typen kasten gebouwd moeten worden om de totale kosten minimaal te houden, terwijl alle boeken opgeslagen kunnen worden. Tabel 1.6: Verzameling takken bij voorbeeld 1.2 Tak Kosten Totaal (0, 4) $ $ , 5 4 = $ (0, 8) $ $5 ( ) 0, 5 8 = $ (0, 12) $ $5 ( ) 0, 5 12 = $ (4, 8) $ $ , 5 8 = $ (4, 12) $ $5 ( ) 0, 5 12 = $ (8, 12) $ $5 80 0, 5 12 = $ Oplossing: De graaf G = (V, E) bestaat uit de verzameling knopen V = {0, 4, 8, 12}, waarbij knoop i V een kast van i inch voorstelt. De verzameling takken E kent de takken (i, j) met i, j V (i < j). Tak (i, j) heeft als kosten c ij de kosten die gevolg zijn van het bouwen van een kast van j inch, waarin alle boeken met een hoogte > i inch en j inch geplaatst worden. In tabel 1.6 is een overzicht van alle takken in E gegeven, alsmede de kosten bij deze takken Figuur 1.5: Graaf bij het boekenkast probleem In figuur 1.5 is het bijbehorende netwerk weergegeven. Om te bepalen welke kasten gebouwd moeten worden om alle boeken op te slaan en de totale kosten minimaal te houden, moet het kortste pad van knoop 0 naar knoop 12 bepaald worden. Dit wordt gedaan met behulp Dijkstra s algoritme. Zij Q de verzameling van kandidaat knopen. Tabel 1.7 geeft de verschillende iteratiestappen weer. Tabel 1.7: Iteraties bij voorbeeld 1.2 Iteratie Q Spilknoop Labelwaarden 1 {0} 0 {0, 4300, 8300, 13700} 2 {4, 8, 12} 4 {0, 4300, 8300, 12000} 3 {8, 12} 8 {0, 4300, 8300, 12000} 4 {12} 12 {0, 4300, 8300, 12000} De onderstreepte labelwaarden worden in de betreffende iteratie aangepast tot de aangegeven waarde. Op deze manier is het kortste pad van knoop 0 naar knoop 12 eenvoudig terug te leiden. Het label van knoop 12 is als laatste aangepast in iteratie 2 (spilknoop 4). Het label 34

35 1.8 Literatuur van knoop 4 is als laatste aangepast in iteratie 1 (spilknoop 0). Het kortste pad is Dit betekent dat er een kast van 4 inch en een kast van 12 inch gebouwd moet worden. Alle boeken van 8 inch worden in de 12-inch kast geplaatst. De kosten voor deze oplossing zijn: $ Literatuur [1] R.K. Ahuja, T.L. Magnanti en J.B. Orlin. Network flows. Theory, algorithms, and applications. Prentice Hall, Englewoord Cliffs (1993). [2] R. Bellman. Dynamic Programming. Princeton Univ. Press, Princeton, N.J. (1957). [3] D.P. Bertsekas. A simple and fast label correcting algorithm for shortest paths. Networks 23, (1993). [4] D.P. Bertsekas, F. Guerriero, R. Musmanno, Parallel Asynchronous Label Correcting algorithms for Shortest Paths. Journal of Optimization Theory and Applications 88, (1996). [5] B.V. Cherkassky, A.V. Goldberg, T. Radzik, Shortest Paths Algorithms: Theory and Experimental Evalutation. SODA: ACM-SIAM Symposium on Discrete Algorithms (A Conference on Theoretical and Experimental Analysis of Discrete Algorithms) (1994). [6] T.H. Cormen, C.E. Leiserson, R.L. Rivest. Introduction to algorithms. The MIT Press, Cambridge (1994). [7] R.B. Dial. Algorithm 360: Shortest Path Forest with Topological Ordering. Communications of the Association for Computing Machinery 12, (1969). [8] E.W. Dijkstra. A note on two problems in connexion with graphs. Numerische Mathematik 1, (1959). [9] M.L. Fredman, R.E. Tarjan. Fibonacci heaps and their uses in improved network optimization algorithms. Journal of the Association for Computing Machinery 34, (1987). [10] F. Glover, R. Glover, D.D. Klingman. The Threshold Shortest Path Algorithm. Math. Programming Studies 26, (1986). [11] A.V. Goldberg, C. Harrelson. Computing the Shortest Path: A* Search Meets Graph Theory. Technical Report MSR-TR (2004). [12] E.L. Johnson. On shortest paths and sorting. Proceedings of the ACM Annual Conference 25. The Association for Computing Machinery, , New York (1972). [13] T. Ikeda, M. Hsu, H. Imai. A fast algorithm for finding better routes by AI search techniques. Vehicle Navigation & Information Systems (1994). [14] G.A. Klunder, H.N. Post. The Shortest Path Problem on Large Scale Real Road Networks (2005). 35

36 1 Kortste pad probleem [15] M. Luby, P.L. Ragde. A Bidirectional Shortest-Path Algorithm with Good Average-Case Behavior. Algorithmica 4, (1989). [16] U. Pape. Implementation and efficiency of Moore - algorithms for the shortest path problem. Mathematical Programming 7, (1974). [17] E. Rich, K. Knight. Artificial Intelligence. Second Edition. McGraw-Hill (1991). [18] S. Russell, P. Norvig, Artificial Intelligence: A Modern Approach. Prentice-Hall (1995). [19] A. Schrijver. Combinatorial Optimization: Polyhedra and Efficiency. Algorithms and Combinatorics 24A. Springer-Verlag (2003). [20] W.L. Winston. Operations Research. Applications and algorithms. Wadsworth, Inc., Belmont (1994). Een algemene inleiding over het kortste padprobleem wordt gegeven in [6,20]. Een grondig overzicht van de verschillende methoden staat in [19]. Label setting methoden komen aan de orde in [7,8]. De heap datastructuren worden beschreven in [1,6,9,12]. Het A* algoritme komt aan de orde in [17,18]. Het idee van de landmarks komt uit [11]. De verschillende label-correcting methoden worden uitgewerkt in [2,3,10,16]. Het Large Label Last principe wordt beschreven in [4] en de Parent-check in [5]. Het Floyd-Warshall algoritme staat onder meer in [6]. De bidirectionele label setting methoden worden behandeld in [13,15]. Bidirectionele label correcting methoden komen aan de orde in [14]. De resultaten uit paragraaf 1.6 komen ook uit dit artikel. De voorbeelden in paragraaf 1.7 komen uit [20]. 36

37 Hoofdstuk 2 Transport probleem Stel dat op een gegeven dag een aantal warenhuizen W j, j = 1, 2,...,n moet worden bevoorraad vanuit een aantal depots D i, i = 1, 2,...,m met een bepaald artikel. Stel dat de voorraad van genoemd artikel in depot D i gegeven wordt door a i en de vraag in warenhuis W j door b j. Verder is bekend dat de verzending van depot D i naar warenhuis W j per eenheid van artikel c ij kost. Hoe vinden we een bevoorradingsschema voor de genoemde dag met minimale kosten? Dit probleem staat bekend als het transport probleem (ook wel als het Hitchkokprobleem). Het probleem is rond 1941 door verschillende mensen, waaronder Hitchkok, voor het eerst geformuleerd. In dit hoofdstuk laten we zien hoe het transport probleem efficiënt kan worden opgelost. In paragraaf 2.1 wordt het probleem gemodelleerd. Vervolgens wordt in paragraaf 2.2 het αβ-algoritme beschreven waarmee het transport probleem kan worden opgelost. In iedere iteratie van dit algoritme moet een subprobleem worden opgelost. Dit is het maximale stroom probleem (paragraaf 2.3). In paragraaf 2.4 wordt het laatste gedeelte van het αβ-algoritme beschreven. In paragraaf 2.5 worden een aantal voorbeelden uitgewerkt. Tenslotte worden in paragraaf 2.6 enkele literatuurverwijzingen gegeven. 2.1 Modellering Noem x ij het aantal eenheden dat van depot D i naar warenhuis W j wordt getransporteerd. Dan kunnen we het transport probleem formuleren als een lineair programmeringsprobleem: min o.d.v. m n c ij x ij i=1 j=1 n x ij = a i j=1 m x ij = b j i=1 1 i m 1 j n x ij 0 1 i m 1 j n 37 (2.1)

38 2 Transport probleem Door x = (x ij ) op te vatten als een stroom van de depots naar de warenhuizen in het netwerk uit figuur 2.1, krijgt het probleem de vorm van een netwerk programmeringsprobleem. W 1 b 1 a 1 D 1 W 2 b 2 a 2 D 2 a m D m W n b n depots warenhuizen Figuur 2.1: Het transport probleem weergegeven in een netwerk Een transport probleem heet gebalanceerd wanneer de totale vraag in de warenhuizen gelijk is aan het totale aanbod in de depots: m a i = n i=1 j=1 b j Wanneer een transport probleem niet gebalanceerd is, kan het transport probleem eenvoudig in balans gebracht worden. Wanneer het totale aanbod groter is dan de totale vraag wordt er een dummy warenhuis W n+1 toegevoegd met vraag: b n+1 = m a i n i=1 j=1 b j Omdat het vervoer van depot D i (i = 1, 2,...,m) naar warenhuis W n+1 niet werkelijk plaatsvindt, worden de kosten c i,n+1 = 0 gesteld. In plaats van het oorspronkelijke transport probleem met m depots en n warenhuizen wordt nu het transport probleem met m depots en n + 1 warenhuizen opgelost. Vervoer naar dummy warenhuis W n+1 vindt niet echt plaats en geeft slechts de overcapaciteit aan. Wanneer het totale aanbod kleiner is dan de totale vraag, is het transport probleem niet oplosbaar. Er kan immers niet voldaan worden aan de totale vraag. Soms is het echter interessant om te weten hoe het beschikbare aanbod zo goed mogelijk kan worden toegewezen aan de warenhuizen, wetend dat niet aan alle vraag voldaan kan worden. Daartoe wordt een dummy depot D m+1 toegevoegd met aanbod: 38

39 2.1 Modellering n a m+1 = b j m j=1 i=1 a i Het is mogelijk om per warenhuis W j (j = 1, 2,...,n) een boete aan te geven voor de grootte van een eventueel tekort. De kosten c m+1,j geven deze kosten weer. Indien het niet uitmaakt waar het tekort terecht komt, kan c m+1,j gewoon op 0 gesteld worden. Voorbeeld 2.1 Transportprobleem met een tekort aan aanbod Er zijn twee waterreservoirs beschikbaar om drie steden te voorzien van water. Elk reservoir kan 50 miljoen liter water per dag leveren. Elke stad heeft een vraag van 40 miljoen liter water per dag. Voor elk miljoen liter water dat er per dag tekort is, geldt een boete. Voor stad 1 is dite20, voor stad 2e22 en voor stad 3e23. De kosten om 1 miljoen liter water te transporteren van ieder reservoir naar iedere stad is weergegeven in tabel 2.1. Tabel 2.1: Transportkosten per miljoen liter water per dag stad 1 stad 2 stad 3 Reservoir 1 e 7 e 8 e 10 Reservoir 2 e 9 e 7 e 8 Formuleer een gebalanceerd transportprobleem dat gebruikt kan worden om de som van transportkosten en boetes wegens tekorten te minimaliseren. In dit probleem is het dagelijkse aanbod gelijk aan 100 miljoen liter water. Per dag is er echter een vraag van 120 miljoen liter. Daarom wordt er een dummy reservoir toegevoegd met een aanbod van = 20 (miljoen liter water per dag). De kosten om een miljoen liter water vanuit dit dummy reservoir naar stad S i (i = 1, 2, 3) te vervoeren is gelijk aan de boete voor een tekort van een miljoen liter water bij stad S i. In figuur 2.2 is dit transportprobleem weergegeven in een netwerk. 7 S R R S R S 3 40 reservoirs steden Figuur 2.2: Twee reservoirs (en een dummy) bevoorraden drie steden 39

40 2 Transport probleem Voorbeeld 2.2 Modelleer een voorraadbeheerprobleem Sailco is een bedrijf waar zeilboten worden gefabriceerd. Sailco moet bepalen hoeveel zeilboten geproduceerd moeten worden gedurende de komende vier kwartalen. De vraag naar zeilboten is als volgt: 40 zeilboten in het eerste kwartaal; 60 zeilboten in het tweede kwartaal; 75 zeilboten in het derde kwartaal; 25 zeilboten in het vierde kwartaal. Aan het begin van het eerste kwartaal heeft Sailco 10 zeilboten in voorraad. Aan het begin van ieder kwartaal moet Sailco bepalen hoeveel zeilboten geproduceerd moeten worden gedurende dat kwartaal. Voor het gemak gaan we ervan uit dat de zeilboten die tijdens een kwartaal gefabriceerd worden, gebruikt kunnen worden om aan de vraag in dat kwartaal te voldoen. Sailco kan in ieder kwartaal 40 zeilboten fabriceren tegen een kostprijs vane400 per zeilboot. Door haar werknemers te laten overwerken kan Sailco per kwartaal extra zeilboten (boven de reguliere 40) bouwen, tegen een kostprijs vane450 per stuk. Aan het eind van ieder kwartaal (nadat de productie en de verkoop in dat kwartaal is geschied) wordt er per overgebleven zeilboot e 20 voorraadkosten gerekend. Formuleer een gebalanceerd transportprobleem om de som van productiekosten en voorraadkosten gedurende het komende jaar te minimaliseren. Tabel 2.2: Aanbodknopen bij Sailco s voorraadbeheerprobleem Aanbodknoop Omschrijving Aantal zeilboten 1 Initiële voorraad 10 2 Kwartaal 1: reguliere werktijd 40 3 Kwartaal 1: overwerk Kwartaal 2: reguliere werktijd 40 5 Kwartaal 2: overwerk Kwartaal 3: reguliere werktijd 40 7 Kwartaal 3: overwerk Kwartaal 4: reguliere werktijd 40 9 Kwartaal 4: overwerk 150 Om dit probleem te definiëren als transportprobleem worden de volgende aanbodknopen ( depots ) ingevoerd (zie tabel 2.2). Omdat er geen limiet gesteld wordt aan de hoeveelheid zeilboten die gefabriceerd worden tijdens overwerktijd is het niet direct duidelijk welk aanbod in de knopen 3, 5, 7 en 9 geldt. Daar de totale vraag = 200 zeilboten is, moeten er hoogstens (initiële voorraad) - 40 (reguliere hoeveelheid) = 150 zeilboten geproduceerd worden in de overwerktijd gedurende een kwartaal. Vandaar is gekozen om het aanbod in de knopen 3, 5, 7 en 9 op 150 te stellen. Het totale aanbod is dan gelijk aan 770 zeilboten. Tabel 2.3: Vraagknopen bij Sailco s voorraadbeheerprobleem Vraagknoop Omschrijving Aantal zeilboten 1 Vraag in kwartaal Vraag in kwartaal Vraag in kwartaal Vraag in kwartaal Dummy vraagknoop

41 2.1 Modellering De vraagknopen (warenhuizen) bij Sailco s voorraadprobleem zijn gegeven in tabel 2.3. Om het transportprobleem te balanceren is er een dummy vraagknoop (knoop 5) toegevoegd met een vraag van zeilboten. In tabel 2.4 zijn de transportkosten van aanbodknoop i naar vraagknoop j gegeven voor Sailco s voorraadprobleem. De kosten van transport van aanbodknoop 2 naar vraagknoop 3 zijn als volgt te bepalen. Het gaat dan om een zeilboot die in de reguliere werktijd gefabriceerd wordt in het eerste kwartaal, die gebruikt wordt om te voldoen aan de vraag in het derde kwartaal. De kosten bestaan dus uit de productiekosten gedurende reguliere werktijd en twee maanden voorraadkosten: = 440. Door c i,5 = 0 te stellen voor i = 1, 2,...,9 wordt er voor gezorgd dat alle niet gebruikte capaciteit netjes naar de dummy vraagknoop getransporteerd wordt. Om er voor te zorgen dat de productie van een kwartaal niet gebruikt kan worden om aan de vraag van een voorgaand kwartaal te voldoen worden de transportkosten voor die takken op gesteld. Tabel 2.4: Transportkosten bij Sailco s voorraadbeheerprobleem Vraag 1 Vraag 2 Vraag 3 Vraag 4 Vraag 5 Aanbod Aanbod Aanbod Aanbod Aanbod Aanbod Aanbod Aanbod Aanbod Voorbeeld 2.3 Een toewijzingsprobleem Wanneer het aanbod in alle depots en de vraag in alle warenhuizen van een transportprobleem gelijk is aan 1, dan wordt het transportprobleem ook wel een toewijzingsprobleem genoemd. Wanneer in een toewijzingsprobleem het aantal depots gelijk is aan het aantal warenhuizen, is er sprake van een gebalanceerd toewijzingsprobleem. Evenals bij het transportprobleem is een niet gebalanceerd toewijzingsprobleem eenvoudig in balans te brengen door het toevoegen van een of meer dummy warenhuizen of depots. Toewijzingsproblemen komen in de praktijk vaak voor. In dit voorbeeld wordt een vakgroep beschouwd met vijf docenten. In een bepaald kwartaal moet elk van deze vijf docenten één vak geven. In totaal zijn er vijf vakken. De geschiktheid van docent i voor het geven van vak j wordt uitgedrukt door een score c ij (zie tabel 2.5). De getallen c ij zijn schattingen op basis van ervaringen in het verleden. De voorzitter van de vakgroep wil de cursussen zodanig toewijzen aan de docenten dat de gemiddelde score wordt gemaximaliseerd. 41

42 2 Transport probleem Tabel 2.5: Geschiktheid van docenten voor het geven van een vak Vak 1 Vak 2 Vak 3 Vak 4 Vak 5 Docent Docent Docent Docent Docent Het transportprobleem in (2.1) is gedefinieerd als minimaliseringsprobleem, terwijl hier gevraagd wordt naar een maximale (gemiddelde) score. Om dit maximaliseringsprobleem om te schrijven naar een minimaliseringsprobleem, volstaat het om nieuwe scores te introduceren: c ij = c ij Het toewijzingsprobleem is dan als volgt te formuleren: min 5 5 c ij x ij i=1 j=1 5 x ij = 1 j = 1, 2,...,5 i=1 5 x ij = 1 i = 1, 2,...,5 j=1 x ij {0, 1} i, j {1, 2,...5} 2.2 αβ-algoritme Uit de theorie van de lineaire programmering is bekend dat het duale probleem van (2.1) als volgt geformuleerd kan worden: max m α i a i + n β j b j i=1 j=1 o.d.v. α i + β j c ij 1 i m 1 j n α i IR 1 i m β j IR 1 j n (2.2) Neem aan dat x = (x ij ) toelaatbaar is voor het primale probleem (2.1) en dat α = (α i ) en β = (β j ) toelaatbaar zijn voor het duale probleem (2.2), dan geldt: 42

43 2.2 αβ-algoritme m n c ij x ij i=1 j=1 m n (α i + β j )x ij i=1 j=1 = m n α i x ij + n m β j i=1 j=1 j=1 = m α i a i + n β j b j i=1 j=1 x ij i=1 (2.3) Hieruit volgt dat het minimum van de doelfunctie van het primale probleem (2.1) groter dan of gelijk is aan het maximum van de doelfunctie van het duale probleem (2.2). Volgens de (bekende) dualiteitsstelling voor lineair programmeren geldt hier echter altijd gelijkheid. Als x alle toelaatbare oplossingen van het primale probleem (2.1) en (α, β) alle toelaatbare oplossingen van het duale probleem (2.2) doorloopt, dan geldt: min x m n i=1 j=1 c ij x ij = max (α,β) m α i a i + i=1 n β j b j j=1 Hieruit concluderen we dat x optimaal is voor het primale probleem en (α, β) voor het duale probleem dan en slechts dan als in (2.3) gelijkheid geldt. Dan moet gelden: x ij > 0 α i + β j = c ij 1 i m 1 j n (2.4) Voorbeeld 2.4 Optimaliteitsvoorwaarden Beschouw het transportprobleem met bijbehorende oplossing zoals is weergegeven in figuur 2.3. De getoonde oplossing is optimaal. Er wordt voldaan aan (2.4) en er geldt: m n c ij x ij = 100 i=1 j=1 m α i a i + n β j b j = 100 i=1 j=1 6 D W 1 W c ij D 2 10 D W 3 W α i + β j Figuur 2.3: Optimale oplossing van een transportprobleem 43

44 2 Transport probleem Het αβ-algoritme: Neem aan dat een toelaatbare oplossing (α, β) van het duale probleem (2.2) is gegeven. Er zou bijvoorbeeld gestart kunnen worden met: β j = minc ij 1 j n i α i = min(c ij β j ) 1 i m j (2.5) Bij deze duale oplossing (α, β) proberen we een stroom x te vinden die toelaatbaar is voor het primale probleem (2.1). Voor stroom x moet dus gelden: n x ij = a i j=1 m x ij = b j i=1 1 i m 1 j n (2.6) Uiteraard moet ook gelden x ij 0 voor 1 i m en 1 j n. Het tripel (x, α, β) is optimaal indien voldaan wordt aan (2.4). Wanneer de gegeven duale oplossing (α, β) niet optimaal is, kan er geen stroom x gevonden worden die voldoet aan (2.6) en (2.4). Het αβ-algoritme berust op het idee om de eisen in (2.6) te verzwakken tot: n x ij a i j=1 m x ij b j i=1 1 i m 1 j n (2.7) De stroom x = (x ij ) met x ij = 0 voor 1 i m en 1 j n voldoet aan (2.7) en (2.4). Tevens geldt dat als een stroom x voldoet aan (2.6) en (2.4), de stroom ook voldoet aan (2.7) en (2.4). Dit brengt ons er toe om bij de gegeven duale oplossing (α, β) een niet negatieve stroom x te zoeken die aan (2.6) en (2.4) voldoet, en waarvoor m n i=1 j=1 x ij maximaal is. Dit komt neer op het oplossen van het volgende lineaire programmeringsprobleem: max o.d.v. m n x ij i=1 j=1 n x ij a i j=1 m x ij b j i=1 i = 1, 2,...,m j = 1, 2,...,n x ij 0 i = 1, 2,...,m j = 1, 2,...,n x ij = 0 α i + β j < c ij (2.8) Zij E αβ de verzameling takken (i, j) waarvoor geldt α i +β j = c ij. Dan kan (2.8) gezien worden als een maximale stroomprobleem. Dit wordt uitgewerkt in paragraaf

45 2.3 Maximale stroomprobleem Als er een stroom x gevonden wordt waarvoor geldt: m n x ij = i=1 j=1 m i=1 a i = n j=1 b j dan voldoet deze stroom noodzakelijk aan (2.6) en (2.4). Deze stroom is dan een oplossing van het gegeven transportprobleem. Als daarentegen de waarde van een maximale stroom x in (2.8) kleiner is dan m i=1 a i dan kunnen we deze stroom x gebruiken om een nieuwe duale oplossing (α, β ) van (2.2) te construeren die beter is dan (α, β). De waarde van de doelfunctie van (2.2) is dus hoger voor (α, β ) dan voor (α, β). Uitgaande van deze nieuwe duale oplossing (α, β ) wordt opnieuw (2.8) opgelost, waarbij een nieuwe stroom x gevonden wordt. Enzovoort. Het zal blijken dat op deze manier het transportprobleem kan worden opgelost: uiteindelijk vinden we langs deze weg een duale oplossing (α, β) waarvoor de waarde van de maximale stroom x in (2.8) gelijk is aan m i=1 a i. Het opmerkelijke van het hier beschreven αβ-algoritme is dat het oplossen van het transportprobleem wordt herleid tot het oplossen van een aantal maximale stroomproblemen. In paragraaf 2.3 wordt beschreven hoe het maximale stroomprobleem kan worden opgelost. In paragraaf 2.4 wordt vervolgens beschreven hoe zo n oplossing kan worden gebruikt om de huidige duale oplossing te verbeteren. 2.3 Maximale stroomprobleem Zij E αβ de verzameling takken (i, j) waarvoor geldt α i + β j = c ij. We zoeken een maximale stroom van s naar t in het netwerk N, zoals weergegeven in figuur 2.4. W 1 D 1 b 1 a 1 W 2 s a 2 D 2 b 2 t b n a m D m W n takken in E αβ Figuur 2.4: Het maximale stroom probleem 45

46 2 Transport probleem Dit maximale stroom probleem is als volgt te formuleren als een lineair programmeringsprobleem (zie ook (2.8)): max o.d.v. (i,j) E αβ x ij n x ij a i j=1 m x ij b j i=1 1 i m 1 j n x ij 0 1 i m 1 j n (2.9) Wanneer de stroomwaarde op tak (s, i) x si wordt genoemd en de stroomwaarde op tak (j, t) x jt dan kunnen de capaciteitsrestricties in (2.9) als volgt worden herschreven: x si a i x jt b j n x ij = x si j=1 m x ij = x jt i=1 i = 1, 2,...,m j = 1, 2,...,n i = 1, 2,...,m j = 1, 2,...,n (2.10) De eerste twee restricties in (2.10) zorgen er voor dat aan de capaciteitsrestricties op de takken uit knoop s en naar knoop t voldaan wordt. De laatste twee restricties geven aan dat alle overige knopen behoud van stroom hebben. De som van de inkomende stroom is gelijk aan de som van de uitgaande stroom. Evenals het transportprobleem wordt ook het maximale stroomprobleem iteratief opgelost. De hier beschreven methode is de zogenaamde Ford-Fulkerson methode. Stel dat we een stroom x op het netwerk N hebben. Er kan bijvoorbeeld begonnen worden met x ij = 0 voor alle (i, j) N. Dan wordt een hulpnetwerk N x uit N geconstrueerd als volgt. Als (i, j) E αβ en x ij > 0 dan wordt tak (j, i) toegevoegd aan het netwerk. Als x si = a i dan wordt tak (s, i) verwijderd uit het netwerk. Als x jt = b j dan wordt tak (j, t) verwijderd uit het netwerk. Op dit hulpnetwerk N x wordt nu een labelproces gedaan. Dit labelproces vormt de oplossing van het maximale stroomprobleem (zie algoritme 2.1). 46

47 2.3 Maximale stroomprobleem Algoritme 2.1 Ford & Fulkerson Stap 1: Initialisatie Verwijder alle eventueel bestaande labels bij de knopen. Stel Q =. Label knoop s met een 0. Label vervolgens alle knopen i waarvoor geldt (s, i) N x met het label s. Noteer bij deze gelabelde knopen als maximale stroom de waarde i = a i x si en zet deze knopen in een kandidatenreeks Q. Stap 2: Bepaal de spilknoop Als Q = wordt het algoritme gestopt, de gevonden stroom is dan maximaal. Als Q, zij dan i de eerste knoop in Q. Verwijder knoop i uit Q. Ga naar stap 3 wanneer knoop i een depot voorstelt, ga anders naar stap 4. Stap 3: Probeer een extra warenhuis te labellen Controleer voor iedere tak (i, j) N x of het warenhuis j al een label heeft. Indien dit niet het geval is, geef het warenhuis j dan een label i en als maximale stroom j = i. Voeg j toe aan het begin van de kandidatenreeks Q. Indien tak (j, t) N x dan is er sprake van een doorbraak. Ga dan naar stap 5. Ga anders naar stap 2. Stap 4: Probeer een extra depot te labellen Controleer voor iedere tak (i, j) N x of het depot j al een label heeft. Indien dit niet het geval is, geef het depot j dan een label i en als maximale stroom j = min ( i, x ji ). Voeg j toe aan het begin van de kandidatenreeks Q. Ga naar stap 2. Stap 5: Doorbraak Er is een doorbraak gevonden. De stroom x kan verbeterd worden met de waarde = min( j, b j x jt ). Verhoog de stroomwaarde x jt met. Zij i het label bij knoop j. Verhoog de stroomwaarde x ij ook met. Stap 6: Stroom aanpassen Zij j het label van knoop i. Als j = s ga dan naar stap 7. Verlaag anders de stroomwaarde x ij met. Zij i het label bij knoop j. Verhoog de stroomwaarde x ij met. Herhaal stap 6. Stap 7: Nieuw hulpnetwerk Verhoog de stroomwaarde x si met. Construeer opnieuw het hulpnetwerk N x uit N. Ga naar stap 1. Wanneer er in algoritme 2.1 een doorbraak gevonden wordt, is er een pad van s naar t in het hulpnetwerk N x. Dit pad bevat één tak (s, i) voor een zekere i en één tak (j, t) voor een zekere j. Daarnaast telt dit pad een of meer (eventueel omgekeerde) takken uit E αβ. In figuur 2.5 is een voorbeeld van een doorbraak gegeven. 47

48 2 Transport probleem i s t j Figuur 2.5: Een doorbraak Over dit pad kan extra stroom gestuurd worden. Daarbij dient er voor gezorgd te worden dat de capaciteitsgrenzen op de takken (s, i) en (j, t) niet overschreden worden. Tevens mag de stroom op de omgekeerde takken niet negatief worden. In algoritme 2.1 wordt hiervoor gezorgd door de maximale extra stroom i bij iedere knoop i bij te houden. Wanneer de getallen a i en b j en de oorspronkelijke stroomwaarden geheeltallig zijn, dan geldt dit ook voor de extra stroom die verstuurd kan worden over het pad van de doorbraak. Bijgevolg neemt de stroomwaarde in elke iteratie met minstens één toe. Hieruit volgt dat na een eindig aantal iteraties een stroom x gevonden wordt waarvoor in N x geen doorbraak meer mogelijk is. Algoritme 2.1 is dus eindig. Nu moet nog aangetoond worden dat de gevonden stroom aan het eind van algoritme 2.1 noodzakelijk optimaal is. Omdat in N x geen doorbraak meer mogelijk is kan de situatie aan het eind van het algoritme als volgt geschetst worden (figuur 2.6). I J s x ij = 0 t I + J + Figuur 2.6: Situatie aan het einde van het algoritme De knopen in I + en J + zijn gelabeld en de knopen in I en J zijn niet gelabeld. Essentieel is dat er geen takken in N x vanuit I + naar J lopen (omdat de knopen in J niet gelabeld zijn) en dat de takken van I naar J + stroomloos zijn (anders zouden de knopen in I via de omgekeerde tak in het hulpnetwerk N x gelabeld zijn). Verder zijn de takken (s, i) (i I ) en (j, t) (j J + ) verzadigd. In het eerste geval zouden knopen in I anders direct in de initialisatie stap al gelabeld zijn. In het laatste geval zou er sprake zijn van een doorbraak. 48

49 2.3 Maximale stroomprobleem Uit figuur 2.6 wordt duidelijk dat de waarde van de stroom x aan het eind van het algoritme gegeven wordt door: i I a i + j J + b j Om te bewijzen dat de stroom x optimaal is beschouwen we het duale probleem van (2.9): min m σ i a i + n τ j b j i=1 j=1 o.d.v. σ i + τ j 1 σ i 0 τ j 0 (i, j) E αβ 1 i m 1 j n (2.11) Het tripel (x, σ, τ) waarbij x toelaatbaar is voor (2.9) en (σ, τ) voor (2.11) is optimaal dan en slechts dan als voldaan is aan: σ i > 0 n x ij = a i j=1 τ j > 0 m x ij = b j i=1 x ij > 0 σ i + τ j = 1 (2.12) Voor het tripel (x, σ, τ) waarbij x toelaatbaar is voor (2.9) en (σ, τ) voor (2.11) geldt immers: max x ij (σ i + τ j )x ij = (i,j) E αβ (i,j) E αβ m n σ i x ij + n m τ j x ij i=1 j=1 j=1 i=1 m σ i a i + n τ j b j i=1 j=1 (2.13) Hierbij is aangenomen dat x ij = 0 wanneer (i, j) / E αβ. Hieruit volgt dat het maximum van de doelfunctie van het primale probleem (2.9) kleiner dan of gelijk is aan het minimum van de doelfunctie van het duale probleem (2.11). Volgens de (bekende) dualiteitsstelling voor lineair programmeren geldt hier echter altijd gelijkheid. Uit (2.13) volgt direct dat (2.12) moet gelden om de ongelijkheden te kunnen vervangen door gelijkheden. Definieer nu: σ i = τ j = { { 1 i I 0 i I + 1 j J + 0 j J 49

50 2 Transport probleem Dan voldoet (x, σ, τ) aan (2.12), terwijl x toelaatbaar is voor (2.9) en voor (2.11). De stroom x is dus optimaal. Voorbeeld 2.5 Maximale stroomprobleem Gevraagd is de maximale stroom in netwerk dat in figuur 2.7 is weergegeven. W 1 [0,6] D 1 [0,7] W 2 s [0,1] D 2 [0,5] [0,3] t W 3 [0,10] D 3 [0,2] W 4 Figuur 2.7: Een maximale stroomprobleem Eerst wordt een stroom gekozen door uitgaande vanuit s van boven naar beneden zoveel mogelijk stroom te versturen van s naar t. In figuur 2.8 is de op deze manier gevonden stroom getoond. W 1 [0,6] D [0,7] W 2 s [0,1] D [0,5] [0,3] t [0,10] D 3 3 W 3 [0,2] W 4 Figuur 2.8: Van boven naar beneden takken verzadigen Nu wordt het labelproces gestart. Uitgaande van knoop s wordt D 3 gelabeld met D3 = 2. Vanuit D 3 worden W 1, W 2 en W 3 gelabeld met W1 = W2 = W3 = 2. Vanuit W 1 wordt D 1 gelabeld (via de omgekeerde tak) met D1 = 2. Vanuit W 2 wordt D 2 gelabeld (via de omgekeerde tak) met D2 = 1. Vanuit D 2 wordt W 4 gelabeld met W4 = 1. Omdat tak (W 4, t) niet verzadigd is, is er sprake van een doorbraak. De extra stroom die verzonden kan worden is = 1. De stroom op de takken (s, D 3 ), (D 3, W 2 ), (D 2, W 4 ) en (D 4, t) wordt met één verhoogd en de stroom op de tak (D 2, W 2 ) wordt met één verlaagd. Zie figuur

51 2.4 Het verbeteren van (α, β) W 1 [0,6] D [0,7] W 2 s [0,1] D [0,5] [0,3] t [0,10] D 3 3 W 3 [0,2] W 4 Figuur 2.9: Doorbraak s D 3 W 2 D 2 W 4 t Het labelproces wordt opnieuw gestart. Vanuit knoop s wordt D 3 gelabeld. Vanuit D 3 worden W 1, W 2 en W 3 gelabeld. Vanuit W 1 wordt D 1 gelabeld. Vanuit W 2, W 3 en D 1 is het vervolgens niet meer mogelijk om een nieuwe knoop te labelen. Het algoritme eindigt. De gevonden stroom met een stroomwaarde 16 is optimaal. 2.4 Het verbeteren van (α, β) Stel dat er bij een toelaatbare oplossing (α, β) van het duale transportprobleem (2.2) een maximale stroom x op het netwerk bepaald door de takken in E αβ gevonden is. Hoe kan deze stroom x gebruikt worden om de duale oplossing (α, β) te verbeteren? In het hulpnetwerk N x leidt algoritme 2.1 niet tot een doorbraak. De situatie aan het eind van het algoritme is getoond in figuur 2.6. Zij nu δ > 0 en definieer (α, β ) volgens: α i = { β j = { α i δ i I α i i I + β j + δ j J β j j J + (2.14) Merk op dat voor elke stroomvoerende tak (i, j) E αβ geldt: α i + β j = α i + β j = c ij De stroomvoerende takken lopen immers van I + naar J + en van I naar J. Er zijn geen takken van I + naar J, terwijl de takken van I naar J + stroomloos zijn (zie figuur 2.6). De verzameling takken E α β bevat dus alle takken die bijdragen aan de maximale stroom in het netwerk N behorend bij de duale oplossing (α, β). De nieuwe (α, β ) is een duaal toelaatbare oplossing indien: 51

52 2 Transport probleem α i + β j c ij Merk op dat α i +β j c ij voor i = 1, 2,...,m en j = 1, 2,...,n. Voorts geldt α i +β j > α i+β j alleen wanneer i I + en j J. Dus (α, β ) is een toelaatbare duale oplossing dan en slechts dan als: α i + β j + δ c ij i I +, j J De grootst mogelijke keuze voor δ is dus: δ = min c ij α i β j (2.15) i I +,j J Voor deze δ geldt αi + β j = c ij voor minstens één tak (i, j) / E αβ. Omdat E α β alle takken bevat die bijdragen aan de maximale stroom in het netwerk bij E αβ, kunnen we uitgaande van deze stroom het maximale stroomprobleem behorend bij het netwerk bij E α β oplossen. De reeds gevonden labels in algoritme 2.1 hoeven dus niet verwijderd te worden in stap 1 van het algoritme. Voor de volledigheid wordt hieronder nog eenmaal het complete αβ-algoritme beschreven. Algoritme 2.2 Het αβ-algoritme Stap 1: Initialisatie Zij (α, β) een toelaatbare duale oplossing. (Er kan begonnen worden met (2.5)). Neem x ij = 0. Er zijn geen labels en de kandidatenreeks Q =. Stap 2: Primale stap Vind de maximale stroom x op het netwerk N behorend bij E αβ met behulp van algoritme 2.1, uitgaande van de reeds gevonden stroom, kandidatenreeks Q en labels. Indien het tripel (x, α, β) voldoet aan (2.4), dan is de gevonden toewijzing optimaal. Stop het algoritme. Stap 3: Duale stap Bepaal δ volgens (2.15) en verander (α, β) volgens (2.14). Construeer een nieuw netwerk N op basis van de nieuwe (α, β). Voeg de knopen i (depots) toe aan Q waarvoor geldt dat er een tak (i, j) bij is gekomen in het netwerk N. Herhaal stap 2. 52

53 2.5 Voorbeelden 2.5 Voorbeelden In deze paragraaf worden de voorbeelden die reeds in paragraaf 2.1 genoemd zijn uitgewerkt. Voorbeeld 2.6 Twee reservoirs bevoorraden drie steden In voorbeeld 2.1 is uitgelegd hoe een transportprobleem met een tekort aan de aanbodzijde door middel van een dummy depot en eventueel gebruik makend van gegeven boetes, gebalanceerd kan worden. Het gebalanceerde transportprobleem uit dit voorbeeld is weergegeven in figuur 2.2. Om het probleem op te lossen starten we met de duale oplossing volgens (2.5): β = {7, 7, 8} en α = {0, 0, 13}. In tabel 2.6 is c ij α i β j weergegeven. Tabel 2.6: c ij α i β j Het netwerk N behorend bij E αβ wordt in figuur 2.10 getoond. Uitgaande van knoop s wordt van boven naar beneden geprobeerd de takken zoveel mogelijk te verzadigen. Dit leidt tot de stroom die is weergegeven in figuur [0,50] R 1 S 1 [0,40] s [0,50] R 2 S 2 [0,40] t [0,20] R 3 S 3 [0,40] Figuur 2.10: Hulpnetwerk N [0,50] R 1 40 S 1 [0,40] s [0,50] R 2 40 S 2 [0,40] t [0,20] R 3 10 S 3 [0,40] Figuur 2.11: Van boven naar beneden takken verzadigen Het labelproces loopt nu als volgt. Vanuit knoop s worden R 1 en R 3 gelabeld met R1 = 10 53

54 2 Transport probleem en R3 = 20. Vanuit R 3 wordt S 1 gelabeld met S1 = 20. Er is geen doorbraak mogelijk dus de stroom x in figuur 2.11 is optimaal. Er geldt: I + = {1, 3} I = {2} J + = {4} J = {5, 6} Hiermee wordt de keuze voor δ volgens (2.15) gelijk aan 1 (zie het onderstreepte element in tabel 2.6). De nieuwe duale variabelen (zie (2.14)) zijn dan: β = {7, 8, 9} en α = {0, 1, 13}. In tabel 2.7 is c ij α i β j uitgeschreven voor de nieuwe (α, β). Tabel 2.7: Iteratie 2: c ij α i β j Het nieuwe hulpnetwerk N kent één nieuwe tak, namelijk (R 1, S 2 ). De kandidatenreeks begint met R 1. Vanuit R 1 kan S 2 gelabeld worden met S2 = 10, vanuit S 2 wordt R 2 gelabeld met R2 = 10 en vanuit R 2 wordt S 3 gelabeld met S3 = 10. Tak (S 3, t) is niet verzadigd, dus er is sprake van een doorbraak. De takken (s, R 1 ), (R 1, S 2 ), (R 2, S 3 ) en (S 3, t) krijgen een extra stroom van 10. De stroom op tak (S 2, R 2 ) wordt met 10 verlaagd (zie figuur 2.12). [0,50] R 1 40 S 1 [0,40] s [0,50] R S 2 [0,40] t [0,20] R 3 20 S 3 [0,40] Figuur 2.12: Doorbraak s R 1 S 2 R 2 R 3 t Alle labels worden verwijderd. Het labelproces wordt opnieuw gestart. Vanuit knoop s wordt R 3 gelabeld met R3 = 20. Vanuit R 3 wordt S 1 gelabeld met S1 = 20. Vanuit S 1 wordt R 1 gelabeld met R1 = 20. Vanuit R 1 wordt S 2 gelabeld met S2 = 20. Vanuit S 2 wordt R 2 gelabeld met R2 = 20. Vanuit R 2 wordt S 3 gelabeld met S3 = 20. Tak (S 3, t) is nog niet verzadigd, dus er is sprake van een doorbraak. In figuur 2.13 is de nieuwe stroom weergegeven. 54

55 2.5 Voorbeelden [0,50] R 1 20 S 1 [0,40] s [0,50] R S 2 [0,40] t [0,20] R S 3 [0,40] Figuur 2.13: Optimale stroom na de doorbraak s R 3 S 1 R 1 S 2 R 2 S 3 t Omdat alle takken uit knoop s nu verzadigd zijn is deze oplossing optimaal voor het transportprobleem. Volgens de optimale oplossing voorziet reservoir 1 in 20 miljoen liter water per dag aan stad 1 en in 30 miljoen liter water per dag aan stad 2. Reservoir 2 voorziet in 10 miljoen liter water per dag aan stad 2 en in 40 miljoen liter water per dag aan stad 3. Stad 1 heeft een tekort van 20 miljoen liter water per dag. De kosten bij deze oplossing zijn: 3 3 c ij x ij =1.170 i=1 j=1 De doelfunctie van het duale probleem is: 3 3 α i a i + β j b j = = i=1 j=1 Voorbeeld 2.7 Oplossing van Sailco s voorraadbeheerprobleem In voorbeeld 2.2 is Sailco s voorraadbeheer probleem uitgeschreven. Hier werd duidelijk dat een dergelijk voorraadbeheer gemodelleerd kan worden als een gebalanceerd transportprobleem. Dit transportprobleem kan worden opgelost met behulp van het (α, β)-algoritme. Hier volstaan we echter met het geven van de eindoplossing. De lezer wordt aangemoedigd om dit probleem zelf op te lossen. De initiële voorraad van 10 zeilboten voorziet samen met 30 zeilboten in de reguliere werktijd van het eerste kwartaal in de vraag van 40 zeilboten gedurende het eerste kwartaal. De 60 zeilboten die gevraagd worden gedurende het tweede kwartaal worden als volgt gefabriceerd: 10 zeilboten gedurende de reguliere werktijd van het eerste kwartaal, 40 zeilboten tijdens de reguliere werktijd van het tweede kwartaal en 10 zeilboten in de overwerktijd van het tweede kwartaal. Voor de vraag van 75 zeilboten in het derde kwartaal worden 40 zeilboten in de reguliere werktijd en 35 zeilboten in de overwerktijd van het derde kwartaal gebouwd. In de reguliere werktijd van het vierde kwartaal worden 25 zeilboten gemaakt om te voldoen aan de vraag in het vierde kwartaal. 55

56 2 Transport probleem Voor de doelfunctie van het primale transportprobleem geldt dan: 9 13 i=1 j=10 c ij x ij = = En de doelfunctie van het duale transportprobleem is: 9 α i a i + 5 β j b j = i=1 j= = = Hierbij geldt: α = { 430, 30, 0, 50, 0, 50, 0, 0, 0} en β = {430, 450, 450, 400, 0}. Voorbeeld 2.8 Toewijzingsprobleem Het toewijzingsprobleem uit voorbeeld 2.3 is het laatste voorbeeld dat we hier uitwerken. In dit probleem moeten vijf docenten ieder aan een cursus worden toegewezen, zodanig dat de gemiddelde score gemaximaliseerd wordt. In voorbeeld 2.3 hebben we gezien dat dit maximaliseringsprobleem eenvoudig is om te schrijven tot een minimaliseringsprobleem door de gegeven scores van een minteken te voorzien. We beginnen met (zie (2.5)) β = { 7, 9, 7, 9, 9} en α = {0, 0, 1, 2, 0}. In tabel 2.8 is een overzicht gegeven van c ij α i β j voor deze keuze van duale variabelen. Tabel 2.8: c ij α i β j In figuur 2.14 is een overzicht gegeven van het hulpnetwerk behorend bij (α, β). Hierbij zijn de takken van boven naar beneden zoveel mogelijk verzadigd. De takken uit s zijn toevallig direct verzadigd. De optimale toewijzing van cursussen aan docenten is dus: docent 1 doet cursus 1, docent 2 doet cursus 2, docent 3 doet cursus 4, docent 4 doet cursus 3 en docent 5 doet cursus 5. 56

57 2.6 Literatuur D 1 V 1 D 2 V 2 s D 3 V 3 t D 4 V 4 D 5 V 5 Figuur 2.14: Optimale toewijzing De doelfunctie van het primale probleem is gelijk aan: 5 5 c ij x ij = = 38 i=1 j=1 De doelfunctie van het duale probleem is gelijk aan: 5 5 α i + β j = = 38 i=1 j=1 2.6 Literatuur [1] T.H. Cormen, C.E. Leiserson, R.L. Rivest. Introduction to algorithms. The MIT Press, Cambridge (1994). [2] L.R. Ford, D.R. Fulkerson. Flows in Networks. Princeton University Press, (1962). [3] D. Gale, H.W. Kuhn, A.W. Tucker. Linear programming and the theory of games. In T.C. Koopmans, ed. Activity Analysis of Production and Allocation. Wiley, New York, (1951). [4] F.L. Hitchcock. The distribution of a product from several sources to numerous localities. Journal of Mathematical Physics 20, (1941). [5] W.L. Winston. Operations Research. Applications and algorithms. Wadsworth, Inc., Belmont (1994). [6] L.A. Wolsey. Integer programming. John Wiley & Sons, Inc., New York (1988). 57

58 2 Transport probleem In [4] wordt het transportprobleem voor het eerst geformuleerd. De dualiteitsstelling voor lineair programmeren wordt bewezen in [3]. Het algoritme van Ford & Fulkerson komt uit [2]. In [6] wordt het αβ-algoritme toegepast op het toewijzingsprobleem. In plaats van het oplossen van een maximale stroom probleem wordt hier een maximale matching probleem opgelost. Voor een transportprobleem moet echter een maximale stroom probleem opgelost kunnen worden. Maximale stroomproblemen worden behandeld in [1]. De meeste voorbeelden zijn overgenomen uit [5]. 58

59 Hoofdstuk 3 Handelsreiziger probleem Een handelsreiziger moet elke stad in zijn rayon precies eenmaal bezoeken en dan terugkeren naar zijn beginpunt. Gegeven de reiskosten tussen elk tweetal steden wordt gevraagd naar de reisroute met minimale kosten. Dit is het zogenaamde handelsreiziger probleem (in het Engels Traveling Salesman Problem, vaak afgekort met TSP). In dit hoofdstuk geven we eerst een algemene inleiding in paragraaf 3.1. Vervolgens worden in paragraaf 3.2 enkele verwante problemen beschreven. In paragraaf 3.3 wordt het handelsreizigers probleem wiskundig gemodelleerd. Aansluitend wordt in paragraaf 3.4 een exacte oplosmethode beschreven. In paragraaf 3.5 worden enkele benaderende methoden, zogenaamde heuristieken behandeld. De resultaten van deze heuristieken kunnen worden verbeterd middels lokale zoek technieken, die in paragraaf aan de orde komen. In paragraaf 3.6 worden enkele resultaten genoemd en besproken. Tenslotte wordt in paragraaf 3.7 een aantal literatuurverwijzingen gegeven. 3.1 Inleiding Voorbeeld 3.1 Een handelsreizigersprobleem Een handelsreiziger zoekt de kortste route die de steden a, b, c, d en e aandoet, waarbij de reiskosten zijn weergegeven in figuur 3.1. b 3 77 a c e d 36 Figuur 3.1: Een handelsreiziger probleem 59

60 3 Handelsreiziger probleem Route a b c d e a heeft kosten 206. Route a b e c d a heeft kosten 89. Een route (ook wel Hamilton-circuit genoemd) kunnen we representeren door middel van een cyclische permutatie π van de steden: Als stad j direct na stad i bezocht wordt dan is π(i) = j. Als c ij de kosten voorstelt voor de reis van stad i naar stad j, en het aantal steden is n, dan worden de kosten verbonden met de route die wordt bepaald door de cyclische permutatie π, gegeven door: n i=1 c iπ(i) De routes in het voorbeeld worden bepaald door de permutaties (a, b, c, d, e) en (a, b, e, c, d). De n n matrix C = (c ij ) met 1 i, j n heet de afstandsmatrix van het gegeven TSP. Als er geen weg loopt van stad i naar stad j dan geldt c ij =. Een TSP heet symmetrisch als c ij = c ji i, j. In alle andere gevallen heet het TSP asymmetrisch. Het TSP in het voorbeeld is symmetrisch, de afstandsmatrix is: Een moeilijk probleem Het TSP is een klassiek probleem in de combinatorische optimalisering. De eenvoud van de formulering is bedrieglijk. Het TSP is berucht omdat het zo moeilijk op te lossen is. Als het aantal steden n is, dan is het aantal mogelijke routes voor de handelsreiziger gelijk aan (n 1)! in het asymmetrische geval en 1 2 (n 1)! in het symmetrische geval. Dit is eenvoudig in te zien: Voor de eerste stad op de route zijn er n mogelijke keuzes, voor de tweede stad zijn er n 1 keuzes, voor de derde stad zijn er n 2 keuzes, etc. Omdat de route gesloten is (het beginpunt en het eindpunt zijn gelijk) maakt het niet uit in welke van de n steden we beginnen. Het aantal routes is dus n! n = (n 1)!. Als het TSP symmetrisch is, maakt het ook niet uit of de route links of rechtsom doorlopen wordt, vandaar dat in het symmetrische geval het aantal routes gelijk is aan 1 2 (n 1)!. Als n = 50 dan geldt (n 1)! = 6, Een directe (dat wil zeggen enumeratieve) benadering van het probleem, waarbij voor alle routes de lengte wordt berekend, zou op een onwaarschijnlijk snelle computer met een kloksnelheid van 1 Terahertz (= 1000 Gigaherz) ongeveer 1, jaar rekentijd nodig hebben. Voor n = 23 is de rekentijd al veel minder, maar toch altijd nog meer dan 35 jaar. Het werd daarom als een grote doorbraak beschouwd toen Dantzig, Fulkerson en Johnson in 1954 een methode publiceerden waarmee zij een probleem met 49 steden konden oplossen. In die tijd was dat een enorme prestatie. Sindsdien 60

61 3.1 Inleiding heeft het handelsreizigersprobleem vaak gediend om er de kracht van nieuwe optimaliseringstechnieken mee te testen. De competitie om wie het grootste handelsreizigersprobleem kan oplossen gaat nog altijd door, zie tabel 3.1. Tabel 3.1: Resultaten voor het handelsreizigersprobleem. Jaar Team Steden 1954 G. Dantzig, R. Fulkerson, S. Johnson M. Held, R.M Karp P.M. Camerini, L. Fratta, F. Maffioli M. Grötschel H. Crowder, M.W. Padberg M.W. Padberg, G. Rinaldi M. Grötschel, O. Holland M.W. Padberg, G. Rinaldi D. Applegate, R. Bixby, V. Chvátal, W. Cook D. Applegate, R. Bixby, V. Chvátal, W. Cook D. Applegate, R. Bixby, V. Chvátal, W. Cook Het record staat momenteel op een handelsreizigersroute langs steden in Duitsland. De berekening van deze route vergde meer dan 18 CPU jaren. In werkelijkheid werd de oplossing in enkele maanden gevonden door het rekenwerk te verdelen over een netwerk van 110 werkstations. Deze route is weergegeven in figuur 3.2. Figuur 3.2: Optimale oplossing van een TSP met steden. 61

Transport, Routing- en Schedulingproblemen. Ir. H.N. Post

Transport, Routing- en Schedulingproblemen. Ir. H.N. Post Transport, Routing- en Schedulingproblemen Ir. H.N. Post 24 januari 2004 Inhoudsopgave 1 Kortste pad probleem 7 1.1 Definities...................................... 7 1.2 Basisalgoritme...................................

Nadere informatie

Overzicht. 1. Definities. 2. Basisalgoritme. 3. Label setting methoden. 4. Label correcting methoden. 5. Ondergrenzen. 6.

Overzicht. 1. Definities. 2. Basisalgoritme. 3. Label setting methoden. 4. Label correcting methoden. 5. Ondergrenzen. 6. Overzicht 1. Definities 2. Basisalgoritme 3. Label setting methoden 4. Label correcting methoden 5. Ondergrenzen 6. Resultaten Kortste Pad Probleem 1 Definities Een graaf G = (V, E) bestaat uit een verzameling

Nadere informatie

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen 08-04-2005

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen 08-04-2005 Transport-, Routing- en Schedulingproblemen Wi4062TU / Wi487TU / a86g Uitwerkingen 08-04-2005 1 Transportprobleem Onderdeel a Fabriek 1 kan 120 ton staal fabriceren in 40 uur. Voor fabriek 2 is dit 150

Nadere informatie

Overzicht. Inleiding. Toepassingen. Verwante problemen. Modellering. Exacte oplosmethode: B&B. Insertie heuristieken. Local Search

Overzicht. Inleiding. Toepassingen. Verwante problemen. Modellering. Exacte oplosmethode: B&B. Insertie heuristieken. Local Search Overzicht Inleiding Toepassingen Verwante problemen Modellering Exacte oplosmethode: B&B Insertie heuristieken Local Search Handelsreizigersprobleem 1 Cyclische permutatie van steden b 3 77 a 93 21 42

Nadere informatie

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen Transport-, Routing- en Schedulingproblemen Wi4062TU / Wi487TU / a86g Uitwerkingen 28-03-2003 1 Docenten Onderdeel a Er zijn 6 vakken V 1, V 2,..., V 6. Vak V j heeft een vraag b j = 1, voor j = 1, 2,...,

Nadere informatie

Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel.

Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel. Grafen Grafen Een graaf bestaat uit een verzameling punten (ook wel knopen, of in het engels vertices genoemd) en een verzameling kanten (edges) of pijlen (arcs), waarbij de kanten en pijlen tussen twee

Nadere informatie

Kortste Paden. Algoritmiek

Kortste Paden. Algoritmiek Kortste Paden Toepassingen Kevin Bacon getal Six degrees of separation Heeft een netwerk de small-world eigenschap? TomTom / Google Maps 2 Kortste paden Gerichte graaf G=(N,A), en een lengte L(v,w) voor

Nadere informatie

1 Vervangingsstrategie auto

1 Vervangingsstrategie auto Transport-, Routing- en Schedulingproblemen Wi4062TU / Wi487TU / a86g Uitwerkingen 28-03-2002 1 Vervangingsstrategie auto Onderdeel a Zij V = {0, 1, 2, 3, 4, 5, 6}, waarbij knoop i staat voor het einde

Nadere informatie

Minimum Opspannende Bomen. Algoritmiek

Minimum Opspannende Bomen. Algoritmiek Minimum Opspannende Bomen Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee greedy algoritmen + tijd en datastructuren: Het algoritme van

Nadere informatie

Begrenzing van het aantal iteraties in het max-flow algoritme

Begrenzing van het aantal iteraties in het max-flow algoritme Begrenzing van het aantal iteraties in het max-flow algoritme Het oplossen van het maximum stroom probleem met behulp van stroomvermeerderende paden werkt, maar het aantal iteraties kan aardig de spuigaten

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 8 Leo van Iersel Technische Universiteit Delft 2 november 2016 Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 1 / 28 Minimum Opspannende Boom (Minimum Spanning

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 8 Leo van Iersel Technische Universiteit Delft 28 oktober 2015 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 1 / 25 Definitie Een boom is een samenhangende

Nadere informatie

Twaalfde college complexiteit. 11 mei 2012. Overzicht, MST

Twaalfde college complexiteit. 11 mei 2012. Overzicht, MST College 12 Twaalfde college complexiteit 11 mei 2012 Overzicht, MST 1 Agenda voor vandaag Minimum Opspannende Boom (minimum spanning tree) als voorbeeld van greedy algoritmen Overzicht: wat voor technieken

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

Optimaliseren in Netwerken

Optimaliseren in Netwerken Optimaliseren in Netwerken Kees Roos e-mail: C.Roos@tudelft.nl URL: http://www.isa.ewi.tudelft.nl/ roos Kaleidoscoop college Zaal D, Mekelweg 4, TU Delft 11 October, A.D. 2006 Optimization Group 1 Onderwerpen

Nadere informatie

Computationele Intelligentie

Computationele Intelligentie Computationele Intelligentie Uitwerking werkcollege Representatie, Ongeïnformeerd zoeken, Heuristisch zoeken 1 lokkenwereld a. De zoekboom die door het dynamische breadth-first search algoritme wordt gegenereerd

Nadere informatie

Benaderingsalgoritmen

Benaderingsalgoritmen Benaderingsalgoritmen Eerste hulp bij NP-moeilijkheid 1 Herhaling NP-volledigheid (1) NP: er is een polynomiaal certificaat voor jainstanties dat in polynomiale tijd te controleren is Een probleem A is

Nadere informatie

Kortste Paden. Algoritmiek

Kortste Paden. Algoritmiek Kortste Paden Vandaag Kortste Paden probleem All pairs / Single Source / Single Target versies DP algoritme voor All Pairs probleem (Floyd s algoritme) Dijkstra s algoritme voor Single Source Negatieve

Nadere informatie

l e x e voor alle e E

l e x e voor alle e E Geselecteerde uitwerkingen Werkcollege Introduceer beslissingsvariabelen x e met x e = als lijn e in de boom zit en anders x e = 0. De doelfunctie wordt: min e E l e x e Voor elke deelverzameling S V met

Nadere informatie

Tentamen combinatorische optimalisatie Tijd:

Tentamen combinatorische optimalisatie Tijd: Tentamen combinatorische optimalisatie 26-05-2014. Tijd: 9.00-11.30 Tentamen is met gesloten boek. Beschrijf bij elke opgave steeds het belangrijkste idee. Notatie en exacte formulering is van minder belang.

Nadere informatie

Tiende college algoritmiek. 14 april Gretige algoritmen

Tiende college algoritmiek. 14 april Gretige algoritmen College 10 Tiende college algoritmiek 1 april 011 Gretige algoritmen 1 Greedy algorithms Greed = hebzucht Voor oplossen van optimalisatieproblemen Oplossing wordt stap voor stap opgebouwd In elke stap

Nadere informatie

2WO12: Optimalisering in Netwerken

2WO12: Optimalisering in Netwerken 2WO12: Optimalisering in Netwerken Leo van Iersel Technische Universiteit Eindhoven (TU/E) en Centrum Wiskunde & Informatica (CWI) 27 februari 2014 http://homepages.cwi.nl/~iersel/2wo12/ l.j.j.v.iersel@gmail.com

Nadere informatie

V = {a, b, c, d, e} Computernetwerken: de knopen zijn machines in het netwerk, de kanten zijn communicatiekanalen.

V = {a, b, c, d, e} Computernetwerken: de knopen zijn machines in het netwerk, de kanten zijn communicatiekanalen. WIS14 1 14 Grafen 14.1 Grafen Gerichte grafen Voor een verzameling V is een binaire relatie op V een verzameling geordende paren van elementen van V. Voorbeeld: een binaire relatie op N is de relatie KleinerDan,

Nadere informatie

Computationele Intelligentie

Computationele Intelligentie Computationele Intelligentie Uitwerking werkcollege Representatie, Ongeïnformeerd zoeken, Heuristisch zoeken 1 lokkenwereld a. De zoekboom die door het dynamische breadth-first search algoritme wordt gegenereerd

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 11 Leo van Iersel Technische Universiteit Delft 25 november 2015 Leo van Iersel (TUD) TW2020 Optimalisering 25 november 2015 1 / 28 Vandaag Vraag Voor welke problemen

Nadere informatie

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra College 10 Tiende college algoritmiek mei 013 Gretige algoritmen, Dijkstra 1 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag van n (n 0) eurocent. Alle

Nadere informatie

Vierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument

Vierde college complexiteit. 26 februari Beslissingsbomen en selectie Toernooimethode Adversary argument Complexiteit 2019/04 College 4 Vierde college complexiteit 26 februari 2019 Beslissingsbomen en selectie Toernooimethode Adversary argument 1 Complexiteit 2019/04 Zoeken: samengevat Ongeordend lineair

Nadere informatie

Branch-and-Bound en Cutting Planes

Branch-and-Bound en Cutting Planes Branch-and-Bound en Cutting Planes Vandaag: Er is nog geen algoritme om ILP s in polynomiale tijd op te lossen. Twee opties: 1 Exponentiëel algoritme dat optimale oplossing geeft 2 Polynomiaal algoritme

Nadere informatie

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University Discrete Wiskunde, College 12 Han Hoogeveen, Utrecht University Dynamische programmering Het basisidee is dat je het probleem stap voor stap oplost Het probleem moet voldoen aan het optimaliteitsprincipe

Nadere informatie

Modelleren C Appels. Christian Vleugels Sander Verkerk Richard Both. 2 april 2010. 1 Inleiding 2. 3 Data 3. 4 Aanpak 3

Modelleren C Appels. Christian Vleugels Sander Verkerk Richard Both. 2 april 2010. 1 Inleiding 2. 3 Data 3. 4 Aanpak 3 Modelleren C Appels Christian Vleugels Sander Verkerk Richard Both 2 april 2010 Inhoudsopgave 1 Inleiding 2 2 Probleembeschrijving 2 3 Data 3 4 Aanpak 3 5 Data-analyse 4 5.1 Data-analyse: per product.............................

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2012 2013, tweede zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

De statespace van Small World Networks

De statespace van Small World Networks De statespace van Small World Networks Emiel Suilen, Daan van den Berg, Frank van Harmelen epsuilen@few.vu.nl, daanvandenberg1976@gmail.com, Frank.van.Harmelen@cs.vu.nl VRIJE UNIVERSITEIT AMSTERDAM 2 juli

Nadere informatie

8. Complexiteit van algoritmen:

8. Complexiteit van algoritmen: 8. Complexiteit van algoritmen: Voorbeeld: Een gevaarlijk spel 1 Spelboom voor het wespenspel 2 8.1 Complexiteit 4 8.2 NP-problemen 6 8.3 De oplossing 7 8.4 Een vuistregel 8 In dit hoofdstuk wordt het

Nadere informatie

Datastructuren en Algoritmen

Datastructuren en Algoritmen Datastructuren en Algoritmen Tentamen Vrijdag 6 november 2015 13.30-16.30 Toelichting Bij dit tentamen mag je gebruik maken van een spiekbriefje van maximaal 2 kantjes. Verder mogen er geen hulpmiddelen

Nadere informatie

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Uitwerking tentamen Algoritmiek 10 juni :00 13:00 Uitwerking tentamen Algoritmiek 10 juni 2014 10:00 13:00 1. Dominono s a. Toestanden: n x n bord met in elk hokje een O, een X of een -. Hierbij is het aantal X gelijk aan het aantal O of hooguit één hoger.

Nadere informatie

Heuristieken en benaderingsalgoritmen. Algoritmiek

Heuristieken en benaderingsalgoritmen. Algoritmiek Heuristieken en benaderingsalgoritmen Wat te doen met `moeilijke optimaliseringsproblemen? Voor veel problemen, o.a. optimaliseringsproblemen is geen algoritme bekend dat het probleem voor alle inputs

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 10 Leo van Iersel Technische Universiteit Delft 23 november 2016 Leo van Iersel (TUD) TW2020 Optimalisering 23 november 2016 1 / 40 Vraag Ik heb het deeltentamen niet

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2012 2013, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Hoofdstuk!7!Kortste!paden!

Hoofdstuk!7!Kortste!paden! oofdstukkortstepaden oofdstukkortstepaden In een gewogen graaf is men soms geïnteresseerd in het kortste pad tussen twee punten: dat is een pad, waarbij de som van de gewichten zo klein mogelijk is..inleiding

Nadere informatie

Geldwisselprobleem van Frobenius

Geldwisselprobleem van Frobenius Geldwisselprobleem van Frobenius Karin van de Meeberg en Dieuwertje Ewalts 12 december 2001 1 Inhoudsopgave 1 Inleiding 3 2 Afspraken 3 3 Is er wel zo n g? 3 4 Eén waarde 4 5 Twee waarden 4 6 Lampenalgoritme

Nadere informatie

Minimum Spanning Tree

Minimum Spanning Tree Minimum Spanning Tree Wat is MST? Minimum spanning tree De meest efficiënte manier vinden om een verbonden netwerk op te bouwen Wat is een tree/boom? Graaf G: een verzameling knopen (vertices): V een verzameling

Nadere informatie

1 Rekenen in eindige precisie

1 Rekenen in eindige precisie Rekenen in eindige precisie Een computer rekent per definitie met een eindige deelverzameling van getallen. In dit hoofdstuk bekijken we hoe dit binnen een computer is ingericht, en wat daarvan de gevolgen

Nadere informatie

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie

Nadere informatie

Tiende college algoritmiek. 26 april Gretige algoritmen

Tiende college algoritmiek. 26 april Gretige algoritmen Algoritmiek 01/10 College 10 Tiende college algoritmiek april 01 Gretige algoritmen 1 Algoritmiek 01/10 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag

Nadere informatie

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra Algoritmiek 017/Gretige Algoritmen Tiende college algoritmiek 13/1 april 017 Gretige Algoritmen Algoritme van Dijkstra 1 Algoritmiek 017/Gretige Algoritmen Muntenprobleem Gegeven onbeperkt veel munten

Nadere informatie

Netwerkstroming. Algoritmiek

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

Nadere informatie

Optimalisering en Complexiteit, College 10. Begrensde variabelen. Han Hoogeveen, Utrecht University

Optimalisering en Complexiteit, College 10. Begrensde variabelen. Han Hoogeveen, Utrecht University Optimalisering en Complexiteit, College 10 Begrensde variabelen Han Hoogeveen, Utrecht University Begrensde variabelen (1) In veel toepassingen hebben variabelen zowel een ondergrens als een bovengrens:

Nadere informatie

Tweede college complexiteit. 12 februari Wiskundige achtergrond

Tweede college complexiteit. 12 februari Wiskundige achtergrond College 2 Tweede college complexiteit 12 februari 2019 Wiskundige achtergrond 1 Agenda vanmiddag Floor, Ceiling Rekenregels logaritmen Tellen Formele definitie O, Ω, Θ met voorbeelden Stellingen over faculteiten

Nadere informatie

1 In deze opgave wordt vijftien maal telkens drie beweringen gedaan waarvan er één juist is. Kruis de juiste bewering aan. (2pt. per juist antwoord).

1 In deze opgave wordt vijftien maal telkens drie beweringen gedaan waarvan er één juist is. Kruis de juiste bewering aan. (2pt. per juist antwoord). Tentamen Optimalisering (IN2805-I) Datum: 3 april 2008, 14.00 17.00. Docent: Dr. J.B.M. Melissen Naam: Studienummer: 1 In deze opgave wordt vijftien maal telkens drie beweringen gedaan waarvan er één juist

Nadere informatie

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie

Vierde college complexiteit. 16 februari Beslissingsbomen en selectie Complexiteit 2016/04 College 4 Vierde college complexiteit 16 februari 2016 Beslissingsbomen en selectie 1 Complexiteit 2016/04 Zoeken: samengevat Ongeordend lineair zoeken: Θ(n) sleutelvergelijkingen

Nadere informatie

Elfde college algoritmiek. 10 mei Algoritme van Dijkstra, Gretige Algoritmen

Elfde college algoritmiek. 10 mei Algoritme van Dijkstra, Gretige Algoritmen lgoritmiek 019/lgoritme van ijkstra lfde college algoritmiek 10 mei 019 lgoritme van ijkstra, Gretige lgoritmen 1 lgoritmiek 019/ynamisch programmeren Programmeeropdracht 3 Lange Reis 0 10 10 1 1 100 0

Nadere informatie

Uitwerking tentamen Algoritmiek 9 juli :00 13:00

Uitwerking tentamen Algoritmiek 9 juli :00 13:00 Uitwerking tentamen Algoritmiek 9 juli 0 0:00 :00. (N,M)-game a. Toestanden: Een geheel getal g, waarvoor geldt g N én wie er aan de beurt is (Tristan of Isolde) b. c. Acties: Het noemen van een geheel

Nadere informatie

Sommige praktische IP problemen kunnen worden geformuleerd als optimalisering op een netwerk.

Sommige praktische IP problemen kunnen worden geformuleerd als optimalisering op een netwerk. Netwerkanalyse (H3) Sommige praktische IP problemen kunnen worden geformuleerd als optimalisering op een netwerk. Deze problemen kunnen vaak als continu LP probleem worden opgelost. Door de speciale structuur

Nadere informatie

We zullen in deze les kijken hoe we netwerken kunnen analyseren, om bijvoorbeeld de volgende vragen te kunnen beantwoorden:

We zullen in deze les kijken hoe we netwerken kunnen analyseren, om bijvoorbeeld de volgende vragen te kunnen beantwoorden: Wiskunde voor kunstmatige intelligentie, 24 Les 5 Proces analyse Veel processen laten zich door netwerken beschrijven, waarin een aantal knopen acties aangeeft en opdrachten langs verbindingen tussen de

Nadere informatie

Elfde college algoritmiek. 21 april Dijkstra en Branch & Bound

Elfde college algoritmiek. 21 april Dijkstra en Branch & Bound Algoritmiek 011/11 College 11 Elfde college algoritmiek 1 april 011 Dijkstra en Branch & Bound 1 Algoritmiek 011/11 Kortste paden Gegeven een graaf G met gewichten op de takken, en een beginknoop s. We

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 13 Leo van Iersel Technische Universiteit Delft 9 december 2015 Leo van Iersel (TUD) TW2020 Optimalisering 9 december 2015 1 / 13 Vraag Wat moet ik kennen en kunnen voor

Nadere informatie

Bijzondere kettingbreuken

Bijzondere kettingbreuken Hoofdstuk 15 Bijzondere kettingbreuken 15.1 Kwadratische getallen In het vorige hoofdstuk hebben we gezien dat 2 = 1, 2, 2, 2, 2, 2, 2,.... Men kan zich afvragen waarom we vanaf zeker moment alleen maar

Nadere informatie

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Sjoerd van Egmond LIACS, Leiden University, The Netherlands svegmond@liacs.nl 2 juni 2010 Samenvatting Deze notitie beschrijft een nederlandse

Nadere informatie

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument Complexiteit 2017/05 College 5 Vijfde college complexiteit 21 februari 2017 Selectie Toernooimethode Adversary argument 1 Complexiteit 2017/05 Opgave 28 Gegeven twee oplopend gesorteerde even lange rijen

Nadere informatie

Greedy algoritmes. Algoritmiek

Greedy algoritmes. Algoritmiek Greedy algoritmes Algoritmiek Algoritmische technieken Trucs, methoden, paradigma s voor het ontwerpen van algoritmen Dynamisch Programmeren Divide & Conquer Greedy 2 Greedy algoritme Bouwt de oplossing

Nadere informatie

Netwerkstroming. Algoritmiek

Netwerkstroming. Algoritmiek Netwerkstroming Netwerkstroming Toepassingen in Logistiek Video-streaming Subroutine in algoritmen 2 Vandaag Netwerkstroming: wat was dat ook alweer? Minimum Snede Maximum Stroming Stelling Variant: Edmonds-Karp

Nadere informatie

Tentamen IN3105. Complexiteitstheorie. 16 april 2012, uur

Tentamen IN3105. Complexiteitstheorie. 16 april 2012, uur Faculteit Elektrotechniek, Wiskunde en Informatica Ti Delft Tentamen IN3105 Complexiteitstheorie 16 april 2012, 9.00-12.00 uur Dit tentamen bestaat uit 10 meerkeuzevragen, 5 korte (open) vragen en 2 open

Nadere informatie

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur Tentamen Discrete Wiskunde 0 april 0, :00 7:00 uur Schrijf je naam op ieder blad dat je inlevert. Onderbouw je antwoorden, met een goede argumentatie zijn ook punten te verdienen. Veel succes! Opgave.

Nadere informatie

Machten, exponenten en logaritmen

Machten, exponenten en logaritmen Machten, eponenten en logaritmen Machten, eponenten en logaritmen Macht, eponent en grondtal Eponenten en logaritmen hebben alles met machtsverheffen te maken. Een macht als 4 is niets anders dan de herhaalde

Nadere informatie

Universiteit Utrecht Betafaculteit. Examen Discrete Wiskunde II op donderdag 6 juli 2017, uur.

Universiteit Utrecht Betafaculteit. Examen Discrete Wiskunde II op donderdag 6 juli 2017, uur. Universiteit Utrecht Betafaculteit Examen Discrete Wiskunde II op donderdag 6 juli 2017, 13.30-16.30 uur. De opgaven dienen duidelijk uitgewerkt te zijn en netjes ingeleverd te worden. Schrijf op elk ingeleverd

Nadere informatie

Het minimale aantal sleutels op niveau h is derhalve

Het minimale aantal sleutels op niveau h is derhalve 1 (a) In een B-boom van orde m bevat de wortel minimaal 1 sleutel en maximaal m 1 sleutels De andere knopen bevatten minimaal m 1 sleutels en maximaal m 1 sleutels (b) In een B-boom van orde 5 bevat elke

Nadere informatie

Twaalfde college algoritmiek. 12 mei Branch & Bound

Twaalfde college algoritmiek. 12 mei Branch & Bound Twaalfde college algoritmiek 12 mei 2016 Branch & Bound 1 Branch and bound -1- Branch & bound is alleen toepasbaar op optimalisatieproblemen genereert oplossingen stap voor stap en houdt de tot dusver

Nadere informatie

Containers stapelen. M.L. Koning april 2013

Containers stapelen. M.L. Koning april 2013 Technische Universiteit Eindhoven 2WH03 - Modelleren C Containers stapelen L. van Hees 0769244 M.L. Koning 0781346 2 april 2013 Y.W.A Meeuwenberg 0769217 1 Inleiding De NS vervoert dagelijks grote hoeveelheden

Nadere informatie

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort Algoritmiek 018/Algoritme van Dijkstra Elfde college algoritmiek 18 mei 018 Algoritme van Dijkstra, Heap, Heapify & Heapsort 1 Algoritmiek 018/Algoritme van Dijkstra Uit college 10: Voorb. -1- A B C D

Nadere informatie

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify Algoritmiek 2016/Branch & Bound Twaalfde college algoritmiek 13 mei 2016 Branch & Bound Heap, Heapsort & Heapify 1 Algoritmiek 2016/Branch & Bound TSP met Branch & Bound Mogelijke ondergrenzen voor de

Nadere informatie

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017 Uitgebreide uitwerking Tentamen Complexiteit, juni 017 Opgave 1. a. Een pad van de wortel naar een blad stelt de serie achtereenvolgende arrayvergelijkingen voor die het algoritme doet op zekere invoer.

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 12 Leo van Iersel Technische Universiteit Delft 7 december 2016 Leo van Iersel (TUD) TW2020 Optimalisering 7 december 2016 1 / 25 Volgende week: Study guide Vragenuurtje

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2014 2015, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Samenvatting college 1-12

Samenvatting college 1-12 Samenvatting college 1-12 Probleemformulering Duidelijk definiëren van beslissingsvariabelen Zinvolle namen voor variabelen bv x ij voor ingrediënt i voor product j, niet x 1,..., x 20 Beschrijving van

Nadere informatie

Optimalisering en Complexiteit, College 11. Complementaire speling; duale Simplex methode. Han Hoogeveen, Utrecht University

Optimalisering en Complexiteit, College 11. Complementaire speling; duale Simplex methode. Han Hoogeveen, Utrecht University Optimalisering en Complexiteit, College 11 Complementaire speling; duale Simplex methode Han Hoogeveen, Utrecht University Duale probleem (P) (D) min c 1 x 1 + c 2 x 2 + c 3 x 3 max w 1 b 1 + w 2 b 2 +

Nadere informatie

Datastructuren en algoritmen voor CKI

Datastructuren en algoritmen voor CKI Datastructuren en algoritmen voor CKI Jeroen Bransen 1 11 september 2015 1 met dank aan Hans Bodlaender en Gerard Tel Heaps en heapsort Heap 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 3 2 4 1 16 14 10 8 7 9 3

Nadere informatie

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007 Uitgebreide uitwerking Tentamen Complexiteit, mei 007 Opgave. a. Een beslissingsboom beschrijft de werking van het betreffende algoritme (gebaseerd op arrayvergelijkingen) op elke mogelijke invoer. In

Nadere informatie

Algoritmes in ons dagelijks leven. Leve de Wiskunde! 7 April 2017 Jacobien Carstens

Algoritmes in ons dagelijks leven. Leve de Wiskunde! 7 April 2017 Jacobien Carstens Algoritmes in ons dagelijks leven Leve de Wiskunde! 7 April 2017 Jacobien Carstens Wat is een algoritme? Een algoritme is een eindige reeks instructies die vanuit een gegeven begintoestand naar een beoogd

Nadere informatie

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder?

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder? D -DAG 13 februari 2014: 1+ 1 = 2 (en hoe nu verder?) 1 = 2en hoe nu verder? 1 Inleiding Snel machtsverheffen Stel je voor dat je 7 25 moet uitrekenen. Je weet dat machtsverheffen herhaald vermenigvuldigen

Nadere informatie

Het Eindfeest. Algoritmiek Opgave 6, Voorjaar

Het Eindfeest. Algoritmiek Opgave 6, Voorjaar 1 Achtergrond Het Eindfeest Algoritmiek Opgave 6, Voorjaar 2017 1 Om het (successvol) afsluiten van Algoritmiek te vieren, is er een groot feest georganiseerd. Jij beschikt als enige van je vrienden over

Nadere informatie

Elfde college complexiteit. 23 april NP-volledigheid III

Elfde college complexiteit. 23 april NP-volledigheid III college 11 Elfde college complexiteit 23 april 2019 NP-volledigheid III 1 TSP Als voorbeeld bekijken we het Travelling Salesman/person Problem, ofwel het Handelsreizigersprobleem TSP. Hiervoor geldt: TSP

Nadere informatie

Elfde college algoritmiek. 16 mei Dijkstra, Gretige algoritmen en Branch & Bound

Elfde college algoritmiek. 16 mei Dijkstra, Gretige algoritmen en Branch & Bound Algoritmiek 013/11 College 11 Elfde college algoritmiek 1 mei 013 Dijkstra, Gretige algoritmen en Branch & Bound 1 Algoritmiek 013/11 Voorbeeld -1- A B C D E F G H 9 7 5 A B C D E F G H 0 9 9 7 5 A B C

Nadere informatie

Tiende college algoritmiek. 14 april Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS

Tiende college algoritmiek. 14 april Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS Algoritmiek 2016/Dynamisch Programmeren Tiende college algoritmiek 14 april 2016 Dynamisch Programmeren, Gretige Algoritmen, Kortste Pad met BFS 1 Algoritmiek 2016/Dynamisch Programmeren Houtzaagmolen

Nadere informatie

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Rick van der Zwet 13 november 2010 Samenvatting Dit schrijven zal uitwerkingen van opgaven behandelen uit het boek [JS2009]

Nadere informatie

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Rick van der Zwet 8 december 2010 Samenvatting Dit schrijven zal uitwerkingen van opgaven behandelen uit het boek [JS2009]

Nadere informatie

Oefening 4.3. Zoek een positief natuurlijk getal zodanig dat de helft een kwadraat is, een derde is een derdemacht en een vijfde is een vijfdemacht.

Oefening 4.3. Zoek een positief natuurlijk getal zodanig dat de helft een kwadraat is, een derde is een derdemacht en een vijfde is een vijfdemacht. 4 Modulair rekenen Oefening 4.1. Merk op dat 2 5 9 2 = 2592. Bestaat er een ander getal van de vorm 25ab dat gelijk is aan 2 5 a b? (Met 25ab bedoelen we een getal waarvan a het cijfer voor de tientallen

Nadere informatie

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie

Discrete Structuren. Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie Discrete Structuren Piter Dykstra Sietse Achterop Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 3 maart 2008 GRAFEN & BOMEN Paragrafen 6.1-6.4 Discrete Structuren

Nadere informatie

Netwerkdiagram voor een project. AOA: Activities On Arrows - activiteiten op de pijlen.

Netwerkdiagram voor een project. AOA: Activities On Arrows - activiteiten op de pijlen. Netwerkdiagram voor een project. AOA: Activities On Arrows - activiteiten op de pijlen. Opmerking vooraf. Een netwerk is een structuur die is opgebouwd met pijlen en knooppunten. Bij het opstellen van

Nadere informatie

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding: Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen

Nadere informatie

Selectietoets vrijdag 22 maart 2019

Selectietoets vrijdag 22 maart 2019 Selectietoets vrijdag 22 maart 2019 NEDERLANDSE W I S K U N D E OLYMPIADE Uitwerkingen Opgave 1. Bewijs dat er voor elke positieve gehele n hoogstens twee paren (a, b) van positieve gehele getallen bestaan

Nadere informatie

WISKUNDE B -DAG 2002 1+ 1 = 2. maar en hoe nu verder? 29 november 2002

WISKUNDE B -DAG 2002 1+ 1 = 2. maar en hoe nu verder? 29 november 2002 - 0 - WISKUNDE B -DAG 2002 1+ 1 = 2 maar en hoe nu verder? 29 november 2002 De Wiskunde B-dag wordt gesponsord door Texas Instruments - 1 - Inleiding Snel machtverheffen Stel je voor dat je 7 25 moet uitrekenen.

Nadere informatie

In dit gedeelte worden drie problemen genoemd die kunnen voorkomen in netwerken.

In dit gedeelte worden drie problemen genoemd die kunnen voorkomen in netwerken. Aantekening Wiskunde Steiner Aantekening door D. 2086 woorden 25 mei 2016 2,1 1 keer beoordeeld Vak Wiskunde Resultaten Vragen bij het wetenschappelijk materiaal 9.1 Prototype example, p. 374-376 In dit

Nadere informatie

Tiende college algoritmiek. 4 mei Gretige Algoritmen Algoritme van Dijkstra

Tiende college algoritmiek. 4 mei Gretige Algoritmen Algoritme van Dijkstra Tiende college algoritmiek mei 018 Gretige Algoritmen Algoritme van Dijkstra 1 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag van n (n 0) eurocent. Alle

Nadere informatie

Activiteit 9. Modderstad Minimaal Opspannende Bomen. Samenvatting. Kerndoelen. Leeftijd. Vaardigheden. Materialen

Activiteit 9. Modderstad Minimaal Opspannende Bomen. Samenvatting. Kerndoelen. Leeftijd. Vaardigheden. Materialen Activiteit 9 Modderstad Minimaal Opspannende Bomen Samenvatting Onze maatschappij is verbonden middels heel veel netwerken: telefoonnet, elektriciteitsnet, de riolering, computernetwerk, en het wegennet.

Nadere informatie

Kosten. Computationale Intelligentie. Een zoekprobleem met stapkosten. Een voorbeeld: het vinden van een route. Zoeken met kosten.

Kosten. Computationale Intelligentie. Een zoekprobleem met stapkosten. Een voorbeeld: het vinden van een route. Zoeken met kosten. Kosten omputationale Intelligentie Zoeken met kosten Veel zoekproblemen omvatten kosten: een afstand in kilometers; een geldbedrag; een hoeveelheid tijd;... Voorbeelden van dergelijke problemen zijn: het

Nadere informatie

Hebzucht loont niet altijd

Hebzucht loont niet altijd Thema Discrete wiskunde Hoe verbind je een stel steden met zo weinig mogelijk kilometers asfalt? Hoe maak je een optimaal computernetwerk met kabels die maar een beperkte capaciteit hebben? Veel van zulke

Nadere informatie

Elfde college algoritmiek. 29 april Algoritme van Dijkstra, Branch & Bound

Elfde college algoritmiek. 29 april Algoritme van Dijkstra, Branch & Bound Algoritmiek 01/Algoritme van Dijkstra Elfde college algoritmiek 9 april 01 Algoritme van Dijkstra, Branch & Bound 1 Algoritmiek 01/Algoritme van Dijkstra College 10: Voorbeeld -1- A B C D E F G H 9 7 5

Nadere informatie

Overzicht. Inleiding. Modellering. Duaal probleem. αβ-algoritme. Maximale stroom probleem. Voorbeeld. Transportprobleem 1

Overzicht. Inleiding. Modellering. Duaal probleem. αβ-algoritme. Maximale stroom probleem. Voorbeeld. Transportprobleem 1 Overzicht Inleiding Modellering Duaal probleem αβ-algoritme Maximale stroom probleem Voorbeeld Transportprobleem 1 Inleiding W 1 b 1 a 1 D 1 W 2 b 2 a 2 D 2 a m Dm W n b n depots warenhuizen c ij zijn

Nadere informatie

1 Complexiteit. of benadering en snel

1 Complexiteit. of benadering en snel 1 Complexiteit Het college van vandaag gaat over complexiteit van algoritmes. In het boek hoort hier hoofdstuk 8.1-8.5 bij. Bij complexiteitstheorie is de belangrijkste kernvraag: Hoe goed is een algoritme?

Nadere informatie