Algorithmen für Routenplanung Vorlesung 2

Ähnliche Dokumente
Algorithmen für Routenplanung 2. Sitzung, Sommersemester 2010 Thomas Pajor 26. April 2010

Algorithmen für Routenplanung 3. Sitzung, Sommersemester 2010 Thomas Pajor 30. April 2010

Algorithmen für Routenplanung

Algorithmen für Routenplanung Vorlesung 3

Algorithmen für Routenplanung Vorlesung 4

Algorithmen für Routenplanung 2. Sitzung, Sommersemester 2012 Thomas Pajor 23. April 2012

Algorithmen für Routenplanung 4. Sitzung, Sommersemester 2010 Thomas Pajor 3. Mai 2010

Algorithmen für Routenplanung Vorlesung 11

Algorithmen für Routenplanung 12. Sitzung, Sommersemester 2011 Reinhard Bauer, Thomas Pajor 6. Juni 2011

Algorithmen für Routenplanung 2. Vorlesung, Sommersemester 2018 Tim Zeitz 23. April 2018

Algorithmen für Routenplanung Vorlesung 7

Algorithmen für Routenplanung

Algorithmen für Routenplanung 8. Sitzung, Sommersemester 2012 Thomas Pajor 21. Mai 2012

Algorithmen für Routenplanung Vorlesung 6

Algorithmen für Routenplanung 4. Vorlesung, Sommersemester 2018 Tim Zeitz 30. April 2018

Algorithmen für Routenplanung 4. Vorlesung, Sommersemester 2017 Moritz Baum 15. Mai 2017

Algorithmen für Routenplanung 2. Vorlesung, Sommersemester 2014 Andreas Gemsa 20. April 2014

Algorithmen für Routenplanung 7. Sitzung, Sommersemester 2010 Thomas Pajor 28. Mai 2010

Algorithmen für Routenplanung Vorlesung 10

Algorithmen für Routenplanung 5. Sitzung, Sommersemester 2010 Thomas Pajor 10. Mai 2010

Algorithmen für Routenplanung 1. Vorlesung, Sommersemester 2015 Andreas Gemsa 13. April 2015

Algorithmen für Routenplanung 13. Sitzung, Sommersemester 2013 Julian Dibbelt 19. Juni 2013

Algorithmen für Routenplanung 15. Vorlesung, Sommersemester 2012 Daniel Delling 20. Juni 2012

Algorithmen für Routenplanung

Algorithmen für Routenplanung 7. Vorlesung, Sommersemester 2012 Daniel Delling 16. Mai 2012

Algorithmen für Routenplanung 14. Sitzung, Sommersemester 2011 Thomas Pajor 16. Juni 2011

Algorithmen für Routenplanung 2. Vorlesung, Sommersemester 2016 Tobias Zündorf 25. April 2016

Algorithmen für Routenplanung 12. Sitzung, Sommersemester 2010 Thomas Pajor 28. Juni 2010

Algorithmen und Datenstrukturen 2

Algorithmen für Routenplanung 11. Sitzung, Sommersemester 2015 Julian Dibbelt 01. Juni 2015

Algorithmen für Routenplanung Vorlesung 5

Algorithmen für Routenplanung

Algorithmen für Routenplanung 12. Sitzung, Sommersemester 2013 Julian Dibbelt 17. Juni 2013

Algorithmen für Routenplanung 13. Vorlesung, Sommersemester 2012 Daniel Delling 13. Juni 2012

Algorithmen für Routenplanung 11. Sitzung, Sommersemester 2013 Julian Dibbelt 10. Juni 2013

Algorithmen für Routenplanung 9. Sitzung, Sommersemester 2010 Thomas Pajor 7. Juni 2010

Zweites Theorie-Übungsblatt - Musterlösung

Algorithmen für Routenplanung 12. Sitzung, Sommersemester 2014 Prof. Christos Zaroliagis 26. Mai 2014

Vorlesung Datenstrukturen

Theorie-Übungsblatt 3 Lösungsvorschläge

Algorithmen für Routenplanung 13. Sitzung, Sommersemester 2011 Reinhard Bauer, Thomas Pajor 9. Juni 2011

Algorithmen für Routenplanung 1. Sitzung, Sommersemester 2010 Thomas Pajor 12. April 2010

Kap. 6.6: Kürzeste Wege

Algorithmen für Routenplanung Vorlesung 12

Algorithmen für Routenplanung Vorlesung 1

Kap. 6.6: Kürzeste Wege

12. Der Algorithmus von Dijkstra. Informatik II für Verkehrsingenieure

Algorithmen für Routenplanung 18. Sitzung, Sommersemester 2015 Moritz Baum 13. Juli 2015

Algorithmen für Routenplanung 1. Vorlesung, Sommersemester 2017 Tobias Zündorf 26. April 2017

Algorithmen für Routenplanung 1. Vorlesung, Sommersemester 2018 Tim Zeitz 17. April 2018

Erinnerung VL

Kürzeste und Schnellste Wege

Algorithmen für Routenplanung 3. Vorlesung, Sommersemester 2016 Tobias Zündorf 27. April 2016

Algorithmen für Routenplanung 6. Vorlesung, Sommersemester 2010 Daniel Delling 17. Mai 2010

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

Lernmodul 7 Algorithmus von Dijkstra

Viertes Übungsblatt - Musterlösung

Personalisierte Routenplanung

Kap. 6.5: Minimale Spannbäume ff

Algorithmen für Routenplanung 13. Vorlesung, Sommersemester 2017 Tobias Zündorf 26. Juni 2017

Schnelle und genaue Routenplanung

Algorithmen für Routenplanung 9. Sitzung, Sommersemester 2013 Julian Dibbelt 27. Mai 2013

Algorithmen für Routenplanung 10. Sitzung, Sommersemester 2012 Daniel Delling 4. Juni 2012

Berechnung von Abständen

9 Minimum Spanning Trees

Algorithmen für Routenplanung 8. Sitzung, Sommersemester 2013 Julian Dibbelt 22. Mai 2013

Von Aachen nach Halle...

Praktikum Routenplanung Vorbesprechung, Wintersemester 2016/2017 Moritz Baum, Valentin Buchhold, Ben Strasser, Tobias Zündorf 19.

1 Kürzeste Pfade in Graphen

Route Planning in Road Networks

Informatik II, SS 2014

2. Übungsblatt zu Algorithmen II im WS 2016/2017

Praktikum 4: Delegation

Algorithmen für Routenplanung 11. Vorlesung, Sommersemester 2016 Ben Strasser 30. Mai 2016

Vortrag 20: Kurze Vektoren in Gittern

10. Übung Algorithmen I

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47

Schnelle und genaue Routenplanung

Algorithmen und Datenstrukturen 2

3.2 Generischer minimaler Spannbaum-Algorithmus

Algorithmen für Routenplanung 11. Vorlesung, Sommersemester 2012 Daniel Delling 6. Juni 2012

Klausur. 18. Juli 2008, 10:15-12:15 Uhr. Name:... Matrikelnummer:... Anzahl beschriebener Blätter (ohne Aufgabenblatt):... D(p) : Y = p x X + p y

Genauer Hochleistungs-Routenplaner

Große Lösungsräume. Leon Schmidtchen Hallo Welt Seminar - LS Leon Schmidtchen Große Lösungsräume Hallo Welt Seminar - LS2

Schnellste Wege, Teil II Stable Marriages

4. Kreis- und Wegeprobleme Abstände in Graphen

Fortgeschrittene Routenplanung. Transportnetzen. Advanced Route Planning in Transportation Networks

Punktlokalisierung. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Graphdurchmusterung, Breiten- und Tiefensuche

Algorithmen und Datenstrukturen

Informatik II, SS 2014

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Übersicht. Datenstrukturen und Algorithmen. Das Rechenproblem: kürzeste Pfade. Übersicht. Vorlesung 17: Kürzeste Pfade (K24) Bellman-Ford Dijkstra

2. Das single-source-shortest-path-problem

Transkript:

Algorithmen für Routenplanung Vorlesung 2 Daniel Delling 1/ 50

2. Beschleunigungstechniken 2/ 50

Letztes Mal breche Suche ab, sobald Ziel abgearbeitet worden ist vermeide Initialisierung durch Counter s t 3/ 50

Letztes Mal breche Suche ab, sobald Ziel abgearbeitet worden ist vermeide Initialisierung durch Counter s t 3/ 50

Letztes Mal breche Suche ab, sobald Ziel abgearbeitet worden ist vermeide Initialisierung durch Counter s t 3/ 50

Themen Heute bidirektionale Suche A Suche A mit Landmarken bidirektionale A Suche 4/ 50

Bidirektionale Suche s t 5/ 50

Bidirektionale Suche s t Idee: starte zweite Suche von t relaxiere rückwärtse nur eingehende Kanten stoppe die Suche, wenn beide Suchräume sich treffen 5/ 50

Bidirektionale Suche Anfrage: alterniere Vorwärts- und Rückwärtsuche vorwärts: relaxiere ausgehende Kanten rückwärts: relaxiere eingehende Kanten 3 µ = 0 3 3 0 0 5 5 6/ 50

Bidirektionale Suche Anfrage: alterniere Vorwärts- und Rückwärtsuche vorwärts: relaxiere ausgehende Kanten rückwärts: relaxiere eingehende Kanten 3 3 µ = 0 3 3 0 0 5 5 5 6/ 50

Bidirektionale Suche Anfrage: alterniere Vorwärts- und Rückwärtsuche vorwärts: relaxiere ausgehende Kanten rückwärts: relaxiere eingehende Kanten 3 3 3 µ = 10 3 3 0 0 5 5 5 5 6/ 50

Bidirektionale Suche Anfrage: alterniere Vorwärts- und Rückwärtsuche vorwärts: relaxiere ausgehende Kanten rückwärts: relaxiere eingehende Kanten 3 3 6 3 µ = 9 3 3 0 0 5 5 5 5 6/ 50

Bidirektionale Suche Anfrage: alterniere Vorwärts- und Rückwärtsuche vorwärts: relaxiere ausgehende Kanten rückwärts: relaxiere eingehende Kanten 3 6 3 6 3 µ = 9 3 3 0 0 5 5 5 5 6/ 50

Bidirektionale Suche Anfrage: alterniere Vorwärts- und Rückwärtsuche vorwärts: relaxiere ausgehende Kanten rückwärts: relaxiere eingehende Kanten 3 6 3 6 3 µ = 9 3 3 0 0 5 5 5 5 6/ 50

Bidirektionale Suche Anfrage: alterniere Vorwärts- und Rückwärtsuche vorwärts: relaxiere ausgehende Kanten rückwärts: relaxiere eingehende Kanten µ: vorläufiges d(s, t) bei relax checken, ob Knoten von anderer Suche schon besucht wenn ja: d(s, t) = µ, M = v stoppe wenn µ < minkey( Q ) + minkey( Q ) kürzester Weg: (s,..., M,..., t) 7/ 50

Bidirektionale Suche: Korrektheit Korrektheit Bidirektionale Suche (BS) ist korrekt BS terminiert spätestens wenn beide Queues leer sind wenn µ > d(s, t) nach Terminierung dann gibt es einen s-t Pfad P der kürzer als µ ist auf P gibt es eine Kante (u, v) mit d(s, u) < minkey( Q ) und d(v, t) < minkey( Q ). also müssen u und v schon abgearbeitet worden sein (o.b.d.a. u vor v beim relaxieren von (u, v) wäre P entdeckt worden und µ aktuasisiert µ < d(s, t): Widerspruch somit korrekt 8/ 50

Strategie zum Wechsel der Suchen Beobachtung: jede Art der Abwechslung klappt sinnvolle Strategien: streng alternierend wähle min{minkey( Q ), minkey( Q )} wähle min{ Q, Q } 9/ 50

Worst-Case s t 10/ 50

Worst-Case s t Suchraum: Unidirektional 10/ 50

Worst-Case s t Suchraum: Bidirektional alternierend Suchraum vergrößert sich 10/ 50

Worst-Case s t Suchraum: Bidirektional min{minkey( Q ), minkey( Q )} Suchraum vergrößert sich 10/ 50

Worst-Case s t Suchraum: Bidirektional min{ Q, Q } Suchraum bleibt gleich 10/ 50

Best-Case Eingabe: k-dimensionales Gitter Suchraum unidirektional: (2 d(s, t)) k Suchraum bidirektional: 2 d(s, t) k Somit Beschleunigung: also exponentielle Beschleunigung! (2 d(s, t)) k 2 d(s, t) k = 2 k 1 11/ 50

Straßennetzwerke In Straßennetzen: Zur Erinnerung: fast planar Suchraum unidirektional: (π d(s, t)) 2 Suchraum bidirektional: 2 (π/2 d(s, t) ) 2 Somit Beschleunigung: (π d(s, t)) 2 2 ( π 2 d(s, t)) 2 = 2 12/ 50

Beispiel 13/ 50

Beispiel 13/ 50

Schematischer Suchraum s t 14/ 50

Schematischer Suchraum s t 14/ 50

Ideensammlung Wie Suche zielgerichtet machen? prunen von Kanten, Knoten die in die falsche Richtung liegen Reihenfolge in der Knoten besucht werden ändern heute letzteres 15/ 50

A Idee: berechne Potential π : V R mit π(u) len(u, v) + π(v) für alle (u, v) E während der Anfrage: nutze d[u] + π(u) als key 16/ 50

Dijkstra - PseudoCode 1 2 3 4 5 6 7 8 9 Dijkstra(G = (V, E),s) d[s] = 0 Q.clear(), Q.add(s, 0) while!q.empty() do u Q.deleteMin() for all edges e = (u, v) E do if d[u] + len(e) < d[v] then d[v] d[u] + len(e) if v Q then Q.decreaseKey(v, d[v]) else Q.insert(v, d[v]) 17/ 50

A - Pseudocode 1 2 3 4 5 6 7 8 9 A (G = (V, E),s) d[s] = 0 Q.clear(), Q.add(s, π(s)) while!q.empty() do u Q.deleteMin() for all edges e = (u, v) E do if d[u] + len(e) < d[v] then d[v] d[u] + len(e) if v Q then Q.decreaseKey(v, d[v] + π(v)) else Q.insert(v, d[v] + π(v)) 18/ 50

A : Beobachtungen Knoten werden in anderer Reihenfolge abgearbeitet Dijkstra: u vor v wenn d[u] < d[v] A : u vor v wenn d[u] + π(u) < d[v] + π(v) π 0 dann gleicher Suchraum Abbruchkriterium bleibt erhalten 19/ 50

A : Korrektheit Korrektheit A ist korrekt neue Längenfunktion len π (u, v) = len(u, v) π(u) + π(v) wenn wir len durch len π ersetzen die Länge aller Pfade zwischen s und t ändern sich um den gleichen Wert π(t) π(s) also bleiben kürzeste Wege erhalten d π (s, u) = d(s, u) π(s) + π(u) Reihenfolge der besuchten Knoten von Dijkstra in G π entspricht der von A in G, da π(s) gleich für alle Knoten A korrekt wenn len π (u, v) 0 für alle (u, v) E folgt aus π(u) len(u, v) + π(v) nennt man ein gültiges Potential 20/ 50

Gültige Potentiale: Eigenschaften I wenn π(u) = d(u, t), dann gilt für alle Kanten (u i, u i+1 ) auf einem kürzestem Weg von s nach t: len π (u i, u i+1 ) = 0 und len π (u, v) > 0 für alle andere Kanten (u, v) werden also nur Knoten auf dem kürzestem Weg angeschaut (sofern Wege eindeutig) also: je besser die untere Schranke, desto höher die Beschleunigung 21/ 50

Gültige Potentiale: Eigenschaften II Kombinierbarkeit von Potentialen Seien π 1 und π 2 gültige Potentiale. Dann ist p = max{π 1, π 2 } auch ein gültiges Potential. len(u, v) π 1 (u) + π 1 (v) 0 und len(u, v) π 1 (u) + π 1 (v) 0 Sei π 1 (u) π 2 (v), anderer Fall symmetrisch wenn π 1 (v) π 2 (v), dann len(u, v) p(u) + p(v) = len(u, v) π 1 (u) + π 1 (v) 0 sonst len(u, v) p(u) + p(v) = len(u, v) π 1 (u) + π 2 (v) len(u, v) π 1 (u) + π 1 (v) 0 Anmerkungen: gilt auch für Minimum und jede beliebige (konvexe) Linearkombination wir können also für jede s t Anfrage ein eigenes Potential wählen 22/ 50

Gültige Potentiale: Eigenschaften III wenn π(t) = 0, dann π(u) > d(u, t) für alle u V ist π(u) eine untere Schranke für d(u, t) π(u) schätzt den Abstand von u nach t A besucht Knoten in aufsteigendem erwarteten Abstand jede Abschätzung d(u, t) ist ein gültiges Potential 23/ 50

Idee: Euklidisches Potential Knoten haben natürliche x und y Koordinaten es gibt eine Maximalgeschwindigtkeit v max in G nimm (x(t) x(u)) 2 (y(t) y(u)) 2 /v max als Potential Probleme: bei jedem Abarbeiten muss zusätzlich potenziert werden Overhead zur Berechnung recht groß Abschätzung sehr konservativ nimmt an, dass es eine Autobahn zum Ziel gibt die zudem noch der Fluglinie folgt praktisch keine Beschleunigung in Transportnetzen 24/ 50

Idee: Potentiale durch Landmarken wähle Landmarken L aus V ( 16) berechne Distanzen von und zu allen Landmarken dann gilt: für alle u V. somit ist d(u, t) d(l 1, t) d(l 1, u) d(u, t) d(u, L 2 ) d(t, L 2 ) π(u) = max{max{d(l, t) d(l, u), d(u, l) d(t, l)}} l L ein gültiges Potential 25/ 50

Eigenschaften Landmarken Was sind gute Landmarken? π(u) = d(u, l 1 ) d(t, l 1 ), π(v) = d(v, l 1 ) d(t, l 1 ) also len π (u, v) = len(u, v) d(u, l 1 ) + d(v, l 1 ) = 0 gemeinsame Kanten (kürzester Weg und Weg zur Landmarke) haben reduzierte Kosten von 0 Also: s gute Landmarken überdeckten viele Kanten für viele Paare trifft unter anderem zu, wenn hinter vielen Knoten Rand des Graphen u v w t l 1 26/ 50

Beispiel gute Landmarken 27/ 50

Berechnung Landmarken mehrere Ansätze: brute force: O(n L n(m + n log n) ) }{{} all pair shortest path + höchste Beschleunigung zu lange Vorberechnung wähle zufällig + schnellste Vorberechnung schlechte Beschleunigung mehrere Heuristiken, die versuchen den Rand zu finden planar farthest avoid lokale Optimierung (maxcover) 28/ 50

Planar-Landmarken Vorgehen: 29/ 50

Planar-Landmarken Vorgehen: suche Mittelpunkt c des Graphen teile Graphen in k Teile 29/ 50

Planar-Landmarken Vorgehen: suche Mittelpunkt c des Graphen teile Graphen in k Teile in jedem Teil wähle Knoten mit maximalen Abstand zu c als Landmarke 29/ 50

Planar-Landmarken Vorgehen: suche Mittelpunkt c des Graphen teile Graphen in k Teile in jedem Teil wähle Knoten mit maximalen Abstand zu c als Landmarke Anmerkungen: benötigt planare Einbettung liefert erstaunlich schlechte Ergebnisse 29/ 50

1 2 3 4 5 6 Farthest-Landmarken Farthest-Landmarks(G,k) L while L < k do if L = 0 then Dijkstra(G,RANDOMNODE) else Dijkstra(G,L) u last settled node L L {u} Anmerkungen: Multi-Startknoten Dijkstra schlecht für kleine k erste Landmarke schlecht weitere Landmarken massiv abhängig von erster 30/ 50

Avoid-Landmarken Vorgehen: berechne kürzeste Wege Baum T r von einem Knoten r weight(u) = d(u, r) d(u, r) size(u) Summe der Gewichte (weight) seiner Nachfolger in T r size(u) = 0 wenn mindestens ein Nachfolger in T r eine Landmarke ist w sei der Knoten mit maximaler Größe (size) traversiere T r startend von w, folge immer dem Knoten mit maximaler Größe das erreichte Blatt wird zu L hinzugefügt Anmerkungen: Verfeinerung von Farthest Strategie 31/ 50

Optimierung von Landmarken Problem: konstruktive Heuristik anfangs gewähle Landmarken eventuell suboptimal Idee: lokale Optimierung berechne mehr landmarken als nötig ( 4k) wähle beste durch Optimierungsfunktion, z.b. maximiere Anzahl überdeckter Kanten, d.h. len(u, v) π(u) + π(v) = 0 maximiere π(s) für 1 Mio. s-t Paare (simuliert Anfragen) avoid + Funktion I wird maxcover genannt 32/ 50

Aktive Landmarken Problem: viele Kanten die zu einer Landmarke führen haben reduziertes Gewicht 0 daher: Landmarken können Suche in die falsche Richtung ziehen Lösung: wähle während Initialisierung eine Untermenge diese, für die p f (s) und p r (t) maximal sind die Landmarken liefern die besten Schranken und sind (hoffentlich) die besten Aktualisiere die aktiven Landmarken während der Suche s w l 2 w t l 1 33/ 50

Datenstruktur Erster Ansatz: 2 L 32-bit Vektoren der Größe n Problem: viele Cache-Misses Besser: 1 64-bit Vektor der Größe L n speicher Distanz von und zu Landmarke in einem 64-bit integer Zugriff auf Knoten mit id k und Landmarken-nummer l in Segment l k + l dadurch deutlich erhöhte Lokalität beschleunigt die Anfragezeit um ca. einen Faktor 4 34/ 50

Bidirektionaler A s t 35/ 50

Bidirektionaler A s t 35/ 50

Bidirektionaler A Erster Ansatz: benutze Vorwärtspot π f und Rückwärtspot π b π f (u) = max{max{d(l, t) d(l, u), d(u, l) d(t, l)}} l L π b (u) = max{max{d(l, u) d(l, s), d(s, l) d(u, l)}} l L 36/ 50

Bidirektionaler A Erster Ansatz: benutze Vorwärtspot π f und Rückwärtspot π b π f (u) = max{max{d(l, t) d(l, u), d(u, l) d(t, l)}} l L π b (u) = max{max{d(l, u) d(l, s), d(s, l) d(u, l)}} l L Problem: Suchen operieren auf unterschiedlichen Längenfunktionen konservatives Abbruchkriterium: stoppe erst, wenn minkey( Q ) > µ oder minkey( Q ) > µ 36/ 50

Bidirektionaler A Zweiter Ansatz: Wann operieren Suchen auf dem gleichen Graphen? wenn len πr (v, u) = lenπ f (u, v) len(u, v) π r (v) + π r (u) = len(u, v) π f (u) + π f (v) π r (v) + π r (u) = π f (u) + π f (v) π r + π f = const. 37/ 50

Bidirektionaler A Idee: nehme Kombination aus π f und π r p f = π f π r 2 p r = π r π f 2 = p f Somit wie bidirektionaler Dijkstra aber mit d(s, u) + p f (u) und d(v, t) + p r (v) als keys stoppe wenn minkey( Q ) + minkey( Q ) > µ pf = µ + p f (s) p f (t) dadurch bidirektional zielgerichtet 38/ 50

ALT [Goldberg et al. 04,05] A, Landmarken, Triangle inequality (Dreiecksungleich) bidirektionaler Landmarken-A (2. Ansatz) aktive Landmarken pruning meist 16 Landmarken meist avoid oder maxcover Landmarken 39/ 50

Experimente Eingaben: Straßennetzwerke Europa: 18 Mio. Knoten, 42 Mio. Kanten USA: 22 Mio. Knoten, 56 Mio. Kanten Evaluation: Vorberechnung in Minuten und zusätzliche Bytes pro Knoten durchschnittlicher Suchraum (#abgearbeitete Knoten) und Suchzeiten (in ms) von 10 000 Zufallsanfragen 40/ 50

Zufallsanfragen Prepro Query Unidir. Query Bidir. time space # settled time spd # settled time spd algorithm [min] [B/n] nodes [ms] up nodes [ms] up Dijkstra 0 0 9 114 385 5 591.6 1.0 4 764 110 2 713.2 2.1 ALT-4 12.1 32 1 289 070 469.1 11.9 355 442 254.1 22.0 ALT-8 26.1 64 1 019 843 391.6 14.3 163 776 127.8 43.8 EUR ALT-16 851 128 815 639 327.6 17.1 74 669 53.6 104.3 ALT-24 145.2 192 742 958 303.7 18.4 56 338 44.2 126.5 ALT-32 27.1 256 683 566 301.4 18.6 40 945 29.4 190.2 ALT-64 68.2 512 604 968 288.5 19.4 25 324 19.6 285.3 Dijkstra 0 0 11 847 523 6 780.7 1.0 7 345 846 3 751.4 1.8 ALT-8 44.5 64 922 897 329.8 20.6 328 140 219.6 30.9 USA ALT-16 103.2 128 762 390 308.6 22.0 180 804 129.3 52.4 ALT-32 35.8 256 628 841 291.6 23.3 109 727 79.5 85.3 ALT-64 92.9 512 520 710 268.8 25.2 68 861 48.9 138.7 41/ 50

Beobachtungen bidirektionale Suche: Beschleunigung von 2 unidirektionaler ALT: mehr als 16 Landmarken nicht sinnvoll bidirektionaler ALT: verdoppelung der Landmarken halbiert den Suchraum (ungefähr) 16 Landmarken: Beschleunigung 100 für Europa 64 Landmarken: Beschleunigung 300 für Europa hoher Speicherverbrauch (Graph-DS: 424 MB, pro Landmarke: 144 MB, Europa) USA schlechter als Europa (Vermutung: schlechtere Hierarchie) 42/ 50

Dijkstra-Rank Problem: Zufallsanfragen geben wenig Informationen Wie ist die Varianz? Werden nahe oder ferne Anfragen beschleunigt? Idee: Dijkstra definiert für gegebenen Startknoten Ordnung für auf den Knoten Dijkstra-Rang r s (u) eines Knoten u für gegebenes s wähle 1000 Startknoten und analysiere jeweils die Suchzeiten um die Knoten mit Rang 2 1,..., 2 log n zu finden zeichne Plot 43/ 50

Lokale Anfragen Bidirektionale Suche Dijkstra Rank Query Time [ms] 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2 17 2 18 2 19 2 20 2 21 2 22 2 23 2 24 0.01 0.1 1 3 10 100 1000 10000 Dijkstra bidirectional Dijkstra 44/ 50

Beobachtungen Ausreißer bei nahen Anfragen (vor allem unidirektional) Beschleunigung unabhängig vom Rang (immer ca. Faktor 2) Varianz etwas höher als bei unidirektionaler Suche manche Anfragen sehr schnell 45/ 50

Lokale Anfragen ALT Dijkstra Rank Query Time [ms] 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2 17 2 18 2 19 2 20 2 21 2 22 2 23 2 24 0.01 0.1 1 3 10 100 1000 10000 Dijkstra unidirectional ALT bidirectional ALT 46/ 50

Beobachtungen Beschleunigung steigt mit Rang kaum Beschleunigung für nahe Anfragen hohe Varianz für ALT Ausreißer bis zu Faktor 100 langsamer als Median 47/ 50

Zusammenfassung Bidirektionale Suche 2. Suche von t auf eingehenden Kanten Abbruch wenn beide Suchen sich treffen verschiedene Strategien, welche Suche gewählt wird Suchraumreduktion abhängig von der Eingabe worst-case Suchraumvergößerung exponentielles Wachstum in hochdimensionalen Gittern Faktor 2 in Straßennetzen 48/ 50

Zusammenfassung ALT Zielgerichtet durch geänderte Reihenfolge, wie Knoten abgearbeitet werden wird erreicht durch hinzufügen eines Knotenpotentials π korrekt wenn len(u, v) π(u) + π(v) 0 für alle Kanten Potentiale durch Landmarken kann bidirektional gemacht werden Beschleunigung von bis zu 300 gegenüber Dijkstra aber hoher Platzverbrauch (Reduktion später) hohe Varianz (manche Anfragen haben keine guten Landmarken) 49/ 50

Literatur Bidirektionale Suche, A und ALT: Andrew Goldberg, Georg Harrelson, SODA 2005 Andrew Goldberg, Renato Werneck, ALENEX 2005 Anmerkung: wird auf der Homepage verlinkt 50/ 50