700 likes | 819 Views
Route planning in wegen netwerken. Snelweg hiërarchieën versnellen kortste-pad queries. Bart Jansen. Routeplanning. Zoek kortste pad van a naar b in een gewogen, gerichte graaf (“single pair”) Geen: Single source shortest paths All-pairs shortest paths Negatieve gewichten.
E N D
Route planning in wegen netwerken Snelweg hiërarchieën versnellen kortste-pad queries Bart Jansen
Routeplanning • Zoek kortste pad van a naar b in een gewogen, gerichte graaf (“single pair”) • Geen: • Single source shortest paths • All-pairs shortest paths • Negatieve gewichten Bart Jansen
EdgserWiebeDijkstra • VooraanstaandeNederlanseinformaticus • 11 mei 1930 – 6 augustus 2002 • Bedachteenalgoritmevoor single-source shortest paths in 1959 • Algemeenbekendals “Dijkstra’sAlgoritme” Bart Jansen
Dijkstra’salgoritme • Iteratiefalgoritme • Werktalleenalsafstandenniet-negatiefzijn! • Vooriedereknoop v in de graafwordtbijgehouden: • de status: voorlopigof definitief • d[v]: bovengrens op de afstand source v • Algoritmewerkt door in de juistevolgordeknopentebezoeken • Bijbezoeken van knoop v: • Knoop v wordtdefinitief • Allekantenvanuit v wordengerelaxeerd Bart Jansen
Dijkstra’s algoritme • Dijkstra(source s) • Initialisatie: • d[v] = ∞, voor alle v ≠ s • d[s] = 0 • Alle knopen zijn voorlopig • While (er is een voorlopige knoop) • Kies voorlopige knoop v met laagste d[v] waarde • Maak v definitief • Relaxeer uitgaande kanten (v,u) • d[u] min (d[u], d[v] + w[v,u]) DeleteMin DecreaseKey Bart Jansen
Eenvoorbeeld • Kortste pad van s naar t 2 24 3 9 s 18 14 6 2 6 4 19 30 11 5 15 5 6 16 20 t 7 44
Dijkstra's Shortest Path Algorithm 2 24 3 0 9 s 18 14 6 2 6 4 19 30 11 5 15 5 6 16 20 t 7 44 distance label
Dijkstra's Shortest Path Algorithm delmin 2 24 3 0 9 s 18 14 6 2 6 4 19 30 11 5 15 5 6 16 20 t 7 44 distance label
Dijkstra's Shortest Path Algorithm decrease key 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 4 19 30 11 5 15 5 6 16 20 t 7 44 distance label 15 X
Dijkstra's Shortest Path Algorithm delmin 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 4 19 30 11 5 15 5 6 16 20 t 7 44 distance label 15 X
Dijkstra's Shortest Path Algorithm 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 4 19 30 11 5 15 5 6 16 20 t 7 44 15 X
Dijkstra's Shortest Path Algorithm decrease key 33 X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 4 19 30 11 5 15 5 6 16 20 t 7 44 15 X
Dijkstra's Shortest Path Algorithm 33 X 9 X 2 24 3 0 9 delmin s 18 14 X 14 6 2 6 4 19 30 11 5 15 5 6 16 20 t 7 44 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 44 4 X 19 30 11 5 15 5 6 16 20 t 7 44 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 44 4 X 19 30 11 5 15 5 6 16 20 t 7 44 delmin 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 35 44 X 4 X 19 30 11 5 15 5 6 16 20 t 7 44 59 X 15 X
Dijkstra's Shortest Path Algorithm delmin 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 35 44 X 4 X 19 30 11 5 15 5 6 16 20 t 7 44 59 X 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 35 34 44 X X 4 X 19 30 11 5 15 5 6 16 20 t 7 44 51 59 X X 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 35 34 44 X X 4 X 19 30 11 5 15 5 6 16 delmin 20 t 7 44 51 59 X X 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 45 35 34 X 44 X X 4 X 19 30 11 5 15 5 6 16 20 t 7 44 50 51 59 X X X 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 45 35 34 X 44 X X 4 X 19 30 11 5 delmin 15 5 6 16 20 t 7 44 50 51 59 X X X 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 45 35 34 X 44 X X 4 X 19 30 11 5 15 5 6 16 20 t 7 44 50 51 59 X X X 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 45 35 34 X 44 X X 4 X 19 30 11 5 15 5 6 16 20 t 7 44 delmin 50 51 59 X X X 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 45 35 34 X 44 X X 4 X 19 30 11 5 15 5 6 16 20 t 7 44 50 51 59 X X X 15 X
Dijkstra's Shortest Path Algorithm 32 33 X X 9 X 2 24 3 0 9 s 18 14 X 14 6 2 6 45 35 34 X 44 X X 4 X 19 30 11 5 15 5 6 16 20 t 7 44 50 51 59 X X X 15 X
Dijkstra’salgoritme: analyse • Dijkstra(source s) • Initialisatie: • d[v] = ∞, voor alle v ≠ s • d[s] = 0 • Alle knopen zijn voorlopig • While (er is een voorlopige knoop) • Kies voorlopige knoop v met laagste d[v] waarde • Maak v definitief • Relaxeer uitgaande kanten (v,u) • d[u] min (d[u], d[v] + w[v,u]) n keer: DeleteMin m keer: DecreaseKey Bart Jansen
Eigenschappen van Dijkstra • Invariant: als v definitief wordt, is d[v] de lengte van een kortste s-v pad • Correctheidsbewijs in het boek • Voor single-source kortste paden moeten alle knopen worden ontdekt • Maar bij een single pair s-t query: • Algoritme kan stoppen als t definitief wordt gemaakt! Bart Jansen
Dijkstra: Wolk van definitieve knopen • Knopen worden definitief in volgorde van oplopende afstand • Algoritme maakt een wolk van definitieve knopen rondom het startpunt • Terminatie als de wolk het eindpunt raakt • Tijd die wordt gebruikt afhankelijk van hoeveelheid knopen waar naar gerelaxeerd wordt (“ontdekte knopen”) Bart Jansen
Bi-directioneel zoeken • Zoek in 2 richtingen • Voorwaarts vanaf s • Achterwaarts vanaf t • Stop met zoeken zodra 1 knoop van beide kanten definitief is • Oppervlakte van twee wolken met straal (d/2) kleiner dan een wolk met straal d • Ongeveer 2x zo snel s t s t Bart Jansen
Uni- vs. bi-directioneelzoeken t Achterwaarts Voorwaarts s Bart Jansen
Probleemopgelost? Dijkstra’s algoritme doet single-source kortste paden, dus ook single-pair Bart Jansen
Slechts 3 miljoen van de in totaal 23 miljoen kanten Bart Jansen
Wat nu? Preprocessen! • Bij route planning worden meerdere queries gedaan op dezelfde graaf • Gebruik preprocessing om toekomstige queries te versnellen • Bijvoorbeeld: Algoritme voor all-pairs kortste paden • Na preprocessen: optimale afstand in O(1) tijd bekend • Opslaan van alle paden kost O(n2) geheugen • Niet haalbaar op mobiele apparaten Bart Jansen
Ontwerpdoelenvoor preprocessing • Snelheidswinst voor queries • Geheugengebruik moet praktisch blijven (linear) • Exacte berekening van kortste paden, geen benaderingen • Maak gebruik van de karakteristieken van wegennetwerken • Hierarchische structuur; sommige wegen zijn belangrijk, anderen niet • Wegennetwerken zijn ijle grafen: m is Θ(n) Bart Jansen
Heuristiekvoorrouteplanning Bart Jansen
Verfijning van de heuristiek • Uitbreidbaar naar meerdere typen wegen • Maak wegen belangrijker naarmate ze dichter bij s of t lopen • Bij verwerken van knopen die ver weg liggen van s en t: relaxeer geen onbelangrijke wegen • Kwaliteit van de gevonden routes hangt af van de wegen classificatie (handmatig bijstellen!) • Dit is gebruikt in route planners voor auto’s Bart Jansen
Highway hierarchies • Dominik Schultes & Peter Sanders, University of Karlsruhe (2005) • Technieken ervan zijn gebruikt voor het winnen van de 9e DIMACS implementatie challenge (2006) Bart Jansen
Kenmerken van snelweg hiërarchieën • Slim preprocessen om een classificatie van wegen te verkrijgen • Zoekopdrachten worden op dezelfde manier uitgevoerd als door de heuristiek • Minder belangrijke wegen zijn niet relevant als je ver weg bent van je start en eind • Zoeken met een bidirectionele versie van Dijkstra’s algoritme • De zorgvuldige classificatie verzekert optimaliteit Bart Jansen
Definitie van snelweg hiërarchieën • Snelweg hiërarchie voor graaf G bestaat uit niveaus N0, N1, .. , NL voor vantevoren gekozen L • Elk niveau Ni heeft een snelweg netwerk Si en een kern netwerk Ki • Inductieve definitie: • S0 = K0 = G • Snelweg netwerk Si+1 afgeleid van kern Ki • Kern Ki afgeleid van snelweg netwerk Si • Transformatie van kern i naar snelweg netwerk i+1: verwijder kanten • Transformatie van snelweg netwerk i naar kern i: verwijder knopen (toevoegen shortcuts) Bart Jansen
De hiërarchie Verwijder knopen Verwijder kanten Verwijder knopen Verwijder kanten Bart Jansen
SnelwegnetwerkSi+1 • Afgeleid van kern Ki • Kies een buurt-straal ri(u) voor iedere knoop u op niveau i • Vooruit-buurt van knoop u: alle knopen met afstand ≤ rl(u) vanaf u • Achteruit-buurt van knoop u: alle knopen met afstand ≤ rl(u) naar u • Een kant (u,v) uit Ki zit alleen in het snelweg netwerk als er een kortste pad is <s,..,u,v,..,t> tussen knopen in Ki zodat: • v niet in de vooruit-buurt van s zit • u niet in de achteruit-buurt van t zit • Knopen zonder aangrenzende kanten worden verwijderd • In de praktijk: kies een buurt-straal zodat de buurten een bepaalde grootte krijgen Bart Jansen
Voorbeeld van snelweg kanten • Een kant (u,v) uit Ki zit alleen in het snelweg netwerk als er een kortste pad is <s,..,u,v,..,t> tussen knopen in Ki zodat: • v niet in de vooruit-buurt van s zit • u niet in de achteruit-buurt van t zit Bart Jansen
Voorbeeld van snelweg kanten • Een kant (u,v) uit Ki zit alleen in het snelweg netwerk als er een kortste pad is <s,..,u,v,..,t> tussen knopen in Ki zodat: • v niet in de vooruit-buurt van s zit • u niet in de achteruit-buurt van t zit • Buurt: de 4 dichtsbijzijnde knopen Bart Jansen
Voorbeeld van snelweg kanten • Een kant (u,v) uit Ki zit alleen in het snelweg netwerk als er een kortste pad is <s,..,u,v,..,t> tussen knopen in Ki zodat: • v niet in de vooruit-buurt van s zit • u niet in de achteruit-buurt van t zit • Bekijk kant (a,b) • Alleen nodig voor paden vanaf a • Eindpunt altijd in vooruit-buurt s • Geen snelweg kant • Soortgelijk voor (b,a) Bart Jansen
Voorbeeld van snelweg kanten • Een kant (u,v) uit Ki zit alleen in het snelweg netwerk als er een kortste pad is <s,..,u,v,..,t> tussen knopen in Ki zodat: • v niet in de vooruit-buurt van s zit • u niet in de achteruit-buurt van t zit • Bekijk kant (e,f) • Nodig op kortste pad van b naar g • Knoop f niet in vooruit-buurt b • Knoop e niet in achteruit-buurt g • Dus snelweg kant! Bart Jansen
Voorbeeld van snelweg kanten • Een kant (u,v) uit Ki zit alleen in het snelweg netwerk als er een kortste pad is <s,..,u,v,..,t> tussen knopen in Ki zodat: • v niet in de vooruit-buurt van s zit • u niet in de achteruit-buurt van t zit Bart Jansen
Algoritmevoorselecterensnelwegkanten • Voor iedere knoop v: • Bepaal alle kortste paden vanuit v met Dijkstra • Stop wanneer bepaalde condities gelden • Evalueer gevonden kortste paden om snelweg kanten te vinden • Stopcriterium is essentieel voor snelheid! • Preprocessen voor heel West-Europa kan in 16 minuten • Intuitie: • “delegeer” overgebleven werk aan latere opdrachten Bart Jansen
Het overzicht • Hierarchie met niveaus N0 , .. , NL • Ieder niveau i bevat 2 grafen: snelweg netwerk Si en kern Ki • Gezien: stap van kern Ki-1 naar snelweg Si • Nu: snelweg Si naar kern Ki • (Verwijderen van knopen) Bart Jansen
De kern Ki • Afgeleid van snelweg netwerk Si • Bepaal een verzameling O overbodige knopen • Alle knopen uit Si die niet overbodig zijn, komen in de kern Ki • Alle kanten uit Si tussen knopen die niet overbodig zijn, worden overgenomen • En we voegen extra kanten als shortcuts toe • Als er een u-v pad is van overbodige knopen: • voeg directe kant (u,v) toe • w(u,v) wordt lengte van het oude u-v pad Bart Jansen
Voorbeeld van shortcuts • Als er een u-v pad bestaat dat (op u en v na) helemaal bestaat uit overbodige knopen, voegen we een directe kant toe van u naar v • Kies O = {1, 2} 1 4 2 1 2 7 3 2 4 Bart Jansen