Document

advertisement
1.
2.
3.
Snelweg hiërarchieën voor route planning
Opmerkingen over het practicum
Onderzoek naar Algoritmiek in Utrecht
Bart Jansen
24-7-2017
1
Snelweg hiërarchieën versnellen kortste-pad
queries
Bart Jansen


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
24-7-2017
3




Vooraanstaande
Nederlanse
informaticus
11 mei 1930 –
6 augustus 2002
Bedacht een
algoritme voor
single-source
shortest paths in
1959
Algemeen bekend als
“Dijkstra’s Algoritme”
Bart Jansen
24-7-2017
4



Iteratief algoritme
Werkt alleen als afstanden niet-negatief zijn!
Voor iedere knoop v in de graaf wordt
bijgehouden:
◦ de status: voorlopig of definitief
◦ d[v]: bovengrens op de afstand source  v


Algoritme werkt door in de juiste volgorde
knopen te bezoeken
Bij bezoeken van knoop v:
◦ Knoop v wordt definitief
◦ Alle kanten vanuit v worden gerelaxeerd
Bart Jansen
24-7-2017
5

Dijkstra(source s)

Initialisatie:

While (er is een voorlopige knoop)
◦ d[v] = ∞, voor alle v ≠ s
◦ d[s] = 0
◦ Alle knopen zijn voorlopig
DeleteMin
◦ 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])
DecreaseKey
Bart Jansen
24-7-2017
6

Kortste pad van s naar t
2
9
3
24
s
18
14
6
30
11
5
5
15
4
19
6
16
20
7
6
2
44
t
7


0
s
2
9
18

14

30

11
5
5
15

4
19
6
16
20
7
6
2
6
distance
label
3
24
44
t

8
delmin
0
s


2
9
18

14

30

11
5
5
15

4
19
6
16
20
7
6
2
6
distance
label
3
24
44
t

9
decrease key

X 9

0
s
2
9
18
X 14

14

30

11
5
5
15
X
 15
4
19
6
16
20
7
6
2
6
distance
label
3
24
44
t

10
delmin

X 9

0
s
2
9
18
X 14

14
6
2
6

30

4
11
5
5
15
7
X
 15
19
6
16
20
distance
label
3
24
t
44

11

X 9

0
s
9
3
24
2
18
X 14

14
6
2
6

30

4
11
5
5
15
6
16
20
7
X
 15
19
t
44

12
decrease key
X
 33
X 9

0
s
9
3
24
2
18
X 14

14
6
2
6

30

4
11
5
5
15
6
16
20
7
X
 15
19
t
44

13
X
 33
X 9

0
s
9
3
24
2
delmin
18
X 14

14
6
2
6

30

4
11
5
5
15
6
16
20
7
X
 15
19
t
44

14
32
X
 33
X
X 9

0
s
9
3
24
2
18
X 14

14
6
2
6
30

44
X

5
4
11
5
15
6
16
20
7
X
 15
19
t
44

15
32
X
 33
X
X 9

0
s
9
3
24
2
18
X 14

14
6
2
6
30

44
X

5
4
11
5
15
6
16
20
7
X
 15
19
t
44
delmin

16
32
X
 33
X
X 9

0
s
9
3
24
2
18
X 14

14
6
2
6
30
44
X 35
X

5

4
11
5
15
6
16
20
7
X
 15
19
t
44

59 X
17
delmin
32
X
 33
X
X 9

0
s
9
3
24
2
18
X 14

14
6
2
6
30
44
X 35
X

5

4
11
5
15
6
16
20
7
X
 15
19
t
44

59 X
18
32
X
 33
X
X 9

0
s
24
2
9
18
X 14

14
3
6
2
6
30
44
X 34
X 35
X

5

4
11
5
15
6
16
20
7
X
 15
19
t
44
51 59

X X
19
32
X
 33
X
X 9

0
s
24
2
9
18
X 14

14
3
6
2
6
30
44
X 34
X 35
X

5

4
11
5
15
6
20
7
X
 15
19
delmin
16
t
44
51 59

X X
20
32
X
 33
X
X 9

0
s
24
2
9
18
X 14

14
30
44
X 34
X 35
X

5
5
X
 15
11
45 X

4
19
6
16
20
7
6
2
6
15
3
t
44
50 51

X 59
X X
21
32
X
 33
X
X 9

0
s
24
2
9
18
X 14

14
30
44
X 34
X 35
X

5
5
X
 15
11
45 X

4
19
delmin
6
16
20
7
6
2
6
15
3
t
44
50 51

X 59
X X
22
32
X
 33
X
X 9

0
s
24
2
9
18
X 14

14
30
44
X 34
X 35
X

5
5
X
 15
11
45 X

4
19
6
16
20
7
6
2
6
15
3
t
44
50 51

X 59
X X
23
32
X
 33
X
X 9

0
s
24
2
9
18
X 14

14
30
44
X 34
X 35
X

5
5
X
 15
11
45 X

4
19
6
16
20
7
6
2
6
15
3
t
44
50 51

X 59
X X
delmin
24
32
X
 33
X
X 9

0
s
24
2
9
18
X 14

14
30
44
X 34
X 35
X

5
5
X
 15
11
45 X

4
19
6
16
20
7
6
2
6
15
3
t
44
50 51

X 59
X X
25
32
X
 33
X
X 9

0
s
2
9
3
24
18
X 14

14
6
2
6
30
44
X 34
X 35
X

5
11
45 X

4
5
15
6
16
20
7
X
 15
19
t
44
50 51

X 59
X X
26

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
24-7-2017
27




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
24-7-2017
28

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
s
Bart Jansen
t
t
24-7-2017
29
t
Achterwaarts
Voorwaarts
s
Bart Jansen
24-7-2017
30
Dijkstra’s algoritme doet
single-source kortste paden,
dus ook single-pair
Bart Jansen
24-7-2017
31
Slechts 3 miljoen van de in totaal 23 miljoen kanten
Bart Jansen
32



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
◦ Informatie voor alle paren kost W(n2) geheugen
◦ Niet haalbaar op mobiele apparaten
Bart Jansen
24-7-2017
33




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
24-7-2017
34
Geldermalsen
naar oprit
snelweg
•Korte
afstand
Via snelweg van
•Klein
Geldermalsen
netwerk
naar de Uithof
Afrit bij Uithof
naar
Leuvenlaan
Bart Jansen
24-7-2017
•Korte
afstand
35

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
24-7-2017
36


Dominik Schultes & Peter Sanders,
University of Karlsruhe (2005)
Technieken ervan zijn gebruikt voor het
winnen van de 9e DIMACS implementatie
challenge (2006)
Bart Jansen
24-7-2017
37


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
24-7-2017
38



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
24-7-2017
39
Kern 2
Verwijder
knopen
Snelweg 2
Verwijder
kanten
Kern 1
Verwijder
knopen
Snelweg 1
Verwijder
kanten
Snelweg 0 = Kern 0
Bart Jansen
24-7-2017
40



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
24-7-2017
41

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
24-7-2017
42

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
24-7-2017
43

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
24-7-2017
44

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
24-7-2017
45

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
24-7-2017
46

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
24-7-2017
47


Hierarchie met niveaus N0 , .. , NL
Ieder niveau i bevat 2 grafen:
snelweg netwerk Si en kern Ki
Kern 2
Snelweg 2
Kern 1
Snelweg 1
Snelweg 0 = Kern 0

Gezien: stap van kern Ki-1 naar snelweg Si

Nu: snelweg Si naar kern Ki
◦ (Verwijderen van knopen)
Bart Jansen
24-7-2017
48

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
24-7-2017
49


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
2
4
1
3
2
2
7
4
Bart Jansen
24-7-2017
50


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}
13
1
2
4
1
3
2
2
4
7
11
12
Bart Jansen
24-7-2017
51


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
13
2
11
12
Bart Jansen
24-7-2017
52


Kortste paden tussen knopen in de kern blijven behouden
Herinner dat S0 = K0 = G
◦ Het 0e niveau bevat alle knopen

De voorwaartse en achterwaartste zoekopdrachten starten
in niveau 0
Query algoritme zorgt voor correctheid voor hogere
niveaus
Knoop u is overbodig als:

Simpel iteratief algoritme voor vinden overbodige knopen


◦ # shortcuts ≤ c (graadin(u) + graaduit(u))
◦ Zorgt ervoor dat de graaf ijl blijft
Bart Jansen
24-7-2017
53


Afwisselen tussen reduceren van kanten, en
reduceren van knopen
In ieder niveau dalen n en m ruwweg met een
constante factor
◦ Geobserveerd tijdens experimenten


Constructie kan efficient gedaan worden
Geheugengebruik is beperkt tot O(L) extra
informatie per knoop of kant
◦ Buurt grootte, niveaus waarin het object voorkomt, of de
knoop overbodig is
Bart Jansen
24-7-2017
54
Hoe helpt de hiërarchie om
zoekopdrachten te versnellen?
Bart Jansen
24-7-2017
55




Beschouw een s-t query
De query start in niveau 0
Bezoek alle knopen in de voortwaarts buurt van s, en
achterwaarts buurt van t
Kijk naar een kant (u,v) zodat v buiten de voorwaartsbuurt van s ligt, en u buiten de achterwaarts-buurt van t
◦ Als (u,v) geen snelweg kant is, dan ligt hij niet op een kortste
s-t pad (via definitie van de snelweg)
◦ Dus buiten de buurten van s en t zijn alleen snelweg kanten
relevant
◦ Andere kanten hoeven niet te worden gerelaxeerd
Bart Jansen
24-7-2017
56



Beschouw de eerste knoop u die definitief wordt,
en die buiten de buurt van s ligt
Stel dat er een kortste s-t pad P is, dat u bevat
◦ Dus P = <s, .. , u , .. , t >
Het subpad <u , .. , t> moet een kortste pad zijn,
en moet (buiten de buurt van t) alleen snelwegkanten bevatten
◦ Pas hetzelfde idee opnieuw toe, en zoek verder naar een
u-t pad in K1
◦ Gebruik de buurt van u en het snelweg netwerk om dit
zoeken te versnellen
Bart Jansen
24-7-2017
57


In de praktijk: meerdere gelijktijdige zoekfronten, op
verschillende niveaus
Ieder zoekfront zit als entry in de priority queue van het
Dijkstra algoritme
◦ Een key voor knoop u bevat:
 een afstands label d(s,u) (zoals normaal)
 het niveau van dat zoekfront
 het gat van het zoekfront: de afstand tot de rand van de buurt


Query algoritme gebruikt classificatie van kanten voor
versnelling, en classificatie van overbodige knopen
Details zijn complex
Bart Jansen
24-7-2017
58

In normaal bi-directioneel zoeken, stoppen we zodra 1 knoop
van beide kanten definitief is
Dit werkt niet meer in een snelweg hiërarchie

Simpele oplossing



◦ Zoekfronten kunnen in verschillende niveaus bezig zijn, en elkaar
missen
◦ Zodra een knoop van 2 kanten definitief is, kennen we een (mogelijk
niet optimaal) s-t pad
◦ Stop met het behandelen van knopen als die een afstand hebben die
groter is dan de lengte van het bekende pad
Dit is correct omdat de afstands-waarden monotoon stijgen
Blijkt erg goed te werken; minder dan 1% van de zoekruimte
bestaat uit knopen die zijn behandeld nadat de 2 zoekfronten
elkaar hebben gevonden
Bart Jansen
24-7-2017
59

Voorbeeld van een query nabij Karlsruhe
Verschillende niveaus in verschillende kleuren

http://algo2.iti.kit.edu/schultes/hwy/demo/

Bart Jansen
24-7-2017
60
Bart Jansen
24-7-2017
61
Bart Jansen
24-7-2017
62
Bart Jansen
24-7-2017
63
Bart Jansen
24-7-2017
64
Bart Jansen
24-7-2017
65
Bart Jansen
24-7-2017
66
Bart Jansen
24-7-2017
67



Netwerk van West-Europa
(n = 18 * 106, m = 23 * 106)
Preprocessen in 16 minuten
27 bytes geheugen per knoop
◦ Totaal 486 MB geheugen gebruik

Query tijden zijn gemeten voor random gekozen
paren knopen
◦ Gemiddelde versnelling tov. Dijkstra: factor 4002

Enkele milliseconden per query
Bart Jansen
24-7-2017
68
Voordelen





Snel preprocessen
Weinig extra geheugen
nodig
Goede versnelling (4002 x)
Kan worden gecombineerd
met doel-gericht zoeken
(8320 x)
Simpel concept
Nadelen


Statische hiërarchie die niet
inspeelt op wijzigingen
(aanpassen van de graaf of
gewichtsfunctie)
Er zijn snellere methoden
(versnelling>1 000 000 x)
Bart Jansen
24-7-2017
69

Snelweg hiërarchieën reduceren de graaf
recursief
◦ Knoop reductie (shortcuts)
◦ Kant reductie (snelweg kanten)




Query gebaseerd op bidirectionele versie van
Dijkstra’s algoritme
Kan worden geimplementeerd met beperkt
geheugengebruik
Orden van grootte sneller dan Dijkstra
SOFSEM 2009: theoretische analyse van shortcuts
Bart Jansen
24-7-2017
70
Mars vs. Aarde


In de input krijg je een lijst van alle kanten in de
graaf
Stel je doet een Breadth-first search
◦ for each v in Adj[u]: …
◦ kost degree(v) tijd met een adjacency-list
◦ Totale BFS looptijd O(|V| + |E|)

Maar vergelijk:
◦ for (Road r in roads) if (r.sideA == v || r.sideB == v) …
◦ kost O(|E|) tijd!
◦ Totale BFS looptijd O(|V| * |E|)
Bart Jansen
24-7-2017
72


Wat niet werkt:
while (er is een s-t pad in de graaf)
◦ Zoek een s-t pad met breadth-first search, blaas de
goedkoopste kant op het pad op
Bart Jansen
24-7-2017
73
Bart Jansen
24-7-2017
74



Planning
Roosters maken
Graaf algoritmiek
◦ Exacte oplossingen voor NP-complete problemen
 … dus niet in polynomiale tijd
Bart Jansen
24-7-2017
75


Hans Bodlaender, Johan van Rooij en Marcel van
Kooten-Niekerk
NP-compleet
◦ O(1.0222n) algoritme

SOFSEM conferentie
◦ Januari 2011, Slowakije
Bart Jansen
24-7-2017
76



Los probleem bv. in O(2k n) tijd op
n is de grootte van de input, k meet een
specifiek aspect van de input
Vertex Cover
◦ Heeft graaf G een Vertex Cover van grootte k?
◦ Oplosbaar in O(2k n) tijd
Bart Jansen
24-7-2017
77




Stel we hebben een ingewikkeld
geformuleerde ja/nee vraag x
Het berekenen van het antwoord is NPcompleet
Voor de beschrijving van x kan een grote
graaf nodig zijn (veel bits in de beschrijving)
In hoeverre is het mogelijk om vraag x in
polynomiale tijd te herformuleren, zonder het
antwoord te veranderen?
◦ We kunnen het antwoord niet in polynomiale tijd
berekenen
Bart Jansen
24-7-2017
78

Heeft graaf G een vertex cover van grootte k?
◦ Om te vormen in equivalente vraag:

Heeft graaf G’ een vertex cover van grootte k’?
◦ Aantal knopen in G’ hangt alleen af van k, niet van G

Voor andere problemen kunnen we juist bewijzen
zodat zoiets niet bestaat
Bart Jansen
24-7-2017
79

Officieel: onderdeel van masteropleiding
7.5 of 15 ECTS (1 of 2 perioden)
Experimentation project over algoritmiek?

Achtergrond


◦ Sommige NP-complete graafproblemen zijn sneller op te
lossen als de “complexiteit” van de graaf laag is
◦ Verschillende manieren om complexiteit te meten; leiden
tot verschillende snelheidswinsten
◦ Opdracht: implementeer algoritmen om de complexiteit
van bestaande grafen te bepalen, om een schatting te
kunnen maken van de te boeken snelheidswinst
◦ Meer info bij Bart
Bart Jansen
24-7-2017
80
Download