The Fully-Dynamic-Ontrip Problem – eine dynamische Fahrplanauskunft Annabell Berger Kurzfassung Wir lösen das Problem einer dynamischen Fahrplanauskunft in einem realen Szenario mit hohen Updateraten und zahlreichen, praktischen Anforderungen. Die Arbeit besteht aus drei Teilen. Der erste befasst sich mit der Entwicklung und Diskussion einer geeigneten Modellierung, der zweite Teil beschäftigt sich mit Beschleunigungsverfahren für dieses Problem und der dritte Teil fasst ausgiebige Tests unseres implementierten Prototyps zusammen. Letztlich zeigt sich, dass wir einen praktikablen Ansatz gefunden haben. Dennoch bleibt die Frage offen, ob es noch bessere Beschleunigungstechniken für dieses Problem gibt. 0. Einleitung Vor einiger Zeit begann meine Arbeitsgruppe eine langjährige Zusammenarbeit mit der Deutschen Bahn. Die Aufgabe war, eine sogenannte dynamische Fahrplanauskunft zu implementieren. Eine dynamische Fahrplanauskunft behandelt das folgende Problem. Ein Reisender möchte gern mit der Bahn von Halle nach Senftenberg fahren. Es soll eine optimale Verbindung für diesen Kunden mit Hilfe eines Kursbuches gefunden werden. Dabei sollen alle aktuellen Verspätungen berücksichtigt sein. Auf den ersten Blick scheint dieses Problem sehr einfach zu sein. Es ähnelt einem Kürzeste-Wege- Problem. 1. Das Kürzeste- Wege-Problem – der klassische Zugang Das kürzeste-Wege-Problem gehört zu den bekanntesten und am besten untersuchten Problemen der algorithmischen Graphentheorie. Gegeben sei ein Graph, der aus Knoten und gerichteten Kanten besteht, die zwei Knoten in einer Richtung oder zwei Richtungen miteinander verbinden können. Man suche einen gerichteten Weg von Knoten s nach Knoten t, der die geringste Anzahl an Kanten hat unter all solchen Wegen. Es ist auch möglich auf jede Kante des Graphen ein Gewicht zu legen, was beispielsweise die Kilometerdistanz zweier Knoten beschreibt, wenn sie durch eine Kante miteinander verbunden sind. Dann kann das kürzeste-Wege Problem als die Bestimmung eines Weges von s nach t mit minimaler Kilometerzahl modelliert werden. Dieses Problem ist in polynomieller, asymptotischer Zeit lösbar und seit den 50er Jahren sind drei große Hauptstrategien bekannt, um dieses Problem zu berechnen. Sie beruhen entweder auf Matrizenmultiplikationen in Integritätsringen (Ford [6]), auf dynamischer Programmierung (Bellmann [1]) oder dem Aufbau eines kürzesten-WegeBaumes nach Dijkstra [5]. Tatsächlich berechnen diese Algorithmen jedoch eine viel größere Lösungsmenge als nur einen Weg von s nach t. Der Fordsche Algorithmus berechnet für jedes Knotenpaar im Graphen einen kürzesten Weg, Bellmann und Dijkstra berechnen für einen festen Knoten s je einen kürzesten Weg von s zu allen anderen Knoten t. Die Beschränkung auf eine Lösungsmenge, die genau einen kürzesten Weg von s nach t enthält, ermöglicht häufig die Beschleunigung der Laufzeiten. Bekannt sind diese Verfahren unter den Bezeichnungen „zielgerichtete Suche“ (A*Algorithmus) oder Bidirektionaler Dijkstra. Diese Verfahren besitzen keine asymptotisch besseren Laufzeiten, sind jedoch häufig um Faktoren schneller. Kommen wir zurück zur Fahrplanauskunft. 10. Wissenschaftstage der Hochschule Lausitz (FH) - 2010 1 2. Die dynamische Fahrplanauskunft – ein Modell 2.1. Alle praktischen Anforderungen auf einen Blick Wir konstruieren einen Graphen, in dem die Knoten die Bahnhöfe repräsentieren. Zwei Knoten werden genau dann miteinander verbunden, wenn es mindestens eine fahrbare Verbindung zwischen diesen Knoten gibt. Doch nun wird es bereits schwierig. Offensichtlich besitzen unsere Kanten Fahrzeiten, die von der Tageszeit abhängen. So kann es vorkommen, dass 8.00 Uhr ein Zug von Halle nach Leipzig fährt, der 20 Minuten benötigt, gegen 13.00 Uhr jedoch 30 Minuten. Auch bei Routenplanern auf Straßennetzwerken findet sich dieses Problem. Berücksichtigt man auf Straßennetzwerken Hauptverkehrszeiten und Abendstunden, so wird man auch hier in der Realität Fahrzeitprofile auf den Kanten finden, die von der Tageszeit abhängen. Des Weiteren können vorhersehbare Störungen wie Baustellen - die Fahrzeitprofile zusätzlich beeinflussen. Diese Sichtweise führt zur Konstruktion eines sogenannten zeitabhängigen Graphen. Jedoch auch unvorhersehbare Schwankungen, die durch schlechte Witterungsverhältnisse, Unfälle und ähnliches geschehen können, sollten irgendwie behandelbar sein. Unser Problem bekommt zusätzlich eine dynamische Komponente, die eine regelmäßige Aktualisierung der Fahrzeitprofile benötigt. Diese Modellierung erfüllt jedoch keineswegs alle Anforderungen aus der Praxis. Im deutschen Bahnnetz existieren Messpunkte, von denen aus in regelmäßigen Abständen Signale gesendet werden und die die aktuelle Verspätungssituation im Netz bekanntgeben. Genau genommen handelt es sich um 6 Millionen Update-Informationen an einem Betriebstag, also ungefähr 60 Updates pro Sekunde, die ständig neu eingearbeitet werden müssen. Andererseits lösen aktuelle Verspätungen im Bahnnetz Kaskaden von weiteren, zukünftigen Verspätungen aus. Der Grund dafür ist ein Wartezeitregelwerk, was das aufeinander Warten oder Nichtwarten zwischen verspäteten Zügen regelt. Dieses Regeln ermöglicht es uns, Vorhersagen über Folgeverspätungen realitätsnah zu berechnen. An dieser Stelle wird klar, dass die Anforderungen an unsere Modellierung bereits stark vom klassischen KürzesteWege-Problem abweichen. Und es kommen noch weitere Bedingungen hinzu. Während sich das klassische Problem nur auf die Suche eines kürzesten Weg zwischen s und t beschränkt, wollen wir einem Bahnfahrer verschiedene Alternativen von s nach t anbieten, damit er die Wahl zwischen verschiedenen Wegen hat. Außerdem wäre es eine sehr schlechte Idee, alle Reisenden auf genau denselben Weg zu schicken, währende andere Wege vollkommen unbenutzt wären. An dieser Stelle kann man sich fragen, ob tatsächlich immer nur die Fahrzeit ein wichtiges Kriterium für Bahnfahrer ist. Tatsächlich sind weitere naheliegende Kriterien die Anzahl der Umstiege oder eine Umstiegssicherheit, die misst, wie wahrscheinlich es ist, dass alle geplanten Umstiege tatsächlich stattfinden können. Auch die Kosten für die Fahrt stellen ein sinnvolles Kriterium dar. Wir nennen einen Weg P von s nach t Pareto-optimal, wenn es keinen weiteren Weg von s nach t gibt, der in allen Kriterien mindestens genauso gut und in einem Kriterium besser als P ist. So bleibt es letztlich einem Bahnfahrer überlassen, welche Kriterien für ihn die Bestimmenden sind. Er wählt aus sehr guten Wegen den für ihn besten. 2.2. Das formale Modell Das Fully Dynamic Ontrip Problem ist die Suche nach 10. Wissenschaftstage der Hochschule Lausitz (FH) - 2010 1. allen (nicht nur einem), 2. diskreten, zeitabhängigen (auch eventabhängigen), 3. multikriteriellen, 4. Pareto-optimalen s, t-Pfaden, 2 wobei die Fahrzeitfunktionen auf jeder Kante des Graphen nur durch eine minimal, mögliche Fahrzeit nach unten beschränkt sein können. Diese Einschränkung spiegelt die Tatsachen aus der realen Welt wieder, denn keine Strecke kann beliebig schnell abgefahren werden. Ein exakter Lösungsalgorithmus ist den klassischen Algorithmen des KürzestenWege-Problems sehr ähnlich. Interessant ist nämlich, dass die Korrektheit aller dieser Algorithmen auf einer strukturellen Eigenschaft von kürzesten Wegen – der Subweg-Optimalität- beruht. Diese besagt, dass jeder Teilweg eines kürzesten Weges auch ein kürzester Weg ist. Auf den ersten Blick schien diese Eigenschaft in unserem Fall zu brechen. Man betrachte beispielsweise zwei Wege von s nach t mit einem Umstieg in A, die 8.00 Uhr in s starten. Der erste Zug ist ein ICE, und er kommt 10.00 Uhr in A an. Der zweite Zug ist eine Regionalbahn, die gegen 10.30 Uhr Bahnhof A erreicht. Beide können jedoch erst 11.00 Uhr in A mit der gleichen Regionalbahn nach t abfahren, wo sie 12.00 Uhr ankommen. Beides sind Pareto-optimale Wege mit der gleichen Fahrzeit und einem Umstieg. Allerdings ist der Teilweg des zweiten Weges von s nach A kein Paretooptimaler Weg, denn der Teilweg von Weg 1 ist besser. Auf den zweiten Blick ist es jedoch möglich auch für jeden Pareto-optimalen Weg eine modifizierte Subwegeigenschaft zu finden (siehe [3]). Diese ermöglicht Lösungsalgorithmen, die den klassischen Algorithmen sehr ähnlich sind. Jedoch wird es nun notwendig statt einem Label pro Knoten wie bei einem Dijkstra-Algorithmus, viele Label pro Knoten zu konstruieren. Diesen zusätzlichen Aufwand bezahlt man mit erheblich schlechteren Laufzeiten. Da Fahrplanauskunftsserver pro Tag viele Millionen Anfragen beantworten können müssen, wurde die Notwendigkeit von Beschleunigungsverfahren, die beweisbar korrekt sind, notwendig. 2.3. Beschleunigungstechniken für eine dynamische Fahrplanauskunft Sucht man in der aktuellen Literatur nach Beschleunigungsverfahren für Routenplaner in Straßennetzwerken, so findet man eine Flut von vielversprechenden Verfahren (für einen Überblick siehe Delling [4]), die Anfragen um Größenordnungen beschleunigen können. Eine generelle Herangehensweise ist es, in einem Preprocessingschritt, Teilinformationen zu berechnen, so dass eine Anfrage schneller bearbeitet werden kann. Das ist möglich, weil man beispielsweise nur auf einem Teilgraphen suchen muss oder weil Wege kontrahiert wurden oder weil Kanten Hierarchien zugeordnet werden. Hierbei muss immer auf ein gut ausbalanciertes Verhältnis von Speicherplatzbedarf und Laufzeit des Algorithmus geachtet werden. Die Laufzeiten des Preprocessingschrittes können oft viele Stunden betragen. Die Anfragzeiten bei der Auskunft jedoch betragen nur tausendstel Sekunden. Ein beeindruckender Erfolg. Kommt jedoch eine dynamische Komponente hinzu, dann werden die Vorberechnungen ungültig. Einige dieser Beschleunigungsverfahren sind theoretisch auch auf das dynamischen Szenario übertragbar, aber nur ein einziges, (uns) bekanntes Verfahren, ist dann noch praktisch verwendbar. Der Grund liegt in der Erfordernis von regelmäßigen Updates der Vorberechnungen in Realtime, was aufgrund der Größe der Laufzeiten einer einzigen Vorberechnung unmöglich ist. Die andere Möglichkeit das Verfahren zu retten besteht dann darin, die vorberechneten Werte „so schlecht“ zu wählen, dass auch nach Updates die Möglichkeit einer korrekten Berechnung besteht. Das aber führt zu sehr schlechten Beschleunigungsfaktoren. Außerdem gibt es noch ein weiteres Problem. Tatsächlich stellt sich heraus, dass alle diese Verfahren ein anderes Modell als das Fully Dynamic Ontrip Problem betrachten. Die Straßennetzwerke werden nämlich als Graphen angenommen, die statische Kantengewichte besitzen. Bei Informationen wie Staus etc. werden die Fahrzeiten auf den 10. Wissenschaftstage der Hochschule Lausitz (FH) - 2010 3 Kanten verändert. Wir bezeichnen dieses Modell als Semidynamic Ontrip Problem. Der entscheidende Punkt ist nämlich, dass die Suche auf einem statischen Graphen stattfindet. Betrachten wir das folgende Beispiel. Stellen wir uns vor eine Brücke ist von 8.00 Uhr bis 8.30 Uhr gesperrt. Ein Autofahrer, der 8.20 Uhr vom Start zum Ziel fahren möchte, wartet deswegen bis 8.30 Uhr und kommt 8.32 Uhr am Wunschort an. Im Semidynamic Ontrip Problem ist dieses Szenario nicht vorgesehen. Dort ist entweder die Brücke zu jeder Zeit gesperrt- der Autofahrer wählt einen Umweg und erreicht das Ziel 8.35 Uhr (Abb. 1)- oder die Brücke ist nicht gesperrt, dann fährt er sofort los (Abb. 2). Es ist nicht klar, wie gut die Art der berechneten Lösungen überhaupt in dieser Modellierung sein kann. Es gibt nur eine uns bekannte Arbeit [7], die ein zeitabhängiges dynamisches Szenario behandelt und dieses basiert ausschließlich auf Beschleunigungstechniken, die nicht beweisbar korrekt sind. Wir wollten deswegen ein Beschleunigungsverfahren für das Fully-Dynamic-Ontrip Problem entwickeln, was folgende Anforderungen erfüllt: 1.) - keine zeitraubende, erneute Vorberechnung nach einem Update 2.) - Beschleunigungsfaktoren des statischen Falles bleiben erhalten 3.) - Verfahren ist anwendbar in einem echten Szenario mit hohen Updateraten 4.) - Finden aller Pareto-optimalen Lösungen ist beweisbar möglich Abb. 1: Szenario - Brücke gesperrt Abb. 2: Szenario - Brücke nicht gesperrt Die erste Lösung ist zwar im Modell optimal, in der Wirklichkeit jedoch nicht. Die zweite Lösung existiert in der realen Welt nicht. Man stelle sich nun vor, in welchen Zeitabständen sich Zeitprofile auf Straßen ändern können. Wir entwickelten zwei verschiedene Beschleunigungstechniken, die hier nur in Kürze genannt werden sollen und nachlesbar sind in [2]. In unserem ersten Verfahren bewerten wir - in einem Vorberechnungsschritt unterliegende statische Kanten (Gewichte sind die unteren Fahrzeitschranken) des zeitabhängigen Modell mit Leveln von 1 bis k, den sogenannten k-Flags. Damit stellen wir fest, welche Wichtigkeit Kanten zu festen Zielen hin für Pareto-optimale Wege besitzen. Die Suche findet dann auf einem Teilgraphen statt, der nur Kanten bis zu einem speziellen Level enthält. Da sich die unteren Fahrzeitschranken niemals ändern, müssen die k-Flags nur einmal berechnet werden und können nach jedem Update weiter verwendet werden. Das Verfahren erfüllt somit die Punkte 1.) und 4.). Unser zweites Verfahren trägt den Namen Subito (Substructure in time-dependent optimization) und macht seinem lateinischen Namen („plötzlich, auf der Stelle“) alle Ehre. Es erlaubt uns, eine tiefere Einsicht über gewisse mathematische Struktureigenschaften zu verwenden und auf sämtliche 10. Wissenschaftstage der Hochschule Lausitz (FH) - 2010 4 Vorberechnungen zu verzichten. Diese Eigenschaft führt dazu, dass die Anzahl der Ankunfts- und Abfahrtsereignisse im Graphen während der Suche drastisch reduziert wird. Auch hier sind die Punkte 1.) bis 4.) erfüllt. Beide Techniken können auch miteinander kombiniert werden. Um die Punkte 2.) und 3.) zu diskutieren, betrachten wir unsere Experimente. 3. Experimente Abb. 4 Unsere Testinstanzen basieren auf dem Fahrplan der Deutschen Bahn von 2008. Wir optimierten die Zielkriterien Fahrzeit und Umstiegszahl. Das deutsche Bahnnetz umfasst 8817 Bahnhöfe, 40034 Züge, 392 Fußpfade (das sind zu laufende Verbindungen zwischen zwei Bahnhöfen) und 1135479 Zugverbindungen (ohne Zwischenhalt). Unsere Testumgebung war ein Standard PC (Intel(R) Xeon(R), 2.93 GHz, 4MB Cache, 47 GB main memory, ubuntu linux version 8.10, C++ compiliert mit g++ 4.4.1.). In unseren ersten Experimenten untersuchten wir die Laufzeiten unserer Anfragealgorithmen ohne dynamische Updates des Graphenmodells. Dabei beobachteten wir einen Zusammenhang von der Laufzeit des Algorithmus und der Fahrzeit von gefundenen Wegen (Abb. 3). Unsere Beschleunigungsverfahren konnten die besonders zeitraubenden Anfragen (die langen Wege) beschleunigen, während wir bei sehr kurzen Anfragen keinen Effekt beobachteten (siehe Abb. 4). Abb. 3 Die besten Beschleunigungen wurden durch eine Kombination von k-Flags und SUBITO erreicht. Allerdings ist der Effekt im Vergleich zu SUBITO alleine so gering, dass es sich eigentlich nicht lohnt, die aufwändige k-Flag Berechnung durchzuführen. Wir untersuchten die Gründe für diese Beobachtung und es stellte sich heraus, dass 72% aller statischer Kanten mit kleinen Leveln auf Paretooptimalen Wegen liegen und somit eine nur sehr geringe Ausdünnung des Graphen stattfindet. Was unseren Untersuchungen nun noch fehlte, waren ausgiebige Stabilitätstests in Verspätungsszenarien. Würden die Beschleunigungen einem Update des Graphen standhalten? Wir starteten folgende Experimente. Für einen Tag des Jahres besaßen wir die vollständigen Verspätungsmeldungen im Bahnnetz (mit 800000 Update-Operationen). Andere Verspätungsfälle simulierten wir. Wir verteilten im Szenario „Schnee und Eis in ganz Deutschland“ 5,10,60, 100 Minuten Verspätungen auf eine Reihe von Bahnhöfen. Im Szenario „2 Stunden Ruhe an einem großen Bahnhof“ schlossen wir für zwei Stunden die Bahnhöfe Frankfurt, Leipzig und Hannover. In allen Szenarien bewahrten sich die Beschleunigungsfaktoren und waren sich sehr ähnlich. Während die Pareto-optimale Suche im unbeschleunigten Szenario durchschnittlich 2.2 s benötigte, brauchte eine Anfrage mit Beschleunigungstechniken im Schnitt nur 0.24 s - und wenn man die Lösungsmenge noch ein wenig einschränktlediglich 0.13 s. Unsere Beschleunigungsfaktoren sind demnach 10 bzw. 17. Dem Vergleich mit den Beschleunigungsfaktoren 10. Wissenschaftstage der Hochschule Lausitz (FH) - 2010 5 im Semidynamic Ontrip Problem können wir nicht standhalten. Jedoch haben wir die ersten, beweisbar korrekten Beschleunigungsverfahren für das Fully-DynamicOntrip Problem erfunden und erfüllen alle vier Punkte aus Kapitel 2.3. Unser Prototyp ist somit einsatzfähig in der echten Welt. projekte zur Netzwerkanalyse, zum Erzeugen von Zufallsgraphen, zur dynamischen Fahrplanauskunft und zum Verspätungsmanagement bei der Bahn. 4. Referenzen: [1] R.E. Bellmann, Dynamic Programming, Princeton University Press, Princeton, 1957. [2] A. Berger, M. Grimmer, and M. MüllerHannemann, Fully dynamic speed-up techniques for multi-criteria shortest path searches in timedependent networks, Proceedings of SEA 2010, LNCS 6049, pp. 35-46, Springer, 2010. [3] A. Berger und M. Müller-Hannemann. Subpath-Optimality of Multi-Criteria Shortest Paths in Time- and Event-Dependent Networks, Technical Report 01/2009. [4] D. Delling, R. Hoffmann, M. Kandyba, A. Schulze, Algorithm Engineering LNCS 5971, Case Studies, 389-445, 2010. [5] E.W. Dijkstra, A note on two problems on connexions with graphs, Numerische Mathematik 1 (1959), 269-271. [6] L.R. Ford, Network Flow Theory, Paper P-923, The Rand Corporation, 1956. [7] G. Nannicini, P. Baptiste, D. Krob, and L. Liberti. Fast computation of point-to-point paths on time-dependent road networks. Proceedings of COCOA 08, volume 5165 of Lecture Notes in Computer Science, pages 225-234. Springer, 2008. Zur Autorin Annabell Berger ist wissenschaftliche Mitarbeiterin im Institut für Informatik der Martin-LutherUniversität Halle/Wittenberg. Dort arbeitet sie in der interdisziplinären Arbeitsgruppe „Algorithmen und Datenstrukturen“ unter der Leitung von Prof. Dr. Matthias Müller-Hannemann an verschiedenen kombinatorischen Problemen insbesondere aus der Graphentheorie. Als Mathematikerin arbeitet sie sowohl empirisch als auch theoretisch und entwirft und betreut verschiedene Software10. Wissenschaftstage der Hochschule Lausitz (FH) - 2010 6