Algorithmen für Routenplanung 19. Vorlesung, Sommersemester 2016 Ben Strasser 6. Juli 2016

Ähnliche Dokumente
Connection Scan. Julian Dibbelt, Thomas Pajor, Ben Strasser, Dorothea Wagner

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

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

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

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

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

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

Algorithmen für Routenplanung Vorlesung 4

Algorithmische Herausforderungen bei der multimodalen Routenplanung Heureka 14 Prof. Dorothea Wagner 3. April 2014

Algorithmen für Routenplanung Vorlesung 2

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

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

Algorithmen für Routenplanung

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

Algorithmen für Routenplanung

Algorithmen für Routenplanung

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

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

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

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

Algorithmen für Routenplanung

Algorithmen für Routenplanung

Routing in Nahverkehrsnetzen

Algorithmen für Routenplanung 10. Vorlesung, Sommersemester 2016 Ben Strasser 25. Mai 2016

ÖV-Routing in GraphHopper. Michael Zilske

Algorithmen für Routenplanung Vorlesung 3

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

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

Das Problem des minimalen Steiner-Baumes

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

Algorithmen für Routenplanung

Fortgeschrittene Routenplanung. Transportnetzen. Advanced Route Planning in Transportation Networks

Erinnerung VL

Praktikum Routenplanung Vorbesprechung, Wintersemester 2014/2015 Moritz Baum, Julian Dibbelt, Ben Strasser 22. Oktober 2014

Praktikum Routenplanung Vorbesprechung, Wintersemester 2013/2014 Moritz Baum, Julian Dibbelt, Ben Strasser 21. Oktober 2013

Vorlesung Datenstrukturen

Algorithmen & Komplexität

Algorithmische Methoden zur Netzwerkanalyse

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

Lernmodul 7 Algorithmus von Dijkstra

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

Viertes Übungsblatt - Musterlösung

Praktikum Routenplanung

Untersuchung von Beschleunigungsverfahren für den Dijkstra-Algorithmus im Zusammenhang mit multimodalem Routing

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

10. Übung Algorithmen I

Algorithmen I - Tutorium 28 Nr. 9

Informatik II: Algorithmen und Datenstrukturen SS 2013

Algorithmen I - Tutorium 28 Nr. 11

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

Kürzeste und Schnellste Wege

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

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

Algorithmen für Routenplanung Vorlesung 6

Praktikum Routenplanung

Maximale s t-flüsse in Planaren Graphen

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

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

Algorithmen für Routenplanung Vorlesung 12

15. Elementare Graphalgorithmen

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

Informatik II, SS 2014

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

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

Algorithmen und Datenstrukturen

Algorithmen I - Tutorium 28 Nr. 3

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

Aufgaben zur Klausurvorbereitung

Algorithmen für Routenplanung 17. Sitzung, Sommersemester 2014 Moritz Baum 7. Juli 2014

Algorithmen für Routenplanung Vorlesung 11

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

Algorithmen für Routenplanung 17. Sitzung, Sommersemester 2013 Julian Dibbelt 8. Juli 2013

Grundlagen: Algorithmen und Datenstrukturen

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

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

Route Planning in Road Networks

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

Informatik II Prüfungsvorbereitungskurs

Algorithmen II Vorlesung am

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

Algorithmen für Routenplanung 15. Vorlesung, Sommersemester 2017 Tobias Zündorf 5. Juli 2017

Algorithmen für Routenplanung

Algorithmen und Datenstrukturen

Wintersemester 2004/ Februar 2005

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

Datenstrukturen und Algorithmen (SS 2013)

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmentechnik - U bung 3 4. Sitzung Tanja Hartmann 03. Dezember 2009

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

Bereichsabfragen II. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

2.1. Konvexe Hülle in 2D

Auskunftssysteme: Kurzwegsuche im öffentlichen Verkehr

Praktikum Routenplanung Themenvorstellung & Gruppeneinteilung, Wintersemester 2015/2016 Moritz Baum, Ben Strasser, Tobias Zündorf 19.

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

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

Transkript:

Algorithmen für Routenplanung 19. Vorlesung, Sommersemester 2016 Ben Strasser 6. Juli 2016 INSTITUT FÜR THEORETISCHE INFORMATIK ALGORITHMIK PROF. DR. DOROTHEA WAGNER KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Beschleunigungstechniken auf zeitexpandiertem Graph Folie 2 6. Juli 2016

Beschleunigungstechniken Idee: Bilde zeitexpandierter Graph Wende bestehende Techniken für Straßen darauf an Folie 3 6. Juli 2016

Beschleunigungstechniken Idee: Bilde zeitexpandierter Graph Wende bestehende Techniken für Straßen darauf an Funktioniert nicht so gut [BDGM09] Graphen haben andere Struktur Folie 3 6. Juli 2016

Beschleunigungstechniken Idee: Bilde zeitexpandierter Graph Wende bestehende Techniken für Straßen darauf an Funktioniert nicht so gut [BDGM09] Graphen haben andere Struktur Es gibt eigene Techniken für Fahrpläne (nicht Gegenstand der Vorlesung) Siehe [BDG + 16] für eine Übersicht Folie 3 6. Juli 2016

Cuts Beobachtung: Stop s entspricht Pfad in zeitexpandiertem Graph Beispiel: (s, 1) (s, 3) (s, 4) Trips entsprechen auch Pfaden Pfade sind Knoten-disjunkt Jeder Knoten ist in einem Trip oder Stop Folie 4 6. Juli 2016

Cuts Jeder Zeitpunkt ist ein Cut: Knoten davor bilden eine Seite Knoten danach bilden eine Seite Es kann sinnvoll sein den Zeitpunkt pro Stop/Trip zeitlich leicht zu verschieben um die Cuts kleiner zu machen Eine Bipartition der Stops und Trips ist ein Cut: Die Knoten in den Pfaden gehören zur Seite ihres Stops/Trips Es gibt noch Cuts die eine Mischung von beiden sind Folie 5 6. Juli 2016

Cuts Jeder Zeitpunkt ist ein Cut: Knoten davor bilden eine Seite Knoten danach bilden eine Seite Es kann sinnvoll sein den Zeitpunkt pro Stop/Trip zeitlich leicht zu verschieben um die Cuts kleiner zu machen Eine Bipartition der Stops und Trips ist ein Cut: Die Knoten in den Pfaden gehören zur Seite ihres Stops/Trips Es gibt noch Cuts die eine Mischung von beiden sind Frage: Was sind die kleinsten balanzierten Cuts? Folie 5 6. Juli 2016

Cuts Frage: Was sind die kleinsten balanzierten Cuts? Antwort: Betrachte Graph mit sehr langem Zeithorizont, z.b. ein Jahr Die Stop-Pfade bilden sehr lange Ketten Wir können nicht zwischen ihnen scheiden da dazwischen zu viele Züge fahren Wenn nur ein Zug pro Tag fährt, dann sind das schon 365 Kanten Wir müssen durch die Stop-Pfade schneiden Anzahl an Stops ist untere Schranke für Cut-Größe Das ist zu groß für partitionsbasierte Techniken Folie 6 6. Juli 2016

Exkurs: Reachability Compression Problemstellung Eingabe: Gerichteter Graph G, Knoten s und t Ausgabe: Ob es einen Pfad von s nach t gibt Folie 7 6. Juli 2016

Exkurs: Reachability Compression Problemstellung Eingabe: Gerichteter Graph G, Knoten s und t Ausgabe: Ob es einen Pfad von s nach t gibt Aufbau 2-Phasen Ansatz: Vorberechung kennt nur G Query kennt auch s und t Läuft unter dem Namen Reachability Compression Viel Literatur Folie 7 6. Juli 2016

Exkurs: Reachability Compression Häufiger Ansatz: Chain-Decomposition Finde möglichst kleine disjunkte Menge von Pfaden, genannt Chains, die alle Knoten überdecken Kanten außerhalb der Pfade werden aufgefasst als Quadrupel aus Ausgangspfad-ID Zielpfad-ID Position im Ausgangspfad Position im Zielpfad Siehe [Jag90] Folie 8 6. Juli 2016

Exkurs: Chain-Decomposition Der Eingabegraph G Folie 9 6. Juli 2016

Exkurs: Chain-Decomposition Eine Chain-Decomposition mit 4 Pfaden Folie 9 6. Juli 2016

Exkurs: Chain-Decomposition 1 2 3 1 2 3 2 1 1 4 5 Positionen entlang der Pfade Folie 9 6. Juli 2016

Exkurs: Chain-Decomposition 1 2 3 1 2 3 2 1 1 4 5 1 2 1 1 3 2 2 1 1 3 1 3 3 2 Die Kanten zwischen den Pfaden Folie 9 6. Juli 2016

Exkurs: Chain-Decomposition 1 5 6 1 2 4 5 1 3 7 8 1 4 5 1 6 2 1 3 4 2 3 3 4 Wir können die Positionen anpassen, so dass die Zielposition immer höher als die Startposition 5 Folie 9 6. Juli 2016

Exkurs: Chain-Decomposition Wie Erreichbarkeit prüfen? Nutze Variante von Dijkstras Algorithmus auf Graph G Chains sind Knoten von G Kanten von G außerhalb der Chains sind Kanten von G Speichere für jede Chain die kleinste Position die erreichbar ist Folie 10 6. Juli 2016

Exkurs: Chain-Decomposition Wie Erreichbarkeit prüfen? Nutze Variante von Dijkstras Algorithmus auf Graph G Chains sind Knoten von G Kanten von G außerhalb der Chains sind Kanten von G Speichere für jede Chain die kleinste Position die erreichbar ist Modifizierte Kantenrelaxierung in G : Es sei (u, v, u p, v p ) die Quadrupel der Kante Kante von u nach v Von Position u p nach v p Es sei P(x) die kleinste bekannte Position auf Chain x Die Relaxierung lautet: Wenn P(u) u p dann setze P(v) min{p(v), v p} Folie 10 6. Juli 2016

Was hat das mit Fahrplänen zu tun? Stop Chain Zeit Position Connection Kante außerhalb der Chain Folie 11 6. Juli 2016

Was hat das mit Fahrplänen zu tun? Stop Chain Zeit Position Connection Kante außerhalb der Chain Schlussfolgerung Fahrpläne sind bereits komprimiert Fahrpläne expandieren um sie dann wieder zu komprimieren macht nicht unbedingt Sinn Folie 11 6. Juli 2016

Zeitabhängige Variante von Dijkstras Algorithmus Folie 12 6. Juli 2016

Idee Idee Nutze ähnlichen Ansatz wie bei zeitabhängiger Straße Knoten sind (erstmal) Stops Wenn es eine Connection zwischen zwei Stops gibt, dann gibt es eine Kante zwischen den Knoten mehere Connections werden zusammengefasst Kanten sind gewichtet durch Reisezeitfunktion oder Ankunftszeitfunktion Folie 13 6. Juli 2016

Ankunftszeitfunktion Ankunftszeit am Zielstop Abfahrtszeit an einem Stop Idee Ankunftszeitfunktion ist Stufenfunktion Stufen entsprechenden abfahrenden Zügen (Wegen Fußwegen kann es lineare Komponenten geben) Folie 14 6. Juli 2016

Ankunftszeitfunktion Idee Ankunftszeit am Zielstop Abfahrende Journeys entsprechen Sprüngen. Abfahrtszeit an einem Stop Ankunftszeitfunktion ist Stufenfunktion Stufen entsprechenden abfahrenden Zügen (Wegen Fußwegen kann es lineare Komponenten geben) Folie 14 6. Juli 2016

FIFO? First-In-First-Out Warten soll sich nicht lohnen Sind die Ankunftszeitfunktionen FIFO? d.h. gilt f (x) < f (y) für x < y Folie 15 6. Juli 2016

FIFO? First-In-First-Out Warten soll sich nicht lohnen Sind die Ankunftszeitfunktionen FIFO? d.h. gilt f (x) < f (y) für x < y Genau genommen nein, da f (x) = f (y) sein kann Warten lohnt sich trotzdem nicht Also quasi-fifo Folie 15 6. Juli 2016

FIFO? First-In-First-Out Warten soll sich nicht lohnen Sind die Ankunftszeitfunktionen FIFO? d.h. gilt f (x) < f (y) für x < y Genau genommen nein, da f (x) = f (y) sein kann Warten lohnt sich trotzdem nicht Also quasi-fifo Die Algorithmen für Linken & Mergen die auf der Straße verwendet werden sind nicht direkt anwendbar, da f 1 nicht existiert Folie 15 6. Juli 2016

Ankunftszeitfunktion Funktion kann als Menge von Paaren (d i, a i ) aufgefasst werden Jedes Paar besteht aus: Abfahrtszeit d i am Abfahrtsstop Ankunftszeit a i am Zielstop Menge darf keine dominierte Einträge enthalten Das ist äquivalent mit quasi-fifo Paare werden sortiert in einem Array gespeichtert Wegen Dominierung simultan sortiert nach d i und a i Folie 16 6. Juli 2016

Dominierung Ziel: Eingabe: Menge von Paaren (d i, a i ) Ausgabe: Teilmenge nicht dominierter Paare Folie 17 6. Juli 2016

Dominierung Ziel: Eingabe: Menge von Paaren (d i, a i ) Ausgabe: Teilmenge nicht dominierter Paare Algorithmus: Sortiere nach einem der Elemente, z.b., sortiere nach d i aufsteigenden Iteriere über die Element Lösche die Paare (d i, a i ) für die gilt a i+1 a i Interpretation: Wenn jetzt ein Zug fährt und später einer fährt und der spätere früher oder gleichzeitig ankommt, dann nimm den späteren. Folie 17 6. Juli 2016

Funktionsevaluation Ziel: Eingabe: Funktion f Ausgabe: Der Wert f (x) Folie 18 6. Juli 2016

Funktionsevaluation Ziel: Eingabe: Funktion f Ausgabe: Der Wert f (x) Algorithmus: Es seien (d i, a i ) die sortierten Paare von f Finde das kleinste j mit x d j mittels binärer Suche oder: gutes Anfangs j raten und dann sequentiell ab da suchen Gebe a j aus Falls es kein j gibt, dann fährt kein Zug mehr und gebe zurück Folie 18 6. Juli 2016

Link Ziel: Eingabe: Zwei Funktionen f und g Ausgabe: Eine Funktion g f (d.h. g(f (x)) für jedes x) Folie 19 6. Juli 2016

Link Ziel: Eingabe: Zwei Funktionen f und g Ausgabe: Eine Funktion g f (d.h. g(f (x)) für jedes x) Algorithmus: Es seien (d i, a i ) die Paare von f Berechne (d i, g(a i )) Filtere dominierte Einträge Folie 19 6. Juli 2016

Merge Ziel: Eingabe: Zwei Funktionen f und g Ausgabe: Eine Funktion min{f, g} (d.h. min{f (x), g(x)} für jedes x) Folie 20 6. Juli 2016

Merge Ziel: Eingabe: Zwei Funktionen f und g Ausgabe: Eine Funktion min{f, g} (d.h. min{f (x), g(x)} für jedes x) Algorithmus: Vereinige die Paare von f und g Geht in Mergesort-artigem Merge-Schritt Filtere dominierte Einträge Folie 20 6. Juli 2016

Problem der frühesten Ankunft d[x] für alle x 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] + f e (τ + d[u]) < d[v] then d[v] d[u] + f e (τ + d[u]) if v Q then Q.decreaseKey(v, d[v]) else Q.insert(v, d[v]) Normaler zeitabhängige Erweiterung von Dijkstras Algorithmus Mit Reisezeitfunktionen f e Folie 21 6. Juli 2016

Problem der frühesten Ankunft d[x] für alle x d[s] τ Q.clear(), Q.add(s, τ) while!q.empty() do u Q.deleteMin() for all edges e = (u, v) E do if d[u] + f e (d[u]) < d[v] then d[v] d[u] + f e (d[u]) if v Q then Q.decreaseKey(v, d[v]) else Q.insert(v, d[v]) Normaler zeitabhängige Erweiterung von Dijkstras Algorithmus Mit Reisezeitfunktionen f e Mit τ initialisieren macht es leicht einfacher Folie 21 6. Juli 2016

Problem der frühesten Ankunft d[x] für alle x d[s] τ Q.clear(), Q.add(s, τ) while!q.empty() do u Q.deleteMin() for all edges e = (u, v) E do if g e (d[u]) < d[v] then d[v] g e (d[u]) if v Q then Q.decreaseKey(v, d[v]) else Q.insert(v, d[v]) Normaler zeitabhängige Erweiterung von Dijkstras Algorithmus Mit Ankunftszeitfunktion g e Mit τ initialisieren macht es leicht einfacher Folie 21 6. Juli 2016

Profile Berechnen Dijkstra-Profil-Erweiterung für Straßengraphen kann verwendet werden Siehe Vorlesung bezüglich Wegesuche in zeitabhängigen Straßennetzen Folie 22 6. Juli 2016

Profile Berechnen Dijkstra-Profil-Erweiterung für Straßengraphen kann verwendet werden Siehe Vorlesung bezüglich Wegesuche in zeitabhängigen Straßennetzen Wiederholung: d(x) bildet nicht mehr auf einen Zeitpunk ab d(x) ist eine Reisezeitfunktion vom Startstop zu x Relaxierung benutzt Link und Merge Operation Knoten können mehrfach aus der Queue genommen werden Keine polynomielle Laufzeitgarantie Folie 22 6. Juli 2016

Self-Pruning Idee: Alternative Profilberechnung Starte eine Suche für jeden abfahrenden Zug am Startstop s Jede Suche löst das einfacherere Problem der frühesten Ankunft Self-Pruning: Nutze Informationen aus einen Suche um andere zu prunen Folie 23 6. Juli 2016

Self-Pruning Idee: Alternative Profilberechnung Starte eine Suche für jeden abfahrenden Zug am Startstop s Jede Suche löst das einfacherere Problem der frühesten Ankunft Self-Pruning: Nutze Informationen aus einen Suche um andere zu prunen Details: Es seien τ 1... τ n die Abfahrtszeitpunkte von früh nach spät Führe Suchen nacheinander aus von spät bis früh aus Self-Pruning: Tentative Distanzen zwischen Anfragen nicht zurück setzen Folie 23 6. Juli 2016

Self-Pruning Q.clear() d[x] für alle x for Abfahrtszeitpunkte τ i absteigend do d[s] τ i Q.add(s, τ i ) while!q.empty() do u Q.deleteMin() for all edges e = (u, v) E do if g e (d[u]) < d[v] then d[v] g e (d[u]) if v Q then Q.decreaseKey(v, d[v]) else Q.insert(v, d[v]) Extrahiere Ausgabe für τ i Folie 24 6. Juli 2016

Self-Pruning Äquivalente Formulierung Es seien d i (x) die tentativen Distanzen nach der Suche mit Startzeit τ i Prune x in der Suche mit Abfahrt τ i wenn d i (x) = d i+1 (x) Folie 25 6. Juli 2016

Self-Pruning Äquivalente Formulierung Es seien d i (x) die tentativen Distanzen nach der Suche mit Startzeit τ i Prune x in der Suche mit Abfahrt τ i wenn d i (x) = d i+1 (x) Interpretation Wenn ich später losfahren kann aber nicht früher beim Zwischenstop x ankomme, dann fahre ich später los Die jetztige Suche kann gestoppt werden, da die Suche mit einem späteren Startzeitpunkt den Weg finden wird Folie 25 6. Juli 2016

Fußwege und Umstiegszeiten Fußwege Modelliert als Kante mit konstanter Reisezeitfunktion Folie 26 6. Juli 2016

Fußwege und Umstiegszeiten Fußwege Modelliert als Kante mit konstanter Reisezeitfunktion Umstiegszeiten Schwieriger Braucht Dummy-Knoten Folie 26 6. Juli 2016

Linien Linien Eine Linie ist eine Menge von Trips Trips in einer Linie haben identische Stopsequenz Trips in einer Linie überholen sich nicht Linien haben eine Richtung Folie 27 6. Juli 2016

Linien Linien Eine Linie ist eine Menge von Trips Trips in einer Linie haben identische Stopsequenz Trips in einer Linie überholen sich nicht Linien haben eine Richtung Beispiele Tram 3 ist keine Linie Stopsequenz ist je nach Richtung anders Tram 3 Richtung Tivoli ist eine Linie Tram 3 Richtung Heide ist eine andere Linie Folie 27 6. Juli 2016

Linien Linien Eine Linie ist eine Menge von Trips Trips in einer Linie haben identische Stopsequenz Trips in einer Linie überholen sich nicht Linien haben eine Richtung Beispiele Tram 3 ist keine Linie Stopsequenz ist je nach Richtung anders Tram 3 Richtung Tivoli ist eine Linie Tram 3 Richtung Heide ist eine andere Linie Tram 6 Richtung Hirtenweg is keine Linie Hälfte der Bahnen fährt ab Rappenwörth Andere Hälft ab Daxlanden Stopsequenz der Tram 6 Richtung Hirtenweg variiert Jeder zweiter Zug des Tram 6 Richtung Hirtenweg ist eine Linie Folie 27 6. Juli 2016

Umstiegszeiten Stops werden durch Stern-Graphen ersetzt Der Stern hat einen Strahl für jede Linie die am Stop hält Kanten von den Linien zum Zentrum sind mit Umstiegszeit gewichtet Kanten von der Mitte zu den Linien haben Gewicht 0 L 1 L 3 L 2 L s 2 L 3 L 1 Folie 28 6. Juli 2016

Umstiegszeiten Stops werden durch Stern-Graphen ersetzt Der Stern hat einen Strahl für jede Linie die am Stop hält Kanten von den Linien zum Zentrum sind mit Umstiegszeit gewichtet Kanten von der Mitte zu den Linien haben Gewicht 0 L 1 0 u s u 0 L 2 0 u L 3 Folie 28 6. Juli 2016

Mehrere Kriterien Mehrere Kriterien werden mit Bags behandelt Analog zu Dijkstras Algorithmus auf zeitexpandiertem Graph Folie 29 6. Juli 2016

RAPTOR Folie 30 6. Juli 2016

RAPTOR [DPW14] Algorithmus um Wegeanfragen in Fahrplänen zu beantworten Steht für: Round-Based Public Transit Optimized Router Benutzt keine Prioritätswarteschlange Arbeitet in Runden Idee: Bestimme in Runde i wohin man mit i oder weniger Umstiegen kommen kann (Wirrwar: im RAPTOR-Paper heißen die Linien Routen) Folie 31 6. Juli 2016

RAPTOR Datenstruktur: Tentative Ankunftszeit d(x) für jeden Stop x Basisalgorithmus: Solange sich d(x) an irgendeinem x ändert: Fahre alle Linien ab Folie 32 6. Juli 2016

RAPTOR Datenstruktur: Tentative Ankunftszeit d(x) für jeden Stop x Basisalgorithmus: Laufe alle Fußwege ab Solange sich d(x) an irgendeinem x ändert: Fahre alle Linien ab Laufe alle Fußwege ab Folie 32 6. Juli 2016

Linie abfahren Organisiere jede Linien als zweidimensionale Tabelle Erste Dimension: Die Trip-Nummer Zweite Dimension: Die Stop-Sequenz Zur einfacheren Darstellung nehmen wir im folgenden an, dass Züge nur sehr kurz halten, d.h., a arr time = b dep time für zwei aufeinanderfolgende Connections a und b Folie 33 6. Juli 2016

Linie abfahren Stop Trip 1 A 7:00 B 7:10 C 7:15 D 7:30 E 7:33 Trip 2 Trip 3 Trip 4 8:00 9:00 10:00 8:10 9:10 10:20 8:15 9:30 10:30 8:30 9:40 10:40 8:33 9:50 10:50 F 7:50 8:50 10:01 11:42 d(x) 9:55 10:40 8:45 7:30 Iteriere über Stops entlang der Linie Speichere frühest erreichbare Trip-ID An jedem Stop: Wechsele in früheren Trip falls möglich Verringere d(x) falls nötig Folie 34 6. Juli 2016

Linie abfahren Stop Trip 1 A 7:00 B 7:10 C 7:15 D 7:30 E 7:33 Trip 2 Trip 3 Trip 4 8:00 9:00 10:00 8:10 9:10 10:20 8:15 9:30 10:30 8:30 9:40 10:40 8:33 9:50 10:50 F 7:50 8:50 10:01 11:42 d(x) 9:55 10:40 8:45 7:30 Iteriere über Stops entlang der Linie Speichere frühest erreichbare Trip-ID An jedem Stop: Wechsele in früheren Trip falls möglich Verringere d(x) falls nötig Folie 34 6. Juli 2016

Linie abfahren Stop Trip 1 A 7:00 B 7:10 C 7:15 D 7:30 E 7:33 Trip 2 Trip 3 Trip 4 8:00 9:00 10:00 8:10 9:10 10:20 8:15 9:30 10:30 8:30 9:40 10:40 8:33 9:50 10:50 F 7:50 8:50 10:01 11:42 d(x) 9:55 10:40 8:45 7:30 Iteriere über Stops entlang der Linie Speichere frühest erreichbare Trip-ID An jedem Stop: Wechsele in früheren Trip falls möglich Verringere d(x) falls nötig Folie 34 6. Juli 2016

Linie abfahren Stop Trip 1 A 7:00 B 7:10 C 7:15 D 7:30 E 7:33 Trip 2 Trip 3 Trip 4 8:00 9:00 10:00 8:10 9:10 10:20 8:15 9:30 10:30 8:30 9:40 10:40 8:33 9:50 10:50 F 7:50 8:50 10:01 11:42 d(x) 9:55 10:40 10:30 8:45 7:30 Iteriere über Stops entlang der Linie Speichere frühest erreichbare Trip-ID An jedem Stop: Wechsele in früheren Trip falls möglich Verringere d(x) falls nötig Folie 34 6. Juli 2016

Linie abfahren Stop Trip 1 A 7:00 B 7:10 C 7:15 D 7:30 E 7:33 Trip 2 Trip 3 Trip 4 8:00 9:00 10:00 8:10 9:10 10:20 8:15 9:30 10:30 8:30 9:40 10:40 8:33 9:50 10:50 F 7:50 8:50 10:01 11:42 d(x) 9:55 10:40 10:30 8:45 7:30 Iteriere über Stops entlang der Linie Speichere frühest erreichbare Trip-ID An jedem Stop: Wechsele in früheren Trip falls möglich Verringere d(x) falls nötig Folie 34 6. Juli 2016

Linie abfahren Stop Trip 1 A 7:00 B 7:10 C 7:15 D 7:30 E 7:33 Trip 2 Trip 3 Trip 4 8:00 9:00 10:00 8:10 9:10 10:20 8:15 9:30 10:30 8:30 9:40 10:40 8:33 9:50 10:50 F 7:50 8:50 10:01 11:42 d(x) 9:55 10:40 10:30 8:45 9:50 7:30 Iteriere über Stops entlang der Linie Speichere frühest erreichbare Trip-ID An jedem Stop: Wechsele in früheren Trip falls möglich Verringere d(x) falls nötig Folie 34 6. Juli 2016

Linie abfahren Stop Trip 1 A 7:00 B 7:10 C 7:15 D 7:30 E 7:33 Trip 2 Trip 3 Trip 4 8:00 9:00 10:00 8:10 9:10 10:20 8:15 9:30 10:30 8:30 9:40 10:40 8:33 9:50 10:50 F 7:50 8:50 10:01 11:42 d(x) 9:55 10:40 10:30 8:45 9:50 7:30 Iteriere über Stops entlang der Linie Speichere frühest erreichbare Trip-ID An jedem Stop: Wechsele in früheren Trip falls möglich Verringere d(x) falls nötig Folie 34 6. Juli 2016

Linie abfahren Effizient Trip wechseln Beobachtung: Oft ist ein Tripwechel nicht nötig frühesten Trip per binärer Suche bestimmen ist deswegen oft nicht sinnvoll Besser: Teste ob der aktuelle Trip noch der früheste ist Falls nicht: Wechsel iterative in den nächsten Trip bis der früheste passende gefunden wurde Folie 35 6. Juli 2016

Column- oder row-major? Der Arbeitsspeicher eines Rechners ist ein großes lineares Array und kein 2D-Array Es gibt deswegen kein 2D-Cache Folie 36 6. Juli 2016

Column- oder row-major? Der Arbeitsspeicher eines Rechners ist ein großes lineares Array und kein 2D-Array Es gibt deswegen kein 2D-Cache Ein n m-array wird als n m großes lineares Array dargestellt Zelle (x, y) steht an Position x m + y oder an Position x + y n Das ist der Unterschied zwischen column- und row-major 1 4 7 10 2 5 8 11 3 6 9 12 Column-major Stark vereinfacht: Cache lädt immer ganze Spalte oder Zeile Was ist hier besser? Folie 36 6. Juli 2016

Column- oder row-major? Der Arbeitsspeicher eines Rechners ist ein großes lineares Array und kein 2D-Array Es gibt deswegen kein 2D-Cache Ein n m-array wird als n m großes lineares Array dargestellt Zelle (x, y) steht an Position x m + y oder an Position x + y n Das ist der Unterschied zwischen column- und row-major 1 2 3 4 5 6 7 8 9 10 11 12 Row-major Stark vereinfacht: Cache lädt immer ganze Spalte oder Zeile Was ist hier besser? Folie 36 6. Juli 2016

Column- oder row-major? Der Arbeitsspeicher eines Rechners ist ein großes lineares Array und kein 2D-Array Es gibt deswegen kein 2D-Cache Ein n m-array wird als n m großes lineares Array dargestellt Zelle (x, y) steht an Position x m + y oder an Position x + y n Das ist der Unterschied zwischen column- und row-major 1 2 3 4 5 6 7 8 9 10 11 12 Row-major Stark vereinfacht: Cache lädt immer ganze Spalte oder Zeile Was ist hier besser? Antwort: Row-major Wir schauen uns einen Eintrag in jeder Spalte an, aber nicht unbedingt in jeder Zeile Folie 36 6. Juli 2016

Optimierungen Aktive Linien Eine Linie ist aktiv wenn sich d(x) in der vorherigen Route für ein Stop x auf der Linie verändert hat Folie 37 6. Juli 2016

Optimierungen Aktive Linien Eine Linie ist aktiv wenn sich d(x) in der vorherigen Route für ein Stop x auf der Linie verändert hat Erster Stop Speichere für jede Linie die früheste Einstiegsmöglichkeit Fahre Linie erst ab da ab Folie 37 6. Juli 2016

Optimierungen Aktive Linien Eine Linie ist aktiv wenn sich d(x) in der vorherigen Route für ein Stop x auf der Linie verändert hat Erster Stop Speichere für jede Linie die früheste Einstiegsmöglichkeit Fahre Linie erst ab da ab Benötigt eine Abbildung von Stop s auf (L i, p i ) Paare L i Linie durch s s ist der p i -te Stop auf Linie L i Folie 37 6. Juli 2016

Optimierungen t s Folie 38 6. Juli 2016

Optimierungen t s Folie 38 6. Juli 2016

Optimierungen t s Folie 38 6. Juli 2016

Optimierungen t s Folie 38 6. Juli 2016

Optimierungen t s Folie 38 6. Juli 2016

Optimierungen t s Folie 38 6. Juli 2016

d[x] für alle Stops x; d[s] τ; A ; e[l] für alle Linien k; /* Für diese Runde */ A ; e [l] für alle Linien k; /* Für nächste Runde */ for Linien (L, p) durch s do A.add(L); e[l] p; ; while A do for alle Linien L aus A do Laufe L ab e[l] ab; for für alle Stops x wo d[x] sich geändert hat do for Linien (L, p) durch x do if L L then A.add(L ); e [L ] min{e [L ], p}; e[l] ; A ; Tausche e und e ; Tausche A und A ; Folie 39 6. Juli 2016

Erweiterungen Profile: Self-Pruning lässt sich direkt anwenden Folie 40 6. Juli 2016

Erweiterungen Profile: Self-Pruning lässt sich direkt anwenden Mehere Kriterien: Umstiege können im Pareto-Sinn optimiert werden indem nach jeder Runde d[t] ausgegeben wird Weitere Kriteren bedürfen Bags Folie 40 6. Juli 2016

Das Londoner Netzwerk Das vollständige Londoner Netzwerk Ein Dienstag. Beinhaltet Tube, Bus, DLR, Tram... 20 843 Stops, 2 225 Routen mit 133 011 Trips, 5 132 672 einzelne Abfahrten pro Tag. Folie 41 6. Juli 2016

Das Londoner Netzwerk Das vollständige Londoner Netzwerk Ein Dienstag. Beinhaltet Tube, Bus, DLR, Tram... 20 843 Stops, 2 225 Routen mit 133 011 Trips, 5 132 672 einzelne Abfahrten pro Tag. Experimente: 10 000 zufällige s t-anfragen. Folie 41 6. Juli 2016

Vergleich der Algorithmen (Hardware: Intel Xeon X5680 mit 3.33 GHz und 96 GiB DDR3-1333 RAM) Algorithm Ar R Tr Fz Rounds Journeys [ms] TD-Dijkstra 0.9 14.2 RAPTOR 8.4 1.9 7.3 TD-Dijkstra+Bags [DMS08] 1.9 67.2 RAPTOR+Bags 10.8 9.0 107.4 TD-Dijkstra+Bags [DMS08] 9.0 399.5 RAPTOR+Bags 9.5 16.3 259.8 RAPTOR+SP 138.5 16.3 87.0 TD-Dijkstra+SP [DKP12] 7.8 183.6 (Ar: Arrival Time, R: Range, Tr: Transfers, Fz: Fare Zones, SP: Profile mit Self-Pruning für 2h Intervall) Folie 42 6. Juli 2016

Literatur I Hannah Bast, Daniel Delling, Andrew V. Goldberg, Matthias Müller Hannemann, Thomas Pajor, Peter Sanders, Dorothea Wagner, and Renato F. Werneck. Route planning in transportation networks. Technical Report abs/1504.05140, ArXiv e-prints, 2016. Annabell Berger, Daniel Delling, Andreas Gebhardt, and Matthias Müller Hannemann. Accelerating time-dependent multi-criteria timetable information is harder than expected. In Proceedings of the 9th Workshop on Algorithmic Approaches for Transportation Modeling, Optimization, and Systems (ATMOS 09), OpenAccess Series in Informatics (OASIcs), 2009. Daniel Delling, Bastian Katz, and Thomas Pajor. Parallel computation of best connections in public transportation networks. ACM Journal of Experimental Algorithmics, 17(4):4.1 4.26, July 2012. Folie 43 6. Juli 2016

Literatur II Yann Disser, Matthias Müller Hannemann, and Mathias Schnee. Multi-criteria shortest paths in time-dependent train networks. In Proceedings of the 7th Workshop on Experimental Algorithms (WEA 08), volume 5038 of Lecture Notes in Computer Science, pages 347 361. Springer, June 2008. Daniel Delling, Thomas Pajor, and Renato F. Werneck. Round-based public transit routing. Transportation Science, 49(3):591 604, 2014. H V Jagadish. A compression technique to materialize transitive closure. ACM Transactions on Database Systems, 15(4):558 598, December 1990. Evangelia Pyrga, Frank Schulz, Dorothea Wagner, and Christos Zaroliagis. Efficient models for timetable information in public transportation systems. ACM Journal of Experimental Algorithmics, 12(2.4):1 39, 2008. Folie 44 6. Juli 2016