Evakuierung und Netzwerkflüsse Diplomarbeit bei Prof. Dr. Martin Skutella vorgelegt von Ingo Schulz am Lehrstuhl für Diskrete Optimierung der Universität Dortmund Dortmund, 13. Oktober 2007 Für meinen Vater Wolfgang Einleitung Diese Diplomarbeit befasst sich mit dem Lösen von Evakuierungsproblemen. Dabei können wir uns zunächst ein Evakuierungsproblem vorstellen, wie es in der Realität vorkommen kann. Ein sehr gutes Beispiel für solch ein Problem ist die Flugzeugevakuierung, bei der es darum geht, dass in einem gewissen Zeitrahmen alle Passagiere ihr Flugzeug verlassen haben müssen. Ein Auftraggeber könnte uns einen Zeitrahmen nennen und von uns verlangen, einen Evakuierungsplan zu entwickeln, so dass alle Passagiere innerhalb des Zeitrahmens das Flugzeug verlassen können. Was ist aber, wenn wir feststellen, dass der Zeitrahmen nicht ausreichend ist. Der Auftraggeber könnte dann unser Problem vereinfachen und verlangen, dass wir einen Plan entwickeln, so dass so viele Passagiere wie möglich zu diesem Zeitrahmen ihr Flugzeug verlassen können. Wie so oft im Leben können sich Aufträge in letzter Minute ändern. Z. B. kann der Auftraggeber einen kleineren Zeitrahmen vorschreiben, bzgl. dessen wir einen Plan aufstellen müssen. Müssen wir unseren alten Plan zu dem alten Zeitrahmen verwerfen? Wenn wir das Problem mit Mitteln aus der diskreten Mathematik bzw. theoretischen Informatik modellieren, die wir in dieser Diplomarbeit vorstellen werden, und den ersten Plan geschickt erstellt haben, so lautet die Antwort: nein. Wir übersetzen das Problem in die Sprache der Flusstheorie und modellieren das Flugzeug mit Netzwerken. Das mathematische Problem, dessen Lösung uns hier Abhilfe schafft, ist das sogenannte Earliest Arrival Transshipment Problem, welches wir in dieser Arbeit definieren werden und für welches wir exakte und heuristische Lösungsmöglichkeiten aufzeigen. Das erste Kapitel gibt eine Übersicht über die nötigen Grundlagen um diese mathematischen Begriffe zu verstehen. Wir werden in diesem Kapitel Graphen definieren und einige wichtige grundlegende Begriffe hervorheben. Dazu werden wir auch grundlegende Probleme definieren und dabei Lösungen in Form von Algorithmen präsentieren. Für Details zur Komplexität von Algorithmen verweisen wir auf [22] von Ingo Wegener. Dort wird auch die Eingabegröße eines Algorithmus genau definiert, in dessen Abhängigkeit wir die Laufzeit von Algorithmen messen werden. In der Eingabe haben wir meist Graphen und gewisse Zahlen. Unsere Algorithmen arbeiten streng polynomiell, wenn die Laufzeit sich durch ein Polynom, welches unabhängig von den eingegebenen Zahlen ist, in Abhängigkeit von der Anzahl der Knoten und Kanten abschätzen lässt. Unsere Algorithmen arbeiten pseudopolynomiell, wenn die Laufzeit polynomiell von der Anzahl der Knoten und Kanten und zusätzlich von der größten dargestellten Zahl der Eingabe abhängt. Wenn aber die Laufzeit polynomiell v vi von der Größe des Graphens und zusätzlich nur von der Eingabelänge der größten vorkommenden Zahl abhängt, dann haben wir einen polynomiellen Algorithmus. Ferner geben wir im ersten Kapitel eine Einleitung in die Flusstheorie statischer sowie dynamischer Netzwerke und werden uns dort mit klassischen Flussproblemen beschäftigen. Am Ende des Kapitels schlagen wir mit dem Instrument des zeitexpandierten Graphen eine Brücke zwischen der statischen und dynamischen Flusstheorie. Dieser Graph hilft uns gewisse dynamische Probleme auf statische Probleme zu reduzieren. Das zweite Kapitel beschäftigt sich mit dem Evakuierungsproblem, dem Problem eine kleinste Zeitschranke zu finden, innerhalb welcher eine gewisse Anzahl von Flusseinheiten von gegebenen Quellen zu einer Senke transportiert werden können. Wir zeigen auf, wie man mittels dynamischer Netzwerke dieses Problem definiert und wir geben an, wie bisher dieses Problem behandelt wurde und wie es exakt und approximativ gelöst werden kann. Wir definieren Flüsse, welche die Eigenschaft haben, dass sie zu jedem Zeitpunkt die bis dahin maximal mögliche Anzahl an Flusseinheiten von einer Quelle zu einer Senke transportieren können. Wir beweisen die Existenz dieser Flüsse und geben exakte und approximative Lösungsmöglichkeiten an. Schließlich untersuchen wir das Problem, welches wir am Anfang motiviert haben. Wenn wir ein Netzwerk mit mehreren Quellen gegeben haben und vorab bekannt ist, wieviele Flusseinheiten von diesen Quellen in eine Senke fließen müssen, dann gibt es ebenfalls Flüsse, die zu jedem Zeitpunkt von keinem anderen Fluss in der Anzahl der bis dahin transportierten Flusseinheiten geschlagen werden können. Diese Flüsse lösen das am Anfang motivierte Earliest Arrival Transshipment Problem und lösen insbesondere das Evakuierungsproblem, wie es formal in der Mathematik und Informatik bekannt ist. Wir beweisen hier ebenfalls die Existenz dieser Flüsse und geben eine exakte Lösungsmöglichkeit an. Im letzten Kapitel stellen wir heuristische Lösungsansätze des Earliest Arrival Transshipment Problem vor. Heuristiken sind in der Praxis interessant geworden, da bisher bekannte exakte Lösungsmöglichkeiten sehr unpraktikabel sind, d. h. bei einer sehr großen Instanz des Problems können wir nicht mit einer praktisch befriedigenden Laufzeit rechnen. Die Heuristiken dagegen sind einfach zu implementieren und besitzen eine praktisch schnelle Laufzeit. Wir werden drei Heuristiken beschreiben, welche im Rahmen der Flugzeugevakuierung entwickelt wurden. Wir werden sie dann auf einigen ausgewählten Instanzen, welche anhand von Flugzeugsitzplänen modelliert wurden, anwenden. Wir vergleichen die Lösungen der Heuristiken untereinander und jeweils mit der exakten Lösung und geben eine Übersicht über die Qualität der berechneten Lösungen. vii Danksagung Ich möchte mich an dieser Stelle sehr bei meinen Eltern Renate und Wolfgang bedanken, die mir das Studium ermöglicht haben und mich in jeder erdenklichen Situation unterstützt haben. Schade ist nur, dass mein Vater die Vollendung dieser Arbeit nicht mehr erleben kann. Ich widme ihm daher diese Arbeit. Bei meiner Schwester Silvia bedanke ich mich, da sie mich ebenfalls zu jedem Zeitpunkt auf vielfältigste Weise unterstützt hat. Weiterhin möchte ich mich bei meiner Freundin Katrin Thadeusz, sowie bei den übrigen Mitgliedern der Familie Thadeusz bedanken, da sie mich einerseits sehr gut unterstützt haben, aber auch deswegen, dass, wenn es nötig war, sie mich von dieser Arbeit zum Ausgleich abgelenkt haben. Für die fachliche Unterstützung möchte ich mich sehr bei meinem Betreuer Martin Skutella und seiner ehemaligen Assistentin Nadine Baumann bedanken. Weiterhin möchte ich mich für konstruktive Ratschläge bei Daniel Dressler, Martin Gross, Katrin Kosfeld, Britta Peis, Daniel Plümpe, Joachim Reichel, Thomas Rohkämper und Madeleine Theile bedanken. Inhaltsverzeichnis 1 Graphentheoretische Grundlagen 1.1 Grundlegende Definitionen . . . . . . 1.2 Kürzeste Pfade . . . . . . . . . . . . 1.3 Flussprobleme . . . . . . . . . . . . . 1.3.1 Statische maximale s-t-Flüsse 1.3.2 statische Minimalkostenflüsse 1.4 dynamische Flussprobleme . . . . . . 1.5 Zeitexpandierte Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Evakuierungsprobleme 2.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Das Quickest Transshipment Problem . . . . . . . . . . . . . 2.3 Die Earliest Arrival Eigenschaft und dynamische Flüsse . . . 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke 2.4.1 Existenz . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Verallgemeinerte Pfadzerlegungen . . . . . . . . . . . 2.4.3 Exakte Algorithmen . . . . . . . . . . . . . . . . . . . 2.4.4 Approximationsalgorithmen . . . . . . . . . . . . . . . 2.5 Earliest Arrival Transshipments . . . . . . . . . . . . . . . . . 2.5.1 Existenz . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2 Ein exakter Algorithmus für das Earliest Transshipment Problem . . . . . . . . . . . . . . . . . . . . . . . 1 1 4 6 8 11 16 27 33 33 34 42 44 44 49 50 55 58 58 60 3 Heuristiken 63 3.1 Die kürzeste Wege Heuristik . . . . . . . . . . . . . . . . . . . 66 3.2 Die Alternativausgang Unterheuristik . . . . . . . . . . . . . 69 3.3 Die Ausgangentlastungs-Heuristik . . . . . . . . . . . . . . . . 72 3.4 Die kürzeste Fahrzeit Heuristik . . . . . . . . . . . . . . . . . 77 3.5 Ein kleines Beispiel . . . . . . . . . . . . . . . . . . . . . . . . 80 3.5.1 Eine Pfadzerlegung eines Earliest Arrival Transshipments . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.5.2 Anwendung der kürzesten Wege Heuristik . . . . . . . 82 3.5.3 Anwendung der Ausgangentlastungs-Heuristik . . . . 84 3.5.4 Anwendung der kürzesten Fahrzeit Heuristik . . . . . 86 3.6 Die Heuristiken in der Praxis . . . . . . . . . . . . . . . . . . 88 3.6.1 Ergebnisse des exakten Algorithmus . . . . . . . . . . 90 3.6.2 Ergebnisse der Heuristiken . . . . . . . . . . . . . . . 91 ix x Inhaltsverzeichnis 3.6.3 3.6.4 Weitere Instanzen . . . . . . . . . . . . . . . . . . . . Zusammenfassung und Ausblick . . . . . . . . . . . . 92 98 Liste der Algorithmen 103 Literaturverzeichnis 105 Erklärung 107 A Arrival Pattern A-1 Kapitel 1 Graphentheoretische Grundlagen Die im weiteren Verlauf dieser Diplomarbeit vorgestellten Probleme benötigen in ihren Instanzen den Begriff des Graphen. Dieser Begriff, sowie weitere dazugehörige grundlegende Problemstellungen und Lösungsmethoden werden in diesem Kapitel, welches sich hauptsächlich nach dem Buch von Korte und Vygen [15] richtet, behandelt. Zunächst werden die wichtigsten Definitionen und Notationen eingeführt. In weiteren Abschnitten werden die wichtigsten Grundprobleme eingeführt. 1.1 Grundlegende Definitionen Definition 1.1. Seien V, A endliche Mengen und ψ : A → {X ⊂ V : |X| = 2} sowie φ : A → {(v, w) ∈ V × V : v 6= w} Abbildungen. (1) Das Tripel (V, A, ψ) heißt ungerichteter Graph. (2) Das Tripel (V, A, φ) heißt gerichteter Graph oder kurz Digraph. (3) Ein Element v ∈ V heißt Knoten oder Ecke. (4) Ein Element a ∈ A wird als Kante bezeichnet. Definition 1.2. Seien G = (V, A, ψ) ein Graph und e sowie e0 ∈ A Kanten mit e 6= e0 . Gilt ψ(e) = ψ(e0 ), so heißen e und e’ parallel. Graphen ohne parallele Kanten werden schlicht oder einfach genannt. Bemerkungen 1.3. (1) Im Folgenden identifizieren wir in einem Graphen G = (V, A, ψ) einfachheitshalber die Kanten mit ihren Bildern bzgl. ψ, so dass wir von nun an G = (V, A) schreiben mit A ⊂ {X ⊂ V : |X| = 2}, wenn G ungerichtet ist bzw. A ⊂ V × V , sofern G gerichtet ist. (2) Wenn im Folgenden ein Graph G nicht näher spezifiziert wird, wird G = (V, A) angenommen und n := |V | und m := |E| gesetzt. Definition 1.4. Seien G = (V, A) und e = {v, w} bzw. e = (v, w) eine Kante. Dann ist v ein Nachbar von w (und umgekehrt) und die Knoten v und w sind adjazent und heißen Endpunkte von e. Endpunkte einer Kante e ∈ A werden als inzident zu e bezeichnet. Im gerichteten Fall sagen wir, dass die Kante e den Knoten v verlässt und zum Knoten w führt. Kanten die zumindest einen Endpunkt gemeinsam haben, heißen adjazent. 1 2 Graphentheoretische Grundlagen Um später Sachverhalte einfacher darzustellen, führen wir noch häufig vorkommende Notationen ein. Definition 1.5. Sei G = (V, A) ein Graph und X ⊂ V . (1) Wenn G ungerichtet ist, setzen wir δ(X) := {{v, w} ∈ A : v ∈ X, w ∈ V \ X} für die Menge aller Kanten, die zu einem Knoten außerhalb von X führen. Falls X={v} gilt setzen wir δ(v) := δ({v}). Werden in einem Sachverhalt noch andere Graphen betrachtet, ergänzen wir in der Schreibweise den Namen des Graphen und schreiben δG (X) statt δ(X). (2) Sei G ungerichtet. Ein Schnitt (engl. cut) ist eine Kantenmenge C ⊂ A zu welcher es eine Knotenmenge X gibt, so dass C = δ(X) gilt. (3) Wenn G gerichtet ist, setzen wir δ + (X) := {(v, w) ∈ A : v ∈ X, w ∈ V \ X} für die Menge aller Kanten, welche aus X herausführen, und δ − (X) := {(w, v) ∈ A : v ∈ X, w ∈ V \ X} für die Menge aller Kanten, welche nach x hineinführen. Werden in einem Sachverhalt noch andere Graphen betrachtet, ergänzen wir in der Schreibweise den Na− + (X) statt (X) statt δ + (X) und δG men des Graphen und schreiben δG − δ (X). (4) Seien G gerichtet und s, t ∈ V mit s 6= t. Ein gerichteter Schnitt ist eine nichtleere Kantenmenge C ⊂ A zu welcher es eine Knotenmenge X gibt, so dass C = δ + (X) gilt. Ein s-t Schnitt ist eine Kantenmenge C ⊂ A zu zu welcher es eine Knotenmenge X gibt, so dass C = δ + (X), s ∈ X und t ∈ / X gelten. X (5) Sei c : A → R eine Funktion. Für F ⊂ A setzen wir c(F ) := c(e) e∈F und erweitern damit c zu einer Funktion c : 2A → R (6) Seien G gerichtet und c : A → R und s, t ∈ V mit s 6= t zwei Ausgezeichnete Knoten. Dann wird das Tupel (G, c, s, t) als Netzwerk bezeichnet. Bemerkungen 1.6. Die Funktion c aus Punkt (6) der Definition 1.5 wird in diesem Abschnitt, sowie im folgenden Abschnitt über kürzeste Wege als Kosten- oder Längenfunktion betrachtet und auch als solche bezeichnet. In späteren Abschnitten betrachten wir Netzwerke der Form (G, u, s, t), in welchen wir u als Kapazitätsfunktion bezeichnen werden, welche eine obere Schranke für eine später gesuchte Funktion auf den Kanten darstellen soll. 1.1 Grundlegende Definitionen 3 Mit Hilfe der letzten Definition können wir nun das erste in dieser Diplomarbeit behandelte Graphenproblem definieren, das sogenannte MIN CUT -Problem auf Netzwerken: MIN CUT Problem Instanz: Ein Netzwerk N = (G, c, s, t) Gesucht: Ein s-t-Schnitt mit minimalen Kosten, d. h. gesucht ist eine Menge X ⊂ V mit s ∈ X und t ∈ V \X welche den Ausdruck c(δ + (X)) minimiert. Dieses Problem wird an dieser Stelle zunächst noch nicht untersucht, da es mit einem weiteren wichtigen Problem in der Flusstheorie zusammenhängt, welches erst später in dieser Diplomarbeit im Rahmen der Flusstheorie behandelt wird. Bis jetzt haben wir Graphen und einige Bezeichnungen und Notationen über Lageverhältnisse definiert. Im weiteren Verlauf werden Pfade in Graphen eine wichtige Rolle spielen. Um diese zu definieren brauchen wir zunächst den Begriff des Teilgraphen. Definition 1.7. Sei G = (V, A) ein Graph. (1) Ein Graph G0 = (V 0 , A0 ) heißt Teilgraph von G, falls V 0 ⊂ V und A0 ⊂ A gilt. Wir sagen in diesem Fall, dass der Graph G den Graphen G0 enthält. (2) Seien V 0 ⊂ V und A0 := {(v, w) oder {v, w} ∈ A : v, w ∈ V 0 }. G[V 0 ] := G0 = (V 0 , A0 ) heißt der von V 0 induzierte Teilgraph. Nun können wir Wege und Pfade definieren. Definition 1.8. Seien G = (V, A) ein Graph und W = (e1 , . . . , ep ) mit ek = (vk , vk+1 ) oder ek = {vk , vk+1 } (1 ≤ k ≤ n − 1) eine Folge von Kanten in G. (1) W heißt Weg, falls ei 6= ej für alle 1 ≤ i < j ≤ p gilt. (2) W heißt geschlossener Weg, wenn zu (1) zusätzlich ep = e1 gilt. (3) Der Teilgraph P = ({v1 , . . . , vp+1 }, {e1 , . . . , ep }) von G heißt Pfad, falls vi 6= vj für alle 1 ≤ i < j ≤ p + 1 gilt. P nennt man auch Pfad von v1 nach vp+1 oder kurz v1 -vp+1 -Pfad. (4) Sei P = (VP , AP ) ein v-w-Pfad. Dann bezeichnet P[x,y] den Teilgraphen von P welcher ein x-y-Pfad ist. (5) Der Teilgraph P = ({v1 , . . . , vp+1 }, {e1 , . . . , ep }) von G heißt Kreis, falls vi 6= vj für alle 1 ≤ i < j ≤ p und v1 = vp+1 gilt. 4 Graphentheoretische Grundlagen Mit Hilfe des Pfadbegriffes kann man nun die Eigenschaft des Zusammenhangs in Graphen erklären. Im weiteren Verlauf werden die untersuchten Graphen immer als zusammenhängend vorausgesetzt. Definition 1.9. (1) Ein ungerichteter Graph G = (V, A) heißt zusammenhängend, wenn es für alle v, w ∈ V mit v 6= w einen v-w-Pfad gibt. (2) Ein gerichteter Graph G = (V, A) heißt zusammenhängend, wenn der zu G zugrundeliegende ungerichtete Graph G0 (G0 := (V, A0 ) mit {v, w} ∈ A0 , falls (v, w) ∈ A oder (w, v) ∈ A gilt) zusammenhängend ist. (3) Ein gerichteter Graph G = (V, A) heißt stark zusammenhängend, wenn es für alle v, w ∈ V mit v 6= w einen v-w-Pfad und einen w-vPfad gibt. 1.2 Kürzeste Pfade Kürzeste Pfade in Graphen zu bestimmen ist ein weiteres grundlegendes Problem in der Graphentheorie. Dieses Problem tritt häufig auf, insbesondere in den später vorgestellten Heuristiken. Das Problem, in einem Graphen zwischen zwei Knoten den kürzesten Pfad zu bestimmen, ist wie folgt definiert: SHORTEST PATH PROBLEM Instanz: Ein Netzwerk N = (G, c, s, t) Gesucht: Ein kürzester s-t-Pfad mit minimaler Länge, d. h. gesucht ist ein Pfad P = (VP , AP ) von s nach t, welcher den Ausdruck c(AP ) minimiert, oder die Antwort, dass es keinen Pfad von s nach t gibt. Im Falle einer beliebigen Kostenfunktion c ist lt. [15] das Problem kürzeste Pfade zu finden i. A. ein schweres Problem. Wenn wir aber zusätzliche Voraussetzungen an die Kostenfunktion stellen, z. B. dass c nicht negativ ist, ist das Problem praktikabel und es existieren Algorithmen, von welchen zwei im Folgenden vorgestellt werden. Bei den später betrachteten Graphen, werden wir ausschließlich konservative Funktionen auf der Kantenmenge betrachten. Definition 1.10. Seien G = (V, A) ein Graph und c : A → R eine Funktion. c heißt konservativ, wenn es keinen Kreis in G gibt mit negativem Gewicht, d. h. es gibt keinen Kreis C = (VC , AC ) in G mit c(AC ) < 0. Der erste hier vorgestellte Algorithmus, welcher kürzeste Pfade von einem ausgezeichneten Knoten zu allen anderen Knoten im Graphen berech- 1.2 Kürzeste Pfade 5 net, ist der Algorithmus von Dijkstra. Er basiert auf dem Optimalitätsprinzip von Bellman, welches besagt, dass optimale Lösungen sich ausschließlich aus optimalen Teillösungen zusammensetzen. Auf das kürzeste Wege Problem bezogen besagt es, falls P = (VP , AP ) ein kürzester s-t-Pfad ist, so ist auch jeder Pfad P[s,v] mit v ∈ VP ein kürzester s-v-Pfad. Dieses Prinzip ist die Grundlage der dynamischen Programmierung, welche im Algorithmus von Dijkstra und einigen anderen kürzeste-Wege-Algorithmen angewendet wird. Eine gute Einführung zur dynamischen Programmierung kann man in [23] finden. Theorem 1.11 (Optimalitätsprinzip von Bellman[15]). Seien G = (V, A) ein gerichteter Graph und c : A → R eine konservative Kostenfunktion. Ferner seien k ∈ N, s, w ∈ V und P = (VP , AP ) ein s-w-Pfad mit |AP | ≤ k Kanten und es gelte c(AP ) ≤ c(AP 0 ) für alle s-w-Pfade P 0 = (VP 0 , AP 0 ) mit |AP 0 | ≤ k . Dann ist der Pfad P[s,v] für alle v ∈ VP \{w} unter allen Pfaden mit höchstens k − 1 Kanten kostenminimal, d. h. für alle s-v-Pfade P ∗ = (VP ∗ , AP ∗ ) mit |AP ∗ | ≤ k − 1 gilt c(AP[s,v] ) ≤ c(AP ∗ ). Theorem 1.12 ([15]). Der Algorithmus von Dijkstra arbeitet korrekt und hat eine Laufzeit von O(n2 ). Durch eine geschickte Wahl der Datenstrukturen, kann er aber auch eine Laufzeit von O(m + n log n) haben. Der nächste kürzeste Wege Algorithmus, welcher nun vorgestellt wird, ist der Algorithmus von Moore-Bellman-Ford. Dieser erwartet wie der Algorithmus von Dijkstra einen Graphen G, eine Kostenfunktion c und einen ausgezeichneten Knoten s, von welchem aus alle kürzesten Wege zu allen anderen Knoten berechnet werden. Der Vorteil des Algorithmus von MooreBellman-Ford ist der, dass c konservativ sein darf. Auch dieser Algorithmus basiert auf der dynamischen Programmierung. Theorem 1.13 ([15]). Der Algorithmus von Moore-Bellman-Ford arbeitet korrekt und hat eine Laufzeit von O(n · m). Mit Hilfe des Algorithmus von Moore-Bellman-Ford läßt sich auch überprüfen, ob eine gegebene Kostenfunktion konservativ ist. Dies funktioniert mit dem Nachweis zulässiger Potentialfunktionen. Definition 1.14. Sei G = (V, A) ein gerichteter Graph und c : A → R eine Kostenfunktion. Weiterhin sei eine Funktion π : V → R gegeben. (1) Bezüglich c und π nennen wir die Funktion cπ : A → R mit cπ ((x, y)) := c((x, y)) + π(x) − π(y) reduzierte Kosten der Kante (x, y). (2) π heißt zulässiges Potential, wenn die reduzierten Kosten aller Kanten nichtnegativ sind, d. h. es gilt cπ (e) ≥ 0 für alle Kanten e ∈ A. 6 Graphentheoretische Grundlagen input : Ein Digraph G = (V, A), eine Kostenfunktion c : A → R+ und ein Knoten s ∈ V output : l(v) und p(v) für alle v ∈ V : l(v) für alle v ∈ V bezeichnet die Länge eines kürzesten s-v Pfades bzgl. c welcher aus einem kürzesten s-p(v)-Pfad und der Kante (p(v), v) besteht. Somit bezeichnet p(v) den Vorgängerknoten auf einem kürzesten s-v Pfad. Falls es keinen s-v-Pfad gibt, wird l(v) = ∞ zurückgeliefert und p(v) bleibt unbestimmt. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 l(s) := 0; R := ∅; foreach v ∈ V \ {s} do l(v) := ∞; end repeat Bestimme v ∈ V \ R mit l(v) = min l(w); w∈V \R R := R ∪ {v}; foreach w ∈ V \ R mit (v, w) ∈ A do if l(w) > l(v) + c((v, w)) then l(w) := l(v) + c((v, w)); p(w) := v; end end until V = R ; Algorithmus 1.1 : Der Algorithmus von Dijkstra Theorem 1.15 ([15]). Seien G = (V, A) ein gerichteter Graph und c : A → R eine Kostenfunktion. (1) Die Kostenfunktion c ist genau dann konservativ, wenn es bzgl. c ein zulässiges Potential gibt. (2) Mit Hilfe des Moore-Bellman-Ford Algorithmus kann man in O(nm) Zeit überprüfen, ob es entweder einen negativen Kreis oder ein zulässiges Potential gibt. 1.3 Flussprobleme In diesem Abschnitt stellen wir eine weitere Klasse von Problemen auf Graphen vor, nämlich die Klasse der Flussprobleme. Gegeben sei ein Netzwerk N = (G, u, s, t). Ein Fluss ist i. A. eine Abbildung, die jeder Kante einen positiven Wert zuweist und zusätzlich einige wichtige Eigenschaften erfüllen muss. Interpretiert man diese Abbildung als Flusseinheiten, welche sich 7 1.3 Flussprobleme input : Ein Digraph G = (V, A), eine konservative Kostenfunktion c : A → R und ein Knoten s ∈ V output : l(v) und p(v) für alle v ∈ V : l(v) für alle v ∈ V bezeichnet die Länge eines kürzesten s-v Pfades bzgl. c welcher aus einem kürzesten s-p(v)-Pfad und der Kante (p(v), v) besteht. Somit bezeichnet p(v) den Vorgängerknoten auf einem kürzesten s-v Pfad. Falls es keinen s-v-Pfad gibt, wird l(v) = ∞ zurückgeliefert und p(v) bleibt unbestimmt. l(s) := 0; foreach v ∈ V \ {s} do 3 l(v) := ∞; 4 end 5 for i := 1 → n − 1 do 6 foreach (v, w) ∈ A do 7 if l(w) > l(v) + c((v, w)) then 8 l(w) := l(v) + c((v, w)); 9 p(w) := v; 10 end 11 end 12 end Algorithmus 1.2 : Der Algorithmus von Moore-Bellman-Ford 1 2 in den Kanten befinden, so sprechen wir von einem statischen Fluss. Interpretiert man diese Werte als Flussraten und fügt noch eine zusätzliche Zeitkomponente in die Instanz ein, so haben wir es mit einem dynamischen Fluss zu tun. Zunächst behandeln wir statische Flussprobleme und werden den Flussbegriff genauer spezifizieren: Definition 1.16. Sei N = (G, u, s, t) ein Netzwerk. (1) Ein Fluss ist eine Abbildung f : A → R+ , welche die Bedingung f (e) ≤ u(e) für alle e ∈ A erfüllt. Man bezeichnet hier u als Kapazitätsfunktion. (2) Ein Fluss f erfüllt die Flusserhaltungseigenschaft im Knoten v ∈ V falls, X X exf (v) := f (e) − f (e) = 0 e∈δ − (v) e∈δ + (v) gilt. (3) Ein Fluss f heißt Zirkulation, falls exf (v) = 0 für alle v ∈ V gilt. 8 Graphentheoretische Grundlagen (4) Ein Fluss f heißt s-t-Fluss, falls exf (s) < 0, exf (t) > 0 und in allen anderen Knoten die Flusserhaltungseigenschaft, also exf (v) = 0 für alle v ∈ V \ {s, t} gilt. Der Flusswert (oder kurz: Wert) eines s-t-Flusses f wird mit val(f ) := −exf (s) bezeichnet. Die im Folgenden betrachteten Flussalgorithmen arbeiten auf Graphen, welche gegenüber dem Ausgangsgraphen des Netzwerks leicht modifiziert bzw. erweitert werden. Es handelt sich dabei um die Residualgraphen. Definition 1.17. Seien G = (V, A) ein gerichteter Graph und u : A → R+ eine Kapazitätsfunktion. ↔ (1) G ist der Graph, der entsteht, indem für alle e = (v, w) ∈ ← A eine Rückwärtskante e := (w, v) zusätzlich eingefügt wird. ← In diesem Fall heißt e die Rückwärtskante der Kante e, d. h. ↔ ← G := (V, A ∪˙ { e : e ∈ A}). Kanten e ∈ A werden zur Verdeutlichung auch Vorwärtskanten genannt. (2) Sei f ein Fluss. Dann heißt die Funktion uf : A↔ → R+ mit uf (e) := G ← u(e) − f (e) und uf ( e ) := f (e) für alle e ∈ A Residualkapazitäts↔ funktion und weist jeder Kante in G eine Residualkapazität zu. (3) Der Residualgraph von G bzgl. des Flusses f ist der Graph Gf := (V, AGf ) := (V, {e ∈ A↔ : uf (e) > 0}) G (4) Seien f ein Fluss, γ > 0 und P = (VP , AP ) ein Pfad in Gf . Augmentieren von f entlang P um γ bezeichnet folgenden Vorgang, durch welchen man einen neuen Fluss f 0 erhält, sofern 0 ≤ f 0 (a) ≤ u(a) für alle a ∈ A gilt: ← a, a ∈ / AP f (a) ← 0 f (a) := f (a) + γ a ∈ AP , a ∈ / AP ← f (a) − γ a ∈ AP , a ∈ / AP (5) Sei f ein s-t-Fluss in G. Ein f -augmentierender Pfad bzw. flussvergrößender Pfad ist ein s-t-Pfad in Gf . 1.3.1 Statische maximale s-t-Flüsse Mit Hilfe der vorangegangenen Definitionen können wir uns nun dem ersten klassischen Flussproblem widmen, dem MAX FLOW Problem. Es besteht darin bei einem gegebenen Netzwerk einen Fluss zu finden, dessen Flusswert maximal ist. 1.3 Flussprobleme 9 MAX FLOW Problem Instanz: Ein Netzwerk N = (G, u, s, t) Gesucht: Ein s-t-Fluss mit maximalem Flusswert, d. h. gesucht ist ein s-t-Fluss f mit val(f ) ≥ val(f 0 ) für alle s-t-Flüsse f 0 . Dieses Problem kann mit Hilfe der Linearen Optimierung gelöst werden. In der Theorie der linearen Optimierung ist das MAX FLOW Problem zu dem MIN CUT Problem dual, beide besitzen also im Optimalitätsfall den gleichen Lösungswert. Diese Tatsache wird später hier durch das MAX FLOW MIN CUT Theorem festgestellt, welches ohne Lineare Programmierung bewiesen wird. Für weitere Details verweisen wir auf [15]. Die im Folgenden betrachteten Algorithmen kommen ohne lineare Programmierung aus und sind kombinatorisch. Bevor wir den ersten Algorithmus vorstellen, halten wir noch einige Tatsachen fest. Theorem 1.18 ([15]). Sei N = (G, u, s, t) ein Netzwerk. (1) Der Nullfluss f ≡ 0 ist ein s-t-Fluss (2) Seien f ein s-t-Fluss und P = (VP , AP ) ein f -augmentierender Pfad. Ferner sei γ > 0 gegeben mit γ = mine∈AP uf (e) . Dann erhält man durch Augmentieren um γ entlang P einen s-t-Fluss f 0 mit val(f 0 ) = val(f ) + γ. (3) Jeder s-t-Fluss f ist durch die Kapazität eines beliebigen s-t-Schnittes beschränkt, d. h. für jeden s-t-Schnitt C gilt val(f ) ≤ u(C). Weiterhin benötigen wir ein Kriterium um maximale Flüsse zu erkennen. Dieses lautet wie folgt: Theorem 1.19 ([15]). Sei f ein s-t-Fluss. Dann ist f genau dann maximal, wenn es keinen f -augmentierenden Pfad gibt. Mit dem Beweis von Theorem 1.19 wurde auch folgender wichtiger Sachverhalt in der Flusstheorie bewiesen Theorem 1.20 (Max-Flow-Min-Cut Theorem). Sei (G, u, s, t) ein Netzwerk. Die Kapazität eines minimalen s-t-Schnittes entspricht dem Flusswert eines maximalen s-t-Flusses. Wir haben bis jetzt gesehen wie das Max Flow Problem mit dem Min Cut Problem zusammenhängt. Nun sehen wir den ersten Algorithmus, welcher maximale Flüsse berechnet. Der erste Algorithmus den wir vorstellen ist der Algorithmus von Ford & Fulkerson. Dieser beginnt mit dem Nullfluss 10 Graphentheoretische Grundlagen und vergrößert diesen durch Augmentieren entlang beliebiger Flussvergrößender Pfade. Findet der Algorithmus keinen solchen Pfad mehr, bricht der Algorithmus mit einem s-t-Fluss ab, welcher nach Theorem 1.19 maximal ist. input : Ein Netzwerk N = (G, u, s, t). output : Einen maximalen s-t-Fluss f. foreach e ∈ A do f (e) := 0; 3 end 4 repeat 5 Bestimme einen f-augmentierenden Pfad P = (VP , AP ).; 6 if P 6= ∅ then 7 bestimme γ := mine∈AP uf (e); 8 augmentiere f um γ entlang P ; 9 else 10 γ := 0; 11 end 12 until γ = 0 ; Algorithmus 1.3 : Der Algorithmus von Ford & Fulkerson 1 2 Theorem 1.21 ([15]). Sei N = (G, u, s, t) ein Netzwerk, wobei die Kapazitäten nur ganzzahlig sind. Dann arbeitet der Algorithmus von Ford & Fulkerson korrekt und terminiert. Insbesondere ist der berechnete Fluss ganzzahlig. Beweis. Der Algorithmus startet mit dem Nullfluss, welcher nach Theorem 1.18(1) zulässig ist. Jedes Augmentieren vergrößert den Flusswert um mindestens eine P Flusseinheit, da die Kapazitäten ganzzahlig sind. Da der Flusswert durch e∈δ+ (s) u(e) beschränkt ist, finden maximal genausoviele Augmentierungen statt. Daher terminiert der Algorithmus, sobald es keinen augmentierenden Pfad im Residualgraphen gibt. Der berechnete s-t-Fluss ist ganzzahlig nach Theorem 1.19 maximal. Dieser Algorithmus ist i. A. kein Polynomialzeitalgorithmus, d. h. in Abhängigkeit der Eingabelänge (hier: Kodierungslänge der größten vorkommenden Kapazität) kann der Algorithmus exponentiell viele Augmentierungen durchführen. Diese Tatsache beleuchtet die Abbildung 1.1. Ausserdem terminiert der Algorithmus i. A. nicht, wenn das Netzwerk über irrationale Kapazitäten verfügt. 11 1.3 Flussprobleme 1 M 0 M 1 3 M M 2 Abbildung 1.1: In diesem kleinen Netzwerk kann der Algorithmus M Augmentierungen benötigen, wenn der berechnete augmentierende Pfad jeweils die Kante (1, 2) bzw. dessen Residualkante enthält. Man beachte dass die Eingabelänge von M nur log M beträgt. 1.3.2 statische Minimalkostenflüsse In diesem Abschnitt betrachten wir weitere grundlegende Graphprobleme, die sogenannten Minimalkostenflussprobleme in gerichteten Graphen, auf die wir später im Rahmen der dynamischen Flüsse zurückgreifen werden. Hier geht es darum, Flüße zu bestimmen, die kostenminimal sind. Dabei ergeben sich die Kosten einer Kante aus dem Produkt des Flusswertes und einer vorher gegebenen Kostenfunktion auf den Kanten. Die Gesamtkosten ergeben sich durch die Summe aller Kantenkosten. Desweiteren müssen gewisse Anforderungen, die an die Knoten gestellt werden, erfüllt sein. Um das Problem präziser formulieren zu können, führen wir zunächst b-Flüsse ein. Definition 1.22. Seien G = (V, A) ein gerichteter Graph, u : A → R+ eine Kapazitätsfunktion auf den Kanten und b : V → P R eine FunktiP on mit b(v) = 0. Ein b-Fluss ist ein Fluss f mit v∈V e∈δ + (v) f (e) − P f (e) = b(v) für alle v ∈ V . Die Funktion b mit diesen Eigenschafe∈δ − (v) ten wird auch Balancefunktion genannt. Das erste Problem was sich nun ergibt ist nun herauszufinden, ob solch ein b-Fluss existiert. Um festzustellen, ob zu einem Graphen mit einer gegebenen Kapazitäts- und Balancefunktion ein b-Fluss existiert, kann man folgendes Kriterium überprüfen: Theorem 1.23. Sei G = (V, A) ein gerichteter Graph, u : A → R+ eine Kapazitätsfunktion und b : V → R eine Balancefunktion auf den Knoten mit P b(v) = 0. Ein b-Fluss existiert genau dann, wenn für alle X ⊂ V gilt: v∈V X e∈δ + (X) u(e) ≥ X b(v). v∈X Beweis. Sei P := {v ∈ V : b(v) > 0} und N := {v ∈ V : b(v) < 0}. Sind beide Mengen leer, so ist stets der Nullfluss ein b-Fluss. Betrachten wir nun den Graphen G0 der aus G entsteht, indem man zwei neue Knoten s und 12 Graphentheoretische Grundlagen t einfügt und neue Kanten (s, v) für alle v ∈ P und (v, t) für alle v ∈ N einfügt. Hierbei definieren wir die Kapazität der Kanten von der Form (s, v) mit u(s, v) := b(v) und die Kanten (v, t) mit u(v, t) := −b(v).PWir berechnen dann einen maximalen s-t Fluss f 0 auf G0 . Ist val(f 0 ) = e∈δ+ (s) u(e) dann erhalten wir einen zulässigen b-Fluss f indem wir f 0 auf G bzw. A einschränken, da alle neu eingefügten Kanten nach Konstruktion saturiert sind, d. h. sie haben Residualkapazität Null. Somit sind die Balancebedingungen an allen Knoten erfüllt. Nachdem MaxFlow MinCut Theorem hat nun jeder s-t-Schnitt in G0 eine Kapazität von mindestens val(f 0 ). SeiPnun X ⊂ V . P Enthält X keine Knoten aus P , so gilt e∈δ+ (X) u(e) ≥ 0 ≥ v∈X b(v). Sei G P + nun C = X ∩ P . Nun gilt u(δG u(e) = val(f 0 ). + 0 (s ∪ X)) ≥ e∈δG 0 (s) Weiter gilt: X X + + + 0 u(δG = u(δG b(v) = u(δG b(v) 0 (s ∪ X) 0 (X)) + 0 (X)) + val(f ) − v∈C v∈P \X = + (X)) u(δG − X X 0 b(v) + val(f ) − v∈X∩N b(v) v∈C X + (X)) + val(f 0 ) − = u(δG b(v). v∈X P + + 0 Wegen u(δG 0 (s ∪ X)) − val(f ) ≥ 0 gilt daher u(δG (X)) − v∈X b(v) ≥ 0 P + (X)) ≥ v∈X b(v). P bzw. u(δG Ist andererseits val(f 0 ) < e∈δ+ (s) u(e) so existiert kein b-Fluss auf G, da sich dieser sonst auf G0 zu einem s-t-Fluss erweitern liesse, wobei dessen Wert den von f 0 übertreffen würde. Weiterhin muss es nach dem MaxFlow + 0 MinCut Theorem eine Menge X ⊂ V geben mit u(δG 0 (s ∪ X)) = val(f ). Es gilt: X X + u(δG = b(v) + u(e) 0 (s ∪ X)) + e∈δG 0 (X) v∈P \X = X u(e) − e∈δ + (s) X X + b(v) + u(δG (X)) − v∈C + = u(δG (X)) + val(f 0 ) − b(v) v∈X∩N v∈C > val(f 0 ) − X + b(v) + u(δG (X)) − X b(v) v∈X∩N X b(v). v∈X + P Es folgt 0 > u(δG (X)) − v∈X b(v). P v∈X + b(v) und daher gilt schließlich u(δG (X) < Wenn die Frage geklärt ist, ob ein b-Fluss existiert, stellt sich die Aufgabe, einen b-Fluss mit minimalen Kosten zu ermitteln, d. h. einen b-Fluss f 1.3 Flussprobleme 13 P zu bestimmen, der den Ausdruck e∈A c(e)f (e) minimiert, wobei c die gegebene Kostenfunktion ist. Genauer betrachten wir nun folgendes Problem: MINIMUM COST FLOW PROBLEM Instanz: Ein gerichteter Graph G, eine Kapazitätsfunktion u : A → R+ P eine Balancefunktion b : V → R mit v∈V b(v) = 0 und eine Kostenfunktion c : A → R P Gesucht: ein b-Fluss der den Ausdruck c(f ) := e∈A c(e)f (e) minimiert oder die Ausgabe, dass kein b-Fluss existiert. Abkürzend notieren wir die o. g. Instanz als 4-Tupel (G, u, b, c). Wir weisen darauf hin, dass es in Instanzen auch möglich ist, dass unbegrenzte Kapazitäten vorkommen können. Das führt aber zu keinerlei Problemen, sofern die Instanz beschränkt ist, d. h. dass in jeder Instanz, in welcher ein b-Fluss existiert auch einer mit minimalen Kosten existiert. Unbeschränkte Instanzen werden aber im Rahmen dieser Diplomarbeit nicht weiter untersucht und wir nehmen im Folgenden an, dass die Minimalkostenflussinstanzen stets beschränkt sind. In diesem Fall kann man unbeschränkte Kapazitäten durch geeignete endliche Kapazitäten ersetzen. Ähnlich wie im Kapitel über maximale s-t-Flüsse arbeiten wir hier auch mit dem Konzept der Residualgraphen nach Definition 1.17. Wir erweitern diese Definition um das Augmentieren entlang Kreisen, da Kreise mit negativen Kosten eine sehr wichtige Rolle spielen. Definition 1.24. Sei G = (V, A) ein gerichteter Graph und u : A → R+ eine Kapazitätsfunktion. (1) Seien c : A → R eine Kostenfunktion in einer MINIMUM COST ← FLOW PROBLEM Instanz. Dann erweitern wir c auf A↔ mit c( e ) := G −c(e) für alle e ∈ A. (2) Seien f ein Fluss, γ > 0 und C = (VC , AC ) ein Kreis in Gf . Augmentieren von f entlang C um γ bezeichnet folgenden Vorgang, durch welchen man einen neuen Fluss f 0 erhält, sofern 0 ≤ f 0 (a) ≤ u(a) für alle a ∈ A gilt: ← a, a ∈ / AC f (a) ← 0 f (a) := f (a) + γ a ∈ AC , a ∈ / AC ← f (a) − γ a ∈ AC , a ∈ / AC (3) Sei f ein Fluss in G. Ein f -augmentierender Kreis ist ein Kreis in Gf . 14 Graphentheoretische Grundlagen Ein wichtiges Kriterium, um die Minimalkosteneigenschaft eines Flusses zu zeigen, ist das, dass es es in dem entsprechenden Residualgraphen keinen augmentierenden Kreis mit negativen Gesamtgewicht gibt. Theorem 1.25 ([15]). Sei (G, u, b, c) eine MINIMUM COST FLOW PROBLEM Instanz. Dann ist f ein kostenminimaler b-Fluss genau dann, wenn es in Gf keinen Kreis C gibt mit c(C) < 0. Ein zweites Kriterium, um die Minimalkosteneigenschaft eines Flusses zu zeigen, ist die Existenz eines zulässigen Potentials für alle Knoten. Theorem 1.26 ([15]). Sei (G, u, b, c) eine MINIMUM COST FLOW PROBLEM Instanz. Dann ist f genau dann ein kostenminimaler b-Fluss, wenn in Gf bzgl. c ein zulässiges Potential existiert. Beweis. Nach Theorem 1.25 ist f nicht kostenminimal, wenn es einen Kreis C gibt mit c(C) < 0. Dies ist aber genau dann der Fall, wenn c nicht konservativ in Gf ist. Letzteres ist nach Theorem 1.15 genau dann gültig, wenn es in Gf kein zulässiges Potential gibt. . Nachdem wir nun wissen, wann ein b-Fluss optimal ist, werden wir kurz zwei Algorithmen zeigen, welche kostenminimale b-Flüsse bestimmen können. Der erste hier vorgestellte Algorithmus ist der Successive Shortest Path Algorithmus. Das Prinzip des Algorithmus besteht darin, dass das Augmentieren eines kostenminimalen b-Flusses entlang eines Pfades von einem Knoten s ∈ V mit b(s) > 0 zu einem Knoten t ∈ V mit b(t) < 0 zu einem kostenminmalen b0 -Fluss bzgl. einer neuen Balancefunktion b0 führt. Folgender Sachverhalt liefert die Korrektheit des Successive Shortest Path Algorithmus von Seite 15. Theorem 1.27 (Ford und Fulkerson [7]). Seien (G, u, b, c) eine Instanz des Minimalkostenflussproblems und f ein b-Fluss mit minimalen Kosten. Seien s, t ∈ V und P ein kürzester Pfad bzgl. c. Sei f 0 der entstehende Fluss, wenn man f entlang P um höchstens der Minimalresidualkapazität auf dem Pfad augmentiert. Dann gilt: (1) Der Fluss f 0 ist ein Minimalkostenfluss bzw. b0 -Fluss mit minimalen Kosten für eine entsprechendes Balancefunktion b0 . (2) Für alle v ∈ V gilt: distGf (s, v) ≤ distGf 0 (s, v) und distGf (v, t) ≤ distGf 0 (v, t). Dabei bezeichne distG (v, w) die Kosten eines billigsten Pfades von v nach w in G. Dieses Theorem liefert die Korrektheit des Algorithmus, da der Algorithmus mit dem Nullfluss beginnt und dieser minimal ist für b ≡ 0, weil die Kostenfunktion konservativ ist. Jeder dazwischen berechnete Fluss ist für 1.3 Flussprobleme 15 input : Ein gerichteter Graph G = (V, A), eine Kapazitätsfunktion u : A → R+ konservative Kosten cP: A → R, eine Balancefunktion b : V → R mit v∈V b(v) = 0 output : Einen b-Fluss mit minimalen Kosten, oder die Ausgabe, dass kein b-Fluss existiert. b0 := 0; 2 foreach e ∈ A do 3 f (e) := 0; 4 end 5 while b0 6= 0 do 6 Bestimme einen Knoten s mit b(s) > 0; 7 Bestimme einen Knoten t mit b(t) < 0, so dass es einen s-t-Pfad in Gf gibt; 8 if ∃t ∈ V mit b(t) < 0, so dass es einen s-t-Pfad in Gf gibt then 9 bestimme einen kostenminimalen s-t-Pfad P bzgl. c; 10 bestimme γ := min{mine∈AP {uf (e), b0 (s), −b0 (t)}}; 11 b0 (s) := b0 (s) − γ; 12 b0 (t) := b0 (t) + γ; 13 augmentiere f um γ entlang P ; 14 else 15 Ausgabe: Es gibt keinen b-Fluss; 16 STOPP; 17 end 18 end Algorithmus 1.4 : Der Successive Shortest Path Algorithmus 1 das jeweils aktuelle b auch minimal. Somit ist auch der am Ende resultierende b-Fluss für die b Funktion aus der Eingabeinstanz minimal. Die Laufzeit des Algorithmus beträgt O(nmB), wobei B := 1P v∈V |b(v)| ist, sofern alle Bedarfe und Kapazitäten ganzzahlig sind. Da 2 B der Menge der Flusseinheiten entspricht, um die höchstens augmentiert werden kann, ist die Anzahl der Augmentierungen durch B beschränkt. Bei jeder Iteration ist die Kürzeste Wege Berechnung die teuerste Operation. Da aber negative Kosten auftreten können, kommt der Moore Bellman Ford Algorithmus zur Anwendung, der eine Laufzeit von O(nm) hat. Mit einer Verbesserung, die darin besteht, ab der 2. Iteration die Kosten c mithilfe eines Knotenpotentials durch reduzierte Kosten zu ersetzen, lässt sich die Laufzeit O(nm + B(m + n log n)) erreichen, da diese reduzierten Kosten nichtnegativ sind und somit den Einsatz des Dijkstra Algorithmus ermöglichen. Diese Laufzeit ist pseudopolynomiell, da B eine wesentliche Größe ist, 16 Graphentheoretische Grundlagen welche sich aber durch O(log B) vielen Bits darstellen lässt. Wir erwähnen noch kurz eine Verbesserung des Successive Shortest Path Algorithmus durch die Capacity Scaling Technik, wenn die Knotenbalancen ganzzahlig sind. Der Capacity Scaling Algorithmus für das Minimalkostenflussproblem besteht aus mehreren Phasen, den sogenannten ScalingRunden. In jeder Runde wird eine untere Schranke festgesetzt, um wieviele Flusseinheiten ein augmentierender Pfad den Fluss mindestens vergrößern muss. Diese untere Schranke wird Scaling Faktor genannt. Um dem Scaling Faktor gerecht zu werden, werden die Augmentierenden Pfade in Gf (∆) := (V, {a ∈ AGf : uf (a) ≥ ∆}) bestimmt. Augmentiert wird dann wieder in Gf . Theorem 1.28 ([15]). Der Capacity Scaling Algorithmus arbeitet korrekt und benötigt eine Laufzeit von O(n(m + n log n) · log bmax ). Wichtig zu erwähnen ist, dass es auch streng polynomielle Algorithmen für das Minimalkostenflussproblem gibt, auf welche wir hier nicht weiter eingehen. Wir werden später im Rahmen der Heuristiken im Kapitel 3 Minimalkostenfluss-Instanzen betrachten, in welchen B = O(n) gelten wird. In diesem Falle ist der Sucessive Shortest Path Algorithmus laut [15] der bisher bekannte schnellste. 1.4 dynamische Flussprobleme In diesem Abschnitt, welcher sich an die Vorlesung Ausgewählte Kapitel der ” Kombinatorischen Optimierung“ [21] lehnt, geht es um dynamische Flussprobleme. Wie bei den statischen Flussproblemen haben wir wieder ein Netzwerk, bestehend aus einem gerichteten Graphen, ausgezeichneten Knoten (Quellen und Senken) und einer Kapazitätsfunktion auf der Kantenmenge. Im Unterschied zu den statischen Flussproblemen spielt der Faktor Zeit eine sehr wichtige Rolle, d. h. es wird nun auch die Zeit mit einbezogen, welche verbraucht wird, um Fluss von gewissen Knoten zu anderen Knoten zu schicken. Zu diesem Zweck werden dynamische Netzwerke eingeführt, die zusätzlich Fahrzeitinformationen für jede Kante beinhalten, also die Zeit, die eine Flusseinheit benötigt, um vom Start- zum Endknoten der Kante zu gelangen. Da wir hier auch wieder über einen Fluss sprechen werden, müssen wir den Flussbegriff für unsere dynamischen Netzwerke erweitern bzw. ändern. Wir werden unter einem dynamischen Fluss in einer Kante eine zeitabhängige Flussrate verstehen, mit welcher Fluss in die Kante hineinfließt. Mit Hilfe der dynamischen Netzwerke und dynamischen Flüsse lassen sich u. a. auch Evakuierungsprobleme untersuchen, da hier nun der Faktor Zeit berücksichtigt werden kann. Bevor wir zu dem Evakuierungsproblem gelangen werden, definieren wir u. a. den Begriff des dynamischen Flusses ge- 1.4 dynamische Flussprobleme 17 input : Ein gerichteter Graph G = (V, A), eine Kapazizätsfunktion u : A → R+ konservative Kosten c : A → N0 , eine Balancefunktion b : V → R mit P v∈V b(v) = 0 output : Einen b-Fluss mit minimalen Kosten, oder die Ausgabe, dass kein b-Fluss existiert b0 := b; 2 foreach e ∈ A do 3 f (e) := 0; 4 end 5 bmax := max{b(v) : v ∈ V }; 6 ∆ := 2blog bmax c ; 7 while b0 6= 0 do 8 Bestimme einen Knoten s mit b(s) ≥ ∆; 9 Bestimme einen Knoten t mit b(t) ≤ ∆, so dass es einen s-t-Pfad in Gf (∆) gibt; 10 if ∃t ∈ V mit b(t) ≤ γ, so dass es einen s-t-Pfad in Gf (∆) gibt then 11 bestimme einen kostenminimalen s-t-Pfad P bzgl. c; 12 b0 (s) := b0 (s) − ∆; 13 b0 (t) := b0 (t) + ∆; 14 augmentiere f in Gf um ∆ entlang P ; 15 else 16 if ∆ = 1 then 17 Ausgabe: Es gibt keinen b-Fluss; 18 STOPP; 19 else 20 ∆ := ∆/2; 21 end 22 end 23 end Algorithmus 1.5 : Ein Capacity Scaling Algorithmus für das Minimalkostenfluss Problem 1 nauer und betrachten vorher ein grundlegendes Problem, welches uns später bei der Analyse unterstützen wird. Definition 1.29. Seien G = (V, A), u : A → R+ eine Kapazitätsfunktion, · −⊂V τ : A → R eine Fahrzeitfunktion und T ∈ R+ . Weiterhin seien S + ∪S + Mengen ausgezeichneter Knoten. Dann heißt das Tupel (G, u, τ, S , S − ) dynamisches Netzwerk. Ein dynamischer Fluss mit Zeithorizont T ist eine integrierbare Abbildung f : A × [0, T ) → R+ , welche folgende Eigenschaften erfüllt: 18 Graphentheoretische Grundlagen (1) Für alle a ∈ A und θ ∈ [0, T ) gilt f (a, θ) ≤ u(a) (Kapazitätsbedingung). · − und Y ∈ [0, T ) gilt : (2) Für alle v ∈ V \ (S + ∪S Z exf (v, Y ) := Y ( 0 X a∈δ − (v) f (a, θ − τ (a)) − X f (a, θ))dθ ≥ 0 a∈δ + (v) (Flusserhaltungsbedingung). (3) Die Flusserhaltungsbedingung (2) muss für Y = T mit Gleichheit erfüllt werden. (4) Für alle a ∈ A und θ > T − τ (a) gilt f (a, θ) = 0. Die Definition erscheint auf den ersten Blick etwas gewöhnungsbedürftig, wenn man sich zuvor nur mit statischen Flüssen beschäftigt hat. Die Kapazitätsbedingung ist analog zu den statischen Flüssen einfach zu verstehen. Die Flusserhaltungsbedingung bedarf einer kleinen Erklärung. Wenn f ein dynamischer Fluss ist und a = (x, y) ∈ A eine Kante, dann gibt der Wert f (a, θ) die Flussrate an, wieviele Flusseinheiten pro Zeiteinheit in die Kante fliessen. Der Wert τ (a) gibt die Fahrzeit an, welche jede Flusseinheit benötigt um von x nach y zu gelangen. Daher erreicht eine Flusseinheit den Knoten y über a erst nach θ + τ (a) Zeiteinheiten. Umgekehrt, wenn nun eine Flusseinheit zum Zeitpunkt θ den Knoten y über die Kante a erreicht, hat sie zum Zeitpunkt θ − τ (a) den Knoten x verlassen. Diese Erkenntnis führt zum besseren Verständnis der Flusserhaltungsbedingung. Wenn wir nun zu einem Zeitpunkt θ ermitteln, wieviele Flusseinheiten pro Zeiteinheit über eine Kante a in den Knoten v fließen, muss wir uns die Flussrate zu dem zeitpunkt ansehen, zu welchem die betreffenden Flusseinheiten in die Kante a einfließen. Dieses passiert zum Zeitpunkt θ − τ (a) und somit ist die Flussrate der Flusseinheiten, die über die Kante a in den Knoten w gelangt, gleich dem Wert f (a, θ − τ (a)). Summieren wir diesen Ausdruck entsprechend über alle Kanten aus δ − (v), so erhalten wir die Flussrate, die in den Knoten v zum Zeitpunkt θ fließt. Daher liegt es nun auf der Hand, analog zu den statischen Flüssen, die Anzahl der Flusseinheiten, die bis zum Zeitpunkt θ in den Knoten v fließen, mit der Anzahl an Flusseinheiten zu vergleichen, welche den Knoten v bis zum Zeitpunkt θ verlassen haben. Die Flusserhaltungsbedingung besagt nun, dass nicht mehr Flusseinheiten zum Zeitpunkt θ den Knoten verlassen haben können, als ihn bis dahin erreicht haben. Dies muss für alle Zeitpunkte θ mit θ < T gelten. Insbesondere ist es hier möglich, dass ein nicht ausgezeichneter Knoten Flusseinheiten speichern kann. Würde in der Bedingung ein Gleichheitszeichen stehen, wäre keine Flussspeicherung in Knoten erlaubt. 19 1.4 dynamische Flussprobleme Die letzten beiden Bedingungen besagen, dass sich keine Flusseinheit nach dem Zeithorizont T in einem Knoten (4) befinden darf und dass keine Kante a ∈ A nach dem Zeitpunkt T − τ (a) Flusseinheiten befördern darf. Somit ist sichergestellt, dass jede Flusseinheit nach dem Zeithorizont T das Netzwerk verlassen hat bzw. sich in einer Senke befindet. Zunächst geben wir für den Graphen aus Abbildung 1.4 einen Beispielfluss mit Zeithorizont 2 an. Die einzige Kante im Graph verfügt über Einheitsfahrzeit und Einheitskapazität. Wir betrachten den Fluss f mit f ((s, t), θ) = 1 für alle θ ∈ [0, 1). Für θ ∈ [1, 2) setzen wir f ((s, t), θ) = 0. Somit fließt genau eine Flusseinheit von s nach t. Nach einer Zeiteinheit befindet sich diese Flusseinheit komplett in der Kante (s, t). Nach einer weiteren Zeiteinheit, hat sie die Kante vollständig verlassen und hat über den Knoten t das Netzwerk verlassen. Somit besitzt f den Zeithorizont 2. 1/1 s t Abbildung 1.2: Ein einfaches dynamisches Netzwerk Zunächst betrachten wir dynamische Flüsse auf Netzwerken mit zwei ausgezeichneten Knoten und befassen uns dann danach mit dem Problem, wie man innerhalb einer vorgegebenen Zeit T den Flusswert, den wir ebenfalls noch definieren müssen, maximiert. Dieses gelingt immer, wie wir später sehen werden, mit einem dynamischen Fluss aus einer einfachen Klasse dynamischer Flüsse. Definition 1.30. Sei (G, u, τ, S + , S − ) ein dynamisches Netzwerk mit T ∈ R+ . (1) Ein dynamischer S + -S − -Fluss f ist ein dynamischer Fluss gemäß Definition 1.29, wobei v ∈ S + als Quellknoten, d. h. exf (v, T ) ≤ 0, und v ∈ S − als Senkeknoten, d. h. exf (v, T ) ≥ 0, die ausgezeichneten Knoten sind. (2) Der Wert eines dynamischen S + -S − -Flusses wird mit |f | bezeichnet und beträgt: |f | := − X ex(s, T ) s∈S + = X Z s∈S + 0 T ( X a∈δ + (s) f (a, θ) − X a∈δ − (s) f (a, θ − τ (a)))dθ. 20 Graphentheoretische Grundlagen Zur Vereinfachung bezeichnen wir das dynamische Netzwerk mit einer Quelle und einer Senke mit (G, u, τ, s, t) und den Fluss als dynamischen s-t-Fluss. Bemerkungen 1.31. Mit unserer Definition dynamischer Flüsse haben wir sogenannte kontinuierliche Flüsse definiert. Die Flussrate einer Kante ist dabei bzgl. jeden reellen Zeitintervalls eine messbare Funktion. In der Literatur werden auch sogenannte diskrete dynamische Flüsse betrachtet, da die Diskretisierung eine Reduktion vieler dynamischer Flussprobleme auf statische Flussprobleme mittels zeitexpandierter Graphen, welche wir in Abschnitt 1.5 einführen, zulässt. In dieser Diplomarbeit werden wir ebenfalls diskrete dynamische Flüsse betrachten und nur solche als Lösung von unseren Problemen in den Kapiteln 2 und 3 zulassen. Wir schränken uns dabei auf ganzzahlige Fahrzeiten τ und Zeithorizonte T ∈ N ein. Wir teilen dann den Zeithorizont T in Intervalle [θ, θ+1) mit θ ∈ N0 und θ < T ein. Ein diskreter dynamischer Fluss f ist dann eine Abbildung f : A × N0 → R+ . Die Kapazitätsbedingung wird analog zu Definition 1.29 zu jedem ganzzahligen Zeitpunkt formuliert und die Flusserhaltungsbedingung zum Zeitpunkt Y sowie der Ausdruck exf für dynamische Flüsse wird analog zu Definition 1.29 mittels einer diskreten Summe von 0 bis Y − 1 statt eines Integrals von 0 bis Y formuliert. Zum Zeitpunkt T muss diese mit Gleichheit erfüllt sein. Weiterhin darf es keine Kante a ∈ A nach dem Zeitpunkt θ > T − τ (a) mit f (a, θ) > 0 geben. Einen diskreten Fluss f können wir als kontinuierlichen Fluss f˜ auffassen, indem wir in jede Kante a ∈ A zu jedem Zeitpunkt Y ∈ [θ, θ + 1) f (a, θ) Fluss in die Kante a schicken, d. h. wir setzen f˜(a, Y ) := f (a, θ) für alle Y ∈ [θ, θ + 1). Umgekehrt können wir jeden dynamischen Fluss f˜ mit ganzzahligen Fahrzeiten und ganzzahligem Zeithorizont als diskreten Fluss f auffassen, indem wir zu jedem diskreten Zeitpunkt θ der Kante a die Menge an Flusseinheiten zuweisen, die mittels f˜ innerhalb des Zeitraumes [θ, θ + 1) R θ+1 in die Kante a hineinfließen, d. h. wir setzen f (a, θ) = θ f˜(a, κ)dκ. Für weitere Details verweisen wir auf den Abschnitt 1.3.4 in [16]. Ein wichtiges Problem, welches wir nun betrachten, ist das dynamische Max Flow Problem, bei dem es darum geht innerhalb des gegebenen Zeithorizontes einen dynamischen Fluss zu ermitteln, dessen Flusswert maximal ist. Wir können das Problem auf Netzwerke mit einer Quelle und einer Senke reduzieren, indem wir jeweils eine Superquelle und eine Supersenke einführen und entsprechend sie mit den Quellen bzw. Senken mit Kanten, die eine Fahrzeit von Null besitzen und über geeignet viel Kapazität verfügen, verbinden. 21 1.4 dynamische Flussprobleme dynamisches MAX FLOW Problem Instanz: Ein dynamisches Netzwerk N = (G, u, τ, s, t) und ein T ∈ R+ Gesucht: Ein dynamischer s-t-Fluss mit maximalem Flusswert und Zeithorizont T , d. h. gesucht ist ein dynamischer s-t-Fluss f mit |f | ≥ |f 0 | für alle s-t-Flüsse f 0 mit Zeithorizont T . Dieses klassische Problem wurde bereits von Ford und Fulkerson [7] untersucht und gelöst. Die Lösung ist immer in einer einfachen Klasse dynamischer s-t-Flüsse zu finden, wie wir später noch zeigen werden. Desweiteren lässt sich das Problem auf eine statische Minimalkostenflussberechnung zurückführen. Bevor wir nun aber den Algorithmus von Ford und Fulkerson für dieses Problem vorstellen, müssen wir noch einige Vorbereitungen treffen. Wir führen zunächst die o. g. einfache Klasse dynamischer s-t-Flüsse ein, die sogenannten zeitlich wiederholten Flüsse, die durch eine Pfadzerlegung statischer s-t-Flüsse induziert werden. Theorem 1.32 ([15]). Seien (G, u, s, t) ein Netzwerk und x ein statischer st-Fluss. Dann existiert eine Menge P mit s-t-Pfaden, eine Menge X C mit Kreisen und eine Abbildung w : P → R+ mit x(a) = w(P ) P =(VP ,AP )∈P∪C:a∈AP und val(f ) = X w(P ). Falls x ganzzahlig ist, kann die Abbildung w auch P ∈P ganzzahlig gewählt werden. Definition 1.33. Es seien (G, u, τ, s, t) ein dynamisches Netzwerk und x ein statischer s-t-Fluss, die Mengen P und C und die Abbildung w wie in Theorem 1.32. (1) Die Abbildung w heißt Flusszerlegung von x. (2) Falls C = ∅ ist, heißt w auch Pfadzerlegung von x. (3) Seien T ∈ R+ und w eine Pfadzerlegung von x, so dassP für alle Pfade P = (VP , AP ) mit P ∈ P und w(P ) > 0 gilt: τ (P ) := a∈AP τ (a) ≤ T . Dann induziert x wie folgt einenX dynamischen s-t-Fluss f T : T f ((v, w), θ) := w(P ). P ∈P:(v,w)∈AP und θ∈[τ (P[s,v] ),T −τ (P )+τ (P[s,v] )) fT heißt zeitlich wiederholter Fluss. Zeitlich wiederholte Flüsse werden also dadurch induziert, indem wir entlang jeden Pfades P der Pfadzerlegung w(P ) Flusseinheiten in die Quelle im Zeitraum [0, T −τ (P )) schicken. Wir schreiben daher bei einer gegebenen Pfadzerlegung der Pfade P1 , . . . , Pk auch [P1 , . . . , Pk ]Tw um den induzierten zeitlich wiederholten Fluss zu beschreiben. 22 Graphentheoretische Grundlagen Theorem 1.34 ([21]). Sei (G, u, τ, s, t) ein dynamisches Netzwerk und f T ein zeitlich wiederholter Fluss der durch einen statischen s-t-Fluss x induziert wird. Dann ist f T ein zulässiger dynamischer Fluss mit Zeithorizont T X und es gilt: |f | = T ·val(x)− τ (a) · x(a). Insbesondere hängt der Flusswert a∈A nicht von der gewählten Pfadzerlegung ab. Beweis. Die Kapazitätsbedingungen werden erfüllt, da f T (a, θ) ≤ P P ∈P:a∈AP w(P ) = x(a) ≤ u(a) wegen der Zulässigkeit von x gilt. Der Zeithorizont beträgt T , da nach Konstruktion der längste Pfad der Pfadzerlegung nicht länger als T bzgl τ ist. Die Flusserhaltungsbedingung in einem Knoten v ∈ V \ {s, t} wird erfüllt, da entlang jeden Pfades P , auf welchem v liegt w(P ) Flusseinheiten verschickt werden. D. h. nach Konstruktion wenn zum Zeitpunkt θ Flusseinheiten mit Flussrate w(P ) verschickt werden, wurden zum Zeitpunkt θ−τ (a) (sei a Vorgängerkante in P von v) auch w(P ) Flusseinheiten verschickt. Es tritt somit auch keine Flussspeicherung in den Knoten auf. Der Wert des Flusses beträgt: Z T X Z T X X T T f (a, θ) dθ = w(P )dθ |f | = 0 0 a∈δ + (s) a∈δ + (s) P ∈P:a∈AP und θ∈[0,T −τ (P )) Z T X X = w(P )dθ = w(P ) · (T − τ (P )) 0 = T· P ∈P P ∈P:θ∈[0,T −τ (P )) X X w(P ) − P ∈P = T · val(x) − a∈A = T · val(x) − w(P ) · P ∈P X X X τ (a) a∈AP X τ (A) · P ∈P und w(P ) a∈AP τ (a) · x(a). a∈A Ford und Fulkerson erkannten damals bereits, dass man das dynamische Max Flow -Problem mit Hilfe der zeitlich wiederholten Flüsse lösen kann. Wir stellen den Algorithmus nun vor. Der Algorithmus 1.6 von Seite 23 berechnet einen maximalen dynamischen Fluss mit Zeithorizont T , indem er zunächst einen maximalen zeitlich wiederholten Fluss berechnet. Später werden wir sehen, dass dieser Fluss sogar maximal unter allen dynamischen s-t-Flüssen ist. Um dieses einzusehen beweisen wir die Korrektheit in mehreren Schritten. Dazu werden wir auch den Begriff des dynamischen Schnittes benutzen, welchen wir später 23 1.4 dynamische Flussprobleme input : Ein dynamisches Netzwerk N = (G, u, τ, s, t) und ein T ∈ R+ output : Ein dynamischer s-t-Fluss mit maximalen Flusswert und Zeithorizont T , d. h. gesucht ist ein dynamischer s-t-Fluss f mit |f | ≥ |f 0 | für alle s-t-Flüsse f 0 mit Zeithorizont T . Füge eine Kante (t, s) mit Fahrzeit −T und unbeschränkter Kapazität in den Graphen G ein. Berechne auf dem neuen Graphen eine Minimalkostenzirkulation, d. h. einen Minimalkostenfluss bzgl. τ , welchem eine Balancefunktion b ≡ 0 zugrunde liegt.; 2 Berechne eine Pfadzerlegung w von x in G.; 3 Konstruiere den zeitlich wiederholten Fluss f gemäß Def. 1.33.; Algorithmus 1.6 : Der Algorithmus von Ford & Fulkerson für das dynamische Max-Flow-Problem 1 s s t T /−∞ t Abbildung 1.3: Die Modifikation des Ausgangsgraphen im Algorithmus 1.6 links: Das Ausgangs Netzwerk N . rechts: Das Netzwerk nach einfügen der speziellen Kante (t, s) mit Fahrzeit -T und unbeschränkter Kapazität definieren. Zum Schluss werden wir in Analogie zu den statischen Flüssen ein Max Flow-Min Cut Theorem für dynamische Flüsse beweisen. Zunächst stellen wir fest: Theorem 1.35 ([21]). Der durch den Algorithmus berechnete dynamische s-t-Fluss f ist maximal unter allen zeitlich wiederholten Flüssen mit Zeithorizont T . Beweis. Die Laufzeit Zunächst ist festzustellen, dass der berechnete zeitlich wiederholte Fluss mit Zeithorizont T zulässig ist. Zunächst können wir annehmen, das Punkt 1 einen statischen Fluss berechnet, der eine kreisfreie Pfadzerlegung besitzt. Ansonsten entfernen wir die Kreise in der Flusszerlegung in Punkt 2. Dies würde sich nicht auf den Wert des statischen Flusses auswirken. Weiterhin ist kein s-t-Pfad länger als T , da sonst die Minimalkostenzirkulation nicht optimal wäre. Man könnte entlang der Residualkanten des entsprechenden Pfades und der Residualkante von (t, s) einen negativen Kreis finden. 24 Graphentheoretische Grundlagen P Die berechnete Minimalkostenzirkulation x besitzt PKosten −T · val(x) + a∈A τ (a) · x(a). Daher ist der Ausdruck T ·val(x)− a∈A τ (a) · x(a) maximal, welcher dem Flusswert des berechneten zeitlichen wiederholten Flusses entspricht. Bemerkungen 1.36. (1) Die Laufzeit wird durch die Berechnung des Minimalkostenflusses dominiert. (2) Wenn die gegebene Instanz ganzzahlig ist, entspricht der berechnete Fluss einem diskreten dynamischen Fluss, in dem wir die zeitliche Wiederholung gemäss Definition 1.33(3) nur für alle ganzzahligen Zeitpunkte θ durchführen. (Vgl. auch Bemerkung 1.31). Mit diesen Überlegungen erweist sich der berechnete diskrete Fluss als maximal, wenn der berechnete kontinuierliche Fluss maximal ist. Nun werden wir sehen, dass der berechnete Fluss sogar maximal unter allen dynamischen s-t-Flüssen ist. Dazu führen wir nun den Begriff des dynamischen Schnittes ein. Definition 1.37. Seien (G, u, τ, s, t) ein dynamisches Netzwerk und T ∈ R+ . (1) Sei X : [0, T ) → 2V mit s ∈ X(θ), t ∈ / X(θ) für alle θ ∈ [0, T ) und mit X(θ1 ) ⊂ X(θ2 ) für θ1 ≤ θ2 . Dann heißt X dynamischer s-tSchnitt. (2) Seien X ein dynamischer s-t-Schnitt und αv ∈ R für alle v ∈ V gegeben mit αv := inf{θ : v ∈ X(θ)} für v ∈ V \ {t} und αt := T . Falls v in keiner Menge X(θ) für alle θ ∈ [0, T ) enthalten ist, setzen wir stattdessen av := T . Dann ist die KapazitX ät des dynamischen s-t-Schnittes gegeben durch cap(X) := u(a) · max{0, αw − τ (a) − αv }. (v,w)∈A Diese Definition bedeutet veranschaulicht, dass, wenn man die α-Werte als Zeitpunkte auffasst, eine Kante (v, w) zwischen dem Zeitpunkt αv und αw zum Schnitt gehört. Allerdings erreicht nur Fluss, welcher in dem Intervall αw − τ (a) − αv in die Kante geschickt wird, den Knoten w während (v, w) im Schnitt liegt. Weiterhin, wenn βv gegeben sind, mit βs = 0 und βt = T , dann definieren sie einen dynamischen s-t-Schnitt X durch X(θ) := {v ∈ V : βv ≤ θ}. Die β Werte stimmen dann mit den α Werten aus Definition 1.37(2) überein. Dass die Mengen eine Inklusionskette bilden ist leicht einzusehen, da für v ∈ X(θ1 ) und θ1 ≤ θ2 sofort βv ≤ θ2 gilt, also v ∈ X(θ2 ). Weiterhin gilt αv = βv für alle v ∈ V , da αv = inf{θ : v ∈ X(θ)} = inf{θ : βv ≤ θ} = βv 25 1.4 dynamische Flussprobleme gilt. Desweiteren ist s ∈ X(0) und t ∈ / X(θ) für alle θ < T . Im Weiteren identifizieren wir einfachheitshalber die α-Werte mit dem Schnitt, den sie darstellen, und bezeichnen den Schnitt mit α und die Kapazität des Schnittes mit cap(α). Zunächst stellen wir fest, dass, wie im statischen Falle, die Kapazität eines dynamischen s-t-Schnittes immer größer als der Flusswert eines dynamischen s-t-Flusses ist. Theorem 1.38. Seien (G, u, τ, s, t) ein dynamisches Netzwerk, f ein dynamischer s-t-Fluss mit Zeithorizont T und ein Schnitt α durch αv ∈ [0, T ) für v ∈ V \ {t} mit αs = 0 und α(t) = T gegeben. Dann gilt |f | ≤ cap(α). Beweis. Definiere für v ∈ V die Variable T X Z ∆(v) := f (a, θ)dθ − αv a∈δ + (v) X Z a∈δ − (v) T f (a, θ − τ (a))dθ. αv Zunächst stellen wir fest, dass ∆(s) = |f | gilt, da in diesem Fall ∆(s) der Flusserhaltungsbedingung im Knoten s, also dem Flusswert entspricht. Wegen αt = T sind die Integralgrenzen gleich im Ausdruck von ∆(t) und daher gilt ∆(t)=0. Für alle anderen Knoten v gilt ∆(v) ≥ 0, da nach dem Zeitpunkt αv nicht mehr Fluss ein- als ausfließen kann. Bei Erreichen des Zeithorizontes T müssen die Knoten entleert sein. Es folgt nun: |f | = ∆(s) ≤ X ∆(v) = ∗ Z X αw −τ (a) f (a, θ)dθ αw −τ (a) X f (a, θ)dθ ≤ a=(v,w)∈A: αv ≤αw −τ (a) = Z a=(v,w)∈A αv v∈V ≤ X X αv a=(v,w)∈A: Z αw −τ (a) u(a)dθ αv αv ≤αw −τ (a) (αw − τ (a) − αv ) · u(a) a=(v,w)∈A: αv ≤αw −τ (a) = X (max{0, αw − τ (a) − αv )} · u(a) = cap(α). a=(v,w)∈A Bemerkung: die Ungleichung (*) gilt, da bei den restlichen Summanden die untere Integralgrenze größer als die obere wäre. Somit wurden nur negative Summanden weggelassen. Um nun zu zeigen, dass der Algorithmus 1.6 von Ford und Fulkerson einen maximalen dynamischen s-t-Fluss berechnet, genügt es zu zeigen, dass der Flusswert der Kapazität eines Schnittes entspricht. 26 Graphentheoretische Grundlagen Theorem 1.39 ([21]). Sei (G, u, τ, s, t) ein dynamisches Netzwerk und T ∈ R+ . Weiterhin sei x der statische s-t-Fluss, w seine Flusszerlegung und f der zeitlich wiederholte Fluss, welche der Algorithmus von Ford und Fulkerson berechnet. Dann ist f ein maximaler dynamischer s-t-Fluss mit Zeithorizont T. Beweis. Wir konstruieren einen dynamischen s-t-Schnitt α. Wir setzen αs = 0 und αt = T . Für alle anderen Knoten v setzen wir αv auf die Länge des kürzesten Weges von s nach v im Residualgraphen von x. Nun betrachten wir eine Kante a = (v, w) ∈ A: Falls die Kante im dynamischen Schnitt liegt, also αv < αw − τ (a) gilt, dann gilt x(a) = u(a), da andernfalls die Kante a im Residualgraphen Gx existiert und somit nach Wahl der α-Werte αw ≤ αv + τ (a) gelten würde, was aber zu einem Widerspruch führt. Weiterhin muss f (a, θ) = u(a) im Falle αv < αw − τ (a) für alle θ ∈ [αv , αw − τ (a)) gelten. Angenommen, das sei nicht der Fall, so existiert ein θ ∈ [αv , αw − τ (a)) mit f (a, θ) < u(a). Ferner existiert dann ein Pfad P ∈ P mit a ∈ P und w(P ) > 0. Dann gilt (1) τ (P[s,v] ) > αv oder (2) τ (P[w,t] ) > T − αw . Im Fall (1) existiert dann in Gx ein v-s-Pfad P 0 der Länge τ (P 0 ) < −αv in Gx , welcher mit dem kürzesten s-v-Pfad der Länge αv zusammen einen negativen Kreis ergibt, im Widerspruch zur Optimalität von x. Im Fall (2) existiert ein t-w-Pfad P 00 in Gx mit einer Länge von τ (P 00 ) < −T + αw . Zusammen mit der Residualkante von (t, s) erhalten wir einen s-w-Pfad der kürzer als αw ist. Dies steht im Widerspruch zur Konstruktion der α-Werte. Da beide Fälle nicht eintreten können, gilt somit f (a, θ) = u(a) für alle θ ∈ [αv , αw − τ (a)). Falls die Kante a nicht zum Schnitt gehört, also αw − τ (a) < αv gilt, so ist x(a) = 0 und somit f (a, θ) = 0 für alle θ ∈ [0, T ), da andernfalls die ← ← Kante a in Gx existieren würde. Somit hätte dann der s-v-Pfad, der über a ← und den kürzesten s-w-Pfad führt, eine Länge von αw + τ ( a ) = αw − τ (a). Da der kürzeste s-v-Pfad die Länge αv hat, wäre dies ein Widerspruch. Für 27 1.5 Zeitexpandierte Graphen den Wert des dynamischen Flusses folgt: X |f | = T · val(x) − τ (a) · x(a) = T · val(x) − X a∈A τ (a) · u(a) a=(v,w)∈A αw −τ (a)−αv ≥0 X = T· X w(P ) − P ∈P τ (a) · u(a) a=(v,w)∈A αw −τ (a)−αv ≥0 = X w(P ) · P ∈P X X (αw − αv ) − a=(v,w)∈P τ (a) · u(a) a=(v,w)∈A αw −τ (a)−αv ≥0 = X X (αw − αv ) · w(P ) − a=(v,w)∈A = X X P ∈P a∈P αw −τ (a)−αv ≥0 X (αw − αv ) · x(a) − a=(v,w)∈A τ (a) · u(a) a=(v,w)∈A τ (a) · u(a) a=(v,w)∈A αw −τ (a)−αv ≥0 X = = X (αw − αv ) · u(a) − a=(v,w)∈A a=(v,w)∈A αw −τ (a)−αv ≥0 αw −τ (a)−αv ≥0 X τ (a) · u(a) max{0, αw − αv − τ (a)} · u(a) a∈A = cap(α). Also stimmt der Wert des Flusses mit der Kapazität des Schnittes α überein. Mit Theorem 1.38 folgt, dass kein anderer dynamischer s-t-Fluss einen größeren Wert besitzen kann. Daher ist der berechnete zeitlich wiederholte Fluss maximal. Es folgt dadurch das Max Flow - Min Cut-Theorem für dynamische Netzwerke Theorem 1.40 (Ford und Fulkerson [7]). Sei (G, u, τ, s, t) ein dynamisches Netzwerk und T ∈ R+ . Dann stimmt der Wert eines maximalen dynamischen s-t-Flusses mit der Kapazität eines dynamischen s-t-Schnittes überein. 1.5 Zeitexpandierte Graphen Zeitexpandierte Graphen ermöglichen eine Reduktion von diskreten dynamischen Flussproblemen auf statische Flussprobleme. Wir werden daher uns hier nur mit diskreten dynamischen Flüssen beschäftigen. Allerdings haben zeitexpandierte Graphen den Nachteil, dass ihre Knoten- und Kantenmengen im Verhältnis zu dem Ausgangsgraphen, auf 28 Graphentheoretische Grundlagen welchem sie basieren, zu groß sind, d. h. dass sie i. A. eine exponentielle Größe haben. Dennoch helfen sie uns, Existenzbeweise und Algorithmen für unsere dynamischen Flussprobleme im nächsten Kapitel zu finden. Da wir auch Flüsse mit mehreren Quellen untersuchen werden, müssen wir den statischen Flussbegriff für den Fall, dass wir mehrere Quellen gegeben haben, erweitern. Definition 1.41. Gegeben seien ein Graph G = (V, A) und eine Kapazitätsfunktion u : A → N0 . Desweiteren seien eine Menge von Quellen ∅ 6= S + ⊂ V und eine Menge von Senken ∅ 6= S − ⊂ V mit S + ∩ S − = ∅ gegeben. (1) Ein S + -S − -Flussist ein Fluss mit exf (s) ≤ 0 für alle Quellen s ∈ − S + und exf (t) ≥ 0 für alle P Senken t ∈ S . Der Flusswert wird mit + val(f ) := −exf (S ) := − s∈S + exf (s) bezeichnet. (2) Das Tupel (G, u, S + , S − ) wird als Netzwerk bezeichnet. (3) Ein maximaler S + -S − -Fluss ist ein Fluss f , der den Ausdruck val(f ) maximiert. Zuerst sehen wir ein, dass die S + +S − -Flussdefinition sich mit der Definition von s-t-Flüssen verträgt, da die Definition im Falle S + = {s} und S − = {t} mit der bisherigen Definition der s-t-Flüsse übereinstimmt. Gewöhnliche Maximalflussberechnungen können hier auch auf s-t- Flussberechnungen reduziert werden, indem man eine Superquelle s und eine Supersenke t einführt und diese entsprechend in den Graphen einbindet. Daher ist die Existenz maximaler Flüsse gesichert, da einerseits hier auch wieder der Nullfluss zulässig ist, und andererseits der Flusswert nach oben beschränkt ist. Nun können wir die zeitexpandierten Netzwerke definieren: Definition 1.42. Seien N = (G, u, τ, S + , S − ) ein dynamisches Netzwerk und T ∈ N ein Zeithorizont. (1) Dann wird der zugehörige zeitexpandierte Graph GT = (V T , AT ) wie folgt definiert: VT A T := {vθ : v ∈ V, θ ∈ {0, 1, . . . , T − 1}} und := {aθ = (vθ , wθ+τ (a) ) : a = (v, w) ∈ A, θ ∈ {0, 1, . . . , T − 1 − τ (a)}} ∪ {(vθ , vθ+1 ) : v ∈ V, θ ∈ {0, 1, . . . , T − 2}}}. (2) Das zugehörige zeitexpandierte Netzwerk N T wird wie folgt definiert: N T := (GT , uT , S +(T ) , S −(T ) ) mit uT (aθ ) = u(a) für alle θ ∈ {0, 1, . . . , T − 1 − τ (a)} und uT (vθ , vθ+1 ) = ∞. Desweiteren ist S +(T ) := {sθ ∈ V T : s ∈ S + , 0 ≤ θ < T } und S −(T ) := {tθ ∈ V T : 0 ≤ θ < T }. 29 1.5 Zeitexpandierte Graphen Bemerkungen 1.43. (1) Das zeitexpandierte Netzwerk enthält für jede Zeitschicht [i, i + 1) für alle ganzzahligen 0 ≤ i < T jeweils eine Kopie aller Knoten aus G. Kanten (v, w) ∈ A entsprechen Kanten in AT , die von allen Knotenkopien von v aus der Zeitscheibe [i, i + 1) zu der Knotenkopie in [i + τ ((v, w)), i + τ ((v, w)) + 1) für alle 0 ≤ i ≤ T − τ ((v, w)) − 1 führen. Daher enthält der Graph O(T · n) Knoten und O(T · m) Kanten. Flussberechnungsalgorithmen, die das zeitexpandierte Netzwerk konstruieren müssen, sind daher bestenfalls pseudopolynomiell. (2) Die Kanten (vi , vi+1 ) ∈ AT für 0 ≤ i < T − 1 werden Übertrags- oder Holdoverkanten genannt. Diese können, wie wir im nächsten Theorem sehen werden, für die Flussspeicherung im Knoten v im Zeitraum [i, i+1) von einem statischen s0 -tT −1 -Fluss, welcher durch einen dynamischen s-t-Fluss mit Zeithorizont T induziert wird, benötigt werden. (3) Im weiteren Verlauf werden wir u statt uT schreiben, da wir uT als Erweiterung von u auf AT auffassen werden. 3 1 2 1 3 2 3 4 Zeitschicht: 3 1 2 3 4 Zeitschicht: 2 1 2 3 4 Zeitschicht: 1 1 2 3 4 Zeitschicht: 0 4 1 1 1 3 Abbildung 1.4: links: ein Graph G (auf den Kanten sind nur die Fahrzeiten angegeben) rechts: der zeitexpandierte Graph G4 Wir erläutern nun den Zusammenhang zwischen einem dynamischen Netzwerk und seinem zugehörigen zeitexpandierten Netzwerk. Theorem 1.44. Seien N = (G, u, τ, S + , t) ein dynamisches Netzwerk, T ∈ N und N T das zugehörige zeitexpandierte Netzwerk. Dann induziert jeder diskrete dynamische S + -t-Fluss f mit Wert |f | einen statischen S +(1) -tT −1 Fluss x mit Wert val(x) = |f | und umgekehrt. Beweis. Sei x ein statischer S +(1) -tT −1 -Fluss auf GT . Für alle a ∈ A wird der S + -t-Fluss f durch f (a, θ) = x(aθ ) induziert. Nach Konstruktion des zeitexpandierten Netzwerkes erfüllt f die Kapazitätsbedingung. Wir zeigen nun, dass in jedem Knoten außer den Knoten s ∈ S + und t und zu jedem Zeitpunkt die Flusserhaltungsbedingung gilt. Dazu sei Y ∈ [0, T ] ganzzahlig und v ∈ V \ S + \ {t}. Es gilt: 30 Graphentheoretische Grundlagen YX −1 θ=0 = = X f ((v, w), θ − τ (a)) − (v,w)∈δ − (v) YX −1 X (w,v)∈δ − (v) YX −1 θ=0 − (v,w)∈δ + (v) x((wθ−τ (w,v) , vθ )) − θ=0 f ((v, w), θ) X X X x((vθ , wθ+τ (v,w) )) (v,w)∈δ + (v) x((wκ , vθ )) − x(vθ−1 , vθ ) (wκ ,vθ )∈δ − (vθ ) X ! x((vθ , wθ+τ (v,w) )) − x(vθ , vθ+1 ) (vθ ,wκ )∈δ + (vθ ) = YX −1 θ=0 = YX −1 exx (vθ ) −x(vθ−1 , vθ ) + x(vθ , vθ+1 ) | {z } =0 −x(vθ−1 , vθ ) + x(vθ , vθ+1 ) θ=0 =x(vY −1 , vY ) ≥ 0. Wir beachten, dass die letzte Zeile eine Teleskopsumme ist. Da wir nichtdefinierte Ausdrücke auf Null setzen, erhalten wir im Fall Y = T in der letzten Zeile Gleichheit. Somit haben wir die Flusserhaltungsbedingungen gezeigt. 31 1.5 Zeitexpandierte Graphen Der Wert |f | beträgt T −1 X X θ=0 (w,t)∈δ − (t) = T −1 X = X f ((t, w), θ) (t,w)∈δ + (s) x((wθ−τ ((w,t)) , tθ )) − θ=0 (w,t)∈δ − (t) T −1 X X f ((w, t), θ − τ ((w, t))) − x((tθ , wθ+τ ((t,w)) )) X (t,w)∈δ + (t) x((wκ , tθ )) − x(tθ−1 , tθ ) X (wκ ,tθ )∈δ − (tθ ) θ=0 − ! x((tθ , wθ+τ ((s,w)) )) + x(Tθ , tθ+1 ) X (tθ ,wκ )∈δ + (tθ ) = = T −1 X θ=0 T −2 X exx (tθ ) − x(tθ−1 , tθ ) + x(tθ , tθ+1 ) −x(tθ−1 , tθ ) + x(tθ , tθ+1 ) + exx (tT −1 ) − x(tT −2 , tT −1 ) + t(tT −1 , tT )+ θ=0 =val(x) + T −1 X −x(tθ−1 , tθ ) + x(tθ , tθ+1 ) . |i=0 {z =0 } Somit ist f zulässig und besitzt den gleichen Flusswert wie x. Wir beachten dabei, dass wir x(vθ , wκ ) = 0 setzen, falls dieser Ausdruck nicht definiert ist, d. h. es gilt θ oder κ ∈ / [0, T − 1]. Umgekehrt sei f ein dynamischer S + -t-Fluss welcher ohne Flussspeicherung in Knoten auskommt. Der entsprechende statische S +(1) -tT −1 -Fluss x wird durch x(aθ ) = f (a, θ) induziert. Die Kapazitätsbedingung für x ist nach Konstruktion des Netzwerkes erfüllt. Wir zeigen nun für jeden Knoten vθ ∈ V T \ S +(T ) \ {t}T , dass die Flusserhaltungsbedingung erfüllt ist. Es gilt: X X x((wκ , vθ ))) − x((vθ , wκ )) (wκ ,vθ )∈δ − (vθ ) X = (wκ ,vθ = X f ((w, v), θ − τ ((w, v)) − )∈δ − (v X (vθ ,wκ )∈δ + (vθ ) θ) f ((w, v), θ − τ ((w, v)) − (w,v)∈δ − (v) (vθ ,wκ )∈δ + (v X f ((v, w), θ) θ) f ((v, w), θ) (v,w)∈δ + (v) =exf ((v, θ + 1)) − exf ((v, θ)) =0. Ist f ein dynamischer Fluss mit Flussspeicherung in Knoten, so lässt sich 32 Graphentheoretische Grundlagen entsprechend der Fluss auf den Holdoverkanten definieren, damit die oberen Berechnungen analog durchführbar bleiben. Desweiteren müssen die Holdoverkanten der Quelle und Senke noch geeignet definiert werden, damit |f | = val(x) gilt. Dies ist aber durchführbar, wenn der statische Fluss x auf den nicht-Holdoverkanten berechnet ist. Dies gelingt mit analoger Anwendung der Holdoverkanten-Konstruktion in Theorem 2.17 im nachfolgenden Kapitel, wenn wir x als S +(T ) -S −(T ) -Fluss (mit S − = {t}) auffassen. Durch das letzte Theorem erhalten wir eine weitere Möglichkeit maximale dynamische Flüsse mit Hilfe zeitexpandierter Graphen zu berechnen. Allerdings ist es i. A. kein effiziente Möglichkeit, da das zeitexpandierte Netzwerk im Vergleich zu dem zugrunde liegenden Netzwerk eine exponentielle Größe haben kann. Kapitel 2 Evakuierungsprobleme 2.1 Einführung In diesem Kapitel befassen wir uns mit Evakuierungsproblemen. Man stelle sich ein brennendes Gebäude oder ein brennendes Flugzeug vor, welches kurz davor steht zu explodieren. Die im Gebäude oder Flugzeug befindlichen Personen müssen so schnell wie möglich in Sicherheit gebracht werden. Eine Panik kann schnell zu Engpässen auf den Fluchtwegen und damit zu einer Katastrophe führen. Damit es nicht zu einer Katastrophe kommt, werden bei der Konstruktion von Gebäuden und Flugzeugen Evakuierungspläne erstellt, an welche man sich im Ernstfall halten soll, um so schnell wie möglich in Sicherheit zu gelangen. Bei diesen Problemen bietet sich es an, das zu evakuierende Objekt durch ein dynamisches Netzwerk zu modellieren, da die Zeit die wichtigste Komponente ist. In diesem Kapitel werden wir uns auf ganzzahlige Netzwerke und Berechnung diskreter dynamischer Flüsse beschränken. Daher, wenn nichts anderes angemerkt wird, verstehen wir in diesem Kapitel unter einem dynamischen Fluss immer einen diskreten dynamischen Fluss. Bisher haben wir das dynamische Max Flow Problem kennengelernt. An sich ist dieses Problem für die Berechnung einer Evakuierung ungeeignet, da es als Eingabe auch einen Zeithorizont erwartet. Wenn man eine gegebene Menge an Personen evakuieren möchte ist zunächst nicht klar innerhalb welchen Zeitraumes dies möglich ist. Auf das dynamische Netzwerk übertragen bedeutet das, dass man vorab Kenntnis über den Zeithorizont haben sollte. Ein ähnliches Probleme schafft hier Abhilfe. Es handelt sich dabei um das Quickest Transshipment Problem, bei welchem es bei einer gegebenen Balancefunktion darum geht, einen dynamischen Fluss zu finden, der die Bedarfe erfüllt und den kleinstmöglichen Zeithorizont besitzt. Berlin [2] und Chalmet [4] et al. untersuchten das Problem auf Netzwerken mit mehreren Quellen und einer Senke. Jarvis und Ratliff [13] untersuchten zwar das Problem auf Netzwerken mit einer Quelle und einer Senke, aber ihre Ergebnisse sind auch auf Netzwerke mit mehreren Quellen übertragbar. Sie stellten fest, dass drei Eigenschaften eines dynamischen Flusses, der die gegebenen Bedarfe erfüllen soll, gleichzeitig erreichbar sind. Die erste Eigenschaft ist die, dass der gesuchte Fluss einen minimalen Zeithorizont haben soll. Die zweite Eigenschaft besagt, dass die Anzahl der Flusseinheiten, die zu jedem Zeitpunkt θ ≥ 0 das Netzwerk verlassen, maximal ist. Die dritte Eigenschaft 33 34 Evakuierungsprobleme besagt, dass die durchschnittliche Zeit, welche Flusseinheiten benötigen, um das Netzwerk zu verlassen, minimal ist. Dynamische Flüsse, welche die erste Eigenschaft haben, werden Quickest Transshipments genannt. Dynamische Flüsse welche die zweite, und somit auch offensichtlich die dritte Eigenschaft erfüllen, werden Earliest Arrival Transshipments genannt, welche in Abschnitt 2.5 eingehender untersucht werden. Desweiteren ist jedes Earliest Arrival Transshipment ein Quickest Transshipment. Die Umkehrung ist aber i. A. falsch. Dies kann man z. B. daran sehen, dass Earliest Arrival Transshipments auf Netzwerken mit mehreren Senken nicht existieren, obwohl es auf diesen Netzwerken immer ein Quickest Transshipment gibt. Dazu geben wir im weiteren Verlauf des Kapitels ein Beispiel an. Wir geben nun an, wie im folgenden Hoppe und Tardos das Quickest Transshipment Problem untersucht und gelöst haben. Wir definieren das Quickest Transshipment Problem und weitere Teilprobleme, die auf dem Weg zur Lösung benötigt werden. Eine schöne Eigenschaft des Problems ist, dass stets ganzzahlige Flüsse bei gegebenen ganzzahligen Instanzen existieren. 2.2 Das Quickest Transshipment Problem Quickest Flow Problem Beim Quickest Flow Problem geht es darum, den kleinsten Zeithorizont zu bestimmen, innerhalb dessen es möglich ist, eine gegebene Menge an Flusseinheiten von einer Quelle zu einer Senke zu befördern. Quickest Flow Problem Instanz: Ein dynamisches Netzwerk (G, u, τ, s,P t), eine Balancefunktion b : V → N mit v∈V b(v) = 0 Gesucht: Ein minimaler Zeithorizont T ∈ N, so dass es einen dynamischen s-t-Fluss gibt mit |f | = b(s). Dieses Problem lässt sich auf das dynamische Max Flow Problem mittels binärer Suche lösen. Der gesuchte Zeithorizont muss sich im Intervall [0, n · τ ∗ + b(t)] befinden, wobei τ ∗ := max{τ (a) : a ∈ A} das Maximum aller Fahrzeiten der Kanten von A bezeichnet. Für jede Überprüfung eines gerade betrachteten Zeithorizontes T wird dann eine gewöhnliche dynamische Max Flow Berechnung durchgeführt und getestet ob bzgl. des maximalen Flusses fT die Beziehung |fT | < b(t) gilt. Der gesuchte Zeithorizont T 0 ist derjenige, für welchen |fT 0 −1 | < b(t) und |fT 0 | ≥ b(t) gilt. Effizientere bzw. strengpolynomielle Algorithmen haben Burkard, Dlaska und Klinz in [3] aufgezeigt. Das Quickest Flow Problem ist ein Spezialfall, wenn wir das nun folgende Quickest Transshipment Problem auf eine Quelle und eine Senke einschrän- 2.2 Das Quickest Transshipment Problem 35 ken. Quickest Transshipment Problem + , S − ), Instanz: Ein dynamisches Netzwerk (G, u, τ, SP eine Balancefunktion b : V → N mit v∈V b(v) = 0 Gesucht: Ein minimaler Zeithorizont T ∈ N, so dass es einen dynamischen s-t-Fluss gibt mit |f | = b(S + ) Auf dem Weg zur Lösung des Quickest Transshipment Problems werden wir das Transshipment Problem benötigen, da wir dieses Problem bei Kenntnis des minimalen Zeithorizontes auf das Transshipment Problem reduzieren werden. Transshipment Problem Als Evakuierungsproblem wird in der kombinatorischen Optimierung die Erweiterung des Quickest Flow Problems auf mehrere Quellen und einer Senke verstanden. Wir sprechen dann von einem Quickest Transshipment Problem. Zunächst untersuchen wir das Transshipment Problem, welches bei der Untersuchung des Quickest Transshipment Problems eine wichtige Rolle einnimmt. Definition 2.1. Sei (G, u, τ, S + , S − ) ein dynamisches P Netzwerk, T ∈ N ein Zeithorizont, b : V → N eine Balancefunktion mit v∈V b(v) = 0 und es sei b(v) > 0 für alle v ∈ S + und b(v) < 0 für alle v ∈ S − und b(v) = 0 sonst. Ein dynamisches Transshipment mit Zeithorizont T ist ein dynamischer S + -S − -Fluss f , welcher die Balancefunktion b respektiert, d. h. es muss gelten: (1) exf (v, T ) = −b(v) für alle v ∈ V , (2) −exf (s, Y ) ≤ b(s) für alle s ∈ S + und alle Y < T . Bemerkungen 2.2. Die Bedingung (2) besagt, dass eine Quelle nicht mehr als b(v) Flusseinheiten losschicken darf. Somit darf sie nicht mehr losschicken, als sie zur Verfügung hat. In der meisten Literatur ist diese Bedingung nicht explizit enthalten. Die später vorgestellten Algorithmen basieren darauf und würden falsche Resultate liefern, wenn wir (2) ignorieren würden. In Abbildung 2.1 sehen wir ein Netzwerk (Die Zahlen an den Knoten geben ihren Bedarf an und die Zahlen an den Kanten geben nacheinander Fahrzeit und Kapazität an), auf welchem wir ein Transshipment f betrachten könnten, welches zum Zeitpunkt 0 aus dem Knoten s1 zwei Flusseinheiten über die Kante (s1 , t) und eine Flusseinheit über die Kante (s2 , s1 ) versendet. Zu anderen Zeitpunkten werden keine weiteren Flusseinheiten versendet. 36 Evakuierungsprobleme Die zwei Flusseinheiten, welche in s1 gestartet sind, benötigen genau zwei Zeiteinheiten, um vollständig die Senke t zu erreichen. Die Flusseinheit, die in s2 gestartet ist nach drei Zeiteinheiten komplett im Knoten s1 enthalten und wird nicht weiter verschickt. In diesem Fall, da unser Netzwerk nur ausgezeichnete Knoten besitzt, wird die Flusserhaltungsbedingung trivialerweise erfüllt. Weiterhin wird die Kapazitätsbedingung offensichtlich eingehalten. Wir haben somit einen zulässigen dynamischen {s1 , s2 }-t-Fluss beschrieben mit exf (t, 3) = |f | = 2 und Zeithorizont 3. Wir betrachten nun den Ausdruck exf (s1 , 3). Da zwei Flusseinheiten entlang (s1 , t) versendet wurden und innerhalb des Zeithorizontes eine Flusseinheit den Knoten über (s2 , s1 ) erreicht hat, gilt exf (s1 , 3) = −1 = −b(s1 ). Da in s2 nur eine einzige Flusseinheit gestartet ist, gilt exf (s2 , 3) = −1 = −b(s2 ). Wenn wir auf die Bedingung (2) in der letzten Definition verzichten würde, hätten wir ein zulässiges b-Transshipment vorliegen. Aber nun betrachten wir den Ausdruck exf (s1 , 1). Es gilt exf (s1 , 1) = f ((s2 , s), 0 − 2) − f ((s1 , t), 0) = −2 < −1 = −b(s1 ). Somit ist die Bedingung | {z } | {z } :=0 =2 (2) verletzt. Desweiteren ist auch kein anderes Transshipment mit Zeithorizont 3 möglich, da Flusseinheiten, die in die Kante (s1 , t) betreten wollen, spätestens zum Zeitpunkt 1 diese Kante betreten müssen. Desweiteren darf die Kante (s2 , t) wegen ihrer Fahrzeit nie benutzt werden. Die Kante (s2 , s1 ) dagegen müsste benutzt werden, da sonst die Bedingung (1) verletzt wäre. -2 t 1/2 s1 1 10/1 2/1 s2 1 Abbildung 2.1: Eine kleine Netzwerkinstanz, zu welcher zum Zeithorzont 3 kein zulässiges b-Transshipment mit b(s1 ) = b(s2 ) = 1 existiert. Das Problem, zu einem gegebenen Zeithorizont, Balancefunktion und einem Netzwerk ein dynamisches Transshipment zu finden, wird als Transshipment Problem bezeichnet. Transshipment Problem + − Instanz: Ein dynamisches Netzwerk N = (G, u, Pτ, S , S ), eine Balancefunktion b : V → N mit v∈V b(v) = 0, ein Zeithorizont T ∈ N0 Gesucht: Ein dynamischer S + -S − -Fluss mit Zeithorizont der die Balancefunktion b respektiert, oder die Aussage, dass kein solches Transshipment existiert. 2.2 Das Quickest Transshipment Problem 37 Definition 2.3. Sei (N, b, T ) eine Instanz des Transshipment Problems. Dann heißt diese Instanz zulässig, falls diese Instanz eine Lösung besitzt. Wenn wir eine zulässige Instanz vorliegen haben, werden wir später kurz erläutern, wie Hoppe und Tardos in [10] und [11] dieses Problem auf das dynamische lexikographische Max Flow Problem reduzieren. Danach werden wir uns kurz mit der Zulässigkeit des Transshipment Problems befassen. Dynamische lexikographisch maximale Flüsse Definition 2.4. Seien N = (G, u, τ, S + , S − ) ein dynamisches Netzwerk, b eine Balancefunktion und T ∈ N ein Zeithorizont. Desweiteren existiere eine Anordnung der Knoten aus S + ∪ S − durch das Tupel (s0 , . . . , sl ), wobei |S + | + |S − | = l gilt. (1) Ein dynamischer lexikographischer maximaler S + -S − -Fluss ist ein dynamischer S + -S − -Fluss, der die Menge an Flusseinheiten, welche die Knoten (s0 , . . . , sl ) verlassen, bzgl. der gegebenen Ordnung maximiert. (2) Wir definieren Si := {s0 , . . . , si−1 } für 0 ≤ i ≤ l, wobei S0 := ∅ gelten soll und C := {Si : 0 ≤ i ≤ l}. (3) W T (Si ) bezeichne die maximal mögliche Anzahl an Flusseinheiten, welche ein dynamischer Fluss mit Zeithorizont T von Quellen aus S + ∩ Si zu Senken aus S − \ Si versenden kann. Analog verstehen wir im statischen Fall bzgl. der Anordnung {s0 , . . . , sl } unter einem lexikographischen maximalen S + -S − -Fluss, einen Fluss, der bzgl. der gegebenen Anordung die Menge an Flusseinheiten, welche jeden Knoten verlässt, maximiert. Wir beachten dabei sowohl im dynamischen als auch im statischen Fall, dass wir unter dem Verlassen einer Senke das Verlassen des Netzwerks, d. h. das Betreten dieser Senke verstehen. Somit verstehen wir unter Maximierung der Anzahl an Flusseinheiten welche eine Senke verlässt die Minimierung der Flusseinheiten welche die Senke betreten soll. Nach Minieka und Megiddo ist bekannt, dass statische lexikographische Flüsse existieren, die jeweils simultan für alle 0 ≤ i ≤ l die Anzahl der Flusseinheiten maximieren, welche die Menge Si verlassen. Mit dieser Eigenschaft werden wir in Abschnitt 2.4 die statischen lexikographisch maximalen Flüsse, welche wir später als technisches Hilfsmittel benötigen, einführen und definieren. Dabei beleuchten wir den Existenzbeweis statisch lexikographisch 38 Evakuierungsprobleme maximaler von Minieka welcher der o. g. Beobachtung von Megiddo und Minieka zugrunde liegt. Durch den Zusammenhang dynamischer und zeitexpandierter Netzwerke erhalten wir durch die Existenz statisch lexikographischer Flüsse die Existenz dynamischer lexikographischer Flüsse. dynamisches lexikographisches Max Flow Problem Instanz: Ein dynamisches Netzwerk N = (G, u, τ, S + , S − ) Eine Anordnung C der Knoten S + ∪ S − = {s0 , . . . , sl } ein Zeithorizont T ∈ N0 , so dass die Instanz (N, b, T ) zulässig ist Gesucht: Ein dynamischer lexikographischer maximaler S + -S − -Fluss. Über das dynamische lexikographische maximale Max Flow Problem ist folgende Aussage bekannt: Theorem 2.5. (Minieka[19] und Megiddo[17]) Sei N = (G, u, τ, S + , S − ) ein dynamisches Netzwerk, eine Anordnung der Quell- und Senkeknoten S + ∪ S − = {s0 , . . . , sl } und T ein Zeithorizont. Sei f ein dynamischer S + S − -Fluss mit Zeithorizont T , welcher dynamisch Pilexikographisch maximal ist. Dann gilt für alle 0 ≤ i ≤ l: −exf (Si , T ) = − j=0 exf (sj , T ) = W T (Si ) Dieses Problem lässt sich auf einem modifizierten Netzwerk lösen. Sei T ein Zeitpunkt, zu welchem (N, C, T ) zulässig ist. Wir beschreiben nun die Netzwerkmodifikation und den Algorithmus, den Hoppe und Tardos [10] und [11] beschrieben haben. Zu erwähnen ist, dass Fleischer und Tardos in [5] dieses Resultat auf kontinuierliche Flüsse übertragen haben. Sei N = (G, u, τ, S + , S − ). Dann fügen wir eine Superquelle ψ und Kanten (ψ, sk ) für alle sk ∈ S + mit Fahrzeit Null und unbegrenzter Kapazität ein. Den so entstandenen Graphen bezeichnen wir mit G(l + 1). Weiter sei fl+1 der statische Nullfluss auf G(l + 1). Wir untersuchen nun nacheinander die Knoten si in umgekehrter Anordnung, d. h. für i = l, . . . , 0. Falls si ∈ S + , dann entfernen wir die Kante (ψ, si ) und erhalten so den Graphen G(i). Auf Gfi+1 (i) berechnen wir einen statischen maximalen ψ-si -Fluss gi mit minimalen Kosten, indem wir τ als Kostenfunktion interpretieren. Wir setzen dann fi := fi+1 + gi . Falls si ∈ S − , dann fügen wir eine Kante si , ψ mit unbegrenzter Kapazität und Kostenfaktor −T ein, um so den Graphen G(i) zu erhalten. Auf Gfi+1 (i) berechnen wir nun eine Minimalkostenzirkulation gi und setzen dann fi := fi+1 + gi . Diesen Vorgang iterieren wir bis der letzte Knoten untersucht wurde. Wenn wir nach einer Iteration i den Fluss fi berechnet haben, berechnen wir 2.2 Das Quickest Transshipment Problem 39 eine Standard Pfadzerlegung, wobei wir den zugrundeliegenden Residualgraphen als Ausgangsgraphen betrachten. Wenn wir die Pfade der Pfadzerlegung zeitlich wiederholen, erhalten wir einen dynamischen lexikographischen Fluss. Man beachte, dass die Pfade bzgl. des Ausgangsgraphen G Rückwärtskanten enthalten können. Somit handelt es sich um einen sogenannten verallgemeinerten zeitlich wiederholten Fluss bzgl. einer sogenannten verallgemeinerten Pfadzerlegung. Verallgemeinerte Pfadzerlegungen werden wir in Abschnitt 2.4.2 definieren und erläutern. Für weitere Details verweisen wir auf Hoppe und Tardos [10] und [11]. Zusammenfassend haben wir folgenden Sachverhalt: Theorem 2.6 (Hoppe und Tardos [10], [11]). Sei (N, C, T ) eine Instanz des dynamischen lexikographischen Max Flow Problems. Dann liefert der soeben beschriebene Algorithmus einen dynamischen lexikographisch maximalen Fluss in strengpolynomieller Zeit. T Pi Wenn für die Mengen Si ∈ C die Beziehung W (Si ) = b(Si ) = j=1 b(si ) gilt, könnte man sofort das Transshipment Problem mit einer dynamischen lexikographischen Max Flow Berechnung lösen. Nun gilt aber diese Beziehung nicht im Allgemeinen. Wir zeigen nun auf wie Hoppe und Tardos die gegebene Instanz (N, b, T ) des Transshipment Problems in eine äquivalente Instanz (N, C 0 , T ) des dynamischen lexikographischen Max Flow Problems überführen, so dass W T (Si0 ) = b(Si0 ) für alle Si0 ∈ C 0 gilt. Definition 2.7. Sei N = (G, u, τ, S + , S − ) ein dynamisches Netzwerk. Eine Menge X ∈ S + ∪ S − heißt strikt, wenn W T (X) = b(X) gilt. Sei nun (N, b, T ) eine Instanz des Transshipment Problems. Der Algorithmus von Hoppe und Tardos fügt für jeden Knoten s ∈ S + ∪ S − einen Knoten s0 ein. Gilt s ∈ S + , so fügt er die Kante (s0 , s) in das Netzwerk ein. Andernfalls fügt er die Kante (s, s0 ) ein. Die neuen Kanten besitzen jeweils Fahrzeit Null und unbeschränkte Kapazität. Wir erhalten mit den neuen Knoten entsprechend neue Mengen S 0+ und S 0− . Die ursprünglichen ausgezeichneten Knoten werden nun als Zwischenknoten betrachtet. Wir führen daher eine neue Balancefunktion b0 ein mit b0 (s0 ) = b(s) für alle s ∈ S + ∪ S − und b0 (v) = 0 für alle v ∈ V sonst. Nun konstruiert der Algorithmus iterativ eine Menge C 0 strikter Mengen, die in S 0 := S + ∪ S − enthalten sind. Am Anfang setzt er C 0 = {∅, S 0 }. Diese Mengen sind trivialerweise strikt. Der Algorithmus erweitert nun — ausgehend von diesem neuen Netzwerk— die Menge C 0 um weitere strikte Mengen ˜(S) ⊂ S 0 solange bis |C 0 | = |S 0 | + 1 gilt. In diesem Fall stellt C 0 eine vollständige Anordnung der Knoten aus S 0 da. Da alle Teilmengen aus S 0 dann strikt sind, wären wir fertig. Um dieses Ziel zu erreichen betrachtet der Algorithmus in jeder Iteration zwei adjazente Mengen Q und R mit |R \ Q| > 1 aus C 0 . Adjazent bedeutet 40 Evakuierungsprobleme hier, dass es keine Menge X ∈ C 0 mit Q ( X ( R gibt. Der Algorithmus fügt nun weitere strikte Teilmengen Q0 mit Q ( Q0 ( R in C 0 ein, indem S 0 um weitere ausgezeichnete Knoten erweitert wird. Eine Invariante des Algorithmus ist, dass R \ Q mit mehr als einem Element immer einen ausgezeichneten Knoten aus S + ∪ S − enthält. Die neuen ausgezeichneten Knoten werden jeweils mit dem ursprünglichen ausgezeichneten Knoten mittels einer Kante mit nichtnegativer Kapazität und nichtnegativer Fahrzeit verbunden. Ferner wird der originale b-Wert eines Knotens s aus S + ∪ S − auf neue Knoten aus S 0 verteilt, die per Kante mit neuen Knoten s0 , . . . ∈ S 0 adjazent sind. Nach jeder Iteration erhalten wir eine neue Instanz (N 0 , b0 , T ) die zu allen vorher entstandenen Instanzen des Transshipment Problems äquivalent ist. Weiterhin vergrößert sich die Differenz |C 0 | − |S 0 | um genau eins. Der Algorithmus terminiert, wenn |C 0 | = |S 0 | + 1 gilt. Die berechnete Instanz des Transshipment Problem ist zu unserer Ausgangsinstanz äquivalent und lässt sich wegen Theorem 2.5 durch eine dynamische lexikographische Maximalfluss Berechnung lösen, indem wir die Instanz (N 0 , C 0 , T ) lösen. Für weitere Details verweisen wir auf [10] und [11]. Wir halten weiter fest: Theorem 2.8 (Hoppe und Tardos [10][11]). Sei (N, b, T ) eine zulässige Instanz des Transshipment Problems. Der soeben beschriebene Algorithmus kann in streng polynomieller Zeit eine äquivalente Instanz (N 0 , b0 , T ) und eine Menge C 0 berechnen, so dass diese Instanz in streng polynomieller Zeit durch eine dynamische lexikographische Max Flow Berechnung lösbar ist. Zulässigkeit des Transshipment Problems Theorem 2.9 (Klinz [14]). Eine Instanz (N, b, T ) des Transshipment Problems ist genau dann zulässig, wenn W T (X) ≥ b(X) für alle X ⊂ S + ∪ S − gilt. Eine erste Möglichkeit die Zulässigkeit einer Instanz zu testen, wäre die Enumeration aller Teilmengen von S = S + ∪ S − . Eine weitere Möglichkeit legten Hoppe und Tardos in [10] und [11] dar. Sie betrachteten die Funktion f : 2S → R mit f (X) = W T (X)−b(X) und stellten fest, dass f sub-modular ist, d. h. es gilt für alle X, Y ∈ 2S : f (X)+f (Y ) ≥ f (X ∪Y )+f (X ∩Y ). Wenn wir eine Menge X ∈ 2S finden, so dass f(X) minimal ist und f(X)<0 gilt, so ist die betrachtete Instanz nach Theorem 2.9 unzulässig. Nach Grötschel, Lovász und Schrijver [9] ist es möglich f in streng polynomieller Zeit zu minimieren. Wir halten fest: Theorem 2.10. Die Zulässigkeit einer Instanz (N, b, T ) des Transshipment Problems kann in streng polynomieller Zeit ermittelt werden. 2.2 Das Quickest Transshipment Problem 41 Nun stehen uns alle Resultate zur Verfügung, um das Quickest Transshipment Problem lösen zu können. Lösung des Quickest Transshipment Problems Um das Quickest Transshipment Problem lösen zu können, muss man den minimalen Zeithorizont T kennen, so dass man die Instanz (N, b) durch eine Transshipment Problem Instanz (N, b, T ) ersetzt und diese löst. Eine triviale obere Schranke ist analog wie bei dem Quickest Flow Problem ein Zeithorizont von T ∗ := n · τ (A) + b(S + )]. Mittels binärer Suche und 2.10 können wir nun jede Instanz (N, b, T ) für 0 ≤ T 0 ≤ T ∗ auf Zulässigkeit testen. Eine weitere Möglichkeit, die Hoppe und Tardos aufzeigen, um in streng polynomieller Zeit den minimalen Zeithorizont zu finden, ergibt sich mittels Megiddos parametrischer Suche. Hierzu verweisen wir auf [18]. Zusammenfassend haben wir folgendes Theorem: Theorem 2.11 (Hoppe und Tardos [10], [11]). Die Instanz (N, b) des Quickest Transshipment Problem kann in streng polynomieller Zeit gelöst werden. Es kann auch in Zeit O(|S| · log(n · u(A) · b(S + ) · T ∗ ) · RUNTIME(FEAS)) gelöst werden, wobei T ∗ die triviale obere Zeitschranke und RUNTIME(FEAS) die Laufzeit der Zulässigkeitsberechnung der Transshipment Problem Instanz (N, b, T ∗ ) bezeichnet. Bemerkungen 2.12. In der Praxis ist die beschriebene exakte Lösung des Quickest Transshipment Problems sehr schlecht anwendbar. Eine weitere exakte Lösung erhalten wir durch die Benutzung eines leicht modifizierten zeitexpandierten Graphen, den wir für alle T ≤ T ∗ auf der Suche nach dem kleinsten Zeithorizont mittels binärer Suche erstellen können. Dort können wir das Transshipment Problem durch eine statische Max Flow Berechnung finden. Dieser Ansatz ist leider pseudopolynomiell, da die betrachteten Netzwerke im Vergleich zum Ausgangsnetzwerk exponentiell viele Knoten und Kanten enthalten können. Dennoch erhalten wir durch diesen Ansatz und Theorem 1.21 die Einsicht, dass ganzzahlige Instanzen des TransshipmentProblems ganzzahlige Flüsse als Lösung ermöglichen. Eine Verkleinerung des zeitexpandierten Graphen macht sich der (1 + ε)Approximationsalgorithmus von Fleischer und Skutella [6] zunutze. Bei Erstellen des zeitexpandierten Graphen werden dabei gewisse Zeitschichten ausgelassen und Kantenkapazitäten von Kanten zwischen Knoten zweier Zeitschichten modifiziert. Dieser verkleinerte Graph wird zeitkondensierter Graph genannt. Dabei sei ∆ ein gemeinsames Vielfaches der Fahrzeiten auf den Kanten, so dass es in Abhängigkeit der Eingabe polynomial ist. Mit N T /∆ bezeichnen wir den zeitkondensierten Graphen, bei welchem dT /∆e Zeitscheiben abgedeckt werden. Die Kantenkapazitäten werden mit ∆ multipliziert. Wenn kein gemeinsames Vielfaches ∆ existiert, werden die Kantenkapazitäten geeignet aufgerundet, um solch ein Vielfaches zu erhalten. 42 Evakuierungsprobleme Mit Hilfe der zeitkondensierten Graphen ist es nun möglich, das Quickest Transshipment Problem mit einer Güte von (1 + ε) (d. h. der berechnete Zeithorizont ist um den Faktor (1 + ε) größer als der optimale Zeithorizont) zu lösen. 2.3 Die Earliest Arrival Eigenschaft und dynamische Flüsse Dieser Abschnitt beschreibt das Kernproblem, welches in dieser Diplomarbeit vorgestellt wird. Weiterhin werden dafür in einem späteren Abschnitten eine exakte Lösung präsentieren. Das Kernproblem ist die Berechnung sogenannter Earliest Arrival Transshipments. Motiviert werden diese Art dynamischer Netzwerkflüsse durch Evakuierungsprobleme in der Realität. Ziel ist es später, die exakten Lösungen mit den später vorgestellten Heuristiken aus dem nachfolgenden Kapitel vergleichen zu können. Wir weisen noch einmal darauf hin, dass wir, soweit nichts anderes erwähnt wird, annehmen, dass wir ausschließlich ganzzahlige Instanzen und diskrete dynamische Flüsse in den folgenden Problemen untersuchen werden. + Definition 2.13. Gegeben seien eine Netzwerkinstanz (G, u, Pτ, S , t), ein Zeithorizont T ∈ N und eine Balancefunktion b : V → N mit v∈V b(v) = 0 und b(v) > 0 für v ∈ S + , b(t) < 0 und b(v) = 0 für alle v ∈ V \ S + ∪ {t}. (1) Sei f ein dynamischer S + -t-Fluss. Dann heißt die Abbildung p : N → N mit p(θ) := exf (t, θ) Arrival Pattern. Wenn im Kontext nicht klar ist, auf welchen Fluss sich p bezieht, schreiben wir pf statt p. (2) Ein Earliest Arrival Flow ist ein dynamischer Fluss f , der zu jedem Zeitpunkt 0 ≤ θ ≤ T maximal ist, d. h. für alle anderen dynamischen S + -t-Flüsse f 0 gilt pf (θ) ≥ pf 0 (θ) für alle 0 ≤ θ ≤ T . Das Arrival Pattern heißt in diesem Falle Earliest Arrival Pattern. Wir sagen auch, dass f die Earliest Arrival Eigenschaft besitzt. (3) Ein Earliest Arrival Transshipment ist ein dynamisches bTransshipment f , welches zu jedem Zeitpunkt 0 ≤ θ ≤ T maximal ist, d. h. für alle anderen dynamischen b-Transshipments f 0 gilt pf (θ) ≥ pf 0 (θ) für alle 0 ≤ θ ≤ T . Das Arrival Pattern bezeichnen wir in diesem Fall auch als Earliest Arrival Pattern. Wir sagen an dieser Stelle auch, dass f die Earliest Arrival Eigenschaft besitzt. Es stellt sich die Frage ob Flüsse mit der Earliest Arrival Eigenschaft existieren. Wenn ein Netzwerk mehrere Senken besitzt und wir bzgl. einer Balancefunktion ein Earliest Arrival Transshipment suchen, so existiert i. A. kein solcher Fluss. Baumann und Skutella [1] zeigten folgendes Beispiel, in welchem kein b-Transshipment existiert: In der nachfolgenden Abbildung 2.2 sehen wir ein Netzwerk mit einer Quelle und zwei Senken. Wir haben an allen Kanten eine Kapazität von 2.3 Die Earliest Arrival Eigenschaft und dynamische Flüsse 43 Eins und haben eine Fahrzeit von Null auf allen Kanten außer auf der Kante (v, t2 ). Dort haben wir eine Fahrzeit von Eins. Weiterhin haben wir an den Senken jeweils einen Einheitsbedarf. Betrachten wir nun einen Fluss f1 mit f1 ((s, v), 0) := f1 ((v, t1 ), 0)) = 1. Somit kann zum Zeitpunkt 1 eine Flusseinheit die Senke t1 vollständig erreichen. Aus Kapazitätsgründen und Fahrzeitsgründen kann keine weitere Flusseinheit die Senke t2 zum Zeitpunkt 1 vollständig erreichen. Eine weitere Flusseinheit, die die Senke t2 erreichen muss, kann aber hier erst Zeitpunkt 1 in s und in Knoten v starten. Wir setzen weiter f ((s, v), 1) = 1 und f ((v, t2 ), 1) = 1. Diese Flusseinheit kann aber erst zum Zeitpunkt 3 die Senke vollständig erreichen. Der Fluss f ist offensichtlich ein zulässiges Transshipment mit Zeithorizont 3, wobei wir f an den bisher nicht definierten Paaren von Kanten und Zeitpunkt auf Null setzen. Wenn wir das Arrival Pattern für Flüsse auf Netzwerken mit mehreren Senken definieren würden, würden wir hier pf (θ) := exf (t1 , θ) + exf (t2 , θ) setzen. Allgemein würden wir über alle exf Ausdrücke bzgl. jeder Senke summieren, was mit obiger Definition im Falle einer Senke verträglich ist, da dann die Summe dann nur noch aus einem Summanden besteht und mit obiger Definition übereinstimmt. Wenn wir das Arrival Pattern von f betrachten, so haben wir pf (1) = 1, pf (2) = 1 und pf (3) = 2. Betrachten wir nun einen Fluss f 0 mit f 0 ((s, v), 0) = 1 und f 0 ((v, t2 ), 1) = 1. Hier fließt zuerst eine Flusseinheit von s nach t2 welche erst nach zwei Zeiteinheiten vollständig in t2 enthalten ist. Setzen wir weiterhin f10 ((s, v), 1) := f10 ((v, t1 ), 1)) = 1, so erhalten wir anschaulich eine weitere Flusseinheit, die zum Zeitpunkt Eins in s startet und erst nach zwei Zeiteinheiten vollständig in t1 angekommen ist. Weiterhin setzen wir f 0 auf den bisher nicht betrachtet Paaren von Kanten und Zeitpunkten auf Null. Somit ist f 0 ein zulässiges Transshipment mit Zeithorizont 2. Betrachten wir nun auch hier das spezielle Arrival Pattern. Wir haben pf 0 (1) = 0 und pf 0 (2) = 2. Wenn es nun ein Earliest Arrival Transshipment f ∗ mit Zeithorizont 3 geben würde, so müsste zumindest pf ∗ (1) = 1 und pf ∗ (2) = 2 gelten. So einen Fluss kann es aber nicht geben, da f das einzige Transshipment ist, welches pf (1) = 1 erfüllt. Dieses Transshipment ist aber wegen pf (2) = 1 kein Earliest Arrival Transshipment. 2 s 0 v 0 1 -1 t1 t2 -1 Abbildung 2.2: Ein Gegenbeispiel zur Existenz von Earliest Arrival Flows auf Netzwerken mit zwei Senken. Die Zahlen an den Knoten beschreiben den Bedarf und die Zahlen auf den Kanten beschreiben die Fahrzeit. Die Kapazitäten sind einheitlich. 44 Evakuierungsprobleme Dagegen existiert beim Vorhandensein einer einzigen Senke immer ein Earliest Arrival Transshipment, was im Abschnitt 2.5 gezeigt wird. Im nachfolgenden Abschnitt widmen wir uns den Earliest Arrival Flows. Im Falle S + = {s} also wenn das Netzwerk nur genau eine Quelle und eine Senke besitzt, kann eine spezielle Variante des Sucessive Shortest Path Algorithmus eingesetzt werden. Die Lösung kann zwar i. A. nicht mehr mit zeitlich wiederholten Flüssen, die auf einer üblichen Pfadzerlegung eines statischen Flusses basieren gelöst werden, aber mit Flüssen, die auf einer verallgemeinerten Pfadzerlegung basieren. Dieses Prinzip werden wir ebenfalls im nachfolgenden Abschnitt erläutern und dann den Algorithmus einführen und seine Korrektheit beweisen. Wenn wir Earliest Arrival Flows für Netzwerke mit einer Quelle und Senke berechnen können, können wir auch auf Netzwerken mit mehreren Quellen einen Earliest Arrival Flow berechnen, indem wir eine Superquelle einführen und sie mit allen anderen Quellen verbinden. Dieser Vorgang funktioniert nicht mehr, wenn wir Earliest Arrival Transshipments, deren Existenz wir ebenfalls beweisen werden, ermitteln möchten. Dieses Problem wird als Earliest Arrival Transshipment Problem bezeichnet und von uns in Abschnitt 2.5 untersucht. Falls der kleinste Zeitpunkt bekannt ist (z. B. durch Lösung des Quickest Transshipment Problem), in dem alle Bedarfe erfüllt werden können, stellen wir einen exakten Algorithmus vor, welcher das Problem löst. Dieser Algorithmus basiert auf der Verwendung zeitexpandierter Graphen und wird die Grundlage für den Vergleich der Lösungen sein, welche die Heuristiken im nächsten Kapitel liefern. 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke In diesem Abschnitt untersuchen wir Netzwerke mit nur einer Quelle und einer Senke und zeigen, dass zu einem Zeithorizont T stets ein Earliest Arrival Flow existiert. Desweiteren zeigen wir, wie man einen solchen Fluss berechnen kann. 2.4.1 Existenz Zunächst ist nicht klar ob ein Earliest Arrival Flow existiert. Gale [8] zeigte schon 1957, dass Earliest Arrival Flows existieren. Grundlegend für seinen Beweis ist das Theorem 1.23 über die Zulässigkeit von Balancefunktionen b auf der Suche nach b-Flüssen. Er konstruierte auf dem zeitexpandierten Graphen eine zulässige Balancefunktion, welche nur durch einen lexikographisch maximalen (statischen) Fluss bzgl. der Zeitkopien der Senke respektiert werden konnte. Weiterhin kannte er aber keinen Algorithmus, um einen solchen Fluss zu berechnen, vermutete aber, dass man den Algorithmus zur Berechnung maximaler dynamischer Flüsse leicht modifizieren muss. Erst Minieka 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke 45 [19] und Wilkinson [24] zeigten solche Modifikationen. Minieka gab weiterhin einen neuen Existenzbeweis für Earliest Arrival Flows an, welcher ohne Theorem 1.23 auskommt. Grundlegend für diesen Beweis ist die Existenz lexikographisch maximaler (statischer) Flüsse. Wir werden uns dabei aber auf ganzzahlige Flüsse beschränken, da wir im Beweis einfachheitshalber mit dem statischen Max Flow Algorithmus von Ford und Fulkerson argumentieren werden, welcher nicht notwendigerweise bei reellen Eingaben terminiert. Desweiteren betrachten wir später auch nur ganzzahlige statische Flüsse, so dass dieses Vorgehen für unsere Zwecke keine Einschränkung darstellt. Zu erwähnen sei noch, dass es entsprechend im Bereich der kontinuierlichen Flüsse Earliest Arrival Flows gibt. Diese Existenz zeigte Philpott [20]. Lexikographisch maximale Flüsse. Wir werden nun einige Bezeichnungen einführen und lexikographisch maximale (statische) Flüsse definieren und dann später ihre Existenz beweisen. Wir werden dabei nach Minieka [19] vorgehen. Definition 2.14. Gegeben seien ein Graph G = (V, A) und eine Kapazitätsfunktion u : A → N0 . Desweiteren seien eine Menge von Quellen ∅ 6= S + ⊂ V und eine Menge von Senken ∅ 6= S − ⊂ V mit S + ∩ S − = ∅ gegeben. (1) Sei S 0 ∈ S + . Dann bezeichnet W (S 0 )die größte Anzahl an Flusseinheiten, die S 0 in einem Fluss verlassen können. Falls S 0 = {s} gilt, schreiben wir W (s) statt W ({s}). (2) Sei S 0 ∈ S − . Dann bezeichnet W (S 0 )die größte Anzahl an Flusseinheiten, die S 0 in einem Fluss erreichen können. Falls S 0 = {t} gilt, schreiben wir W (t) statt W ({t}). (3) Seien S1 ⊂ S2 ⊂ . . . Sk ⊂ S − gegeben. Ein maximaler Fluss f , bei welchem W (Si ) Flusseinheiten in alle Mengen Si fließen, heißt lexikographisch maximaler Fluss. Zunächst ist nicht klar, dass lexikographisch maximale Flüsse existieren. Die Existenz dieser Flüsse werden wir im weiteren Verlauf dieses Abschnitts zeigen. Bevor wir nun die Existenz eines lexikographischen maximalen Flusses nachweisen, zeigen wir noch eine kleine Behauptung, welche im Existenzbeweis benötigt wird. Theorem 2.15 (Minieka [19]). Seien N = (G, u, S + , S − ) ein Netzwerk und S 0 ⊂ S − . Dann existiert ein maximaler Fluss f mit −exf (S 0 ) = W (S 0 ). Beweis. Wir betrachten das Netzwerk N 0 = (G, u, S + , S 0 ) und ermitteln dort einen maximalen S + -S 0 -Fluss. Diesen berechnen wir durch eine herkömmliche s-t-Fluss Berechnung. Wir führen eine Superquelle s und eine 46 Evakuierungsprobleme Supersenke t ein. Wir fügen Kanten (s, s+ ) mit hinreichend großer Kapazität (z. B. u((s, s+ )) := U := u(A)) für alle s+ ∈ S + und Kanten (s0 , t) mit ebenfalls hinreichend großer Kapazität für alle s0 ∈ S 0 in das Netzwerk ein und erhalten so einen erweiterten Graphen G0 und das Netzwerk N 00 = (G0 , u, s, t). Durch die Flusserhaltungsbedingungen sehen wir sofort, dass die maximal möglichen Flusswerte in N 0 und N 00 übereinstimmen. Der maximal mögliche Flusswert entspricht nach Konstruktion dem Ausdruck W (S 0 ). Wir berechnen nun einen maximalen s-t-Fluss f auf N 00 und schränken ihn auf N 0 ein. Dieser ist nach unserer Vorüberlegung ebenfalls auf N 0 maximal. Dann berechnen wir einen maximalen Fluss auf N mit dem Algorithmus von Ford und Fulkerson, wobei wir wieder die gleiche Konstruktion anwenden, um den Fluss durch eine s-t-Flussberechnung zu erhalten. Dabei konstruieren wir analog zu N 00 ein Netzwerk N ∗ , wobei aber nun für alle s− ∈ S − eine Kante (s− , t) mit hinreichend großer Kapazität in G eingefügt wird. Mit gleicher Vorüberlegung gilt auch hier, dass die maximalen Flusswerte in N und N ∗ gleich sein müssen. Nun starten wir den Algorithmus von Ford und Fulkerson zur Berechnung eines maximalen s-t-Flusses auf N ∗ . Allerdings starten wir den Algorithmus nicht mit dem Nullfluss sondern mit f . Auf den Kanten (s− , t) für alle s− ∈ S − \ S 0 gelte zu Anfang f ((s− , t)) = 0. Jeder augmentierende s-t-Pfad, wird Knoten aus S 0 vermeiden, da sonst f nicht maximal in N 0 bzw. N 00 gewesen wäre. Falls es nämlich einen s-t-Pfad P in Gf gibt mit s0 ∈ S 0 und s0 ∈ VP , gibt es auch einen augmentierenden s-t-Pfad P 0 in Gf mit (s0 , t) ∈ AP 0 . Der Pfad P 0 ist aber auch bzgl N 00 in Gf ein f augmentierender Pfad. Dies ist aber ein Widerspruch und daher enthält kein f -augmentierender Pfad in Gf bzgl. N ∗ Knoten aus S 0 . Deswegen verändert sich bis zum Terminieren des Algorithmus die Anzahl der Flusseinheiten, die S 0 erreichen, nicht. Der zuletzt berechnete Fluss hat dann die gewünschte Eigenschaft. Nun folgt die eigentliche Existenzaussage über lexikographisch maximale Flüsse, dessen Beweis auf Minieka zurückzuführen ist. Theorem 2.16 (Minieka [19]). Seien N = (G, u, S + , S − ) ein Netzwerk und Mengen S1− ⊂ S2− ⊂ . . . ⊂ Sl− ⊂ S − gegeben. Dann existiert ein maximaler Fluss f mit exf (Si− ) = W (Si− ) für alle 0 ≤ i ≤ k. Beweis. Der Beweis erfolgt durch vollständige Induktion über k. Zum Induktionsanfang betrachten wir die Menge S1− . Nach Theorem 2.15 gilt die Behauptung für k = 1. Die Induktionsannahme besteht darin, dass es einen maximalen Fluss f mit exf (Si ) = W (Si− ) für 0 ≤ i ≤ k − 1 < l gibt. Wir konstruieren nun 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke 47 einen maximalen Fluss F , der die Beziehung exF (Si− ) = W (Si− ) auch für i = k erfüllt. Zu diesem Zweck bauen wir uns ein modifiziertes Netzwerk, indem wir den Graphen G zu einem Graphen G0 erweitern. Dazu benutzen wir eine ähnliche Modifikation wie in Theorem 2.15. Wir fügen wieder einen Knoten s als Superquelle und einen Knoten t als Supersenke ein. Weiter fügen wir für alle s0 ∈ S + die Kante (s, s0 ) ein. Für alle t0 ∈ S − \ Sk− fügen wir die Kante (t0 , s) und für alle t0 ∈ Sk− die Kante (t0 , t) ein. Alle diese zusätzlichen Kanten haben Kapazität u(A). Sk− ... S+ t ... ... S − \ Sk− ... s Abbildung 2.3: Die Modifikation des Graphen G mittels der Superquelle s und der Supersenke t. Wir erweitern nun den Fluss f auf diesem neuen Netzwerk zu einem Fluss f 0 . Es sei f 0 ((t0 , t)) := exf (t0 ) für t0 ∈ Sk− , f 0 ((s, s0 )) := −exf (s0 ) für s ∈ S + und f 0 ((t0 , s)) := exf (t0 ) für t0 ∈ S − \ Sk− . Durch diese Konstruktion ist f 0 ein zulässiger s-t-Fluss, da die ehemaligen Quellen und Senken nun die Flusserhaltungsbedingung einhalten. Weiterhin gilt exf 0 (t) = exf (Sk− ), da wir nur den Fluss von Sk− nach t weitergeleitet haben. Starten wir nun den Ford und Fulkerson Algorithmus mit f 0 als Startfluss, um einen maximalen s-t-Fluss f 00 zu bestimmen, kann kein augmentierender Pfad in G0f 0 von s nach t über Knoten aus S + gesendet werden, da sonst f nicht maximal gewesen wäre. Weiterhin kann auch kein Fluss − über Knoten aus Sk−1 geschickt werden, da sonst die Induktionsannahme verletzt wäre. Also werden nur Pfade als augmentierende Pfade vorkommen, 48 Evakuierungsprobleme − die über Knoten aus Sk− \ Sk−1 geführt werden. Somit ändert sich nicht die − Anzahl der Flusseinheiten, welche die Knotenmenge Sk−1 erreichen. Wenn der Algorithmus terminiert, dann hat er einen maximalen s-tFluss f 00 konstruiert. Diesen nennen wir F , wenn wir ihn auf das Original Netzwerk N einschränken. Nach obigen Betrachtungen gilt weiter − − exF (Sk−1 ) = W (Sk−1 ) und exF (Sk− ) = W (Sk− ), da es nun keinen augmentierenden Pfad von S + nach Sk− gibt. Ferner ist F maximal in N , da exF (S + ) = exf (S + ) gilt, da kein augmentierender Pfad Knoten aus S + enthalten hatte. Also ist F ein lexikographisch maximaler Fluss für die Schachtelung S1− ⊂ S2− ⊂ . . . ⊂ Sk− ⊂ S − . Damit ist nun die Existenz lexikographischer maximaler Flüsse gezeigt. Mittels lexikographisch maximaler Flüsse zeigen wir im Folgenden die Existenz der Earliest Arrival Flows. Theorem 2.17. Seien N = (G, u, τ, s, t) ein dynamisches Netzwerk und T ∈ N. Dann existiert ein dynamischer s-t-Fluss mit Zeithorizont T , der die Earliest Arrival Eigenschaft besitzt. Beweis. Wir betrachten das zugehörige zeitexpandierte Netzwerk N T . In GT existiert nach Theorem 2.16 ein lexikographisch maximaler S +(T ) -S −(T ) Fluss f für {t0 } = S −(1) ⊂ S −(2) ⊂ . . . ⊂ S −(T −1) ⊂ S −(T ) . Wir konstruieren einen s0 -tT −1 -Fluss fT , indem wir f auf den Holdoverkanten der Quell- und Senkeknoten modifizieren. Wir wollen erreichen, dass die Anzahl an Flusseinheiten, welche beim Fluss fT den Knoten s0 verlassen, gleich ist mit der Anzahl an Flusseinheiten, welche beim Fluss f die Knoten aus S +(T ) verlassen. Analog wird die Anzahl der Flusseinheiten, welche beim Fluss fT die Senke tT −1 erreichen soll, der Anzahl an Flusseinheiten entsprechen, welche beim Fluss f die Menge S −(T ) erreicht. Um dieses Ziel und die Flusserhaltung in den Zwischenknoten zu erreichen, müssen wir geeignet Fluss zwischen den Zeitscheiben auf den o. g. Holdoverkanten transferieren. Wir definieren denneuen Fluss fT wie folgt: −(i) ) a = (ti−1 , ti ) und 1 ≤ i < T exf (S +(T ) +(i) fT (a) := −exf (S ) + exf (S ) a = (si−1 , si ) und 1 ≤ i < T Es f (a) sonst. gilt für s0 : exfT (s0 ) = exf (s0 ) + exf (S +(T ) ) − exf (S +(1) ) = exf (S +(T ) ). Für alle restlichen Quellknotenkopien gilt Flusserhaltung: exfT (si ) = exf (si ) + exf (S +(T ) ) − exf (S +(i+1) ) − exf (S +(T ) ) + exf (S +(i) ) = exf (si ) − exf (si ) = 0. 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke 49 Analog gilt für die Knoten aus S −(T −1) Flusserhaltung und für tT −1 gilt: exfT (tT −1 ) = exf (tT −1 ) + exf (S −(T −1) ) = exf (S −(T ) ) = val(f ). ... ... h2 x2 x1 t2 x2 h1 t1 x0 h2 + x0 + x1 + x2 h0 t0 x1 x0 t2 h 1 + x0 + x1 t1 h 0 + x0 t0 Abbildung 2.4: Eine beispielhafte Veranschaulichung der Holdoverkantenkonstruktion (hier: an den Knotenkopien der Senke). Die Ausdrücke auf den fettgedruckten Pfeilen bezeichnen jeweils die Anzahl der Flusseinheiten, welche vom restlichen Netzwerk in die Senken t0 , t1 und t2 fließen. Die normalgedruckten Pfeile stellen Holdoverkanten dar. Die Ausdrücke an diesen Kanten bezeichnen jeweils die Anzahl der fließenden Flusseinheiten in den entsprechenden Kanten. In der linken Hälfte beziehen sich diese Ausdrücke auf den Fluss f und in der rechten Hälfte auf den Fluss fT . Durch diese Holdoverkantenkonstruktion erhalten wir einen s0 -tT −1 Fluss fT mit val(fT ) = val(f ) = W (S +(T ) ). Wenn wir diese Konstruktion für 1 ≤ i ≤ T ebenfalls durchführen erhalten wir Flüsse fi mit val(fi ) = W (S −(i) ). Nun entspricht fT nach Theorem 1.44 einem maximal dynamischen s-t-Fluss F auf N mit Zeithorizont T . Sei nun 1 ≤ i ≤ T . Wenn wir nun ermitteln, wieviele Flusseinheiten bis zum Zeitpunkt i in t angekommen sind, müssen wir den Zeithorizont auf i beschränken und müssen uns den Fluss fi auf N i ansehen. Da bis zum Zeitpunkt i die Pfade von fi und fT gleich sind, entspricht fi dem Fluss F , wenn man ihn mit Zeithorizont i betrachtet. Daher sind bis zum Zeitpunkt i genau W (S −(i) ) Flusseinheiten in t angekommen. Würde es einen dynamischen Fluss geben, der bis zu diesem Zeitpunkt mehr Flusseinheiten nach t befördern könnte, dann müsste der entsprechend statische Fluss auf N i einen größeren Flusswert aufweisen, was aber im Widerspruch zur lexikographischen Maximalität zu f stehen würde. Somit ist F zu jedem Zeitpunkt maximal und besitzt daher die Earliest Arrival Eigenschaft. 2.4.2 Verallgemeinerte Pfadzerlegungen Im Abschnitt über maximale dynamische s-t-Flüsse wurden diese mit Hilfe von Pfadzerlegungen von statischen Minimalkostenflüssen berechnet. Die bisher bekannten gewöhnlichen Pfadzerlegungen benutzen Pfade, deren Kanten vorwärts gerichtet sind. Earliest Arrival Flows lassen sich leider nicht i. A. mit Hilfe von gewöhnlichen Pfadzerlegungen berechnen. Allerdings, 50 Evakuierungsprobleme wenn man den Pfadbegriff erweitert und Rückwärtskanten in den Pfaden zulässt, kann man dynamische Flüsse durch eine Zerlegung eines statischen Flusses in solche Pfade gewinnen. Eine solche Pfadzerlegung nennen wir verallgemeinert. Dann gelingt es uns, durch zeitliche Wiederholung wie in Definition 1.33 (vgl. auch Bemerkung 1.36), den gesuchten dynamischen Fluss zu konstruieren. Flüsse die durch eine verallgemeinerte Pfadzerlegung gewonnen werden, nennen wir verallgemeinerte zeitlich wiederholte Flüsse. Definition 2.18. Seien (G, u, s, t) ein Netzwerk, f ein s-t-Fluss und c : A → R eine Kostenfunktion. ↔ (1) Ein verallgemeinerter Pfad in G ist ein s-t-Pfad auf G. ← (2) Auf einem verallgemeinerten Pfad erweitern wir f für alle e mit e ∈ A ← durch f ( e ) := −f (e). Die Kostenfunktion c wird wie im Abschnitt über ← Minimalkostenflüsse auf c( e ) := −c(e) gesetzt. ↔ (3) Sei P die Menge aller s-t-Pfade auf G. Eine verallgemeinerte PfadP zerlegung von f ist eine Abbildung z : P → R mit P ∈P:a∈AP z(P ) − P ← z(P ) = f (a) für alle a ∈ A und val(f ) := val(f|G ) = PP ∈P: a ∈AP P ∈P z(P ). Beachte: der Flusswert wird nur durch Kanten aus A ermittelt. Wir werden später das dynamische Netzwerk als statisches Netzwerk interpretieren, bei dem die Fahrzeiten τ den Kosten entsprechen. Desweiteren werden wir durch eine verallgemeinerte Pfadzerlegung einen dynamischen s-t-Fluss induzieren, indem wir z(P ) Flusseinheiten entlang jeden Pfades P im Zeitraum [0, T − τ (P ) − 1] schicken. Weiter beachten wir, dass ein einzelner verallgemeinerter Pfad i. A. kein zulässiger Fluss ist, da u. U. negative Flusswerte auftreten können. Damit aber verallgemeinerte Pfade als Pfadzerlegung eines gültigen Fluss genannt werden können, muss Fluss auf einer Rückwärtskante (w, v) auf einem Pfad P stets ausgelöscht werden, d. h. es muss einen anderen Pfad P 0 in der Zerlegung geben, der die entsprechende Vorwärtskante enthält und mindestens die gleiche Menge an Fluss wie die 0 Rückwärtskante transportiert. Wichtig dabei ist, dass τ (P[s,v] ) ≤ τ (P[s,v] ) gilt. Somit wird sichergestellt, dass es in der zeitlichen Wiederholung keinen Zeitpunkt gibt, zu welchem Flusseinheiten die Rückwärtskante (w, v) erreichen und zu welchem bisher keine Flusseinheit die Kante (v, w) erreicht hat. 2.4.3 Exakte Algorithmen Wir stellen nun einen Algorithmus vor, welcher einen Earliest Arrival Flow auf einem dynamischen Netzwerk berechnet. Dieser ist eine Variante des 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke 51 Successive Shortest Path Algorithmus und berechnet einen statischen Minimalkostenfluss und seine verallgemeinerte Pfadzerlegung, indem jeder augmentierende Pfad zu der Pfadzerlegung hinzugefügt wird. Durch zeitliche Wiederholung wird aufgrund dieser Pfadzerlegung ein verallgemeinerter zeitlich wiederholter Fluss induziert, welcher unser gesuchter Fluss sein wird. Wir müssen dann noch zeigen, dass dieser Fluss zulässig ist und die Earliest Arrival Eigenschaft hat. Diesen Beweis werden wir, wie Hoppe [12] es getan hat, durchführen. Danach skizzieren wir noch den Snapshot-Algorithmus, welchen Hoppe in seiner Dissertation [12] untersuchte. Der Sucessive Shortest Path Algorithmus als Lösung des Earliest Arrival Problems Wir stellen nun die spezielle Variante des Successive Shortest PathAlgortihmus vor, welche das Earliest Arrival Flow Problem exakt löst. input : Ein Netzwerk (G, u, τ, s, t), ein Zeithorizont T output : Eine verallgemeinerte Pfadzerlegung z und eine Liste von Pfaden L = [P1 , . . . , Pk ] mit P ∈ L ⇔ z(P ) > 0 x := 0; z := 0; 3 i := 0; 4 L := [∅]; 5 while distGx (s, t) ≤ T do 6 i := i + 1; 7 Pi := shortestpathGx (s, t); 8 γ := min{ux (a) : a ∈ AGx }; 9 Augmentiere x um γ entlang Pi ; 10 z(Pi ) := γ; 11 L := L + [Pi ] 12 end 13 return (z, L); Algorithmus 2.1 : Die spezielle Variante des Successive Shortest Path Algorithmus zur Lösung des Earliest Arrival Flow Problem 1 2 Theorem 2.19 (Hoppe [12]). Seien (G, u, τ, s, t) ein dynamisches Netzwerk und T ∈ N. Dann berechnet die spezielle Variante des Sucessive Shortest Path Algorithmus eine verallgemeinerte Pfadzerlegung z, welche durch zeitliche Wiederholung einen dynamischen s-t-Fluss F mit Zeithorizont T und der Earliest Arrival Eigenschaft induziert. Beweis. Wir zeigen zunächst die Zulässigkeit von F . Wir nehmen an, dass der Algorithmus nacheinander entlang der Pfade P1 , . . . , Pl aus L augmen- 52 Evakuierungsprobleme tiert. Daher ist automatisch die Flusserhaltungsbedingung erfüllt. Nach Theorem 1.27 gilt τ (Pi ) ≤ τ (Pi+1 ). Daher kann man 0 ≤ k ≤ l so wählen, dass τ (Pk ) ≤ T und (falls k < l gilt) τ (Pk+1 ) > T gilt. Sei z(Pi ) der Wert, um welchen jeweils augmentiert wurde. Daher ist z die verallgemeinerte Pfadzerlegung des berechneten statischen Minimalkostenflusses, den wir mit x bezeichnen. Wir bezeichnen mit xi den statischen Fluss, der durch Augmentieren entlang der Pfade P1 bis Pi entsteht. Der verallgemeinerte zeitlich wiederholte Fluss entsteht dadurch, dass nacheinander, beginnend mit P1 , z(Pi ) Flusseinheiten im Zeitraum T − τ (Pi ) − 1 für alle 0 ≤ i ≤ k in die Quelle entlang Pi geschickt werden. D. h. es gilt F = [P1 , . . . , Pk ]Tz . Analog sei f i := [P1 , . . . , Pi ]Tz . Wir zeigen nun die Zulässigkeit (es ist nur noch die Kapazitätsbedingung zu zeigen) durch Induktion. Der Fluss f 0 = [∅]Tz entspricht dem dynamischen Nullfluss und ist damit zulässig. Sei nun als Induktionsannahme f i−1 zulässig. Nach Konstruktion gilt [P1 , . . . , Pi−1 ]Tz + [Pi ]Tz = f i . Wir betrachten nun die Kante a = (v, w) und einen Zeitpunkt θ und zeigen, das die Kapazitätsbedingung nicht verletzt ist. Gilt [Pi ]Tz (a, θ) = 0, so folgt mit der Induktionsannahme sofort die Zulässigkeit des Flusses auf dieser Kante zum Zeitpunkt θ. Nun sei [Pi ]Tz (a, θ) 6= 0. Es gilt daher distGf i−1 (s, y) ≤ θ und θ ≤ T − 1 − distGf i−1 (y, t). (Der Ausdruck distGf i−1 (v, w) bezeichne dabei die Entfernung von v nach w in Gf i−1 , d. h. die Kosten eines billigsten Weges bzgl. τ als Kostenfunktion). Nach Theorem 1.27 steht fest, dass distGf i−1 (y, t) sowie distGf i−1 (y, t) monoton steigend sind. Daher gilt, falls ein Pfad Pj für (j < i) die Kante (v, w) oder deren Rückwärtskante enthält, dass der Pfad Pj z(Pj ) bzw. −z(Pj ) Flusseinheiten zum dynamischen Fluss f i in der Kante (v, w) zum Zeitpunkt θ beiträgt. Also gilt für den Flusswert f i−1 ((v, w), θ) = [P1 , . . . , Pi−1 ]Tz = xi−1 (v, w). Daher ist die Kapazitätsbedingung von (v, w) zum Zeitpunkt θ von f i nicht verletzt, da der Fluss x0 : A↔ → R mit x0 (a) = z(Pi ) in Gxi−1 ein zulässiger Fluss ist. Daher ist G insgesamt F zulässig. Um zu zeigen, dass F zu jedem Zeitpunkt maximal ist, betrachten wir einen beliebigen Zeitpunkt 0 ≤ θ ≤ T und P P die Menge Γ := {Pi : τ (Pi ) ≤ θ}. Ferner sei xΓ (a) := P ∈Γ:a∈P z(P ) − P ∈Γ:← z(P ) der statische Fluss, a ∈P der entstanden ist, nachdem nacheinander entlang der Pfade aus Γ augmentiert wurde. Dieser ist nach Theorem 1.27 ein Minimalkostenfluss. Wenn wir nun eine Kante (t, s) in den Graphen mit τ ((t, s)) = −θ einfügen, entspricht xΓ einer Minimalkostenzirkulation auf dem erweiterten Graphen, da negative Kreise bzgl. τ nicht möglich sind. Nach Theorem 1.39 entspricht der Fluss durch analoge zeitliche Wiederholung gemäß Definition einem maximalen dynamischen Fluss mit Zeithorizont θ. Da Pfade Pi mit τ (Pi ) > θ sich erst nach dem Zeitpunkt θ auf F durch zeitliche Wiederholung auswirken, ist F zum Zeitpunkt θ maximal. 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke 53 Bemerkungen 2.20. Der soeben vorgestellte Algorithmus hat wie der gewöhnliche Successive Shortest Path Algorithmus pseudopolynomielle Laufzeit. Zadeh [25] stellte Instanzen vor, in welchem der Algorithmus exponentiell viele Augmentierungen durchführt. Bemerkungen 2.21. Wenn die gegebene Instanz des Earliest Arrival Flow Problems ganzzahlig ist, berechnet der Algorithmus auch eine ganzzahlige Lösung. Der Snap-Shot-Algorithmus Der exakte Algorithmus aus Abschnitt 2.4.3 ist i. A. wegen Bemerkung 2.20 kein Polynomialzeitalgorithmus. Hoppe stellte in seiner Dissertation [12] einen Algorithmus vor, welcher polynomielle Laufzeit hat. Allerdings beschränkt er sich darauf nur zu einem gegebenen Zeitpunkt θ und einer gegebenen Kante a den Flusswert f (a, θ) eines gewissen Earliest Arrival Flusses f zu berechnen. O. B. d. A. schränkt Hoppe die zu untersuchenden Netzwerke dahingehend ein, dass es im Netzwerk keine Kreise mit Kosten bzw. Gesamtfahrzeit Null geben darf. Wenn ein Netzwerk diese Anforderung nicht erfüllen kann, beschreibt Hoppe, wie er mit einer modifizierten Kostenbzw. Fahrzeitfunktion die gewünschte Eigenschaft herstellen kann. Wichtig zu beachten ist, dass die Graphen, die Hoppe betrachtet, die Residualkanten immer enthalten. Weiterhin, dürfen dürfen seine betrachteten Graphen keine parallelen Kanten enthalten. Daher bezieht sich die Forderung mit den ← → Kreisen auf G , wobei G schlicht sein muss. Daher betrachten wir im Rahmen des Snap-Shot-Algorithmus nur dynamische Netzwerke, welche die o. g. (von Hoppe geforderte) Eigenschaft hat. Mit dieser Eigenschaft ist ein Earliest Arrival Flow eindeutig bestimmt. Theorem 2.22 (Hoppe [12]). Seien N = (G, u, τ, s, t) ein dynamisches Netzwerk und b eine Balancefunktion. Dann gilt: (1) f ist genau dann eindeutiger Minimalkostenfluss bzgl. τ als Kostenfunktion und b, wenn Gf keine Kreise C mit τ (C) = 0 enthält. ← → (2) G enthalte keine Kreise C mit τ (C) = 0. Weiter sei T ein Zeithorizont. Dann die Lösung des Earliest Arrival Flow Problems zu einem Zeithorizont T eindeutig bestimmt. Der nun folgende Algorithmus berechnet auf einem gegebenen Netzwerk mit der o. g. Eigenschaft und einem gegebenen Zeithorizont T ∈ N0 zu einer gegebenen Kante a = (v, w) ∈ A und einem gegebenen Zeitpunkt θ den Flusswert f (a, θ) des eindeutig bestimmten Earliest Arrival Flow f mit Zeithorizont T . 54 Evakuierungsprobleme input : Ein Netzwerk (G, u, τ, s, t), ein Zeithorizont T , (v, w) ∈ A und 0 ≤ θ < T output : f (a, θ), wobei f ein Earliest Arrival Flow ist 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 x := 0; if distx (s, v) > θ oder distx (v, t) > T − 1 − θ then return 0; else L := 0; x :=maximaler Minimalkostenfluss; if distx (s, v) ≤ θ und distx (v, t) ≤ T − 1 − θ then return x((v, w)); else H := val(x); while (H − L) > 1 do x :=Minimalkostenfluss mit Wert d(H + L)/2e; if distx (s, v) > θ oder distx (v, t) > T − 1 − θ then H := val(x); else L := val(x); end end x :=Minimalkostenfluss mit Wert H; return x((v, w)); end end Algorithmus 2.2 : Der Snap-Shot-Algorithmus Das Prinzip, welches dem Snap-Shot-Algorithmus zugrunde liegt, besteht darin, dass nicht mehr jeder einzelne verallgemeinerte Pfad aus der verallgemeinerten Pfadzerlegung von f bekannt sein muss, sondern, dass es reicht, nur noch die Summe an Flusseinheiten, welche die Pfade einer verallgemeinerten Pfadzerlegung führen, welche Fluss zu dem Zeitpunkt θ in die Kante a führen, zu ermitteln. Weiterhin ist diese Summe von der gewählten Pfadzerlegung unabhängig. Sei z eine verallgemeinerte Pfadzerlegung von f . Der Flusswert z(P ) > 0 − eines verallgemeinerten s-t-Pfades P = (VP , AP ) mit a ∈ AP oder ← a ∈ AP wird genau dann in der Summe für die Berechnung von f (a, θ) berücksichtigt, wenn τ (AP[s,v] ) ≤ θ und τ (AP[v,t] ) ≤ T − 1 − Pθ gilt. Sei Pθ die Menge aller Pfade mit dieser Eigenschaft. Dann gilt P ∈Pθ :a∈AP z(P ) − P ← − z(P ) = f (a, θ). Da nach Theorem 1.27 distG (s, v) und P ∈Pθ : a ∈AP distG (v, t) nach jedem Augmentiervorgang monoton steigt, kann man z, wenn wir z auf Pθ einschränken, als Pfadzerlegung eines eindeutigen Mini- 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke 55 malkostenflusses auffassen. Dieser ist aber unabhängig von dieser Zerlegung. Wenn es einen statischen Minimalkostenfluss x bzgl. τ als Kostenfunktion gibt, so dass distGx (s, v) ≤ θ ≤ T −1−distGx (v, t) gilt, gilt x(a) < f (a, θ), da es einen augmentierenden Pfad aus Pθ gibt. Wir können nämlich solange entlang kürzesten Pfaden mit z(P ) > 0 bezüglich f den Nullfluss augmentieren, bis wir einen Minimalkostenfluss x0 mit val(x0 ) = val(x) erhalten. Wegen der Eindeutigkeit gilt x = x0 . Ist eine der beiden Ungleichungen verletzt, so gilt x(a) ≥ f (a, θ). Diese Einsicht macht sich der Algorithmus zunutze. Er sucht einen Minimalkostenfluss x mit distGx (s, v) > θ oder θ > T − 1 − distGx (v, t), so dass für den eindeutig bestimmten Minimalkostenfluss x0 mit val(x0 ) = val(x) − 1 die Bedingung distGx0 (s, v) ≤ θ ≤ T − 1 − distGx0 (v, t) gilt. Dabei benutzt er die binäre Suche bzgl. aller möglichen Flusswerte und prüft, ob eine der beiden Ungleichungen verletzt ist. Wenn ja, muss er einen Minimalkostenfluss mit einem niedrigeren Flusswert testen und merkt sich den aktuellen Wert als obere Schranke, wenn nein, wird er einen Minimalkostenfluss mit einem höheren Flusswert testen und merkt sich den aktuellen Flusswert als untere Schranke. Dabei merkt sich der Algorithmus jeweils den Suchraum in Form eines Intervalls [L, H]. L ist dabei die bisher gefundene größte untere Schranke und H ist dabei die bisher berechnete kleinste obere Schranke. Der Algorithmus terminiert, wenn H = L + 1 gilt. Für den Fluss x̃ mit val(x̃) = H gilt dann x̃(a) = f (a, θ). Die gesamt Laufzeit ist polynomial, da log(nU ) oft eine Minimalkostenflussberechnung durchgeführt werden muss (U ist dabei die grösste vorkommende Kapazität bzgl u). Wir haben damit folgendes Theorem gezeigt: Theorem 2.23. Sei f ein Earliest Arrival Flow auf (G, u, τ, s, t) und es gebe keine Kreise C in G mit τ (C) = 0. Seien weiterhin T ∈ N0 ein Zeithorizont. Sei a ∈ A und 0 ≤ θ < T . Dann berechnet der Snap-ShotAlgorithmus f (a, θ) in polynomieller Zeit O(log(n·U )·RU N T IM E(M CF )). RU N T IM E(M CF ) bezeichne dabei die Laufzeit des Polynomialzeit - Algorithmus für das Minimalkostenflussproblem. Bemerkungen 2.24. Fleischer und Tardos [5] haben ein entsprechendes Resultat auf kontinuierliche Flüsse übertragen. 2.4.4 Approximationsalgorithmen In diesem Unterabschnitt beschreiben wir den PTAS -Algorithmus von Hoppe [12], welcher zu jedem ε > 0 und einer Instanz des Earliest Arrival Problems, bestehend aus einem dynamischen Netzwerk und einem Zeithorizont T ∈ N0 , einen dynamischen Fluss f mit Zeithorizont T berechnet, dessen Arrival Pattern zu jedem Zeitpunkt höchstens um einen Faktor (1 + ε) vom Arrival Pattern eines Earliest Arrival Flow mit Zeithorizont T abweicht. 56 Evakuierungsprobleme input : Ein Netzwerk N = (G, u, τ, s, t) und ein Zeithorizont T output : Eine verallgemeinerte Pfadzerlegung eines Earliest Arrival Flow f mit Zeithorizont T 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 x := 0; ũ := u; ∆ := 1; Γ := [∅]; σ := 0; while (σ < m∆/ε) und (∃s-t-Pfad P in (Gx , ũx , s, t) mit τ (AP ) ≤ T − 1) do P :=shortest Path in (Gx , ũ, s, t); γ := min{ũx (a) : a ∈ AP }; Augmentiere x um γ entlang P ; Γ := Γ + [P ]; σ := σ + γ; end ∆ := 2 · ∆; foreach a ∈ A do ũ(a) := ũ(a) − (ũx (a) mod ∆); end return Γ; Algorithmus 2.3 : Der (1 + ε)-Approximationsalgorithmus von Hoppe für das Earliest Arrival Problem Der Algorithmus benutzt die Capacity Scaling Methode. Klassisch angewandt, wie im beim Capacity Scaling Algorithmus 1.5 fängt die Capicaty Scaling Methode mit einem großen Scaling Faktor ∆ an und versucht pro Scaling Runde bei jedem Augmentiervorgang um mindestens ∆ Flusseinheiten zu augmentieren. Nach jeder Scaling Runde wird der Scaling Faktor verkleinert (Beim Capacity Scaling im Algorithmus 1.5 wird er halbiert). Die Idee die zugrunde liegt ist, dass bei statischen Flussberechnungen Kanten mit sehr großer Kapazität eine wichtigere Rolle spielen, als Kanten mit niedrigerer Kapazität. Der Algorithmus von Hoppe weicht vom klassischen Capacity Scaling Vorgang ab. Die dem Algorithmus zugrundeliegende Idee besteht nun darin, dass Kanten mit sehr kurzen Fahrzeiten und kleinen Kapazitäten in einem dynamischen Fluss wichtiger als Kanten mit langen Fahrzeiten und großen Kapazitäten sind, da die Kanten mit den kurzen Fahrzeiten u. U. mehr Flusseinheiten transportieren werden. Mit dieser Idee wird nun der Scaling Vorgang umgekehrt betrieben, d. h. wir beginnen mit kleinen Scaling Faktoren und vergrößern sie nach jeder Runde durch verdoppeln. Der Algorithmus wird bzgl. eines modifizierten Successive Shortest Path Algorithmus verall- 2.4 Earliest Arrival Flow Probleme mit einer Quelle und einer Senke 57 gemeinerte Pfade im Rahmen einer statischen Flussberechnung berechnen, die durch zeitliche Wiederholung einen dynamischen Fluss induzieren. In jeder Scaling Phase wird jeder augmentierende Pfad den statischen Fluss um mindestens ∆ Flusseinheiten augmentieren, wobei ∆ der aktuelle Scaling Faktor der Scaling Runde ist, da der Algorithmus sicherstellt, dass die Residualkapazitäten immer ein Vielfaches von dem aktuellen ∆ sind. Das wiederum liegt daran, dass der Algorithmus nach Abschluss einer Scaling Phase mit Scaling Faktor ∆ die Kantenkapazitäten so entsprechend abrundet, dass die residualen Kantenkapazitäten ein Vielfaches von 2 · ∆, dem Scaling Faktor der nächsten Runde, sind. Weil jeder Augmentiervorgang um mindestens ∆ Flusseinheiten den statischen Fluss augmentiert, ist die Anzahl der Augmentiervorgänge durch O(m/ε) beschränkt, da eine Scaling Phase abgebrochen wird, wenn in dieser um wenigstens m · ∆/ε Flusseinheiten augmentiert wurde. Da es höchstens log(U ) mit U = max{u(a) : a ∈ A} Scalingphasen gibt, arbeitet somit der Algorithmus in polynomieller Zeit bzgl. der Kodierungslänge der Eingabeinstanz. Weiterhin stellt Hoppe fest, dass die durch das Runden gewonnene verallgemeinerten Pfade trotzdem noch einen zulässigen verallgemeinerten zeitlich wiederholten Fluss induzieren. Das Aufwärts Capacity Scaling in Verbindung mit dem geschickten Runden sorgt schließlich dafür, dass die Abweichung des Arrival Patterns von ΓT zum Zeitpunkt 0 ≤ θ < T nur höchstens um einen Faktor (1 + ε) von dem Earliest Arrival Pattern p(θ) beträgt. Für weitere technische Details verweisen wir auf [12]. Zusammenfassend halten wir fest: Theorem 2.25 (Hoppe [12]). Sei N = (G, u, τ, s, t) ein dynamisches Netzwerk und T ∈ N0 ein Zeithorizont und p das Earliest Arrival Pattern. Dann berechnet der Approximationsalgorithmus von Hoppe einen dynamischen st-Fluss f mit Zeithorizont T und p(θ) ≤ (1+ε)exf (t, θ). Die Laufzeit beträgt O(m · ε−1 · (m + n log n) log U ) (U ist dabei die größte vorkommende Kantenkapazität). Bemerkungen 2.26. Der soeben vorgestellte Algorithmus von Hoppe ist nur ein P T AS-Algorithmus. Für jedes fixe ε ist dieser Algorithmus ein Polynomialzeitalgorithmus. Es gibt nach Fleischer und Skutella [6] einen 1 + εFPTAS, d. h. die Laufzeit ist zusätzlich polynomiell in 1/ε, der auf dem Prinzip zeitkondensierter Netzwerke basiert. Allerdings sind dazu die in der Bemerkung 2.12 erwähnten zeitkondensierten Netzwerke weniger geeignet, da ihre Größe einen Faktor 1/ε enthält. Fleischer und Skutella betrachten dabei eine nichtuniforme Variante der zeitkondensierten Graphen. Nichtuniform bedeutet, dass die Zeitpunkte, für welche eine Zeitschicht aus dem zeitexpandierten Graphen übernommen wurde, nicht äquidistant im Gesamtzeitintervall verteilt sind. Sie konstruieren sogenannte geometrische zeitkondensierte Netzwerke, wobei die Zeitpunkte der aus dem zeitexpandierten Graphen übernommenen Zeitschichten, in gewisser Weise einem geometrischem 58 Evakuierungsprobleme Wachstum unterliegen. Auf diesen Graphen induziert dann ein lexikographisch maximaler Fluss einen dynamischen Fluss, dessen Arrival Pattern sich höchstens um (1 + ε) von dem eines Earliest Arrival Flows unterscheidet. Für Details verweisen wir auf [6]. 2.5 Earliest Arrival Transshipments In diesem Abschnitt betrachten wir dynamische Netzwerke mit einer gegebenen Balancefunktion auf den Knoten und einem gegebenen Zeithorizont und fragen uns, ob es unter diesen Bedingungen einen dynamischen Fluss gibt, welcher zu jedem Zeitpunkt maximal ist und die Bedarfe an den Knoten erfüllt. Dieses Problem lösen wir näherungsweise später auch mit den vorgestellten Heuristiken und vergleichen sie mit dem Ergebnis des in diesem Abschnitt später vorgestellten Algorithmus. Motiviert wird dieses Problem durch die beschriebenen Evakuierungsprobleme in der Einleitung zu diesem Kapitel. Speziell vorhandene Bedarfsfunktionen können wir dadurch motivieren, dass vor dem Evakuierungsvorgang die zu evakuierende Anzahl von Personen bekannt ist. Ein Problem kann darin bestehen, dass der gewählte Zeithorizont zu kurz sein kann und es dann kein Evakuierungsfluss bzw. zulässiges dynamisches Transshipment gibt. Den kleinsten Zeitpunkt, zu welchem ein zulässiges Transshipment existiert, lässt sich mit dem Quickest Transshipment Problem bestimmen. Vgl. Abschnitt 2.2. 2.5.1 Existenz In diesem Unterabschnitt zeigen wir die Existenz von dynamischen Transshipments mit der Earliest Arrival Eigenschaft. Die Existenz solcher Flüsse basiert auch wie im Abschnitt 2.4 auf der Existenz lexikographisch maximaler Flüsse. Falls wir eine zulässige Instanz haben, d. h. zu dem gegebenen Netzwerk, Balancefunktion und Zeithorizont existiert ein dynamisches Transshipment, konstruieren wir zuerst eine Variante des zeitexpandierten Netzwerkes, in welcher statische Flüsse dynamischen Transshipments im Ursprungsnetzwerk entsprechen und zeigen dann, dass ein lexikographisch maximaler Fluss in diesem speziellen zeitexpandierten Netzwerk einem Earliest Arrival Transshipment entspricht. Theorem 2.27. Seien N = (G, u, τ, S + , t) ein dynamisches Netzwerk, T ∈ N und b eine Balancefunktion. Dann existiert ein statisches Netzwerk NbT , in welchem jedes dynamische Transshipment f mit Zeithorizont T und |f | = −b(t) einem maximalen statischen Fluss x in NbT mit val(x) = −b(t) entspricht und umgekehrt. Beweis. Wir konstruieren das Netzwerk NbT . Dazu betrachten wir das zu- 2.5 Earliest Arrival Transshipments 59 gehörige zeitexpandierte Netzwerk N T von N . Wir erweitern dazu GT um einen Knoten s∗ , welchen wir Superquelle nennen. Weiterhin fügen wir Kanten a = (s∗ , s0 ) mit τ (a) := 0 und u(a) := b(s) für alle s ∈ S + ein. Den so entstandenen Graphen bezeichnen wir mit GT ∗ . Das statische Netzwerk NbT ist dann durch NbT := (GT ∗ , u, s∗ , tT −1 ) gegeben. Sei nun f ein dynamisches Transshipment mit Zeithorizont T und |f | = −b(t). Dann entspricht f nach Theorem 1.44 einem statischen S +(1) -tT −1 Fluss x mit val(x) = |f | = −b(t) auf N T . Danach gilt exx (s0 ) = b(s) für alle s ∈ S + . Durch setzen von x((s∗ , s0 )) := b(s) für alle s ∈ S + erweitern wir x auf NbT zu einen s∗ -tT −1 -Fluss, wobei sich val(x) nicht ändert. Desweiteren sieht man leicht, dass die Flusserhaltungsbedingungen eingehalten werden. Der Fluss ist als s∗ -tT −1 -Fluss aufgrund des Max Flow Min Cut-Theorems maximal, da alle Kanten aus δ + (s∗ ) gesättigt sind. P Andererseits sei x ein s∗ -tT -Fluss mit val(x) = −b(t) = s∈S + b(s). ∗ + Daher müssen alle Kanten (s , s0 ) für alle s ∈ S saturiert sein. Dadurch ist automatisch x auf NbT nach dem Max Flow Min Cut-Theorem maximal. Wir schränken nun x auf N T ein und betrachten ihn als S +(1) -tT -Fluss. Dadurch gilt nun exx (s0 ) = b(s) auf N T für alle s ∈ S + . Schließlich entspricht x nach Theorem 1.44 einem dynamischen S + -t-Fluss f mit |f | = val(x) = −b(t), d. h. f ist b-Transshipment. Nun zeigen wir, falls es überhaupt dynamische Transshipments gibt, dass es dann auch welche mit der Earliest Arrival Eigenschaft gibt. Theorem 2.28. Seien N = (G, u, τ, S + , t) ein dynamisches Netzwerk, T ∈ N und b eine Balancefunktion. Falls es ein dynamisches Transshipment bzgl. b mit Zeithorizont T gibt, dann existiert ein dynamisches Transshipment bzgl. b mit Zeithorizont T und der Earliest Arrival Eigenschaft. Beweis. Wir betrachten das Netzwerk NbT . Aufgrund der Existenz eines Transshipments hat nach Theorem 2.27 auf dem Netzwerk NbT jeder maximale statische s∗ -tT −1 -Fluss den Flusswert −b(t). Wenn wir nun s∗ -{t}(T ) Flüsse betrachten, gilt, dass der Flusswert eines maximalen s∗ -{t}(T ) -Flusses in diesem Fall auch immer den Wert −b(t) haben muss, da man jeden maximalen s∗ -tT −1 -Fluss als s∗ -{t}(T ) -Fluss auffassen kann. Mehr Fluss kann aber ein s∗ -tT −1 -Fluss nicht führen, da er durch die Kapazität von δ + (s∗ ) = −b(t) beschränkt ist. Damit existiert nun nach Theorem 2.16 ein lexikographisch maximaler s∗ -{t}(T ) -Fluss x bzgl. {t}(0) ⊂ {t}(1) ⊂ . . . ⊂ {t}(T ) mit val(x) = −b(t). Da x insbesondere maximal ist, ist insbesondere jede Kante (s∗ , s0 ) für alle s ∈ S + saturiert. Wenn wir x auf N T einschränken und als S +(1) -t(T ) -Fluss betrachten gilt exx (s0 ) = b(s) für alle s ∈ S + . Wir wenden nun analog die Holdoverkanten-Konstruktion für die Senkeknoten nach Theorem 2.17 an, um S +(1) -ti−1 -Flüsse fi für 1 ≤ i ≤ T zu erhalten. Wie in Theorem 2.17 sehen wir ein, dass ebenfalls val(fi ) = W ({t}(i) ) für 1 ≤ i ≤ T gilt, wobei der Ausdruck W ({t}(i) ) sich auf NbT bezieht. Weiter 60 Evakuierungsprobleme gilt entsprechend, dass fT einem dynamischen Fluss F mit Zeithorizont T auf N entspricht, welcher b respektiert und zum Zeitpunkt T erfüllt. Ferner gilt auch, dass die Flüsse fi dem Fluss F entsprechen, wenn man F jeweils als dynamischen Fluss mit Zeithorizont i betrachtet. Wir zeigen nun, dass F zu jedem Zeitpunkt i ≤ T maximal ist. Wenn es einen Zeitpunkt i gibt, bei welchem dieses nicht der Fall ist, dann existiert auf N ein dynamischer Fluss F 0 mit Zeithorizont i mit |F 0 | > W ({t}(i) ), welcher die Balancefunktion respektiert, d. h. es gilt exF 0 (s, θ) ≤ b(s) für alle s ∈ S + . Dann existiert in N i ein statischer S +(1) -t(i) -Fluss x0 mit val(x0 ) > W ({t}(i) ) und exx0 (s0 ) ≤ b(s) für alle s ∈ S + . Somit lässt sich x0 zu einem s∗ -{t}(i) Fluss x00 durch x00 ((s∗ , s0 )) := exx0 erweitern. Dieser Fluss ist zulässig und besitzt einen größeren Wert als W ({t}(i) ). Dies ist aber ein Widerspruch zur lexikographischen Maximalität von x auf NbT . Somit ist F zu jedem Zeitpunkt maximal und besitzt daher die Earliest Arrival Eigenschaft. 2.5.2 Ein exakter Algorithmus für das Earliest Transshipment Problem In diesem Unterabschnitt stellen wir einen Algorithmus vor, welcher zu einem gegebenen Zeithorizont T , einer Bedarfsfunktion und einem dynamischen Netzwerk ein Earliest Arrival Transshipment berechnet. Wir nehmen dabei an, dass zu dem Zeitpunkt T ein solcher Fluss existiert. Auf das Problem einen solchen Zeitpunkt zu bestimmen verweisen wir auf den Abschnitt 2.2. Die Berechnung erfolgt auf dem zeitexpandierten Netzwerk ÑbT , welches ∗ entsteht, indem wir GT in NbT um eine Supersenke t∗ erweitern und entsprechend Kanten (ti , t∗ ) mit Fahrzeit Null und unbeschränkter Kapazität für alle 0 ≤ i < T einfügen. Den modifizierten Graphen nennen wir GT ∗∗ . Wir berechnen dann einen b0 -Minimalkostenfluss x auf ÑbT mit b0 (s∗ ) := −b(t), b0 (t∗ ) := b(t) und b0 (v) = 0 für alle v ∈ GT berechnen. Diesem schränken wir auf N T ein und erhalten nach einen Fluss x0 der einem dynamischen Transshipment mit Zeithorizont T , welcher unser gesuchtes Earliest Arrival Transshipment ist, entspricht. Theorem 2.29. Seien N = (G, u, τ, s, t), T ∈ N und b eine Balancefunktion. Dann berechnet der Algorithmus 2.4 ein Earliest Arrival Transshipment mit Zeithorizont T . Beweis. Sei F der Fluss der durch Algorithmus 2.4 entsteht. Der in Algorithmus 2.4 berechnete statische Fluss x0 entspricht nach Theorem 1.44 dem Fluss F . Der Fluss F hat danach den Zeithorizont T , da kein s0 -tT −1 -Pfad 2.5 Earliest Arrival Transshipments 61 : Ein dynamisches Netzwerk N = (G, u, τ, S + , t), Eine Balancefunktion b und ein T ∈ N output : Ein dynamischer S + -t-Fluss mit Zeithorizont T , welcher bzgl. b ein dynamisches Transshipment ist und die Earliest Arrival Eigenschaft besitzt. input Konstruiere das zeitexpandierte Netzwerk ÑbT ; −b(t) v = s∗ Setze b∗ (v) = b(t) v = t∗ ; 0 sonst 2 ∗ 3 Berechne einen b -Minimalkostenfluss x auf ÑbT ; 4 Schränke x auf N T ein und konstruiere einen S +(1) -tT −1 -Fluss x0 durch Anwendung des Holdoverkanten-Konstruktionsprinzips aus dem Beweis von Theorem 2.17; 5 Berechne den dynamischen Fluss F der x0 entspricht; Algorithmus 2.4 : Ein exakter Algorithmus für das Earliest Transshipment Problem 1 für alle s ∈ S + nach Konstruktion von N T länger als T − 1 sein kann. Der Fluss x0 ist wiederum zulässig, da x0 gemäß analoger Anwendung für t des Holdoverkanten-Konstruktionsprinzips aus dem Beweis von Theorem 2.17 aus dem Fluss x konstruiert wird. F respektiert die Balancefunktion, da −exx0 (s0 ) = b(s) für alle s ∈ S + gilt. Letzteres ergibt sich einfach daraus, da b(s) Flusseinheiten in jeden Knoten s0 für alle s ∈ S + nach Einschränkung von x auf N T weniger hineinfließen, da alle Kanten (s∗ , s0 ) für alle s ∈ S + saturiert sein müssen um b∗ zu genügen. Daher gilt −exF (s, θ) ≤ b(s) und exF (s, T ) = b(s). Somit ist insgesamt F ein zulässiges b-Transshipment mit Zeithorizont T . Zu zeigen bleibt, dass F zu jedem Zeitpunkt maximal ist. Dazu betrachten wir den Fluss x. Der Fluss x ist nach dem Max Flow Min Cut-Theorem maximal, da alle Kanten (s∗ , s) für alle s ∈ S + gesättigt sind. Sei nun w eine Pfadzerlegung von x und wir betrachten alle s∗ -t∗ -Pfade P mit τ (P ) < θ und w(P ) > 0. (Wir nehmen o. E. an, dass eine solche Pfadzerlegung existiert, ansonsten ignorieren wir mit der gleichen Begründung wie im dynamischen Max Flow Algorithmus Fluss auf den Kreisen). Wir betrachten nun den P Fluss xθ (a) := P ∈P:a∈P und w(P )>0 und τ (P )≤θ w(P ). Wir zeigen indirekt, dass xθ maximal auf Ñbθ . Danach sehen wir, dass auf N θ jeder Fluss x̃ mit val(x̃) > val(xθ ) keinem dynamischen b-Transshipment entsprechen kann, da an einer Quelle s0 für ein s ∈ S + die Bedingung exx̃ (s0 ) ≤ b(s) verletzt sein muss. Wenn dies nicht der Fall sein sollte, könnte 0 man x̃ auf Nbθ zu x̃0 erweitern durch x̃0 (s∗ , s0 ) := b(s) für alle s ∈ S + und x̃0 (tθ , t∗ ) := val(x̃). Dies wäre ein Widerspruch zur Maximalität von xθ auf 62 Evakuierungsprobleme Ñbθ . Da, wenn wir xθ auf N θ einschränken, val(x0 ) = val(xθ ) gilt, wäre somit die Earliest Arrival Eigenschaft von F gezeigt, weil exF (t, θ) = val(x0 ) gilt, wenn wir x0 auf N θ einschränken. Wir nehmen nun an, dass xθ nicht auf Ñbθ maximal ist. Dann gibt es einen xθ -augmentierenden s∗ -t∗ -Pfad P ∗ auf Ñbθ in Gθ∗∗ xθ . Wir definieren nun → ← für beliebige Pfade P in Gθ∗∗ xθ mit AP := {a ∈ A : a ∈ AP oder a ∈ AP } die Menge aller Vorwärtskanten, welche entweder selbst oder dessen → zugehörige Rückwärtskante in AP enthalten ist. Sei a = (vk , wk+τ (a) ) ∈ AP ∗ mit k+τ (a) ≤ θ so gewählt, dass xθ (a) < x(a) und xθ (a0 ) = x(a0 ) für alle a0 ∈ −−−−−−−−→ ∗ AP[w \{a} gilt. Eine solche Kante muss existieren, da sonst P ∗ in GTx ∗∗ ,t∗ ] k+τ (a) ein augmentierender Pfad ist, was aber der Maximalität von x widerspricht. Daher gibt es einen weiteren s∗ -t∗ -Pfad P 0 mit a ∈ AP 0 , w(P 0 ) > 0 und τ (P 0 ) ≥ θ. Damit erhalten wir in GTx ∗∗ einen Kreis C von wk+τ (a) über den ∗ ∗ 0 Kanten von P[w ,t∗ ] über t und den Rückwärtskanten von P[w ,t∗ ] k+τ (a) ← k+τ (a) verläuft. Sofern a ∈ AP ∗ enthalten ist, müssen wir sicherstellen, dass diese Kante in GTx ∗∗ auch existiert. Dies ist aber gesichert, da 0 < xθ (a) < x(a) gilt. Daher gilt weiter τ (C) = τ (P ∗ ) − k − τ (a) − τ (P 0 ) + k + τ (a) = τ (P ∗ ) − τ (P 0 ) < 0 wegen τ (P 0 ) ≥ θ > τ (P ∗ ). Damit ist C ein Kreis mit negativen Kosten, was wiederum ein Widerspruch dazu ist, dass x nach Konstruktion ein Minimalkostenfluss ist. Somit ist xθ auf Ñbθ maximal. Zusammen mit obigen Vorüberlegungen haben wir gezeigt, dass F ein b-Transshipment ist, welches zu jedem Zeitpunkt θ den Ausdruck exF (t, θ) so groß wie möglich macht, ohne b zu verletzen. Daher ist F ein Earliest Arrival Transshipment. Kapitel 3 Heuristiken In diesem Teil der Diplomarbeit werden verschiedene Heuristiken vorgestellt, die es in polynomieller Zeit ermöglichen, ein dynamisches Transshipment zu berechnen, dessen Arrival Pattern sich möglichst wenig von dem eines Earliest Arrival Pattern unterscheidet. Dabei ist hier die Zielsetzung, die maximale Abweichung beider Pattern zu minimieren. Exakte Algorithmen zur Berechnung eines Earliest Arrival Transshipment sind zwar bekannt (vgl. Kapitel 2.3), aber i. A. nicht für große Instanzen des Problems geeignet. Dies ist daher ein wichtiger Punkt, welcher die Untersuchung der Heuristiken interessant macht. Die in diesem Kapitel vorgestellten Heuristiken setzen folgende Eigenschaften des zu untersuchenden Netzwerkes (G, u, τ, S + , t) und der Balancefunktion b voraus: (1) u ≡ 1, ( 1 falls a ∈ / δ − (t) (2) τ (a) = 0 falls a ∈ δ − (t), v∈S 1 (3) b(v) = −|S| v = t 0 sonst. Diese Generalvoraussetzung machen wir, da die Heuristiken während der Untersuchung zahlreicher Instanzen entwickelt worden sind, welche ihren Ursprung in Sitzbelegungsplänen aktueller Flugzeugtypen haben. Diese Instanzen nennen wir im Folgenden Flugzeuginstanzen. Wenn ein Sitzbelegungsplan eines Flugzeugs gegeben ist, motivieren wir nun informell, wie daraus eine Flugzeuginstanz gewonnen wird. Siehe dazu auch Abbildung 3.1 Wir konstruieren einen Graphen G und fügen für jeden Sitzplatz 0 ≤ i ≤ l genau einen Knoten vi ein. Wir gehen davon aus, dass wir l Sitzplätze gegeben haben. Für je zwei benachbarte Sitzplätze i und j fügen wir Kanten (vi , vj ) und (vj , vi ) in den Graphen ein. Wenn zum Beispiel eine Gehrichtung ausgeschlossen ist (z. B. in einer Fenstersitzreihe der Weg zum Fenster) verzichten wir auf das Einfügen von gewissen Kanten welche in diese Richtung führen würden. Sind zwei Sitzplätze i und j in einer Sitzreihe und durch einen Gang getrennt, fügen wir einen weiteren Knoten w ein, und 63 64 Heuristiken Abbildung 3.1: oben: Ein Sitzbelegungsplan eines Airbus A330 der Lufthansa, welchen man gegenwärtig unter der Internetadresse http://www.seatguru.com/airlines/Lufthansa/Lufthansa Airbus A333 A.php c (TripAdvisor LLC 2001 - 2007) ansehen kann. c unten: Der entsprechende modellierte Graph der mittels LEDA (Algorithmic Solutions Software GmbH.) konstruiert und visualisiert wurde. Für weitere Details zu LEDA siehe http://www.algorithmic-solutions.com/. fügen Kanten (vi , w), (w, vi ), (vj , w) und (w, vj ) ein. Somit diskretisieren wir die Gänge indem wir sie auch durch Knotenteilmengen repräsentieren. Für solche Knoten w und w0 fügen wir Kanten (w, w0 ) und (w0 , w) ein, wenn die entsprechenden Sitzreihen, zwischen welchen sie liegen, benachbart sind. Freie Zwischenräume werden ebenfalls gleichmässig durch Knoten diskretisiert. Kanten werden dann eingefügt, wenn die Orte, welche die Knoten repräsentieren in einer gewissen Weise benachbart sind. Desweiteren wird jeder Ausgang und Notausgang durch einen Knoten modelliert und geeignet an den bisher entstandenen Graphen angebunden. Dann fügen wir eine künstliche Senke ein, damit wir die Existenz eines Earliest Arrival Transshipment gesichert haben. Man kann diesen Knoten aber auch als sicheren Rückzugspunkt (z. B. das Rollfeld) interpretieren. Dieser so entstandene Graph ist zusammenhängend und schlicht und für jeden Knoten vi ∈ S + (0 ≤ i ≤ l) gibt es (für alle 1 ≤ r ≤ k) mindestens einen vi -er -Weg mit (er , t) ∈ δ − (t) und |δ − (t)| = k. Aus diesem Grund ist auch G[V \ {t}] zusammenhängend. Anschaulich bedeutet das, dass jeder Passagier potentiell jeden Ausgang nutzen könnte. Wegen dieses Konstruktionsprinzips setzen wir diese Eigenschaften des Graphen G in diesem Kapitel generell voraus. Da adjazente Knoten Punkte in der Ebene (Sitzplan) repräsentieren, die ungefähr den gleichen Abstand haben, haben wir die Fahrzeit verein- 65 heitlicht, wobei wir einfachheitshalber annehmen, dass alle Passagiere sich gleich schnell bewegen. Da wir nur die Zeit messen wollen, die bis zum erreichen des Ausganges gebraucht wird, versehen wir die Kanten, die zur Senke führen mit der Fahrzeit Null. Die Kapazität auf den Kanten haben wir auch vereinheitlicht, da wie in der Wirklichkeit keine zwei Personen normal auf einem Gang nebeneinander passen. Die Tatsache, dass auf einem Gang sich zwei Passagiere begegnen durch jeweils zwei antiparallele Kanten sich kreuzen können ergibt keinen Zeitvorteil bei der späteren Berechnung des Arrival Pattern, da diese Passagiere ihre Rollen so nach dem Kreuzen vertauschen können, als ob keine Kreuzung stattgefunden hätte. Auf der Hand liegt, dass wir jeden Passagier als eine Flusseinheit interpretieren. Daher modellieren wir jeden belegten Sitzplatzknoten mit einem Einheitsbedarf. Die Senke erhält mit entsprechendem Vorzeichen die Summe dieser Bedarfe, so dass wir eine zulässige Balancefunktion haben. Im Folgenden werden drei Heuristiken vorgestellt. Diese basieren auf der Idee, kürzeste Wege bzgl. der Fahrzeit zu untersuchen. Die erste Heuristik ist somit die kürzeste Wege Heuristik. Die weiteren Heuristiken stellen Verbesserungen der ersten dar. Es handelt sich dabei um die AusgangentlastungsHeuristik und die kürzeste Fahrzeit Heuristik. Nach der Vorstellung dieser Heuristiken veranschaulichen wir die Arbeitsweise der Heuristiken an einem kleinen Beispielnetzwerk. Danach werden wir die Heuristiken auf einige Instanzen anwenden und die Resultate der Heuristiken untereinander sowie mit einem exakten Resultat jeweils pro Instanz vergleichen. Alle vorgestellten Heuristiken benötigen den Begriff eines Ausganges. Dieser ist wie folgt definiert: Definition 3.1. Gegeben sei eine Netzwerkinstanz (G, u, τ, S + , t) mit G = (V, A). Ein Knoten v ∈ V \{t} heißt Ausgangsknoten oder kurz Ausgang, falls (v, t) ∈ A. Die Menge aller Ausgänge bezeichnen wir mit E wobei E & A gilt. Desweiteren werden alle vorgestellten Heuristiken ein dynamisches Transshipment auf Basis von S + -t-Pfaden berechnen. Als Hilfsmittel führen wir folgende Notation ein: Definition 3.2. Seien (G, u, τ, S + , t) ein dynamisches Netzwerk und P ein s-t-Pfad mit s ∈ S + . Dann wird durch P wie folgt ein dynamischer Fluss f mit Zeithorizont τ ( (P ) + 1 induziert: 1 falls θ = τ (P[s,v] ) und (v, w) ∈ AP f ((v, w), θ) := 0 sonst Um zu verdeutlichen, dass ein Fluss f durch einen Pfad P induziert wird, bezeichnen wir f mit f[P ] 66 Heuristiken Bemerkungen 3.3. (1) Der durch einen Pfad P induzierte Fluss f[P ] ist wohldefiniert, da man sehr leicht sieht, dass die Kapazitätsbedingungen wegen der Generalvoraussetzung u ≡ 1 auf keiner Kante verletzt werden. Auch die Flusserhaltungsbedingung wird nicht verletzt, da wir entlang eines Pfades eine Flusseinheit verschicken, die nach Konstruktion innerhalb des Zeithorizontes in die Senke t hineinfließt. (2) In diesem Kapitel werden wir die jeweilige Kantenmenge eines s-tPfades (s ∈ S + ) als Weg im Sinne von Definition 1.8 auffassen, also als geordnetes Kanten-Tupel. Dies erleichtert uns beim Aufschreiben der Algorithmen insofern die Arbeit, da dann die Anweisung für alle ” a ∈ AP“ die Reihenfolge der Kanten auf dem Weg von s nach t berücksichtigt, und somit das gewünschte Traversieren des Pfades beschreibt. Wir werden nun durch die Heuristiken mehrere Ansätze sehen, wie man durch Pfade induzierte Flüsse kombiniert, um ein dynamisches Transshipment zu erhalten. 3.1 Die kürzeste Wege Heuristik Diese Heuristik ist die erste, welche in diesem Kapitel vorgestellt wird. Motiviert wird sie durch die Tatsache, dass z. B. Personen, die ein Flugzeug besteigen oder ein Stadion betreten, sich den kürzesten Weg zu dem nächsten Ausgang bzw. Notausgang merken. Selbst wenn sie dieses nicht tun, weisen im Evakuierungsfall Leittafeln auf den nächstgelegenen Ausgang hin, d. h. der Weg vom Sitzplatz zu diesem Ausgang ist nicht länger ist als jeder andere Weg zu einem anderen Ausgang. Auf das Netzwerk übertragen, bedeutet dies, dass jede Flusseinheit über den kürzesten Weg von der zugehörigen Quelle bis zur Senke geführt werden wird. Im Netzwerk entsprechen die Ausgänge eines Flugzeuges oder Stadion den Knoten, zu welchen die Senke adjazent ist. Diese Heuristik arbeitet wie folgt: Zunächst wird von jeder Quelle s ∈ S + jeweils ein kürzester Pfad zur Senke t mit dem Algorithmus von Dijkstra bestimmt. Diese Wege werden nun in eine Liste L eingefügt. Anschließend wird diese Liste aufsteigend nach der Länge der Pfade bzgl. τ sortiert. Sei L = [P1 , . . . , P|S + | ] die resultierende Liste nach dem Sortiervorgang. Ausgehend von der sortierten Liste werden nun die Pfade nacheinander betrachtet und jeder Kante auf diesen Pfaden Fluss zu einem geeigneten Zeitpunkt zugewiesen. Dabei kann es zu Kollisionen, d. h. Kapazitätsverletzungen von Kanten a = (v, w) kommen, wenn wir bzgl. eines Pfades P mit a ∈ AP einen Fluss f 0 um eine Flusseinheit erweitern wollen, d. h dass u. U. der Fluss f 0 + f[P ] zu einem Zeitpunkt θ an der Kante a die Kapazitätsbedingung verletzt. Diese Kollision muss dahingehend aufgelöst werden, indem die Flusseinheit, die entlang P fließen soll, solange in v zwischengespeichert 3.1 Die kürzeste Wege Heuristik 67 werden muss, bis die Kante a wieder über Kapazität verfügt. Die Heuristik setzt nach dem Sortiervorgang mit der Weiterverarbeitung der Pfade bzw. eigentlichen Flussberechnung mit dem kürzesten Pfad fort. Sie nimmt am Anfang den Nullfluss an und versucht nach und nach entlang der Pfade aus L den Fluss unter Vermeidung von Kollisionen zu vergrößern. Wir bezeichnen mit f[P1 ,...,Pl ] (1 ≤ k ≤ |S + |) den Fluss, der nach Flussvergrößerung entlang der Pfade P1 bis Pl entsteht. Zunächst ist nicht klar wie dieser Fluss entsteht. Eine Möglichkeit wäre eine Addition der Flüsse f[Pi ] was aber i. A. kein zulässiger Fluss ist, da, wie wir weiter oben gesehen haben, es zu Kapazitätsverletzungen kommen kann. Bis jetzt wissen wir nur, dass nach Bemerkung 3.3 der Fluss f[P1 ] ein gültiger dynamischer Fluss ist. Wir zeigen nun induktiv auf, wie die Heuristik den Fluss f[P1 ,...,Pl ] berechnet, wenn der Fluss f[P1 ,...,Pl−1 ] bekannt ist. Zunächst berechnet die Heuristik den Fluss g := f[P1 ,...,Pl−1 ] + f[Pl ] . Wenn einer der Summanden einen kleineren Zeithorizont besitzt, erweitern wir diesen Fluss zu einem Fluss mit dem entsprechenden größeren anderen Zeithorizont. Dabei wird der Fluss auf allen Kanten und zu allen Zeitpunkten ab dem kleineren Zeithorizont auf Null gesetzt. Ist nun g zulässig, so sei f[P1 ,...,Pl ] := g. Ist g nicht zulässig, gibt es Kanten ak auf Pl zu welchen es ein θk gibt mit g(ak , θk ) > 1. Dabei bezeichne ai die i-te Kante auf dem Pfad Pl , ausgehend von der zugehörigen Quelle. Sei nun aj = (v, w) ∈ APl eine solche Kante mit minimalem θj . Wir suchen nun den kleinsten Zeitpunkt θj0 mit f[P1 ,...,Pl−1 ] (aj , θj0 ) = 0 und θj0 > θj . Wir müssen nun die Flusseinheit, die entlang Pl verschickt werden soll, im Zeitintervall [θj , θj0 ] im Knoten v zwischenspeichern. Dazu modifizieren wir f[Pl ] und setzen P 0 falls θ ≤ τ (Pl ) + ji=1 ∆li und a ∈ / APl f (a, θ) falls 0 ≤ θ < θj und a ∈ APl (j) [Pl ] (∗)fPl (a, θ) := 0 falls θj ≤ θ < θj0 und a ∈ APl P f[Pl ] (a, θ − ∆lj ) falls θj0 ≤ θ ≤ τ (Pl ) + ji=1 ∆li und a ∈ APl mit ∆lj = θj0 − θj . Wir setzen ∆li = 0 für alle 1 ≤ i < j, falls ∆li bisher undefiniert ist. (j) Der Fluss fPl entspricht dem Fluss f[Pl ] bis zu dem Zeitpunkt θj , wo in v für ∆lj Zeiteinheiten die Flusseinheit gespeichert wird. Danach ent(j) spricht fPl dem Fluss f[Pl ] mit einem Zeitversatz von ∆lj . Setzen wir nun (j) g := f[P1 ,...,Pl−1 ] + fPl so gilt g(aj , θj ) = 1. Ist g nun zulässig, so sei f[P1 ,...,Pl ] = g. Ansonsten gibt es wieder eine Kante ak mit einem minimalen θk mit g(a, θk ) > 1. Dann gilt nun θk > θj . Wir lassen in Formel (j) (k) (*) fPl die Rolle von f[Pl ] übernehmen und erhalten einen neuen Fluss fPl und berechnen die Funktion g neu. Dieser Vorgang wird solange wieder- 68 Heuristiken (r) holt bis wir einen Fluss fPl gefunden haben (r > . . . > k > j) so dass (r) g = f[P1 ,...,Pl−1 ] + fPl zulässig ist. Der Vorgang terminiert, da die θi streng monoton steigend sind. Wir setzen dann f[P1 ,...,Pl ] = g. Wir beachten dabei, dass die bisher gewonnenen ∆li -Ausdrücke, wenn sie einmal ermittelt wurden, sich nicht mehr ändern. Damit erreicht die welche in Pr Flusseinheit, l entlang Pl die Senke erreichen soll, nach τ (Pl ) + i=1 ∆i Zeiteinheiten die P (r) Senke, da fPl den Zeithorizont τ (Pl ) + ri=1 ∆li + 1 besitzt. Die Heuristik terminiert, nachdem sie den letzten Pfad P|S + | betrachtet hat, d. h. sie hat den Fluss fL = f[P1 ,...,P| S + |] berechnet. fL ist ein dynamisches b-Transshipment, da jede Quelle nur einmal als Startknoten auf einem der Pfade aus L auftritt. Ansonsten gilt, wenn eine Quelle als Zwischenknoten in einem Pfad P 0 auftritt, im Fluss f[P 0 ] Flusserhaltung. Da jeweils nur eine Flusseinheit entlang jeden Pfades verschickt wird, genügt fL der Balancefunktion b. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Data : Ein Netzwerk (G, u, τ, S + , t) initialisierung; foreach s ∈ S + : do Berechne den kürzesten s-t Pfad Ps bzgl. τ ; Füge Ps in die Pfadliste L ein; end Sortiere L aufsteigend; foreach P ∈ L: do θ := 0; foreach a ∈ AP : do while f (a, θ) = u(a) do θ + +; end f (a, θ) + +; θ + +; end end Algorithmus 3.1 : Kürzeste Wege Heuristik Die Laufzeit dieser Heuristik können wir insgesamt mit O(m + n log n + n · |S + |2 ) abschätzen. Um die Pfade zu berechnen und separat abzuspeichern benötigen wir O(m + n log n + n · |S + |) an Zeit, in dem wir geschickt in Linearzeit die Kantenorientierung aller Kanten ändern und dann den Algorithmus von Dijkstra mit t als Quellknoten starten. Bei der Speicherung der Pfade können wir die gewonnene Vorgängerinformation als Nachfolgerinformation auffassen um somit die Kantenorientierung des Ursprungsgraphen zu berücksichtigen. Die Speicherung der Pfade kann in Zeit O(|S + | · n) erfolgen, da wir |S + | Pfade haben, die maximal n Knoten enthalten können. 3.2 Die Alternativausgang Unterheuristik 69 Das Sortieren der Liste L bezüglich der Pfadlängen kann in Linearzeit O(n) mittels Bucketsort erfolgen, da die es wir |S + | ganzzahlige Pfadlängen haben, welche wiederum nur O(n) viele Werte annehmen können. Für Details zu dem Sortieralgorithmus Bucketsort verweisen wir auf [23]. Die folgende äußere Schleife (Zeile 7-16 in Algorithmus 3.1) benötigt |S + | Iterationen. Die Flusseinheit, die in jeder dieser Iteration verschickt werden soll, muss maximal |S + | Zeiteinheiten in jedem Knoten auf dem Pfad warten, bis sie in die nächste Kante gelangen kann. Somit ist θ in jeder Iteration der äußeren Schleife durch |S + | · n beschränkt. Insgesamt benötigt diese Schleife damit O(n · |S + |2 ) an Zeit. Zusammenfassend sehen wir leicht, dass folgendes Theorem gilt: Theorem 3.4. Dieser Algorithmus hat eine Laufzeit von O(m + n log n + n · |S + |2 ) und berechnet einen dynamischen b-Fluss f mit Zeithorizont n · |S + | gemäss der kürzesten Wege Heuristik. Bemerkungen 3.5. Der im letzten Theorem festgestellte Zeithorizont ist ein Worst Case Wert. In den praktischen Untersuchungen, in welchen wir diese Heuristik auf einige Flugzeuginstanzen anwenden, wurde dieser aber nie benötigt. Für weitere Details siehe Abschnitt 3.6. 3.2 Die Alternativausgang Unterheuristik Die später folgenden Heuristiken in den Abschnitten 3.3 und 3.4 benötigen den Begriff eines Alternativausganges. In diesem Abschnitt beschreiben wir, wie bei der Flussberechnung in den später vorgestellten Heuristiken ein Alternativausgang und somit ein alternativer Pfad bestimmt wird. Dazu sei E = {e1 , . . . , ek } $ V die Menge der Ausgänge in G, wobei wir ein dynamisches Netzwerk (G, u, τ, S + , t) annehmen. Wenn ein s-t-Pfad (s ∈ S + ) gegeben ist, welcher die Kante (el , t) nutzt, benötigen diese Heuristiken in gewissen Fällen einen s-t-Pfad, welcher über einen anderen Ausgang e∗ ∈ E \ {el } die Senke erreicht. Diese Pfade bezeichnen wir als Alternativpfade und den Ausgang e∗ als Alternativausgang. Wird ein Pfad Pi mit Quelle si untersucht (1 ≤ i ≤ |S + |), welcher über den Ausgang ej ∈ E (1 ≤ j ≤ k) die Senke erreicht, erläutern wir nun, wie wir einen alternativen si -t-Pfad Pi∗ bestimmen, welcher den Ausgang ej bzw. die Kante (ej , t) nicht mehr verwendet. Offensichtlich ist, dass der Fall k = 1 ausgeschlossen werden muss, da es in diesem Fall keinen solchen Pfad Pi∗ gibt. Daher betrachten wir nur die Fälle k > 1. Soll nun Pi∗ bestimmt werden, so werden zunächst innerhalb einer noch zu bestimmenden Umgebung des Ausgangs ej alle anderen Ausgänge ausgeblendet, d. h. es gibt eine Indexmenge Ij $ {1, . . . , k} mit j ∈ I, so dass wir für das weitere Vorgehen dieser Unterheuristik den Graphen G∗ = (V, A∗ ) mit A∗ := A \ {(el , t) ∈ A : l ∈ Ij } betrachten. 70 Heuristiken In G∗ berechnen wir nun einen kürzesten si -t-Pfad bzgl. τ . Dieser Pfad ist der gesuchte alternative Pfad Pi∗ , welcher nun konstruktionsbedingt eine Kante (el , t) enthält mit l ∈ / Ij . Der Ausgang el wird dabei als der alternative Ausgang oder Alternativausgang bezeichnet. Zu beschreiben bleibt noch, wie wir zu jedem Ausgang ej (1 ≤ j ≤ l) die Menge Ij konstruieren. Im Fall k = 2 setzen wir Ij := {j}, da jeder alternative Pfad, der den Ausgang ej meidet, nur noch den jeweils anderen verbliebenen Ausgang enthalten kann. Interessanter wird nun der Fall k > 2. Die Idee, die zugrunde liegt ist die, dass bei der Berechnung von Pi∗ Ausgänge vermieden werden sollen, die in gewisser Weise zu nah am ersten Ausgang ej liegen, da die Gefahr sonst zu groß ist, dass ein großer Teilpfad von Pi wieder zur Flussberechnung benutzt wird und somit keine Fahrzeitverbesserung im späteren Transshipment zu erwarten ist. Begründet wird diese Erkenntnis durch die Untersuchung von Flugzeuginstanzen. Passagiere haben zwei Möglichkeiten sich für eine Gehrichtung auf dem Gang zu entscheiden. Falls nun ein Alternativausgang zu nah am ursprünglich gewähltem Ausgang liegt, kann es passieren, dass der Passagier die Gehrichtung beibehält und einen großen Teilpfad des ursprünglichen Pfades wieder benutzt. Wir versuchen diese Tatsache zu verhindern, in dem wir für jeden Ausgang ej Ausgänge e∗ berechnen, die für Passagiere tabu sind, welche über ej die Senke t erreichen. In Flugzeugsitzplänen sind meist zwei Ausgänge mit kurzem Abstand jeweils gegenüberliegend. Die Unterheuristik versucht zu verhindern, dass ein gegenüberliegender Ausgang als Alternativausgang in Frage kommt. Den Distanzbegriff, den wir im Folgenden benötigen um die Umgebung eines Ausgangs zu beschreiben, beziehen wir auf dem G[V \ {t}] zugrundeliegenden ungerichteten Graphen G0 [V \ {t}]. Wir müssen den Knoten t dabei entfernen, da sonst jeder Ausgang über den Knoten t zu jedem anderem Ausgang bzgl. τ den Abstand Null hätte. Dabei bezeichne im Folgenden für zwei Knoten v, w ∈ V der Ausdruck dist(v, w) die Länge des kürzesten Weges bzgl. τ von v nach w in G0 [V \ {t}]. In AG0 [V \{t}] setzen wir τ ≡ 1, da dies auch in AG[V \{t}] gilt. Nun berechnen wir für jeden Ausgang ej ∈ E die Entfernung dist(ej , el ) zu allen anderen Ausgängen mit 1 ≤ l ≤ k und k 6= l. Wir merken uns dabei mit dem Ausdruck dmin (ej ) die kürzeste Länge dieser kürzesten Wege. Also gilt dmin (ej ) := min{dist(ej , el ) : l ∈ {1, . . . , k}\ {j}}. Da ein zu ej alternativer Ausgang nicht zu nah bei ej liegen sollte, fordern wir einen Mindestabstand von dmin (ej ) + 1 für alle Ausgänge, die als Alternativausgang anstelle von ej in Frage kommen sollen, zu ej . In unseren Flugzeuginstanzen würden somit die gegenüberliegenden Ausgänge jeweils als Alternativausgang nicht in Betracht kommen. Falls es aber noch einen weiteren Ausgang e0 in sehr naher Distanz zu ej 3.2 Die Alternativausgang Unterheuristik 71 gibt, könnte es passieren, dass in einer Flugzeuginstanz der zu ej gegenüberliegende Ausgang el (l 6= k) als Alternativausgang in Frage kommt. Damit das nicht passiert orientieren wir uns an den berechneten Mindestdistanzen der anderen Ausgänge. Unsere Annahme ist, dass wir bei Festsetzung einer einheitlichen Mindestdistanz diesen Ausnahmefall verhindern können, wenn diese Situation nicht sehr Häufig im Graphen auftritt. Ein Beispiel eines solchen Falles sehen wir in Abbildung 3.2. Dort haben die Paare gegenüberliegender Ausgänge den Abstand 9. Den geringsten Abstand zu dem Knoten v hat der Ausgang e3 . Dieser hat wiederum zum Ausgang e1 den Abstand 8. Wenn wir nun für v zusätzlich zu e3 als Alternativausgänge Ausgänge verbieten, welche die kürzeste Entfernung zu e3 besitzen, so wäre der Ausgang e4 noch erlaubt. Ein Alternativpfad über e4 würde auch keinen Vorteil bringen, da dieser auch in gewisser Weise am Ausgang e3 vorbei führt. Wenn wir aber den Knoten e4 , der den Abstand 9 zu e3 hat, auch als Alternativausgang verhindern wollen, so sollten alle Ausgänge, die als Alternativausgang für v in Betracht kommen dürfen, den Abstand von mindesten 10 zu e3 haben. Diesen Umstand wird die Unterheuristik berücksichtigen, da sie ich an dem kürzesten Abstand von e2 zu e1 orientieren wird. Dieser Abstand wird von uns gesuchte Mindestdistanz festlegen. Die einheitliche Mindestdistanz D, die ein alternativer Ausgang von dem ursprünglichem Ausgang haben soll, setzen wir allgemein auf D := max{dmin (ej ) : j ∈ {1, . . . , k}} + 1 um der o. g. Forderung nachzukommen. Nun können wir für alle Ausgänge ej die Indexmenge Ij festlegen. Wir setzen Ij := {i ∈ {1, . . . , k} : dist(ej , ei ) < D}. Insbesondere gilt j ∈ Ij . Somit ist gesichert, dass der ursprüngliche Ausgang selbst nicht der später zu ermittelnde Alternativausgang sein kann. Aufgrund der Symmetrie von dist gilt weiter, dass j ∈ Il gilt, wenn l ∈ Ij gilt und umgekehrt. Um zu jedem Ausgang ej die Existenz eines möglichen Alternativausganges zu sichern, dürfen bei der Bestimmung des selbigen nicht alle Ausgänge ausgeblendet werden, d. h. es muss Ij 6= {1, . . . , k} gelten. Falls bisher Ij = {1, . . . , k} gilt, weichen wir von unserer Forderung mit dem Mindestabstand ab und ersetzen Ij durch Ij := {j} und merken uns j in einer weiteren Indexmenge I. Wir setzen den Ersetzungsvorgang fort bis für alle 1 ≤ l ≤ k die Beziehung Ij 6= {1, . . . , k} gilt. Aus Symmetriegründen entfernen wir danach nun alle i ∈ I aus allen anderen Indexmengen außer Ii . Wir ersetzen dabei Ij durch Ij \(I \ {j}). Die resultierenden Indexmengen sind dann die, welche in der o. g. alternativen Pfadberechnung eingesetzt werden um den Graphen G∗ zu berechnen. Die Laufzeit der Indexmengenberechnung können wir mit O(k(m + n log n) + n2 ) abschätzen. Wir können in Linearzeit den ungerichteten Graphen G0 bestimmen. In der ersten Schleife, die k-mal durchlaufen wird, benötigen wir höchstens Laufzeit O(m + n log n), wenn wir entsprechend den Algorithmus von Dijkstra auf ungerichtete Graphen übertragen und ihn da- 72 Heuristiken e2 e4 e6 v e1 e3 e5 Abbildung 3.2: In diesem Graphen hat der Ausgang e3 den kürzesten Abstand zu v. Wenn bei der Berechnung alternativer Ausgänge alle Ausgänge außer e3 in Frage kommen würden, so wäre der Ausgang e1 der alternative Ausgang, da er mit Abstand 8 den zweitkürzesten Abstand zu v hat. In diesem Fall hätten wir von dem kürzesten v-e1 -Pfad keinen Vorteil, da er in gewisser Weise am Ausgang e3 vorbeiführt. Die Unterheuristik schließt aber die Knoten e3 und e4 zusätzlich als Alternativausgang für v aus, so dass nach einer kürzesten Wege Berechnung der Knoten e5 als Alternativausgang gefunden werden kann. bei an der Stelle, an welcher ein weiter Ausgangsknoten in die Menge R (vgl. Algorithmus 1.1) aufgenommen wird, so modifizieren, dass er den Ausdruck dmin (ei ) mitberechnen kann. Die Überprüfung der Mindestdistanz D und die entsprechende Aktualisierung erfolgt in Zeit O(n2 ). Die Berechnung der Menge I benötigt Zeit O(n). Die Laufzeit der letzten Schleife kann mit O(n2 ) abgeschätzt werden. Somit haben wir folgendes Theorem bewiesen: Theorem 3.6. Der Algorithmus der Indexmengenberechnung gemäß der Unterheuristik hat eine Laufzeit von O(k(m + n log n) + n2 ). 3.3 Die Ausgangentlastungs-Heuristik Diese Heuristik ist eine Modifikation der kürzesten Wege Heuristik. Grundlage sind hier daher auch die kürzesten Wege von den Quellen zur Senke. Die Idee, die dieser Heuristik zugrunde liegt, ist, dass im Evakuierungsfall ungefähr alle Ausgänge gleichmäßig belastet werden sollen, d. h. dass diese Knoten durch ungefähr gleich viele Flusseinheiten passiert werden sollen. 73 3.3 Die Ausgangentlastungs-Heuristik Data : Ein Netzwerk (G, u, τ, S + , t) und die Menge der Ausgänge E = e1 , . . . , ek 1 D := 0; 2 G0 :=makeundirected(G[V {t}]); 3 foreach ei ∈ E: do 4 Ii := {i}; 5 Berechne dist(ei , ej ) für alle ej ∈ E \ {ei } bzgl. τ ; 6 dmin (ei ) := min{dist(ei , ej ) : ej ∈ E \ {ei }} D := max{D, dmin (ei )}; 7 end 8 for i := 1 → k − 1 do 9 for j := i + 1 → k do 10 if dist(ei , ej ) ≤ D then 11 Ii := Ii ∪ {j}; 12 Ij := Ij ∪ {i}; 13 end 14 end 15 end 16 I := ∅; 17 for i := 1 → k do 18 if |Ii | = k then 19 I := I ∪ {i}; 20 end 21 end 22 for i := 1 → k do 23 Ii := (Ii \ I) ∪ {i}; 24 end Algorithmus 3.2 : Indexmengenberechnung der Unterheuristik In einer Initialisierungsphase werden die benötigten Indexmengen, die die Unterheuristik aus Abschnitt 3.2 benötigt, zuerst berechnet. Die Heuristik berechnet dann die kürzesten Wege von allen Quellen zur Senke. Ähnlich wie in Abschnitt 3.1 ist es Ziel ein dynamisches Transshipment von der Form f[P1∗ ,...,P ∗ + ] zu berechnen. Wir beschreiben nun, wie wir die Pfade |S | ∗ P1∗ , . . . , P|S + | ermitteln. Für jeden der Ausgänge e1 , . . . , ek ∈ E (1 ≤ k < n) erstellen wir eine Liste Lk . Die zuvor berechneten Pfade bezeichnen wir mit P1 , . . . , P|S + | und wir fügen sie in die Liste Li ein, wenn sie die Kante (ei , t) enthalten und wir bezeichnen mit L eine Liste, die die Listen L1 , . . . , Lk enthält. Die Pfade P1 , . . . , P|S + | werden wir als Erstpfade bezeichnen. Desweiteren bezeichne sl ∈ S + den Startknoten auf dem Pfad Pl und es sei D := |S + | k . Somit 74 Heuristiken bezeichnet D die durchschnittliche Länge aller Listen. Die Idee ist nun stark frequentierte Ausgänge bzw. Listen mit überdurchschnittlicher Länge zu entlasten. Listen Li mit |Li | > D nennen wir dabei überdurchschnittlich. Sei di := |Li | − D für 1 ≤ i ≤ k. Wir beschreiben nun den Entlastungsvorgang. Sei dazu Lj überdurchschnittlich (also es gilt dj > 0). Beim Entlasten von Lj werden die dj längsten Erstpfade aus Lj entfernt. Sei πj eine Permutation aus der symmetrischen Gruppe S|S + | , so dass die Quellen der aus Lj entfernten Pfade den Knoten sπj (1) , . . . , sπj (dj ) entsprechen. Dann berechnen wir neue alternative sπj (i) -t-Pfade (1 ≤ i ≤ dj ) gemäß der Unterheuristik und fügen sie, wenn sie die Kante (er , t) enthalten, entsprechend in die Liste Lr ein. Die Unterheuristik ist so beschaffen, dass r 6= j gilt, wenn k ≥ 2 gilt. Wir beachten dabei, dass sich die Werte dj für 0 ≤ j ≤ k nicht verändern werden. Nun werden die Flusseinheiten, welche die Knoten sπj (1) , . . . , sπj (dj ) in dem gesuchten Transshipment verlassen sollen über andere Ausgänge zu t geführt. Die Idee dieses Vorgangs, insbesondere die dj längsten Erstpfade aus Lj zu eliminieren, ist die, dass sich die entsprechend neuen alternativen Pfade nur so wenig wie möglich verlängern sollen, d. h. der Ausdruck τ (P̃ ) − τ (P ) für alle zu eliminierenden Pfade P ∈ Lj (P̃ bezeichne den zugehörigen alternativen Pfad), soll möglichst klein sein. Wir nehmen dabei an, dass es häufig der Fall sein wird, dass die meisten Pfade Pπj (i) ((1 ≤ i ≤ dj )) sehr viele Kanten mit den restlichen Pfaden aus Lj gemeinsam haben. Der Grund dieser Annahme ist wieder die Untersuchung der Flugzeuginstanzen. Hier haben die Passagiere nur zwei Möglichkeiten, in welcher Richtung sie den Gang begehen können, um zu einem Ausgang zu gelangen. Da alle Passagiere entlang den Erstpfaden aus Lj zu ej gelangen müssen, werden diese Passagiere in diesen Instanzen den Gang in gleicher Richtung betreten. Die entfernten Pfade haben dort mit den nicht entfernten Erstpfaden einen nicht zu vernachlässigenden Teilpfad gemeinsam. Damit die dj Passagiere diesen nicht mehr benutzen sollen, werden sie durch die Unterheuristik zu einem anderen Ausgang geleitet, so dass der erwähnte Teilpfad vermieden wird. Damit sich die Passagiere, welche in sπj (1) , . . . , sπj (dj ) starten, nicht den restlichen Passagieren, welche über el die Senke erreichen, begegnen sollen, liegt es auf der Hand die dj längsten Erstpfade zu eliminieren. Ferner besteht die Idee nur Erstpfade Lj zu eliminieren darin, dass für jede der Quellen sπ(i) maximal einmal ein alternativer sπ(i) -t-Pfad berechnet werden soll. Wenn wir das nicht verhindern würden, könnte es häufig passieren, dass ein alternativer Pfad zu einem alternativen Pfad wieder einem Erstpfad entspricht und wir somit nichts gewonnen hätten. Den soeben beschriebenen Entlastungsvorgang wenden wir nun auf alle überdurchschnittlichen Listen an. Daher sei o. E. d1 ≥ d2 ≥ . . . ≥ dh > 0 ≥ dh+1 ≥ . . . ≥ dk (ansonsten nummerieren wir die Listen um). Wir wenden diesen Vorgang nacheinander auf L1 , . . . , Lh an. Danach sortieren wie die 3.3 Die Ausgangentlastungs-Heuristik 75 Listen bzgl. ihrer Länge, so dass |Lπ0 (1) | ≥ |Lπ0 (2) | ≥ . . . |Lπ0 (k) | mit einer geeigneten Permutation π 0 gilt. Anschließend sortieren wir alle Pfade bzgl. τ aufsteigend in jeder Liste |Lπ0 (i) | (1 ≤ i ≤ k). Dabei entstehe L∗i durch das Umsortieren der Pfade in Lπ0 (i) . Danach berechnen wir das Transshipment fL∗1 ,...,L∗k so, wie es im Abschnitt 3.1 beschrieben ist. Daher ist es zulässig und genügt der Balancefunktion b, da jede Quelle nur einmal als Startknoten auf einem der Pfade aus L∗1 , . . . , L∗k auftritt. Die Idee der Wahl dieser Reihenfolge der Pfade, welche durch die Sortiervorgänge entsteht und somit den Fluss induziert und insbesondere der Bevorzugung von Pfaden, die in Listen stärker frequentierter Ausgänge enthalten sind, ist die, dass Flusseinheiten, die über stärker frequentierten Ausgänge die Senke t erreichen, so wenig wie möglich in Knoten zwischengespeichert werden sollen. 76 1 2 3 4 5 6 Heuristiken Data : Ein Netzwerk (G, u, τ, S + , t), Ausgangsmenge E = {e1 , . . . , ek } Berechne die Indexmengen I1 , . . . , Ik gemäss der Unterheuristik; initialization; foreach s ∈ S + : do Berechne den kürzesten s-t Weg Ps bzgl. τ ; Bestimme den Ausgang ej über welchen die Senke erreicht wird; Füge Ps in die Pfadliste Lj ein; end + 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 D := |Sk | ; for ej ∈ E: do Sortiere Lj absteigend; Füge Lj in L ein; dj := |Lj | − D; end Sortiere L absteigend; foreach Lj ∈ L: do counter := 0; if dj > 0 then foreach Pi ∈ Lj : do si := Source(Pi ) if umgeleitet(si ) == f alse and counter ≤ dj then A∗ := A \ {(el , t) ∈ A : l ∈ Ij }; G∗ := (V, A∗ ); Pi∗ :=shortestpathG∗ (si , t) bzgl. τ ; Bestimme den Ausgang el mit (el , t) ∈ APi∗ ; Füge Pi∗ in die Pfadliste Ll ein; Lösche Pi aus Lj ; umgeleitet(si ) := true; counter + +; end end end end Sortiere L absteigend; foreach Lj ∈ L: do Sortiere Lj aufsteigend; foreach Pi ∈ Lj : do θ := 0; foreach a ∈ APi : do while f (a, θ) = u(a) do θ + +; end f (a, θ) + +; θ + +; end end end Algorithmus 3.3 : Die Ausgangentlastungs-Heuristik 77 3.4 Die kürzeste Fahrzeit Heuristik Wir analysieren nun die Laufzeit. Die Berechnung der Indexmengen hat eine Laufzeit von O(k(m + n log n) + n2 ). Die Berechnung der Erstpfade,welche wie in der kürzesten Wege Heuristik durchgeführt wird, und das Erzeugen der Listen Lj für (1 ≤ j ≤ k) benötigt O(m + n log n + n · |S + |) an Zeit. Das Sortieren von L kann hier mit Bucketsort erfolgen und benötigt daher O(k + |S + |) an Laufzeit. Danach werden höchstens |S + | viele Alternative Pfade berechnet, deren Berechnung jeweils O(m + n log n) an Zeit benötigt. Das Sortieren von L kostet wieder Linearzeit. Bis hier haben wir bereits O((|S + | + k)(m + n log n) + n2 ) an Laufzeit verbraucht. Dann betrachten wir die äußere Schleife (Zeile 32-44) der eigentlichen Flussberechnung. Sie wird k mal durchlaufen. Jeweils wird in Zeit O(n) eine Liste sortiert. In den k Durchläufen der äußeren Schleife werden aber wieder insgesamt |S + | Flusseinheiten verschickt, so dass wir diesen Teil mit O(n · |S + |2 + k · n) abschätzen können. Insgesamt haben wir O((|S + | + k)m + n((|S + | + k) log n + |S + |2 ) + n2 ). Zusammenfassend haben wir insgesamt folgenden Sachverhalt: Theorem 3.7. Der Algorithmus der Ausgangentlastungs-Heuristik hat eine Laufzeit von O((|S + |+k)m+n((|S + |+k) log n+|S + |2 )+n2 ) und berechnet ein dynamisches b-Transshipment dessen Zeithorizont höchstens n · |S + | beträgt. 3.4 Die kürzeste Fahrzeit Heuristik Diese Heuristik ist eine weitere Modifikation der kürzesten Wege Heuristik. Auch in dieser Heuristik bilden die kürzesten Pfade von den Quellen zu der Senke die Grundlage. Da auch hier wieder die Alternativausgang Unterheuristik benötigt werden wird, werden ganz am Anfang zunächst die Indexmengen I1 , . . . , Ik berechnet. Die Idee, die zu dieser Heuristik führt, ist die, dass man beim Evakuieren den Ausgang wählt, der die geringste Fahrzeit inklusive Wartezeit mit sich bringt. Der kürzeste Weg bzgl. der Entfernung ist i. A. nicht immer der schnellste. Die Modifikation in dieser Heuristik ist anfangs wie bei der Ausgangentlastungs-Heuristik, dass die berechneten Pfade gemäß der Ausgänge differenziert werden, über welche die entsprechenden Flusseinheiten die Senke erreichen. Die Heuristik berechnet daher wieder die kürzesten Wege von allen Quellen zur Senke. Wie in den Heuristiken zuvor werden wir wieder ein dynamisches Transshipment von der Form f[P1∗ ,...,P ∗ + ] berechnen. |S | ∗ Wir beschreiben nun, wie wir die Pfade P1∗ , . . . , P|S + | ermitteln. Für jeden der Ausgänge e1 , . . . , ek ∈ E (1 ≤ k < n) erstellen wir eine Liste Lk . Die zuvor berechneten Pfade fügen wir in die Liste Li ein, wenn sie die Kante (ei , t) enthalten. Die Pfade in den Listen Li (1 ≤ i ≤ k) werden jeweils aufsteigend bzgl. τ sortiert. Dann werden die Listen nacheinander, beginnend mit der Liste, 78 Heuristiken welche die meisten Pfade enthält, untersucht. O. E. sei |Lk | ≥ . . . ≥ |L1 |, wobei |Li | die Länge der Liste Li bezeichnet (1 ≤ i ≤ k), da wir sonst umnummerieren. Ferner nummerieren wir dann die Pfade der Reihe nach (beginnend mit den Pfaden aus Lk ) in der Liste L durch, welche durch Konkatenation von Lk , . . . , L1 entsteht. Somit bezeichnen wir nun die bisher berechneten Pfade mit P1 , . . . , P|S + | und dabei sei si ∈ S + der Startknoten auf dem Pfad Pi für 1 ≤ i ≤ |S + |. Die Idee die Liste mit den meisten Pfaden zuerst zu untersuchen, ist wie in der Ausgangentlastungs-Heuristik, stark frequentierte Ausgänge zu entlasten, indem wir gewisse Pfade durch alternative Pfade ersetzen, welche dann in die Flussberechnung eingehen werden. Die Idee des nachfolgenden Vorgangs ist die, einen Pfad Pi∗ unter Ein∗ beziehung der bisher aktuell berechneten Pfade P1∗ , . . . , Pi−1 bzw. des bis∗ ] zu bestimmen, so dass die Fahrzeit der her berechneten Flusses f[P1∗ ,...,Pi−1 Flusseinheit, welche im Fluss f[P1∗ ,...,Pi∗ ] in si startet und nach t entlang Pi∗ verschickt werden soll, möglichst gering sein soll. Die Flussberechnung beginnt mit dem Fluss f[P1 ] . Dieser ist nach Bemerkung 3.3 zulässig und hat einen Zeithorizont τ (P1 ) + 1. Wir setzen nun P1∗ := P1 . Wir beschreiben nun induktiv, wie wir den Pfad Pi∗ bestimmen, ∗ um f[P1∗ ,...,Pi∗ ] zu berechnen, wenn die Pfade P1∗ , . . . , Pi−1 bekannt sind und ∗ ] bekannt ist. Zunächst berechnen wir einen somit auch der Fluss f[P1∗ ,...,Pi−1 alternativen si -t-Pfad P̃i gemäß der Unterheuristik in Abschnitt 3.2. Dann ∗ ,P ] und g̃ := f ∗ berechnen wir g := f[P1∗ ,...,Pi−1 i [P ,...,P ∗ ,P̃i ] . Dabei seien die 1 i−1 Zahlen ∆ij diejenigen, die in der wiederholten Anwendung der Formel (*) aus Abschnitt 3.1 entstehen (1 ≤ j ≤ |APi |). Wenn a = (v, w) die j-te Kante auf dem Pfad Pi ist, bezeichnet ∆ij die Dauer der Flussspeicherung des Flusses g im Knoten v. Falls gemäss g in v kein Fluss gespeichert wird, gilt ∆ij = 0. Analog bezeichnen wir mit ∆˜i die Dauer der Flussspeicherung im Knoten j ṽ, wenn ã = (ṽ, w̃) die j-te Kante auf P̃i ist, wenn wir Formel (*) wie in Abschnitt 3.1 wiederholt anwenden. Wir vergleichen nun die Fahrzeiten, welche die Flusseinheit, die in si starten muss, bzgl. des Flusses g und g̃ hat. P|Pi | i P|P̃i | ˜i Sie beträgt Ti = τ (Pi ) + j=1 ∆j + 1 bei g und T̃i = τ (P̃i ) + j=1 ∆j + 1 ∗ bei g̃. Gilt Ti ≤ T̃i setzen wir Pi = Pi und erhalten dadurch f[P1∗ ,...,Pi∗ ] = g. Andernfalls setzen wir Pi∗ = P̃i und erhalten damit f[P1∗ ,...,Pi∗ ] = g̃. ∗ Auf diese Weise erhalten wir die Pfade P1∗ , . . . , P|S + | und dadurch den Fluss f[P1∗ ,...,P ∗ + ] , welcher unser gesuchtes Transshipment ist. Dieses ist |S | zulässig, da es wie in Abschnitt 3.1 konstruiert wurde und es ist ein bTransshipment, da auch hier jede Quelle konstruktionsbedingt nur einmal ∗ als Startknoten auf einem der Pfade P1∗ , . . . , P|S + | erscheint. 3.4 Die kürzeste Fahrzeit Heuristik 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Data : Ein Netzwerk (G, u, τ, S + , t), Ausgangsmenge E = {e1 , . . . , ek } Berechne die Indexmengen I1 , . . . , Ik gemäss der Unterheuristik; foreach s ∈ S + : do Berechne den kürzesten s-t Weg Ps bzgl. τ ; Bestimme den Ausgang ej , über welchen die Senke erreicht wird; Füge Ps in die Pfadliste Lj ein; end for ej ∈ E: do Sortiere Lj aufsteigend; Füge Lj in L ein; end Sortiere L absteigend; foreach Lj ∈ L: do foreach Pi ∈ Lj : do si := Source(Pi ); A∗ := V \ {(el , t) : l ∈ Ij }; G̃ := (V, A∗ ); P̃i := shortestpathG̃ (si , t) bzgl. τ ; f 0 := f ; θ := 0; foreach a ∈ APi : do while f 0 (a, θ) = u(a) do θ + +; end f 0 (e, θ) + +; θ + +; end f˜ := f ; θ̃ := 0; foreach a ∈ AP̃i : do while f˜(a, θ) = u(a) do θ̃ + +; end f˜(e, θ̃) + +; θ̃ + +; end if θ ≤ θ̃ then f := f 0 ; else f := f˜; end end end Algorithmus 3.4 : Die Kürzeste Fahrzeit Heuristik 79 80 Heuristiken Betrachten wir die Laufzeit dieser Heuristik. Am Anfang werden wieder die Indexmenge, welche die verwendete Unterheuristik benötigt, in Zeit O(k(m + n log n) + n2 ) berechnet. Die Berechnung der kürzesten Pfade und das Erzeugen der Listen Lj (1 ≤ j ≤ k) benötigt wie in den vorigen Heuristiken eine Laufzeit von O(m + n log n + n · |S + |). Das Sortieren der k Listen Lj und das Erzeugen von L benötigt O(n · k) Zeit. Das Sortieren der Liste L benötigt eine Laufzeit von O(k + |S + |). Danach wird in einer Schleife (Zeile 11-41) insgesamt |S + | mal der Fluss f aktualisiert. Dazu muss für jede Quelle si ∈ |S + | ein alternativer Pfad bestimmt werden, was O(m + n log n) an Laufzeit kostet. Die Schleifen, die jeweils die Kanten aus dem Erstpfad (Zeile 19-25)und dem Alternativpfad (Zeile 28-34) betrachten, benötigen jeweils maximal |S + | Iterationen pro Kante. Damit benötigt das Aktualisieren von f insgesamt O(|S + |(m+n log n+n|S + |)) an Laufzeit. Insgesamt hat diese Heuristik daher eine Laufzeit von O((|S + |+k)m+n((|S + |+k) log n+|S + |2 )+n2 ). Auch hier sehen wir ohne Schwierigkeiten, dass folgende Aussage zutrifft. Theorem 3.8. Dieser Algorithmus der kürzesten Fahrzeit Heuristik hat eine Laufzeit von O((|S + | + k)m + n((|S + | + k) log n + |S + |2 ) + n2 ) und berechnet ein zulässiges b-Transshipment mit einem Zeithorizont von höchstens n|S + |. 3.5 Ein kleines Beispiel Um die Arbeitsweise der Heuristiken etwas anschaulicher zu gestalten, stellen wir im Folgenden eine kleine Netzwerkinstanz vor und werden anhand dieses Netzwerkes die Heuristiken anwenden. 4 3 13 2 1 11 8 9 12 7 6 5 0 17 14 15 16 18 10 Abbildung 3.3: Der Graph der kleinen Netzwerkinstanz 81 3.5 Ein kleines Beispiel Wir betrachten das Netzwerk N = (G, u, τ, S + , t) mit V = {0, . . . , 18} und A = {(4, 2), (3, 1), (5, 7), (0, 6), (2, 8), (7, 8), (1, 9), (6, 9), (8, 9), (9, 8), (8, 11), (11, 12), (11, 13), (9, 14), (14, 15), (15, 16), (16, 17), (16, 18), (13, 10), (12, 10), (17, 10), (18, 10)}. In Abbildung 3.3 sehen wir eine Visualisierung des Graphen G. Weiterhin sei S + = {0, 1, 2, 3, 4, 5, 6, 7} und t = 10. Die Menge E der Ausgänge ist dadurch mit E = {12, 13, 17, 18} festgelegt. Die Kapazitäten, Knotenbalancen und Fahrzeiten sind wie in der Generalvoraussetzung, welche am Anfang dieses Kapitels festgelegt wurde, definiert. Wir betrachten zunächst die Pfadzerlegung eines Earliest Arrival Transshipments. Darauffolgend berechnen wir nacheinander, basierend auf der jeweiligen Heuristik, ein Transshipment. Für i ∈ S + sei Pi ein kürzester i-10-Pfad. Wir führen ferner folgende Notation zur Beschreibung eines Transshipments ein. Für Kanten ar ∈ A (1 ≤ r) schreiben wir i → [a1 , j1 ] → [a2 , j2 ] → . . . → [al , jl ] um hervorzuheben, dass in dem zu beschreibenden Transshipment zu den Zeitpunkten 0 ≤ j1 ≤ j2 ≤ . . . ≤ jl die Flusseinheit, welche im Knoten i gestartet ist, die Kante ar zum Zeitpunkt jr für alle 1 ≤ r ≤ l betritt. 3.5.1 Eine Pfadzerlegung eines Earliest Arrival Transshipments Wir beschreiben nun pfadweise ein Earliest Arrival Transshipment, welches einen Zeithorizont von 8 besitzt, mit Hilfe der soeben eingeführten Notation. Das Transshipment und die Pfadzerlegung haben wir mittels einer Implementation von Algorithmus 2.4 berechnet. Für Implementationsdetails verweisen wir auf den Abschnitt 3.6. 7 →[(7, 8), 0]→[(8, 11), 1]→[(11, 13), 2]→[(13, 10), 3] 2 →[(2, 8), 1]→[(8, 11), 2]→[(11, 13), 3]→[(13, 10), 4] 3 →[(3, 1), 0]→[(1, 9), 1] →[(9, 8), 2] →[(8, 11), 3] →[(11, 13), 4] → [(13, 10), 5] 1 →[(1, 9), 0]→[(9, 14), 1]→[(14, 15), 2]→[(15, 16), 3]→[(16, 17), 4] → [(17, 10), 5] 5 →[(5, 7), 2]→[(7, 8), 3] →[(8, 11), 4] →[(11, 13), 5]→[(13, 10), 6] 6 →[(6, 9), 1]→[(9, 14), 2]→[(14, 15), 3]→[(15, 16), 4]→[(16, 17), 5] → [(17, 10), 6] 4 →[(4, 2), 2]→[(2, 8), 4] →[(8, 11), 5] →[(11, 13), 6]→[(13, 10), 7] 0 →[(0, 6), 0]→[(6, 9), 2] →[(9, 14), 3] →[(14, 15), 4]→[(15, 16), 5] → [(16, 17), 6] → [(17, 10), 7] An dieser speziellen Pfadzerlegung des berechneten Earliest Arrival Transshipments fällt auf, dass nicht alle i-10-Pfade mit i ∈ S + kürzeste i-10Pfade sind. Die Flusseinheiten, die in 1, 6 und 0 starten, erreichen die Senke 82 Heuristiken 10 über längere Pfade. Weiterhin kann man erkennen, dass die Kapazitätsbedingungen auf den Kanten eingehalten eingehalten werden, da jedes Tupel [a, j] in der obigen Zerlegung höchstens einmal vorkommt. Würde ein Tupel [a, j] existieren, welches zweimal vorkommt, so würde es zwei Flusseinheiten geben, die in unterschiedlichen Quellen gestartet sind und zum Zeitpunkt j die Kante a betreten. Da wegen der Generalvoraussetzung u(a) = 1 gilt, wäre somit die Kapazitätsbedingung verletzt, da höchstens eine Flusseinheit zum Zeitpunkt j die Kante a betreten darf. Wir erläutern kurz die Notation anhand der Flusseinheit, welche in Knoten 4 startet. Da diese erst zum Zeitpunkt 2 die Kante (4, 2) betritt, erfolgt offensichtlich Flussspeicherung im Knoten 4. Zum Zeitpunkt 3 wird die Kante (2, 8) von der Flusseinheit, welche in Knoten 4 gestartet ist, nicht betreten. Dies erfolgt erst zum Zeitpunkt 4. Somit erfolgt auch im Knoten 2 Flussspeicherung. Zum Zeitpunkt 5 betritt sie die Kante (8, 11), zum Zeitpunkt 6 betritt sie die Kante (11, 13) und zum Zeitpunkt 7 betritt sie die Kante (13, 10). Nach einer weiteren Zeiteinheit (wegen τ ((11, 13)) = 1), verlässt sie das Netzwerk. 3.5.2 Anwendung der kürzesten Wege Heuristik Die kürzeste Wege Heuristik berechnet zunächst kürzeste Pfade von allen Knoten aus i ∈ S + zu der Senke 10. Die kürzesten Pfade Pi beschreiben wir nur durch Angabe der Knotenmenge VPi da in diesem Beispiel klar ist wie dann die Menge APi beschaffen sein muss. Die Heuristik kann z. B. folgende Mengen ermitteln: VP0 = {0, 6, 9, 8, 11, 12, 10} VP1 = {1, 9, 8, 11, 12, 10} VP2 = {2, 8, 11, 12, 10} VP3 = {3, 1, 9, 8, 11, 12, 10} VP4 = {4, 2, 8, 11, 12, 10} VP5 = {5, 7, 8, 11, 12, 10} VP6 = {6, 9, 8, 11, 12, 10} VP7 = {7, 8, 11, 12, 10} Nun erstellen wir die Liste L bestehend aus den Pfaden P0 , . . . , P7 . Diese Sortieren wir aufsteigend nach der Länge der Pfade. Danach haben wir L = [P7 , P2 , P6 , P4 , P1 , P5 , P3 , P0 ]. Wir beschreiben nun mittels unserer speziellen Notation wie wir das Transshipment schrittweise bestimmen. Wir beginnen mit P7 und berechnen f[P7 ] . Beschrieben wird es durch: 7 → [(7, 8), 0] → [(8, 11), 1] → [(11, 12), 2] → [(12, 10), 3]. Wir berechnen nun f[P7 ,P2 ] und versuchen nun dabei die Flusseinheit zu 3.5 Ein kleines Beispiel 83 verschicken, welche in Knoten 2 startet. Diese kann die Kante (2, 8) zum Zeitpunkt 0 betreten. Die Kante (8, 11) kann sie nicht zum Zeitpunkt 1 betreten, da die Kante zu diesem Zeitpunkt von der Flusseinheit, die im Knoten 7 gestartet ist, bereits betreten wird. Daher wird die Flusseinheit für eine Zeiteinheit im Knoten 8 zwischengespeichert und betritt die Kante (8, 11) zum Zeitpunkt 2. Danach kann die Flusseinheit die Kante (11, 12) zum Zeitpunkt 3 und die Kante (12, 10) zum Zeitpunkt 4 betreten. Der berechnete Fluss wird zusätzlich mit 7 → . . . und der Folgenden Notation beschrieben: 2 → [(2, 8), 0] → [(8, 11), 2] → [(11, 12), 3] → [(12, 10), 4]. Bis zu dieser Stelle haben wir durch die Notation den Fluss f[P7 ,P2 ] beschrieben. Wir untersuchen nun den Pfad P6 . Die Flusseinheit, welche in 6 startet, kann zum Zeitpunkt 0 die Kante (6, 9) und zum Zeitpunkt 1 die Kante (9, 8) betreten. Um Kapazitätsverletzung zu vermeiden kann sie die Kante (8, 11) erst zum Zeitpunkt 3 betreten. Danach ist keine Flussspeicherung in einem Zwischenknoten mehr erforderlich. Wir haben dann: 6 → [(6, 9), 0] → [(9, 8), 1] → [(8, 11), 3] → [(11, 12), 4] → [(12, 10), 5]. Die Flusseinheit die in 4 startet, kann die Kante (4, 2) zum Zeitpunkt 0 betreten, da die Kante dann noch von keiner andere Flusseinheit betreten wird. Zum Zeitpunkt 1 kann sie die Kante (2, 8) betreten. Nun muss die Flusseinheit bis zum Zeitpunkt 4 warten, bis sie die Kante (8, 11) betreten kann. Wir haben: 4 → [(4, 2), 0] → [(2, 8), 1] → [(8, 11), 4] → [(11, 12), 5] → [(12, 10), 6]. Die Flusseinheit, welche entlang P1 verschickt wird, kann zwar zum Zeitpunkt 0 die Kante (1, 9) aber erst zum Zeitpunkt 2 die Kante (9, 8) betreten. Danach muss sie die Kante (8, 11) passieren, was aber frühestens zum Zeitpunkt 5 möglich ist. Deswegen wird diese Flusseinheit in Knoten 8 ebenfalls zwischengespeichert. Danach ist in den weiteren Knoten des Pfades keine Flussspeicherung mehr erforderlich. Wir haben: 1 → [(1, 9), 0] → [(9, 8), 2] → [(8, 11), 5] → [(11, 12), 6] → [(12, 10), 7]. Entlang des Pfades P5 kann die in Knoten 5 startende Flusseinheit die Kante (5, 7) zum Zeitpunkt 0 und die Kante (7, 8) zum Zeitpunkt 1 betreten. Die die Kante (8, 11) frühestens zum Zeitpunkt 6 zu Verfügung steht, muss diese Flusseinheit zunächst auch im Knoten 8 zwischengespeichert werden. Danach, bis zum erreichen der Senke 10 ist keine Flussspeicherung dieser Flusseinheit in einem Zwischenknoten erforderlich. Wir haben weiter: 5 → [(5, 7), 0] → [(7, 8), 1] → [(8, 11), 6] → [(11, 12), 7] → [(12, 10), 8]. Wir verschicken nun die Flusseinheit, welche in 3 startet. Sie kann zwar zum Zeitpunkt 0 die Kante (3, 1) und zum Zeitpunkt 1 die Kante (1, 9) betreten, aber sie muss (wegen P1 ) bis zum Zeitpunkt 3 warten, bis sie die Kante (9, 8) betreten darf. Dann muss sie (wegen P4 , P1 und P5 ) bis zum Zeitpunkt 7 warten, bis sie die Kante (8, 11) betreten kann. Danach kann sie alle weiteren Kanten so früh wie möglich betreten. Wir haben: 3 → [(3, 1), 0] → [(1, 9), 1] → [(9, 8), 3] → [(8, 11), 7] → [(11, 12), 8] → 84 Heuristiken [(12, 10), 9]. Die letzte Flusseinheit, des letzten Pfades, welcher nun untersucht wird, kann die Kanten (0, 6) zum Zeitpunkt 0 und die Kante (6, 9) zum Zeitpunkt 1 betreten. Die Kante (9, 8) kann sie frühestens zum Zeitpunkt 4 und die Kante (8, 11) frühestens zum Zeitpunkt 8 betreten. Die weiteren Kanten betritt sie nacheinander zum Zeitpunkt 9, 10 und 11. Schließlich haben wir: 0 → [(0, 6), 0] → [(6, 9), 1] → [(9, 8), 4] → [(8, 11), 8] → [(11, 12), 8] → [(12, 10), 10]. Somit haben wir vollständig mit Hilfe unserer Notation die Pfadzerlegung von fL und somit fL selbst beschrieben, da genau durch jedes Tupel [a, j], welches in unserer Notation aufgeführt wurde, die Beziehung fL (a, j) = 1 induziert wird. Dieses Transshipment besitzt den Zeithorizont 11. 3.5.3 Anwendung der Ausgangentlastungs-Heuristik Wie wir im vorigen Unterabschnitt des Beispiels gesehen haben, haben alle Flusseinheiten die Senke über den gleichen Ausgang erreicht. Dadurch gab es viele Zwischenknoten (z. B. Knoten 8) auf dem Weg zur Senke, auf denen sich der Fluss gestaut hatte. Geschickter ist es, wenn, wie in dem Earliest Arrival Transshipment, nicht alle Flusseinheiten über den gleichen Ausgang die Senke erreichen. Diese Idee verfolgt die Ausgangentlastungs-Heuristik. Sie versucht nun die Anzahl der Flusseinheiten, welche überdurchschnittliche Ausgänge (vgl. Abschnitt 3.3) erreichen, zu reduzieren, indem alternative Pfade verwendet werden. Zuvor müssen wir noch unsere Unterheuristik verwenden, um gezielt bei der Berechnung der alternativen Pfade, Ausgänge verbieten zu können. Die Unterheuristik und die Berechnung der Indexmengen. Wir indizieren nun die Ausgänge indem wir e1 = 12, e2 = 13, e3 = 17 und e4 = 18 setzen. Wir berechnen für jeden Ausgang ej (j = 1, . . . , 4) nun eine Menge von anderen Ausgängen, welche im Falle von Vermeidung von ej ebenfalls vermieden werden müssen. Wir stellen fest, dass im G[V \ {t}] zugrundeliegenden ungerichteten Graphen G0 die Ausgänge e1 und e2 den Abstand zwei haben. Diese Beziehung gilt auch zwischen den Ausgängen e3 und e4 . Längere sowie kürzere Abstände treten als kürzester Abstand zwischen zwei Ausgängen nicht auf. Somit setzen wir Ij := {i ∈ {1, 2, 3, 4} : distG0 (ei , ej ) ≤ 2}. Somit erhalten wir I1 = I2 = {1, 2} und I3 = I4 = {3, 4}. Um Erstpfade Pi , welche den Ausgang 12 verwenden, durch alternative Pfade P̃i ersetzen zu können, müssen wir diese alternativen Pfade zuvor durch kürzeste Pfad-Berechnungen auf G∗ = (V, E \ {(12, 10), (13, 10)}) gewinnen. Die Entlastungsphase. Zunächst bestimmt die Heuristik die Erstpfade. Als diese könnten wieder P0 , . . . , P7 , wie im vorigen Unterabschnitt, 3.5 Ein kleines Beispiel 85 berechnet werden. Nun erfolgt eine Zuordnung der Pfade zu Listen, welche wiederum einem Ausgang zugeordnet sind. Da alle Erstpfade die Kante (e1 , 10) enthalten, setzen wir L1 = [P0 , . . . , P7 ]. Die Listen L2 , L3 und L4 bleiben zunächst leer. Nach Sortieren (absteigend bzgl. τ ) haben wir L1 = [P0 , P3 , P5 , P1 , P4 , P6 , P2 , P7 ]. Da wir 8 Flusseinheiten verschicken müssen und vier Ausgänge haben, ist ein Ausgang hier überdurchschnittlich, wenn mehr als zwei Flusseinheiten ihn über die Erstpfade erreichen. Dies trifft nur auf den Ausgang e1 = 12 zu. Die Heuristik verteilt nun 6 Flusseinheiten auf andere Ausgänge um, wo dabei durch die Unterheuristik der Ausgang 13 ausscheidet. Sie berechnet nun für die längsten sechs Erstpfade, d. h. für die ersten sechs Pfade aus L1 alternative Pfade. Diese beschreiben wir wieder nur durch Nennung der Knotenmengen: VP˜0 = {0, 6, 9, 14, 15, 16, 17, 10} VP˜3 = {3, 1, 9, 14, 15, 16, 17, 10} VP˜5 = {5, 7, 8, 9, 14, 15, 16, 17, 10} VP˜1 = {1, 9, 14, 15, 16, 17, 10} VP˜4 = {4, 2, 8, 9, 14, 15, 16, 17, 10} VP˜6 = {6, 9, 14, 15, 16, 17, 10} Nach Entlastung des Ausganges 12 haben wir nun L1 = [P2 , P7 ] und L3 = [P˜0 , P˜3 , P˜5 , P˜1 , P˜4 , P˜6 ]. Da L3 keine Erstpfade enthält wird L3 nicht entlastet. Die verbliebenen Listen bleiben leer. Erreicht haben wir bis jetzt, dass sich die Summe der Mehr- bzw. Minderauslastung der Ausgänge bezogen auf die gewünschte Durchschnittsauslastung verringert hat, d. h. der Ausdruck ||L1 | − 2| + ||L2 | − 2| + ||L3 | − 2| + ||L4 | − 2| hat sich im Vergleich zu dem Zeitpunkt vor der Entlastungsphase verkleinert. Die Flussberechnung. Wir werden mit den Pfaden die Flussberechnung starten, welche zusammen die Liste mit den meisten Pfaden repräsentieren. In diesem Fall beginnen wir mit den Pfaden aus L3 . Genauer beginnen wir die Berechnung mit den Pfaden aus L3 , welche am kürzesten sind. Hierzu sortieren wir bzgl. der Pfadlänge diese Liste noch einmal (diesmal aufsteigend bzgl. τ ) und erhalten L3 = [P˜6 , P˜1 , P˜0 , P˜3 , P˜5 , P˜4 ]. Wir berechnen nun fL3 . Dies geschieht analog wie im Unterabschnitt 3.5.2. Wir beschreiben daher fL3 direkt mit unserer speziellen Notation. 86 Heuristiken 6 →[(6, 9), 0]→[(9, 14), 1]→[(14, 15), 2]→[(15, 16), 3]→[(16, 17), 4]→[(17, 10), 5] 1 →[(1, 9), 0]→[(9, 14), 2]→[(14, 15), 3]→[(15, 16), 4]→[(16, 17), 5]→[(17, 10), 6] 0 →[(0, 6), 0]→[(6, 9), 1] →[(9, 14), 3] →[(14, 15), 4]→[(15, 16), 5]→[(16, 17), 6]→[(17, 10), 7] 3 →[(3, 1), 0]→[(1, 9), 1] →[(9, 14), 4] →[(14, 15), 5]→[(15, 16), 6]→[(16, 17), 7]→[(17, 10), 8] 5 →[(5, 7), 0]→[(7, 8), 1] →[(8, 9), 2] →[(9, 14), 5] →[(14, 15), 6]→[(15, 16), 7]→[(16, 17), 8] 4 →[(4, 2), 0]→[(2, 8), 1] →[(8, 9), 3] →[(9, 14), 6] →[(14, 15), 7]→[(15, 16), 8]→[(16, 17), 9] →[(17, 10), 9] →[(17, 10), 10] Danach untersucht die Heuristik, nach dem Umsortieren von L1 , nacheinander die Pfade P2 und P7 und verschickt die verbliebenen zwei Flusseinheiten. Wir haben weiter: 2 →[(2, 8), 0]→[(8, 11), 1]→[(11, 12), 2]→[(12, 10), 3] 7 →[(7, 8), 0]→[(8, 11), 2]→[(11, 12), 3]→[(12, 10), 4] Insgesamt haben wir durch die obige Notation das Transshipment fL3 ,L1 beschrieben, welches die Ausgangentlastungs-Heuristik ermittelt hat bzw. haben könnte (Je nach Implementation der Datenstrukturen könnte das Ergebnis auch anders ausfallen, da z. B. auch Pfade als Erstpfade möglich wären, in welchen statt der Kante (12, 10) die Kante (13, 10) enthalten wäre). Dieses Transshipment besitzt offensichtlich den Zeithorizont 11. 3.5.4 Anwendung der kürzesten Fahrzeit Heuristik In diesem Unterabschnitt wenden wir nun die kürzeste Fahrzeit Heuristik auf unsere kleine Netzwerkinstanz an. Wie bei der Ausgangentlastungs-Heuristik würde an dieser Stelle zuerst die Berechnung der Indexmengen erfolgen. Da wir dies bereits im vorigen Abschnitt getan haben, übernehmen wir diese Berechnung. Ebenso können wir annehmen, dass diese Heuristik wieder die Pfade P0 , . . . P7 als Erstpfade ermittelt hat. Weiterhin werden wir für jeden Pfad auch einen Alternativpfad bestimmen. Wir beginnen nun mit der Flussberechnung, indem wir den kürzesten Erstpfad zuerst untersuchen. Wir untersuchen nacheinander die Pfade P7 , P2 , P6 , P4 , P1 , P5 , P3 , P0 und ermitteln die Pfade P7∗ , P2∗ , P6∗ , P4∗ , P1∗ , P5∗ , P3∗ , P0∗ . Als ein Pfad Pi∗ kommt entweder der Erstpfad Pi oder ein Alternativpfad P̃i in Frage, welche die Heuristik jeweils berechnet. Wir beschreiben nun im Folgenden mit Hilfe unserer Notation in Fettschrift das zu berechnende Transshipment f[P7∗ ,P2∗ ,P6∗ ,P4∗ ,P1∗ ,P5∗ ,P3∗ ,P0∗ ] . 87 3.5 Ein kleines Beispiel Dazwischen beschreiben wir in Normalschrift die Pfade, welche die Heuristik im Verlaufe der Berechnung verworfen hat. Danach verdeutlichen wir anhand einiger Beispielpfade wieso sich die Heuristik für die mit Fettschrift beschriebenen Pfade entschieden hat. Desweiteren beachten wir, dass in der nun folgenden Beschreibung Alternativpfade, welche die Heuristik berechnet, anhand der enthaltenden Kante (17, 10) zu erkennen sind. Andernfalls handelt es sich um die berechneten Erstpfade. 7 →[(7, 8), 0]→[(8, 11), 1]→[(11, 12), 2]→[(12, 10), 3] 7 →[(7, 8), 0] →[(8, 9), 1] →[(9, 14), 2] →[(14, 15), 3] →[(15, 16), 4] →[(16, 17), 5] →[(17, 10), 6] 2 →[(2, 8), 0]→[(8, 11), 2]→[(11, 12), 3]→[(12, 10), 4] 2 →[(2, 8), 0] →[(8, 9), 1] →[(9, 14), 2] →[(14, 15), 3] →[(15, 16), 4] →[(16, 17), 5] →[(17, 10), 6] 6 →[(6, 9), 0] →[(9, 8), 1] →[(8, 11), 3] →[(11, 12), 4] →[(12, 10), 5] 6 →[(6, 9), 0]→[(9, 14), 1]→[(14, 15), 2]→[(15, 16), 3]→[(16, 17), 4]→[(17, 10), 5] 4 →[(4, 2), 0]→[(2, 8), 1] →[(8, 11), 3] →[(11, 12), 4]→[(12, 10), 5] 4 →[(4, 2), 0] →[(2, 8), 1] →[(8, 9), 2] →[(9, 14), 3] →[(14, 15), 4] →[(15, 16), 5] →[(16, 17), 6] →[(17, 10), 7] 1 →[(1, 9), 0] →[(9, 8), 1] →[(8, 11), 4] →[(11, 12), 5] →[(12, 10), 6] 1 →[(1, 9), 0]→[(9, 14), 2]→[(14, 15), 3]→[(15, 16), 4]→[(16, 17), 5]→[(17, 10), 6] 5 →[(5, 7), 0]→[(7, 8), 1] →[(8, 11), 4] →[(11, 12), 5]→[(12, 10), 6] 5 →[(5, 7), 0] →[(7, 8), 1] →[(8, 9), 2] →[(9, 14), 3] →[(14, 15), 4] →[(15, 16), 5] →[(16, 17), 6] →[(17, 10), 7] 3 →[(3, 1), 0] →[(1, 9), 1] →[(9, 8), 2] →[(8, 11), 5] →[(11, 12), 6] →[(12, 10), 7] 3 →[(3, 1), 0]→[(1, 9), 1] →[(9, 14), 3] →[(14, 15), 4]→[(15, 16), 5]→[(16, 17), 6] →[(17, 10), 7] 0 →[(0, 6), 0]→[(6, 9), 1] →[(9, 8), 2] →[(8, 11), 5] →[(11, 12), 6]→[(12, 10), 7] 0 →[(0, 6), 0] →[(6, 9), 1] →[(9, 14), 4] →[(14, 15), 5] →[(15, 16), 6] →[(16, 17), 7] →[(17, 10), 8] Wie oben erwähnt, wurden die in der Normalschrift aufgeführten Pfade von der Heuristik verworfen. Wir erläutern die Gründe für das Verwerfen am Beispiel der Flusseinheit die im Knoten 7 starten muss und am Beispiel 88 Heuristiken der Flusseinheit, welche im Knoten 6 starten muss. Im ersten Falle wählt die Heuristik den Erstpfad aus (d. h. sie setzt P7∗ = P7 ), da die Fahrzeit für diese Flusseinheit im Fluss f[P7 ] (beschrieben durch 7 → . . .) geringer ausfällt, als wenn sie im Fluss f[P̃7 ] (beschrieben durch 7 → . . .) entlang des berechneten Alternativpfades verschickt worden wäre. Im zweiten Falle wählt die Heuristik den Alternativpfad aus (P6∗ = P̃6 ), da im Fluss f[P ∗ ,P ∗ ,P̃6 ] (beschrieben durch 7 → . . ., 2 → . . . und 6 → . . .) die 7 2 Fahrzeit der Flusseinheit, die im Knoten 6 startet im Fluss f[P7∗ ,P2∗ ,P6 ] (beschrieben durch 7 → . . ., 2 → . . . und 6 → . . .) der Fahrzeit der Flusseinheit, welche dort im Knoten 6 startet, gleicht. Im Falle der Gleichheit verwirft die Heuristik immer der Erstpfad. Erst recht wird dieser verworfen, wenn die Fahrtzeit über den selbigen größer wäre. Wenn wir das Arrival Pattern des durch die Notation in Fettschrift beschriebenen Flusses mit dem Earliest Arrival Pattern vergleichen, so erkennen wir, dass beide gleich sind. In diesem Fall hat die Heuristik ebenfalls ein Earliest Arrival Transshipment mit Zeithorizont 8 berechnet. 3.6 Die Heuristiken in der Praxis In diesem Abschnitt untersuchen wir einige Instanzen des Earliest Transshipment Problems. Als Grundlage dazu dienen uns Sitzplatzbelegungspläne die wir unter der Internetadresse http://www.seatguru.com1 finden können. Anhand dieser Sitzpläne wurden mit Hilfe des Grapheneditors GraphWindow von LEDA ganzzahlige Netzwerke angefertigt. LEDA ist eine Sammlung effizienter C++ Bibliotheken, welche uns neben effizienten Datenstrukturen uns auch effiziente Algorithmen, wie z. B. die Minimalkostenflussberechnung, zur Verfügung stellt. (Für weitere Informationen zu LEDA siehe http://www.algorithmic-solutions.com/) Die konstruierten Netzwerke entsprechen unserer Generalvoraussetzung, d. h. wir nehmen an, dass jede Flusseinheit genau eine Zeiteinheit benötigt um von einem Knoten zu einem adjazenten Knoten zu gelangen. Übertragen auf unsere Flugzeuge bedeutet dies, dass wir optimistisch annehmen, dass jeder Fluggast eine konstante Gehgeschwindigkeit hat. Da dies im Notfall sehr realitätsfern sein kann, können wir das Earliest Arrival Pattern eines Earliest Arrival Transshipments bzgl. solcher Flugzeuginstanzen zu jedem Zeitpunkt θ nur als obere Schranke der Passagierzahlen, welche bis zum Zeitpunkt θ das Flugzeug hätten verlassen können, ansehen. Daher ist der kleinste Zeithorizont, bzgl. dessen ein Earliest Arrival Transshipment existiert als untere Zeitschranke zu werten, ab welcher es möglich ist, dass alle Passagiere das Flugzeug verlassen haben können. Eine weitere Eigenschaft unserer Netzwerke ist, wie in den Generalvoraussetzung zu diesem Kapitel, dass die Kantenkapazitäten konstant einheitlich sind. 1 Diese Seite existierte zuletzt am 13.10.2007. 3.6 Die Heuristiken in der Praxis 89 Zu diesen Instanzen betrachten wir jeweils vier Algorithmen, die wir mit der Programmiersprache C++ (GCC Compiler 3.4.6) und LEDA 5.0.1 implementiert haben. Die vier Implementationen sind Implementationen (1) des exakten Earliest Transshipment Algorithmus (vgl. Algo. 2.4), (2) der kürzesten Wege Heuristik, (3) der Ausgangentlastungs-Heuristik, (4) und der kürzesten Fahrzeit Heuristik. Da bis zum heutigen Zeitpunkt keine praktikabel umzusetzenden exakten Algorithmen existieren, haben wir uns entschieden, den exakten Algorithmus 2.4 inklusive der Netzwerkmodifikationen zu implementieren. Wir betonen noch einmal, dass der exakte Algorithmus zeitexpandierte Netzwerke erzeugt, aber polynomiell auf unseren speziellen Flugzeuginstanzen arbeitet, da die Zeithorizonte, welche wir hier verwenden, sich durch ein Polynom in n abschätzen lassen. Trotzdem ist das zeitexpandierte Netzwerk um einen Faktor O(n) größer als das Ausgangsnetzwerk, was sich bei gewissen Instanzen auch in der absoluten Rechenzeit widerspiegelt. Sämtliche Instanzen wurden auf einem PC mit einer 64-bit AMD Opteron CPU mit 2,6 GHz und 8 GibiByte RAM berechnet. Als Betriebssystem wurde Suse Linux 10.2 mit dem Kernel 2.6.18-0.5-default verwendet. Weiterhin ist es sehr wichtig zu erwähnen, dass wir die Optionen -O0 -NDEBUG beim kompilieren mit GCC verwendet haben. Die vorgesehene Option -O3 führte im Vergleich zur Verwendung von -O0 bei den Heuristiken und unverändertem Programmcode immer zu einem anderen (falschen) Ergebnis. Daher haben wir alle Algorithmen mit der Option -O0 kompiliert, um so die Laufzeiten besser in Vergleich setzen zu können. Zu den Flugzeugtypen, die den betrachteten Instanzen zugrunde liegen, gehören die Flugzeuge Bombardier Q400 (70 Sitzplätze), Airbus A330 (222 Sitzplätze), Boeing 747-400 (427 Sitzplätze)und das Flugzeug Airbus 380 (537 Sitzplätze). Diese Instanzen werden werden wir kurz jeweils mit Q400, A330, B747 und A380 bezeichnen. Desweiteren haben wir zusätzlich eine modifizierte A380 Instanz betrachtet, welche auf der A380 Instanz basiert, aber in der ersten Etage mehr Sitzplätze beinhaltet. Diese spezielle Instanz bezeichnen wir mit A380+ und sie verfügt über 972 Sitzplätze. Da es in Zukunft Airbus A380 Maschinen mit über 900 Passagieren geben soll, haben wir diese Instanz betrachtet. Da uns aber kein spezieller Sitzplan zur Verfügung stand, haben wir die erste Etage des Sitzplanes des A380, welcher 537 Passagiere aufnehmen kann, ausgebaut. Alle Algorithmen sind so implementiert, dass sie neben des Netzwerkes einen Zeithorizont erwarten. Da es eine Richtlinie der U. S. Luftfahrtbehörde (FAA) gibt, welche besagt, dass ein Flugzeug in 90 Sekunden evakuierbar 90 Heuristiken sein muss, haben wir uns entschieden diese Instanzen jeweils mit einem Zeithorizont von 90 zu untersuchen. Als Ausgabe haben die Implementationen das Transshipment berechnet und auf Wunsch kann man sich das berechnete Transshipment graphisch anzeigen lassen. Dazu verwendeten wir das Modul Aninet, welches von Alexander Hall entwickelt wurde und von Nadine Baumann und dem Autor leicht modifiziert wurde. Die Implementationen haben neben des Transshipment Patterns jeweils die benötigte Laufzeit und die Auslastung der Ausgänge protokolliert. Weiterhin haben wir mit Hilfe des Tabellenkalkulationsprogramms Microsoft Excel die Transshipment Pattern der Heuristiken jeweils mit dem Earliest Arrival Pattern verglichen. Dabei haben wir zu jedem Zeitpunkt die prozentuale Abweichung des Arrival Patterns vom Optimum bestimmt. Ferner ermittelten wir die maximale prozentuale Abweichung und die durchschnittliche Abweichung, die über das Zeitintervall [0, Topt ] (Topt sei der kleinste Zeithorizont, bzgl. dessen und des gegebenen Netzwerkes ein Earliest Arrival Transshipment existiert) gemittelt wurde. 3.6.1 Ergebnisse des exakten Algorithmus In einer ersten Runde haben wir zunächst mittels des exakten Algorithmus die Earliest Arrival Pattern der Grundinstanzen Q400, A330, B747, A380 und A380+ bestimmt. Auffällig war, dass ein größeres Flugzeug bzw. Netzwerk nicht unbedingt einen größeren Zeithorizont zur totalen Evakuierung benötigt als ein Kleineres. Bestes Beispiel hierfür sind die Instanz Q400 und A330. In beiden Instanzen ist jeweils ein Zeithorizont von 38 optimal. Die Zeithorizonte im Falle der B747 und des A380 betragen jeweils 49 und 50. Nur der Zeithorizont des A380+ ist mit 70 am größten. Trotzdem erfüllen alle Instanzen die Anforderung der FAA. Die benötigte Rechenzeit war mit 53 Sekunden für die A380+ Instanz am größten. Diese Zeit setzt sich aus der Zeit für die Erstellung des speziellen zeitexpandierten Netzwerkes, der Minimalkostenflussberechnung und der Zeit für die Pfadzerlegung zusammen. Beim A380+ wurden weniger als eine Sekunde für den Aufbau des zeitexpandierten Netzwerkes, vier Sekunden für die Minimalkostenflussberechnung und 39 Sekunden für die Pfadzerlegung benötigt. Der gewaltige Unterschied der Rechenzeiten für die Minimalkostenflussberechnung und der Flusszerlegung kann in der Tatsache liegen, dass wir für die Minimalkostenflussberechnung die von LEDA zur Verfügung gestellte Methode verwenden und die Pfadzerlegung selbst implementieren musste. Weiterhin nimmt LEDA auf maschinensprachlicher Ebene CodeOptimierungen vor. 3.6 Die Heuristiken in der Praxis 3.6.2 91 Ergebnisse der Heuristiken Qualität der Ergebnisse. Die kürzeste Wege Heuristik war bei fast allen Instanzen die schlechteste Heuristik. Besonders deutlich wurde dies im Fall der Airbus Instanzen A330 und A380. Die maximale prozentuale Abweichung des Patterns betrug beim A330 17,07% und beim A380 16,6%. Die durchschnittlichen Abweichungen pro Zeiteinheit bis zu den Zeitpunkten 38 bzw. 50 betrugen beim A330 11,3% und beim A380 10,9%. Etwas besser war in diesen Instanzen die Ausgangentlastungs-Heuristik. Im Falle A330 betrug die maximale Abweichung 12,1% und beim A380 14%. In der durchschnittlichen Abweichung konnten wir beim A330 6,9% und beim A380 8,9% ermitteln. Erheblich besser waren die Ergebnisse der Kürzesten Fahrzeit Heuristik. Beim A330 betrug die maximale Abweichung 7,3%. Eine Besonderheit war hier, dass das Pattern im Zeitintervall [18, 36] optimal ist. Bemerkbar macht sich dies sehr deutlich in der durchschnittlichen Abweichung. Sie beträgt hier 0,7%. Beim A380 beträgt sie 2,3%. Die maximale Abweichung dagegen beträgt 3,85%. Auch beim A380+ ist zu erkennen, dass die kürzeste Fahrzeit Heuristik die anderen Heuristiken deutlich schlägt. Bei der kleinsten Instanz Q400 haben alle Pattern der Heuristiken eine maximale Abweichung von 9,1%. Dennoch, wenn wir uns die Pattern selbst und die durchschnittliche Abweichung anschauen, schlägt die kürzeste Fahrzeit Heuristik mit 2,19% knapp wieder die anderen Heuristiken. Die kürzeste Wege Heuristik schlägt in diesem Fall sogar ganz leicht mit 2,27% die Ausgangentlastungs-Heuristik (2,79%). Weiterhin ist hier auffällig, dass für jeden Ausgang der Instanz Q400 die Ausgangsbelastung, d. h. die Summe der Passagiere die das Flugzeug durch diesen Ausgang verlassen im Vergleich zur Ausgangsbelastung des betreffenden Ausganges bzgl. der kürzesten Wege Heuristik unverändert bleibt. Dies liegt daran, dass bzgl. der Unterheuristik genau zwei überdurchschnittliche Ausgänge existieren, welche ihren Überschuss nicht an unterdurchschnittliche Ausgänge verteilen. Somit werden Passagiere von einem überdurchschnittlich belasteten Ausgang zum anderen umgeleitet und umgekehrt. Laufzeiten. Zur benötigten Rechenzeit ist festzustellen, dass die Kürzeste Wege Heuristik mit Abstand die schnellste Heuristik ist. Beim Q400 beträgt die Rechenzeit weniger als eine Sekunde und beim A380 sind es ca. zwei Sekunden. Die Laufzeit hängt nicht vom gewählten Zeithorizont in der Eingabe ab. Dieser dient hier nur zur Reservierung von Speicherplatz, welcher benötigt wird um die Flussinformationen ablegen zu können. Beim A380+ beträgt die Laufzeit immerhin zwei Sekunden. Wir beachten dabei, dass konstruktionsbedingt die Heuristiken eine Pfadzerlegung mitberechnen, so dass wir hier nur die Gesamtzeit der Heuristik berücksichtigen können. Etwas mehr Zeit benötigt erwartungsgemäß die Ausgangentlastungs-Heuristik, 92 Heuristiken da sie die Unterheuristik enthält und für einige Passagiere alternative Pfade bestimmen muss. Beim Q400 beträgt sie zwar auch unter eine Sekunde aber beim A380+ benötigt sie eine Laufzeit von fünf Sekunden. Die kürzeste Fahrzeit Heuristik benötigt beim A380+ die meiste Rechenzeit, nämlich 14 Sekunden. 3.6.3 Weitere Instanzen Bisher haben wir Instanzen betrachtet, die genau nach den Sitzplänen der Flugzeuge angefertigt wurden. Um mehr Erkenntnisse über die Qualität der Heuristiken zu gewinnen, benötigen wir weitere Instanzen. Diese leiten wir von unseren bisherigen Instanzen ab, indem wir systematisch gewisse Ausgänge schließen. Dieses Vorgehen ist insoweit realistisch, da es im Notfall passieren kann, dass sich z. B. nur noch alle Türen auf der rechten Seite öffnen lassen. Neue Instanzen gewinnen wir, indem wir bei allen Flugzeugen nur noch die Ausgänge im vorderen Bereich zulassen (Q400frontside,. . . , A380+frontside), nur noch die Ausgänge im hinteren Bereich zulassen (Q400backside, . . . , A380+backside) und nur noch alle Ausgänge auf der rechten Seite zulassen (Q400rightside, . . . A380+rightside). Bei den Instanzen A380, B747 und A380+ führen wir jeweils noch weitere Veränderungen durch, um weitere Instanzen zu gewinnen. Diese Flugzeuge verfügen jeweils über zwei Etagen und Verbindungstreppen zwischen diesen Etagen. Neue Instanzen gewinnen wir, indem wir nacheinander die Treppen verbieten (A380stairsclosed, B747stairsclosed und A380+stairsclosed), nur die Ausgänge der oberen Etage zulassen (A380topfloor, B747topfloor und A380+topfloor) und dann nur die Ausgänge der unteren Etage geöffnet lassen (A380bottomflor, B747bottomfloor und A380+bottomfloor). In der Tabelle 3.1 sehen wir eine Übersicht aller betrachteten Netzwerkinstanzen. Ergebnisse des exakten Algorithmus Die auffälligste Instanz ist die Instanz B747topfloor. Hierbei beträgt die benötigte Zeit zur Totalevakuierung 419 Zeiteinheiten, wenn man nur noch die oberen Ausgänge nutzen darf. Dies liegt vermutlich daran, dass von den zwei nutzbaren Ausgängen nur einer gleichzeitig effektiv genutzt werden kann, da maximal pro Zeiteinheit ein weiterer Passagier zu diesen gelangen kann. Der Grund hierfür ist der enge Gang in der oberen Etage, über welchen alle Passagiere nur die Ausgänge erreichen können. Die Passagiere haben daher keine andere Möglichkeit, andere Wege nach draußen zu verfolgen. Der Zeithorizont macht sich hier auch in der Rechenzeit bemerkbar. Der exakte Algorithmus benötigte ca. 94 Sekunden. Davon entfielen eine Sekunde auf die Erstellung des zeitexpandierten Netzwerkes, 17 Sekunden auf die Minimalkostenflussberechnung und 76 Sekunden auf die Berechnung einer 93 3.6 Die Heuristiken in der Praxis Instanz Q400 Q400frontside Q400backside Q400rightside A330 A330frontside A330backside A330rightside B747 B747frontside B747backside B747rightside B747stairsclosed B747topfloor B747bottomfloor A380 A380frontside A380backside A380rightside A380stairsclosed A380topfloor A380bottomfloor A380+ A380+frontside A380+backside A380+rightside A380+stairsclosed A380+topfloor A380+bottomfloor #Knoten #Kanten #Sitzplätze 108 108 108 108 319 319 319 319 687 687 687 687 685 687 687 932 932 932 932 924 932 932 1367 1367 1367 1367 1359 1367 1367 181 179 179 179 560 556 556 556 1363 1357 1355 1357 1357 1353 1361 1770 1762 1760 1762 1746 1760 1764 2490 2482 2480 2482 2466 2480 2484 70 70 70 70 222 222 222 222 427 427 427 427 427 427 427 537 573 573 573 573 573 573 972 972 972 972 972 972 972 #Ausgänge 4 2 2 2 8 4 4 4 12 6 4 6 12 2 10 16 8 6 8 16 6 10 16 8 6 8 16 6 10 Topt 38 70 75 39 38 106 59 60 49 177 152 78 49 419 49 50 122 136 78 50 148 70 70 198 198 128 85 232 119 Tabelle 3.1: Diese Tabelle gibt eine Übersicht über die Anzahl der Knoten, Kanten, Quellknoten (Sitzplätze) und Ausgänge der Netzwerke der jeweiligen Instanzen. Der Wert Topt bezeichnet den optimalen Zeithorizont des jeweiligen Earliest Arrival Transshipments Pfadzerlegung. Die Instanz, welche die meiste Rechenzeit benötigte war die Instanz A380+frontside. Hier wurden bei einem vorgegebenen Zeithorizont von 270 genau 199 Sekunden benötigt. Hier entfielen 24 Sekunden auf die Minimalkostenflussberechnung. Bei dem optimalen Zeithorizont von 198 benötigte der Algorithmus 10 Sekunden weniger, wovon Acht Sekunden bei der Minimalkostenflussberechnung weniger verbraucht wurden. Noch dramatischer ist die Größe des resultierenden zeitexpandierten Graphen. Der Graph des A380+frontside enthält 1367 Knoten und 2482 Kanten. Das erstellte erweiterte zeitexpandierte Netzwerk enthält bei Untersuchung des Zeithorizontes 270 genau 369.092 Knoten und 1.036.546 Kanten. Weitere Beispiele greifen wir später im Vergleich zu den Laufzeiten der Heuristiken auf. Eine komplette Übersicht der Ergebnisse, welche der exakte Algorithmus geliefert hat, sehen wir in Tabelle 3.2. Dort führen wir neben den Laufzeiten auch die Größe des jeweils berechneten zeitexpandierten Netzwerkes auf. 94 Instanz Q400 Q400frontside Q400backside Q400rightside A330 A330frontside A330backside A330rightside B747 B747frontside B747backside B747rightside B747stairsclosed B747topfloor B747bottomfloor A380 A380frontside A380backside A380rightside A380stairsclosed A380topfloor A380bottomfloor A380+ A380+frontside A380+backside A380+rightside A380+stairsclosed A380+topfloor A380+bottomfloor Heuristiken #Knoten #Kanten Texp Aufbau 9722 9722 9722 9722 28712 57442 28712 28712 61832 123662 123662 61832 61652 343402 61832 83882 167762 167762 83882 83162 167762 83882 123032 369092 369092 246062 122312 369092 246062 25885 25705 25705 25705 78510 156990 78150 78150 182963 366473 366113 182423 182255 1018873 182783 241069 482899 482539 240349 238261 482539 240529 344266 1036546 1036006 690046 341458 1036006 690406 90 90 90 90 90 180 90 90 90 180 180 90 90 500 90 90 180 180 90 90 180 90 90 270 270 180 90 270 90 < 1s < 1s < 1s < 1s 1s < 1s < 1s < 1s < 1s < 1s < 1s < 1s < 1s 1s < 1s < 1s 1s 1s 1s < 1s 1s 1s < 1s 1s 1s 1s < 1s 1s 1s Flussberechnung < 1s < 1s < 1s < 1s < 1s 2s < 1s 1s 2s 6s 6s 2s 2s 17s 2s 2s 5s 7s 3s 2s 7s 2s 4s 24s 24s 12s 5s 19s 12s Pfadzerlegung < 1s < 1s < 1s < 1s 3s 5s 2s 3s 10s 20s 20s 10s 9s 76s 10s 23s 47s 48s 25s 24s 47s 25s 49s 174s 176s 97s 49s 177s 90s Tabelle 3.2: Diese Tabelle gibt eine Übersicht über die Anzahl der Knoten, Kanten und des verwendeten Zeithorizont (Texp ) des konstruierten zeitexpandierten Graphen. Die weiteren Werte geben in Sekunden die verbrauchte Rechenzeit für die Konstruktion des zeitexpandierten Graphen, für die Minimalkostenflussberechnung auf dem zeitexpandierten Graphen und für die Berechnung einer Pfadzerlegung des Minimalkostenflusses an. Ergebnisse der Heuristiken Qualität der Ergebnisse. Auch bei der Betrachtung der weiteren Instanzen zeichnete sich wieder ein einheitliches Bild ab. In fast allen Instanzen war die kürzeste Fahrzeit Heuristik gegenüber den anderen Heuristiken bzgl. der maximalen und durchschnittlich prozentualen Abweichung der Pattern überlegen. Ein Grund kann darin liegen, dass die kürzeste Fahrzeit Heuristik im Gegensatz zu den anderen Heuristiken bei der Pfadberechnung für eine einzelne Flusseinheit den bis dahin berechneten Teilfluss auf Basis der bisher berechneten Pfade mitberücksichtigt. Wir erwähnen zunächst auffällige Instanzen, auf denen alle Heuristiken sehr gute Ergebnisse berechnet haben. Dies waren die Instanzen, in denen nur zwei Ausgänge existieren. Bei der Instanz Q400backside berechneten alle Heuristiken einen Earliest Arrival Transshipment. Dazu muss man bemerken, dass diese Instanz sehr klein ist und es wegen nur zwei vorhandener Ausgänge nicht viele unterschiedliche Möglichkeiten für einen Passagier gibt, 3.6 Die Heuristiken in der Praxis 95 einen Pfad zur Senke zu wählen. Obwohl diese Bemerkungen bei der Instanz Q400frontside zutreffen, berechnete hier keine Heuristik ein Earliest Arrival Transshipment. Alle Heuristiken berechneten ein Transshipment dessen maximale prozentuale Pattern-Abweichung bei 12,5% liegt. Da dieser Fehler jeweils zu einem frühen Zeitpunkt auftritt, ist der absolute Fehler sehr klein. Der optimale Zeithorizont liegt in dieser Instanz bei 70. Bezüglich der durchschnittlichen Abweichung war berechnete die kürzeste Wege Heuristik Wege Heuristik vergleichsweise das schlechteste Ergebnis, was aber dennoch mit 2,47 %. sehr gut ausfiel. Die Ausgangentlastungs-Heuristik berechnete sogar ein Transshipment dessen Pattern ab dem Zeitpunkt 48 dem des Earliest Arrival Transshipment entsprach, was sich mit einem durchschnittlichen Fehler von 1,57% bemerkbar machte. Die kürzeste Fahrzeit Heuristik berechnete einen Fluss, dessen Pattern nur zu zwei Zeitpunkten von dem Pattern eines Earliest Arrival Transshipment abweicht. Der durchschnittliche Fehler ist daher mit 0,07% sehr gering. Auch bei der Instanz Q400rightside berechneten die Heuristiken sehr gute Ergebnisse. Die kürzeste Fahrzeit Heuristik berechnete sogar hier auch wieder ein Earliest Arrival Transshipment. Die letzte untersuchte Instanz, in welcher nur zwei Ausgänge zur Verfügung stehen, war B747topfloor, welche schon unter Anwendung des exakten Algorithmus wegen der erheblichen Zeithorizontvergrößerung im Vergleich zur Instanz B747 auffiel. Auffällig war auch hier, dass die kürzeste Fahrzeit Heuristik ein Earliest Arrival Transshipment berechnete. Die kürzeste Wege Heuristik war hier etwas besser als die AusgangentlastungsHeuristik. Das berechnete Pattern dieser Heuristik weicht nur zu wenigen Zeitpunkten vom Optimum ab. Der maximale prozentuale Fehler liegt zwar bei 11,5%, aber der durchschnittliche prozentuale Fehler liegt bei 0,01%. Bei der Ausgangentlastungs-Heuristik liegt die maximale Abweichung des Patterns vom Optimum bei 16,67%. Die durchschnittliche Abweichung des Patterns dieser Heuristik lag bei 0,09%. Bevor wir weitere markante Instanzen ansprechen, müssen wir erwähnen, dass bzgl. der Ausgangentlastungs-Heuristik in den untersuchten Instanzen kein Zusammenhang zwischen der Qualität der Lösung und der Auslastung der Ausgänge zu erkennen war. Beste Beispiele hierzu sind die Instanzen Q400backside und die Instanz A330frontside. In der Instanz Q400backside, welche zwei Ausgänge besitzt, verließ jeweils 50% der Passagiere das Flugzeug durch jeweils einen Ausgang. In der Instanz A330frontside, welche über vier Ausgänge verfügt, verließen jeweils ca. 25% der Passagiere das Flugzeug durch jeweils einen Ausgang. Statt eines Earliest Arrival Transshipment wie bei Q400backside berechnete die Ausgangentlastungs-Heuristik bei A330frontside ein Transshipment, dessen Arrival Pattern eine sehr schlechte Näherung zum Earliest Arrival Pattern darstellt. Im Rahmen dieser Untersuchungen erzeugte die Instanz A330frontside bzgl. der Ausgangentlastungs-Heuristik das schlechteste Ergebnis bzgl der maximalen Abweichung. Die maximale Abweichung lag bei 36,8% und die 96 Heuristiken durchschnittliche Abweichung lag bei 10,07%. Unwesentlich schlechter war die kürzeste Wege Heuristik. Die maximale Abweichung beträgt hier auch 36,8% aber die durchschnittliche Abweichung ist mit 10,87% etwas schlechter. Bessere Ergebnisse liefert hier wieder die kürzeste Fahrzeit Heuristik. Die maximale Abweichung beträgt 18,4 % und die durchschnittliche Abweichung beträgt 5,34%. Alle drei Heuristiken berechnen bzgl. dieser Instanz Transshipments, dessen Pattern im Vergleich zu anderen Instanzen die größte maximale Abweichung zum Earliest Arrival Pattern besitzen. Dies kann daran liegen, dass bei der Instanz A330frontside die vier Ausgänge ungünstiger positioniert sind. Sie umgeben einen Bereich, welcher im Vergleich zu dem Rest des Flugzeuges nur sehr wenige Sitzplätze enthält. Im Falle des A330frontside kam es besonders bei der Ausgangentlastungs-Heuristik vor, dass in vielen Fällen jeweils der Alternativpfad einen großen Teil des Erstpfades enthalten hat, da die meisten Passagiere auf dem Weg zu dem alternativen Ausgang an ihrem zuerst berechneten Ausgang in gewisser Weise vorbeikamen. Wenn wir ebenfalls die von der Instanz A330 abgeleitete Instanz A330backside betrachten, sind die gemessenen prozentualen Abweichungen, besonders bei der kürzesten Fahrzeit Heuristik, deutlich geringer. Eine mögliche Erklärung ist die Lage der verbliebenen vier Ausgänge zu einer großen Teilmenge der Passagiere. Hier kann die Unterheuristik eine bessere Wirkung erzielen in dem für eine große Mehrheit an Passagieren bei der Wahl eines alternativen Pfades ein großer Teil des Erstpfades vermieden wird. Beim A330backside beträgt die maximale Abweichung des Patterns, welches durch die kürzeste Fahrzeit Heuristik berechnet wurde 1,8%. Die durchschnittliche Abweichung betrug 0,2%. In wenigen Instanzen kam es vor, dass zu gewissen Zeitpunkten die Ausgangentlastungs-Heuristik ein besseres Ergebnis als die kürzeste Fahrzeit Heuristik lieferte. Eine solche Instanz war B747bottomfloor. Hier betrug die maximale Abweichung bei der kürzesten Fahrzeit Heuristik fast 9% statt 6,6% bei der Ausgangentlastungs-Heuristik. Dennoch ist die durchschnittliche Abweichung mit ca. 3% statt 3,8% bei der kürzesten Fahrzeit Heuristik geringer. Weitere Instanzen, in welchen sich die kürzeste Fahrzeit Heuristik sehr gut bewährte waren insbesondere die Instanzen A380stairsclosed, B747stairsclosed und A380+stairsclosed. Die Instanzen in welcher die kürzeste Fahrzeit Heuristik auffällig schlechtere Ergebnisse produzierte, waren neben A330frontside die Instanzen A330rightside, A380rightside und A380+rightside. In diesen Instanzen betrug jeweils die maximale Abweichung des Patterns zwischen 11% und 17%. Ein Grund hierfür kann die Unterheuristik sein, die es nicht vermag gute alternative Pfade zu berechnen, da sich alle Ausgänge ungünstigerweise auf einer Seite des Flugzeugs befinden und die Unterheuristik bei den Flugzeuginstanzen so ausgelegt ist, dass sie für jeden Passagier den zu einem Ausgang alternativen Ausgang auf 3.6 Die Heuristiken in der Praxis 97 der gleichen Seite des Flugzeugs (in Flugrichtung gesehen) bestimmt. Dennoch überschritt die durchschnittliche Abweichung in keiner Instanz die 10%Marke. Die Instanz, bei welcher die kürzeste Fahrzeit Heuristik die schlechteste durchschnittliche Abweichung erreichte, war die Instanz A330rightside. Hier betrug diese Abweichung ca. 7%. Im Vergleich hierzu betrug die durchschnittliche Abweichung der kürzesten Wege Heuristik fast 14% und bzgl. der Ausgangentlastungs-Heuristik 11,5%. Zu den Zeithorizonten, welche die Heuristiken ermittelten, ist zu sagen, dass sie im Falle der kürzesten Wege Heuristik im Gegensatz zu to pt in drei Instanzen doppelt so lang waren. In vielen anderen Instanzen wich der berechnete Zeithorizont um mindestens 40% ab. Bei der Ausgangentlastungs-Heuristik waren die Abweichungen (to pt zu tm ax) der berechneten Zeithorizonte etwas geringer. In nur 5 Instanzen betrug sie ca. 50% oder mehr. Auch in dieser Disziplin schlägt die kürzeste Fahrzeit Heuristik die anderen beiden Heuristiken. In keiner Instanz war diese Abweichung höher als 50%. Laufzeiten. Bei den Instanzen, dessen optimaler Zeithorizont im Vergleich zur Grundinstanz stark vergrößert war, haben wir erwartungsgemäss beim exakten Algorithmus wesentlich längere Laufzeiten festgestellt. Dadurch bedingt ist jeweils auch die Größe des zeitexpandierten Netzwerkes stark angestiegen. Hat die Ermittlung eines Earliest Arrival Transshipments beim B747 bzgl des Zeithorizontes 90 noch ca. 10 Sekunden benötigt (<1 Sek. für den Aufbau des zeitexpandierten Netzwerkes, 2 Sekunden für die Minimalkostenflussberechnung und 8 Sekunden für die Pfadzerlegung) so hat der Algorithmus für die Instanz B747topfloor, welche nur zwei Kanten weniger enthält, 104 Sekunden benötigt. Davon entfielen eine Sekunde auf die Erstellung des zeitexpandierten Netzwerkes, 17 Sekunden auf die Minimalkostenflussberechnung und 76 Sekunden auf die Berechnung der Pfadzerlegung. Der zeitexpandierte Graph enthielt hier 500 Zeitschichten. Das Grundnetzwerk der Instanz B747topfloor enthält 687 Knoten und 1353 Kanten. Das zeitexpandierte Netzwerk enthält dann bei Zeithorizont 500 genau 343.402 Knoten und 1.018.873 Kanten. Im Vergleich hierzu benötigte die kürzeste Wege Heuristik eine Laufzeit von gerade mal eine Sekunde. Die Ausgangentlastungs-Heuristik benötigte sechs Sekunden. Die kürzeste Fahrzeit Heuristik hatte eine Laufzeit von 5 Sekunden. In den meisten Fällen benötigte die kürzeste Fahrzeit Heuristik eine längere Laufzeit als die anderen Heuristiken. Ein gutes Beispiel hierzu ist die Instanz A380+topfloor. Die Berechnung eines Earliest Arrival Transshipments benötigte drei Minuten und 17 Sekunden wobei wir ein zeitexpandiertes Netzwerk zum Zeithorizont 270 zugrunde legten. Bei der Berechnung 98 Heuristiken der Instanz A380+ wurden dagegen nur 15 Sekunden verbraucht. Wie man hier sieht, genügt eine kleine Modifikation an einem Netzwerk, so dass dadurch die benötigte Rechenzeit des exakten Algorithmus eine dramatischen Laufzeitanstieg erfährt. Da die Heuristiken ohne Zeitexpansion auskommen, erfahren die Laufzeit hier nur moderaten Zuwachs. Bei der kürzesten Wege Heuristik benötigt die Berechnung der Instanz A380+ zwei Sekunden und bei der Instanz A380+topfloor ebenfalls nur zwei Sekunden. Die AusgangentlastungsHeuristik benötigt bei A380 sechs Sekunden und bei A380+topfloor 15 Sekunden. Die kürzeste Fahrzeit Heuristik verbraucht für die Berechnung der Instanz A380 15 Sekunden und für die Instanz A380+topfloor 19 Sekunden. Die drei Tabellen 3.3, 3.4 und 3.5 geben eine Übersicht, über die ermittelten Ergebnisse der Heuristiken. Zum Ende dieses Abschnitts erwähnen wir, dass wir die Arrival Pattern aller untersuchten Instanzen im Anhang dieser Arbeit visualisiert haben. 3.6.4 Zusammenfassung und Ausblick Die Kürzeste Fahrzeit Heuristik ist in der Lage in sehr kurzer Zeit für unsere Flugzeuginstanzen eine gute Näherung eines Earliest Arrival Transshipment zu bestimmen. Da die Struktur in den Flugzeugplänen meist sich immer wieder ähnelt (wenige enge Gänge pro Etage, höchstens zwei Etagen, kurze Wege zu einem Ausgang) wird diese Heuristik vermutlich auch bei zukünftigen ähnlich strukturierten Flugzeugplänen ein Earliest Arrival Transshipment gut approximieren können. Die anderen beiden Heuristiken haben bei unseren Instanzen zwar Schwächen gezeigt, können aber wegen ihrer schnellen Laufzeit benutzt werden, um das Earliest Arrival Pattern schnell abschätzen zu können. Dies vermag aber auch die kürzeste Fahrzeitheuristik. Sie kann sogar für grobe Schätzung des Zeithorizontes herangezogen werden um z. B. bei der Berechnung mit dem exakten Algorithmus die Größe des zeitexpandierten Netzwerkes und somit die Laufzeit möglichst klein zu halten. Vielleicht ist es aber auch zusätzlich möglich die Unterheuristik so zu verbessern, so dass die Heuristiken, insbesondere die kürzeste Fahrzeit Heuristik noch bessere Ergebnisse liefert. Zum Abschluss sollte man bedenken, dass auch ein exaktes Earliest Arrival Transshipment keinen Anspruch auf die Realität hat und für einen Evakuierungsfall, der hoffentlich selten eintritt, nur eine untere Zeitschranke darstellt. Da im Notfall die Passagiere in Panik sich auf eine gewisse Art heuristisch verhalten um zu einem Notausgang zu gelangen, kann es eher der Fall sein, dass eine unserer Heuristiken der Realität ein wenig näher ist. 99 3.6 Die Heuristiken in der Praxis Instanz Tmax Topt -Tmax Abw. max. Abw. mittl. Abw. Q400 Q400frontside Q400backside Q400rightside A330 A330frontside A330backside A330rightside B747 B747frontside B747backside B747rightside B747stairsclosed B747topfloor B747bottomfloor A380 A380frontside A380backside A380rightside A380stairsclosed A380topfloor A380bottomfloor A380+ A380+frontside A380+backside A380+rightside A380+stairsclosed A380+topfloor A380+bottomfloor 39 70 75 40 55 114 80 98 60 188 189 111 60 419 63 81 167 189 158 81 272 149 104 259 263 198 109 373 240 2,63% 1,43% 0,00% 2,56% 44,74% 7,55% 35,59% 46,67% 22,45% 6,21% 25,17% 42,31% 18,33% 0,00% 28,57% 62,00% 36,89% 38,97% 102,56% 62,00% 83,78% 112,86% 48,57% 30,80% 32,83% 54,69% 28,24% 60,78% 101,68% 9,19% 12,50% 0,00% 1,45% 17,07% 36,80% 18,63% 22,62% 8,94% 13,33% 19,70% 17,92% 8,94% 11,53% 12,26% 16,59% 23,89% 25,54% 20,29% 14,26% 21,69% 21,70% 15,74% 22,80% 19,87% 17,01% 16,90% 18,45% 20,37% 2,27% 2,47% 0,00% 0,15% 11,29% 10,87% 7,97% 20,54% 5,63% 6,44% 13,40% 9,54% 5,09% 0,01% 6,04% 10,94% 17,22% 14,42% 12,53% 9,96% 12,53% 13,96% 9,64% 13,82% 14,46% 9,10% 10,59% 13,72% 12,75% Flussberechnung < 1s < 1s < 1s < 1s < 1s < 1s < 1s < 1s 1s 1s 1s < 1s 1s < 1s < 1s < 1s < 1s < 1s < 1s 1s < 1s < 1s 2s 2s 2s 2s 2s < 1s 2s Tabelle 3.3: Diese Tabelle beschreibt die ermittelten Größen bzgl. der Anwendung der kürzesten Wege Heuristik auf die verschiedenen Instanzen. Diese sind der Zeithorizont Tmax des berechneten Transshipments, die prozentuale Abweichung von Tmax zu Topt , die maximale Abweichung des berechneten Patterns zu dem Earliest Arrival Pattern, die durchschnittliche Abweichung des Patterns zu dem Earliest Arrival Pattern im Zeitintervall [0, Topt ] und die verbrauchte Rechenzeit zur Ermittlung des Transshipments mit der kürzesten Wege Heuristik. 100 Heuristiken Instanz Tmax Topt -Tmax Abw. max. Abw. mittl. Abw. Q400 Q400frontside Q400backside Q400rightside A330 A330frontside A330backside A330rightside B747 B747frontside B747backside B747rightside B747stairsclosed B747topfloor B747bottomfloor A380 A380frontside A380backside A380rightside A380stairsclosed A380topfloor A380bottomfloor A380+ A380+frontside A380+backside A380+rightside A380+stairsclosed A380+topfloor A380+bottomfloor 41 70 75 40 47 113 66 81 56 177 164 101 56 419 58 71 142 182 146 70 227 98 96 208 241 191 106 410 176 7,89% 0,00% 0,00% 2,56% 23,68% 6,60% 11,86% 35,00% 14,29% 0,00% 8,61% 29,49% 14,29% 0,00% 18,37% 42,00% 16,39% 33,82% 87,18% 40,00% 53,38% 40,00% 37,14% 5,05% 21,71% 49,22% 24,71% 76,72% 56,30% 9,19% 12,50% 0,00% 1,45% 12,10% 36,80% 5,49% 20,51% 7,76% 13,33% 17,50% 12,97% 7,76% 16,67% 6,60% 14,01% 17,10% 25,54% 15,01% 12,07% 16,93% 13,21% 13,26% 17,20% 16,78% 15,36% 17,02% 18,77% 15,04% 2,79% 1,57% 0,00% 0,15% 6,98% 10,07% 2,92% 16,03% 4,99% 4,73% 8,71% 8,05% 4,18% 0,09% 3,89% 8,81% 11,42% 14,74% 13,40% 7,92% 12,19% 10,56% 8,84% 7,78% 9,76% 7,09% 9,95% 14,51% 10,22% Flussberechnung < 1s < 1s < 1s < 1s 1s < 1s 1s 1s 1s 3s 3s 2s 1s 6s 1s 2s 3s 3s 3s 2s 4s 3s 6s 15s 11s 8s 6s 16s 10s Tabelle 3.4: Diese Tabelle beschreibt die ermittelten Größen bzgl. der Anwendung der Ausgangentlastungs-Heuristik auf die verschiedenen Instanzen. Diese sind der Zeithorizont Tmax des berechneten Transshipments, die prozentuale Abweichung von Tmax zu Topt , die maximale Abweichung des berechneten Patterns zu dem Earliest Arrival Pattern, die durchschnittliche Abweichung des Patterns zu dem Earliest Arrival Pattern im Zeitintervall [0, Topt ] und die verbrauchte Rechenzeit zur Ermittlung des Transshipments mit der Ausgangentlastungs-Heuristik. 101 3.6 Die Heuristiken in der Praxis Instanz Tmax Topt -Tmax Abw. max. Abw. mittl. Abw. Q400 Q400frontside Q400backside Q400rightside A330 A330frontside A330backside A330rightside B747 B747frontside B747backside B747rightside B747stairsclosed B747topfloor B747bottomfloor A380 A380frontside A380backside A380rightside A380stairsclosed A380topfloor A380bottomfloor A380+ A380+frontside A380+backside A380+rightside A380+stairsclosed A380+topfloor A380+bottomfloor 38 70 75 39 38 110 61 64 55 180 165 89 55 419 57 55 146 157 106 55 219 87 76 214 218 158 85 297 150 0,00% 0,00% 0,00% 0,00% 0,00% 6,60% 3,39% 6,67% 12,25% 1,69% 9,27% 14,10% 12,24% 0,00% 16,33% 10,00% 19,67% 15,44% 35,90% 10,00% 47,97% 24,29% 8,57% 8,08% 10,10% 23,44% 0,00% 28,02% 26,05% 9,19% 12,50% 0,00% 0,00% 7,32% 18,42% 1,82% 16,39% 5,56% 9,09% 3,28% 7,07% 5,65% 0,00% 8,96% 3,85% 9,45% 10,33% 13,61% 3,67% 12,39% 9,62% 2,67% 6,43% 7,90% 11,44% 1,82% 6,84% 12,15% 2,20% 0,08% 0,00% 0,00% 0,72% 5,34% 0,21% 7,01% 2,16% 1,58% 1,63% 1,93% 1,32% 0,00% 3,01% 2,41% 6,98% 4,78% 6,38% 2,12% 4,16% 5,70% 0,61% 2,44% 4,49% 5,49% 0,21% 2,52% 6,22% Flussberechnung < 1s < 1s < 1s < 1s < 1s 1s < 1s < 1s 3s 4s 3s 3s 3s 5s 3s 4s 5s 6s 5s 4s 6s 5s 15s 19s 19s 16s 15s 19s 17s Tabelle 3.5: Diese Tabelle beschreibt die ermittelten Größen bzgl. der Anwendung der kürzesten Fahrzeit Heuristik auf die verschiedenen Instanzen. Diese sind der Zeithorizont Tmax des berechneten Transshipments, die prozentuale Abweichung von Tmax zu Topt , die maximale Abweichung des berechneten Patterns zu dem Earliest Arrival Pattern, die durchschnittliche Abweichung des Patterns zu dem Earliest Arrival Pattern im Zeitintervall [0, Topt ] und die verbrauchte Rechenzeit zur Ermittlung des Transshipments mit der kürzesten Fahrzeit Heuristik. Liste der Algorithmen 1.1 1.2 1.3 1.4 1.5 1.6 2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4 Der Algorithmus von Dijkstra . . . . . . . . . . . . . . . . . . . . . . Der Algorithmus von Moore-Bellman-Ford . . . . . . . . . . . . . . . Der Algorithmus von Ford & Fulkerson . . . . . . . . . . . . . . . . . Der Successive Shortest Path Algorithmus . . . . . . . . . . . . . . . Ein Capacity Scaling Algorithmus für das Minimalkostenfluss Problem Der Algorithmus von Ford & Fulkerson für das dynamische Max-FlowProblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die spezielle Variante des Successive Shortest Path Algorithmus zur Lösung des Earliest Arrival Flow Problem . . . . . . . . . . . . . . . . Der Snap-Shot-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . Der (1 + ε)-Approximationsalgorithmus von Hoppe für das Earliest Arrival Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein exakter Algorithmus für das Earliest Transshipment Problem . . Kürzeste Wege Heuristik . . . . . . . . . . . . . . . . . . . . . . . . . Indexmengenberechnung der Unterheuristik . . . . . . . . . . . . . . . Die Ausgangentlastungs-Heuristik . . . . . . . . . . . . . . . . . . . . Die Kürzeste Fahrzeit Heuristik . . . . . . . . . . . . . . . . . . . . . 103 6 7 10 15 17 23 51 54 56 61 68 73 76 79 Literaturverzeichnis [1] Baumann, Nadine ; Skutella, Martin: Solving Evacuation Problems Efficiently–Earliest Arrival Flows with Multiple Sources. In: FOCS ’06: Proceedings of the 47th Annual IEEE Symposium on Foundations of Computer Science (FOCS’06). Washington, DC, USA : IEEE Computer Society, 2006. – ISBN 0–7695–2720–5, S. 399–410 42 [2] Berlin, G. N.: The use of directed routes for assessing escape potential. Boston, Massachusetts : National Fire Protection Association, 1979 33 [3] Burkard, E. ; Dlaska, K. ; Klinz, B.: The Quickest Flow Problem. In: ZOR– Methods ans Models of Operations Research Bd. 37, No. 1, 1993, S. 31–58 34 [4] Chalmet, L. G. ; Francis, R. L. ; Saunders, P. B.: Network models for building evacuation. In: Management Science Bd. 28, 1982, S. 86–105 33 [5] Fleischer, L. ; Tardos, É.: Efficient continuous-time dynamic network flow algorithms. In: Operations Research Letters 23 (1998), S. 71–80 38, 55 [6] Fleischer, Lisa ; Skutella, Martin: Quickest Flow over Time. In: SIAM Journal on Computing Bd. 36 No.6, 2007 41, 57, 58 [7] Ford, L. R. ; Fulkerson, D. R.: Flows in networks. Princeton, New Jersey : Princeton University Press, 1962 14, 21, 27 [8] Gale, David: Transient flows in networks. In: Michigan Mathematical Journal 6, S. 59–63 44 [9] Grötschel, M. ; Lovasz, L. ; Schrijver, A.: Geometric Algorithms and Combinatorial Optimization, volume 2 of Algorithms and Combinatorics. Berlin : Springer, 1998 40 [10] Hoppe, Bruce ; Tardos, Eva: The Quickest Transshipment Problem. In: SODA: ACM-SIAM Symposium on Discrete Algorithms (A Conference on Theoretical and Experimental Analysis of Discrete Algorithms), 1995 37, 38, 39, 40, 41 [11] Hoppe, Bruce ; Tardos, Eva: The Quickest Transshipment Problem. In: Mathematics of Operation Reasearch Bd. 25, 2000, S. 36–62 37, 38, 39, 40, 41 [12] Hoppe, Bruce E.: Efficient dynamic network flow algorithms. Ithaca, NY, USA, Diss., 1995 51, 53, 55, 57, 105 [13] Jarvis, J. ; Ratliff, H.: Some equivalent objectives for dynamic network flow problems. In: Management Science Bd. 28, 1982, S. 106–108 33 [14] Klinz, B.: Zitiert in [12] als personal communication. 40 [15] Korte, Bernhard ; Vygen, Jens: Combinatorial Optimization: Theory and Algorithms, 3nd edition. Berlin : Springer, 2005 1, 4, 5, 6, 9, 10, 14, 16, 21 105 106 Literaturverzeichnis [16] Langkau, Katharina: Flows over Time with Flow-Dependent Transit Times. Berlin, Diss., 2003 20 [17] Meggido, N.: Optimal flows in networks with multiple sources and sinks. In: Mathematical Programming 7 (1974), S. 97–107 38 [18] Meggido, N.: Combinatorial Optimization with rational objective functions. In: Mathematics of Operation Reasearch Bd. 4, 1979, S. 414–424 41 [19] Minieka, Edward: Maximal, Lexicographic, and Dynamic Network Flows. In: Operations Research Bd. 21, No. 2, 1973, S. 517–527 38, 45, 46 [20] Philpott, A. B.: Continuous-time flows in networks. In: Mathematics of Operation Research 15 (1990), S. 640–661 45 [21] Skutella, Martin: Ausgewählte Kapitel der kombinatorischen Optimierung (Vorlesungsskript). Wintersemester 2005/2006 16, 22, 23, 26 [22] Wegener, Ingo: Theoretische Informatik. Eine algorithmische Einführung. Stuttgart : Teubner, 1999 v [23] Wegener, Ingo: 2001/2002 5, 69 Datenstrukturen (Vorlesungsskript). Wintersemester [24] Wilkinson, W. L.: An Algorithm for Universal Maximal Dynamic Flows in a Network. In: Operations Research Bd. 19, No. 7, 1971, S. 1602–1612 45 [25] Zadeh, Norman: A bad network problem for the simplex method and other minimum cost flow algorithms. In: Math. Program. Bd. 5, 1973, S. 255–266 53 Erklärung Hiermit erkläre ich, dass ich die vorliegende Diplomarbeit selbständig und nur unter Verwendung der angegebenen Quellen und Hilfsmittel angefertigt habe und alle Stellen, die wörtlich oder sinngemäß aus den benutzten Quellen entnommen sind, als solche kenntlich gemacht habe. Dortmund, den 13. Oktober 2007 (Ort, Datum) (Unterschrift) 107 Anhang A Arrival Pattern Die nun folgenden Grafiken visualisieren die ermittelten Arrival Pattern der einzelnen Algorithmen. Für jede Instanz haben wir eine Grafik erzeugt, in welcher wir unmittelbar einen Vergleich zwischen den verwendeten Algorithmen anstellen können. A330 200 150 100 50 0 0 25 Zeit EAF-Pattern Kü.-Wege-H.-Pattern 5 Evakuierte Personen 0 25 50 75 10 0 Evakuierte Personen 250 0 Ausgangsentl-H.-Pattern 0 0 Zeit A330frontside Kü.-Fahrz.-H.-Pattern A-1 50 A-2 Arrival Pattern A330frontside Evakuierte Personen 250 200 150 100 50 0 0 25 50 75 100 Zeit A330backside Evakuierte Personen 250 200 150 100 50 0 0 25 50 Zeit 75 A330rightside Evakuierte Personen 250 200 150 100 50 0 0 25 50 Zeit 75 A-3 Q400 80 Evakuierte Personen 70 60 50 40 30 20 10 0 0 25 Zeit Q400frontside 80 Evakuierte Personen 70 60 50 40 30 20 10 0 0 25 50 Zeit Q400backside 80 Evakuierte Personen 70 60 50 40 30 20 10 0 0 25 50 Zeit 75 A-4 Arrival Pattern Q400rightside 80 Evakuierte Personen 70 60 50 40 30 20 10 0 0 25 Zeit B747 450 Evakuierte Personen 400 350 300 250 200 150 100 50 0 0 25 50 Zeit B747frontside 450 Evakuierte Personen 400 350 300 250 200 150 100 50 0 0 25 50 75 100 Zeit 125 150 175 A-5 B747backside 450 Evakuierte Personen 400 350 300 250 200 150 100 50 0 0 25 50 75 100 Zeit 125 150 175 B747rightside 450 Evakuierte Personen 400 350 300 250 200 150 100 50 0 0 25 50 75 100 125 Zeit B747stairsclosed 450 Evakuierte Personen 400 350 300 250 200 150 100 50 0 0 25 50 Zeit A-6 Arrival Pattern B747topfloor 450 400 Evakuierte Personen 350 300 250 200 150 100 50 0 0 25 50 75 100 125 150 175 200 225 250 275 300 325 350 375 400 425 Zeit B747bottomfloor 450 400 300 250 200 150 100 50 0 0 25 50 Zeit A380 700 600 Evakuierte Personen Evakuierte Personen 350 500 400 300 200 100 0 0 25 50 Zeit 75 A-7 A380frontside 700 Evakuierte Personen 600 500 400 300 200 100 0 0 25 50 75 100 125 150 Zeit A380rightside 700 Evakuierte Personen 600 500 400 300 200 100 0 0 25 50 75 Zeit 100 125 150 A-8 Arrival Pattern A380backside 700 Evakuierte Personen 600 500 400 300 200 100 0 0 25 50 75 100 Zeit 125 150 175 A-9 A380stairsclosed 700 Evakuierte Personen 600 500 400 300 200 100 0 0 25 50 75 Zeit A380topfloor 700 Evakuierte Personen 600 500 400 300 200 100 0 0 25 50 75 100 125 150 Zeit 175 200 225 250 A380bottomfloor 700 Evakuierte Personen 600 500 400 300 200 100 0 0 25 50 75 Zeit 100 125 150 A-10 Arrival Pattern A380+ 1200 Evakuierte Personen 1000 800 600 400 200 0 0 25 50 Zeit 75 100 A380+frontside 1200 Evakuierte Personen 1000 800 600 400 200 0 0 25 50 75 100 125 150 Zeit 175 200 175 200 225 250 A380+backside 1200 Evakuierte Personen 1000 800 600 400 200 0 0 25 50 75 100 125 150 Zeit 225 250 A-11 A380+rightside 1200 Evakuierte Personen 1000 800 600 400 200 0 0 25 50 75 100 Zeit 125 150 175 A380+stairsclosed 1200 Evakuierte Personen 1000 800 600 400 200 0 0 25 50 Zeit 75 100 A380+topfloor 1000 800 600 400 200 Zeit 40 0 37 5 35 0 32 5 30 0 27 5 25 0 22 5 20 0 17 5 15 0 12 5 75 10 0 50 0 0 25 Evakuierte Personen 1200 A-12 Arrival Pattern A380+bottomfloor 1000 800 600 400 200 0 0 25 50 75 100 125 Zeit 150 EAF-Pattern Kü.-Wege-H.-Pattern 5 Evakuierte Personen 0 25 50 75 10 0 Evakuierte Personen 1200 0 Ausgangsentl-H.-Pattern 0 0 Zeit A330frontside Kü.-Fahrz.-H.-Pattern 175 200 225