Route planning in wegen netwerken
This presentation is the property of its rightful owner.
Sponsored Links
1 / 70

Route planning in wegen netwerken PowerPoint PPT Presentation


  • 45 Views
  • Uploaded on
  • Presentation posted in: General

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.

Download Presentation

Route planning in wegen netwerken

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Route planning in wegen netwerken

Route planning in wegen netwerken

Snelweg hiërarchieën versnellen kortste-pad queries

Bart Jansen


Routeplanning

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


Edgser wiebe dijkstra

EdgserWiebeDijkstra

  • VooraanstaandeNederlanseinformaticus

  • 11 mei 1930 – 6 augustus 2002

  • Bedachteenalgoritmevoor single-source shortest paths in 1959

  • Algemeenbekendals “Dijkstra’sAlgoritme”

Bart Jansen


Dijkstra s algoritme

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 algoritme1

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


Een voorbeeld

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

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 algorithm1

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 algorithm2

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 algorithm3

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 algorithm4

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 algorithm5

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 algorithm6

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 algorithm7

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 algorithm8

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 algorithm9

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 algorithm10

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 algorithm11

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 algorithm12

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 algorithm13

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 algorithm14

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 algorithm15

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 algorithm16

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 algorithm17

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 algorithm18

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 algoritme analyse

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

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

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

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 directioneel zoeken

Uni- vs. bi-directioneelzoeken

t

Achterwaarts

Voorwaarts

s

Bart Jansen


Probleem opgelost

Probleemopgelost?

Dijkstra’s algoritme doet single-source kortste paden, dus ook single-pair

Bart Jansen


Route planning in wegen netwerken

Slechts 3 miljoen van de in totaal 23 miljoen kanten

Bart Jansen


Wat nu preprocessen

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


Ontwerpdoelen voor preprocessing

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


Heuristiek voor routeplanning

Heuristiekvoorrouteplanning

Bart Jansen


Verfijning van de heuristiek

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

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

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

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

De hiërarchie

Verwijder knopen

Verwijder kanten

Verwijder knopen

Verwijder kanten

Bart Jansen


Snelweg netwerk s i 1

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

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 kanten1

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 kanten2

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 kanten3

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 kanten4

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


Algoritme voor selecteren snelweg kanten

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

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 k i

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

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


Voorbeeld van shortcuts1

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}

13

1

4

2

1

2

7

3

2

4

11

12

Bart Jansen


Voorbeeld van shortcuts2

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}

13

1

2

11

12

Bart Jansen


Details van reductie tot de kern

Details van reductie tot de kern

  • 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:

    • # shortcuts ≤ c (graadin(u) + graaduit(u))

    • Zorgt ervoor dat de graaf ijl blijft

  • Simpel iteratief algoritme voor vinden overbodige knopen

Bart Jansen


Samenvatting van constructie stappen

Samenvatting van constructie stappen

  • 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


Route queries

Route queries

Hoe helpt de hiërarchie om zoekopdrachten te versnellen?

Bart Jansen


Zoeken in een snelweg hi rarchie

Zoeken in een snelweg hiërarchie

  • 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 voorwaarts-buurt 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


Zoeken vervolgd

Zoeken - vervolgd

  • 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 snelweg-kanten 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


Queries in de praktijk

Queries in de praktijk

  • 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


Terminatie criterium

Terminatie criterium

  • In normaal bi-directioneel zoeken, stoppen we zodra 1 knoop van beide kanten definitief is

  • Dit werkt niet meer in een snelweg hiërarchie

    • Zoekfronten kunnen in verschillende niveaus bezig zijn, en elkaar missen

  • Simpele oplossing

    • 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


Voorbeeld van een query

Voorbeeld van een query

  • Voorbeeld van een query nabij Karlsruhe

  • Verschillende niveaus in verschillende kleuren

Bart Jansen


Route planning in wegen netwerken

Bart Jansen


Route planning in wegen netwerken

Bart Jansen


Route planning in wegen netwerken

Bart Jansen


Route planning in wegen netwerken

Bart Jansen


Route planning in wegen netwerken

Bart Jansen


Route planning in wegen netwerken

Bart Jansen


Route planning in wegen netwerken

Bart Jansen


Experimentele evaluatie

Experimentele evaluatie

  • 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


Afweging

Afweging

  • Snel preprocessen

  • Weinig extra geheugen nodig

  • Goede versnelling (4002 x)

  • Kan worden gecombineerd met doel-gericht zoeken (8320 x)

  • Simpel concept

  • Statische hiërarchie die niet inspeelt op wijzigingen (aanpassen van de graaf of gewichtsfunctie)

  • Er zijn snellere methoden (versnelling>1 000 000 x)

Voordelen

Nadelen

Bart Jansen


Tot slot

Tot slot

  • 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


  • Login