Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 1 Einleitung Motivation Algorithmik ◮ Eine wesentliche Aufgabe der Informatik ist die Analyse von Problemen mit der Zielsetzung eine effiziente algorithmische Lösung für diese Probleme zu entwickeln. ◮ Die erreichbare Effizienz einer algorithmischen Lösung hängt oft vom Typ des Problems ab. Für manche Probleme können wir nicht erwarten eine effiziente Lösung zu finden. ◮ Manche Probleme erlauben es uns auf einige Entwurfsmethoden für Algorithmen zurückzugreifen. Andreas Jakoby [email protected] Sprechstunde: Dienstags 10:00-12:00 WS 06/07 1 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck 2 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Entwurfsmethoden für Algorithmen ◮ In der Informatik wurden eine Reihe von Entwurfsmethoden für Algorithmen entwickelt. Auf einige dieser Methoden werden wir in dieser Vorlesung eingehen. ◮ ◮ ◮ ◮ ◮ ◮ Ziele der Vorlesung: Divide and Conquer Dynamisches Programmieren Greedy-Algorithmen Backtracking Lineares Programmieren Transformationen 3 ◮ zentrale Entwurfsmethoden für Algorithmen ◮ Analysemethoden für Algorithmen und für algorithmische Problemstellungen ◮ wichtige Optimierungsalgorithmen 4 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Scheinvergabe: ◮ ◮ Um einen Schein für diese Vorlesung zu erhalten, ist die erfolgreiche Teilnahme an der abschließenden Prüfung erforderlich. 2 Greedy-Algorithmen (gierige Algorithmen) Um zur Prüfung zugelassen zu werden, ist eine erfolgreiche Teilnahme an den Übungen erforderlich. Die Kriterien für eine erfolgreiche Übungsteilnahme sind: 1. alle bis auf maximal zwei Übungsblätter wurden erfolgreich bearbeitet — ein Übungsblatt gilt als erfolgreich bearbeitet, wenn auf diesem Blatt mindestens 50% der Punkte erreicht wurden und diese Lösungen auch von dem Studierenden vorgetragen werden können — 2. und die Programmieraufgabe wurde erfolgreich bearbeitet. ◮ Greedy-Algorithmen werden oft für die exakte oder approximative Lösung von Optimierungsproblemen verwendet. ◮ Typischerweise konstruiert ein Greedy-Algorithmus eine Lösung Komponente für Komponente, wobei der Wert einer einmal gesetzten Komponente nie zurückgenommen wird. ◮ Beispiele: die Algorithmus von Kruskal, die Konstruktion eines Huffman-Codes und der Approximationsalgorithmus für das Binpacking Problem Best-Fit. 5 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Philosophie von Greedy-Verfahren ◮ Iterative Konstruktion einer Lösung unter Verwendung lokaler Optimalitätskriterien. ◮ Hoffnung: Lokale Optimalität führt auch zur globalen Optimalität — oder zumindest zu einer guten Approximation. ◮ Verschiedene lokale Kriterien führen zu verschiedenen Algorithmen. Analysemethoden für Greedy-Verfahren 6 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 2.1 Minimale Spannbäume ◮ ◮ ◮ Um zu zeigen, dass ein Greedy-Verfahren eine optimale Lösung findet, werden im wesentlichen zwei Analysemethoden eingesetzt: 1. the greedy algorithm stays ahead: In jedem Schritt ist die gefundene partielle Lösung des Greedy-Verfahrens mindestens so gut wie jede andere partielle Lösung. 2. exchange argument: Jede Lösung kann Schrittweise in die Lösung des Greedy-Verfahrens transformiert werden, ohne dass hierbei die Güte der Lösung abnimmt. ◮ ◮ ◮ 7 Gegeben ist ein ungerichteter, zusammenhängender, gewichteter Graph G = (V , E ) mit einer positiven Kostenfunktion f : E → R+ . Wir nehmen an, dass für alle Kanten e ∈ E f (e) > 0 ist. Wir nennen T = (V ′ , E ′ ) einen Spannbaum von G , wenn V = V ′ und T ein Baum ist. Gesucht ist ein Baum T = (V , E ′ ) mit E ′ ⊆ E , so dass, P e∈E ′ f (e) minimal unter allen Spannbäumen von G ist. Ist f (e) konstant 1, so können wir dieses Problem wieder mit Hilfe der Breiten- oder Tiefensuche lösen. Wir werden im Folgenden das Verfahren von Kruskal vorstellen. 8 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Was ist eine Priorityqueue? Zur effizienten Implementation benutzen wir die Datenstruktur der Priorityqueue und der Partition. Die letztere Datenstruktur ist auch unter dem Namen UNION/FIND-Datenstruktur bekannt. ◮ Wir betrachten eine Teilmenge M eines Universums U, wobei jedem Element m ∈ M eine Priorität p(m) (oder kurz p) zugeordnet wird. ◮ ◮ Wir starten mit |V | einelementigen Mengen, von denen jede einen anderen Knoten des Graphen enthält. insert(m, p): fügt m ∈ U mit Priorität p in M ein. ◮ deletemin: gibt das Element aus M mit minimaler Priorität zurück und entfernt dieses aus M. ◮ Diese Mengen werden als Bäume mit jeweils einem Knoten interpretiert. ◮ readmin: gibt das Element aus M mit minimaler Priorität zurück ohne es zu entfernen. ◮ Sukzessive verschmelzen wir diese Mengen durch Hinzunahme einer Kante mit minimalen Kosten: Finde die minimale Kante, die zwei Knoten aus unterschiedlichen Mengen verbindet und vereinige die beiden Mengen. ◮ decpriority(m, d): die Priorität von m in M wird um d reduziert. ◮ Eine Priorityqueue kann mit Hilfe eines Heaps (Heapsort) so implementiert werden, dass die Laufzeiten der Initialisierung in O(|M|), von readmin in O(1) und der drei verbleibenden Operationen in O(log |M|) liegen. 9 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck 10 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Was ist eine UNION/FIND-Datenstruktur bzw. eine Partition? ◮ ◮ Partitionen stellen eine eingeschränkte Form von Mengen dar. Der abstrakten Datentyp ist wie folgt definiert: ◮ ◮ ◮ ◮ Die UNION/FIND-Datenstruktur kann recht einfach so implementiert werden, dass U = {1, . . . , n} sei ein Universum. P = {P1 , . . . , Pk } sei eine Menge Sn von disjunkten, nicht leeren Teilmengen von U mit U = i=1 Pi . Wir nennen diese Teilmengen Partitionsblöcke oder kurz Blöcke. Jedem Partitionsblock Pi wird ein Element ni ∈ Pi als Repräsentant (bzw. als Name) zugeordnet. Auf P sind die folgenden zwei Prozeduren definiert: Sei x ∈ U und ni , nj Repräsentanten zweier Partitionsblöcke Pi und Pj . ◮ ◮ ◮ die Initialisierung in Zeit O(|U|), ◮ jede union-Operation in konstanter Zeit und ◮ jede find-Operation in Zeit O(log2 |U|) ausgeführt werden kann. Einige aufwendigere Implementierungen erlauben es die Laufzeit der find-Operation erheblich zu reduzieren. find(x) liefert den Repräsentanten ni der Menge Pi mit x ∈ Pi . union(ni , nj ) vereinigt die Blöcke mit den Repräsentanten ni und nj . Diese Operation verändert die Menge P, d.h. P = (P \ {Pi , Pj }) ∪ {Pi ∪ Pj }. Der Repräsentant der neuen Menge ist entweder ni oder nj . 11 12 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck Beispiel Algorithmus MST-Kruskal() Eingabe: global gegebener Graph G Ergebnis: minimaler Spannbaum T = (V , E ′ ) 1: Bilde die Priorityqueue Q aller e ∈ E mit Prioritäten f (e). 2: Initialisiere die Partitionen {v } für alle v ∈ V . 3: E ′ := ∅, k = |V | 4: while k > 1 do 5: {v , w } := deletemin(Q); v0 := find(v ); w0 := find(w ); 6: if v0 6= w0 then 7: union(v0 , w0 ); E ′ := E ′ ∪ {{v , w }}; k := k − 1; 8: end if 9: end while 10: Return(T = (V , E ′ )) 3 1 5 6 2 4 5 6 2 16 13 4 1 7 9 3 0. Initialisierung 1 1. deletemin= {3, 6} find(3) 6= find(6) 1 5 2. deletemin= {1, 2} find(1) 6= find(2) 1 5 5 2 4 3 6 6 6 2 2 1 4 2 3 1 4 3 13 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck 3. deletemin= {5, 1} find(5) 6= find(1) 3 1 4. deletemin= {5, 6} find(5) 6= find(6) 3 1 5 2 4 2 4 4 2 6. deletemin= {1, 6} find(1) = find(6) 3 5 2 5 2 4 8. deletemin= {3, 4} find(3) 6= find(4) 3 1 6 1 4 4 2 4 6 1 4 2 4 1 9 3 3 T = (V , ET ) ein minimaler Spannbaum für G , ◮ W = (V , EW ) ein Wald der in T enthalten ist, d.h. EW ⊆ ET und ◮ S ⊆ V eine Knotenmenge, so dass keine Kante aus EW zwischen den Mengen S und V \ S verläuft. Wir nennen eine Kante aus E kreuzend, wenn sie einen Knoten aus S mit einem Knoten aus V \ S verbindet. Ist e ∈ E eine kreuzende Kante, die minimale Kosten unter allen kreuzenden Kanten besitzt, dann ist auch W ′ := (V , EW ∪ {e}) in einem minimalen Spannbaum enthalten. 5 2 6 1 ◮ 3 7. deletemin= {2, 3} find(2) = find(3) 3 1 G = (V , E ) ein ungerichteter Graph, 4 1 3 3 ◮ 6 1 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Lemma 1 Sei 5 2 4 6 1 2 1 Andreas Jakoby Universität zu Lübeck Korrektheit 3 5 2 6 2 5. deletemin= {2, 6} find(2) = find(6) 14 3 15 16 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Beweis von Lemma 1: Angenommen, T enthält W aber nicht W ′ . V \S S ◮ ◮ T ist ein Spannbaum, somit gibt es von jedem Knoten in V einen Weg zu jedem anderen Knoten in V . ◮ Addieren wir e zu T , so schließen wir einen Kreis C . e ◮ Beweis von Lemma 1 (Teil 2) P P ◮ Ist f (e) < f (e ′ ), so gilt w ∈ET′ f (w ) < w ∈ET f (w ) für ′ ′ ET = (ET ∪ {e}) \ {e }. Dieses widerspricht der Annahme, dass T ein minimaler Spannbaum ist. Wir können somit ausschließen, dass f (e) < f (e ′ ) ist. Dann gilt e 6∈ ET . ◮ C besitzt neben e noch eine kreuzende Kante e ′ . Sei T ′ := (V , (ET ∪ {e}) \ {e ′ }). T ′ ist ein Spannbaum von G , da T ′ wieder zyklenfrei ist und |V | − 1 Kanten hat. Da f (e) minimal unter allen kreuzenden Kanten ist, gilt f (e) ≤ f (e ′ ). ◮ ◮ ◮ Ist f (e) = f (e ′ ), so haben T und T ′ die gleichen Kosten. Da T ein minimaler Spannbaum ist, muss auch T ′ ein minimaler Spannbaum sein. Wir haben somit gezeigt, dass W ′ in einem minimalen Spannbaum enthalten ist. 17 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck 18 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Korrektheit vom Kruskals Algorithmus ◮ Laufzeit von Kruskals Algorithmus Der MST-Algorithmus nimmt immer eine minimale kreuzende Kante in den bereits konstruierten Wald W auf. ◮ ◮ Sei e = {u, v } = deletemin(Q). Über die Abfrage find(u) = find(v ) wird überprüft, ob u und v bereits in einer Komponente von W liegen. Beachte: Mit jeder eingefügten Kante {u ′ , v ′ } vereinigen wir die entsprechenden Mengen find(u ′ ) und find(v ′ ). Somit repräsentiert jede Menge der Partition einen Baum des konstruierten Walds. ◮ ◮ ◮ ◮ ◮ ◮ Ist find(u) = find(v ), so verwerfen wir die Kante. Ist find(u) 6= find(v ), so stellt S die Knotenmenge des Teilbaums dar, in dem u liegt. Somit ist e eine minimale kreuzende Kante. Aus Lemma 1 können wir nun schließen, dass W ′ = (V , EW ∪ {e}) in einem minimalen Spannbaum enthalten ist, wenn auch W = (V , EW ) in einem minimalen Spannbaum enthalten ist. 19 Die Initialisierung der Priorityqueue gelingt in Zeit O(|E |). Die Initialisierung der Partitionen gelingt in Zeit O(|V |). Die While-Schleife muss im Worst-Case |E | mal durchlaufen werden. Bei jedem Durchlauf werden einmal die Operationen deletemin und zweimal die Operation find aufgerufen. Nach unseren Annahmen über die Priorityqueue und der UNION/FIND-Datenstruktur können wir diese Operationen in Zeit O(|E | · log |E |) ausführen. ◮ In |V | − 1 Durchläufen der While-Schleife wird jeweils einmal eine union-Operation aufgerufen. ◮ Zusammen erhalten wir eine Laufzeit von O(|E | · log |E |). 20 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck 2.2 Intervall-Scheduling Definition 1 [Intervall-Scheduling Problem] Gegeben sei ◮ Satz 1 Sei G = (V , E ) ein zusammenhängender, ungerichteter, gewichteter Graph. Dann berechnet Kruskals Algorithmus einen minimalen Spannbaum für G in Zeit ◮ eine Menge R = {1, . . . , n} von n Jobs und zwei Funktionen s, f : R → N. Hierbei gilt für alle Jobs i s(i) ≤ f (i) O(|E | · log |E |) . Bemerkung 1 Betrachten wir die Aussage von Lemma 1 und den Korrektheitsbeweis von Kruskals Algorithmus, so erkennen wir, dass wir hierbei ein exchange argument angewendet haben. ◮ s(i) nennen wir die Startzeit von Job i und ◮ f (i) nennen wir die Endzeit von Job i. Job i steht im Konflikt mit Job j, wenn ◮ ◮ i 6= j und die Intervalle [s(i), f (i)[ und [s(j), f (j)[ sich überlappen. Mit [s(i), f (i)[ bezeichnen wir das nach rechts offene reelle Intervall. 21 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 22 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Wir starten mit einem Grundgerüst für einen Greedy-Algorithmus für das Intervall-Scheduling Problem: Algorithmus Greedy-Intervall-Schedule(R) Eingabe: Menge R Ergebnis: optimale Schedule S 1: S := ∅ 2: while R 6= ∅ do 3: wähle ein eine Job i ∈ R 4: S := S ∪ {i}; 5: entferne alle Jobs aus R, die zu i im Konflikt stehen 6: R := R \ {i} 7: end while 8: Return(S) Unsere Aufgabe besteht jetzt darin, den Auswahlmechanismus in Zeile 3 näher zu beschreiben. Definition 1 (Teil 2) ◮ Eine Teilmenge S ⊆ R ist eine zulässige Schedule, wenn S konfliktfrei ist, d.h. für alle i, j ∈ S steht i nicht im Konflikt zu j. ◮ Eine Teilmenge S ⊆ R ist eine optimale Schedule, wenn S eine zulässige Schedule maximaler Kardinalität ist, d.h. |S| ist maximal. Aufgabe: Bestimme eine optimale Schedule! 23 24 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Einfache Auswahlmechanismen: Wir starten mit einer einfachen Beobachtung: Beobachtung 1 Für alle Auswahlmechanismen ist das Ergebnis S eine zulässige Schedule. 1. wähle i mit s(i) = minj∈R s(j) Diese Beobachtung folgt unmittelbar daraus, dass wir in Zeile 5 alle Jobs löschen, die zu einem einmal in die Schedule aufgenommenen Job im Konflikt stehen. 3. wähle das i, welches mit den wenigsten Jobs in R im Konflikt steht 2. wähle i mit f (i) − s(i) = minj∈R f (j) − s(j) 4. wähle i mit f (i) = minj∈R f (j) 25 Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Andreas Jakoby Universität zu Lübeck ◮ Anhand der nachfolgenden Graphik können wir leicht erkennen, dass die ersten drei Auswahlmechanismen auf Folie 26 keine optimale Schedule liefern. Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 1. Vorlesung, 16.10.2006 Benutzen wir den vierten Auswahlmechanismus, so können wir unseren Greedy-Algorithmus wie folgt implementieren: Algorithmus Earliest-Finishingtime-First(R) Eingabe: Menge R Ergebnis: optimale Schedule S 1: sortiere R nach aufsteigend Werten von f (i) und 2: sei j1 , . . . , jn die sortierte Folge 3: S := {j1 }; j := j1 4: for i := 2 to n by +1 do 5: if f (j) ≤ s(ji ) then S := S ∪ {ji }; j := ji end if 6: end for 7: Return(S) Die Laufzeit im Rumpf der For-Schleife ist konstant. Somit wird die Laufzeit dieses Algorithmus durch das Sortieren in Zeile 1 dominiert und liegt in O(n · log2 n). 1. 2. 3. ◮ 26 Behauptung Benutzen wir jedoch den vierten Mechanismus in Zeile 3 von Algorithmus Greedy-Intervall-Schedule, so erhalten wir eine optimale Schedule. Dieses muss aber noch bewiesen werden! 27 28 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Vergleichen wir nun S mit einer beliebigen optimalen Schedule O: Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Sei O = {j1 , . . . , jm } und S = {i1 , . . . , ik }. ◮ Wir wollen zeigen, dass m = k ist. Wir wollen nun die zentrale Beobachtung für unsere Greedy-Verfahren bei Benutzung der vierten Auswahlmethode beweisen: ◮ O.B.d.A. gehen wir davon aus, dass die Intervalle in der Jobs in O und S von rechts nach links sortiert sind, d.h. Lemma 2 Für alle r ≤ k gilt ◮ ∀ℓ < m : f (jℓ ) ≤ s(jℓ+1 ) ◮ ◮ f (ir ) ≤ f (jr ) . und ∀ℓ < k : f (iℓ ) ≤ s(iℓ+1 ) Beweis von Lemma 2: Wir zeigen Lemma 2 mit Hilfe einer Induktion über r . Um diese Reihenfolge zu erhalten können wir einfach die Elemente in O bzw. in S nach den Startzeiten der Jobs sortieren. ◮ Die Reihenfolge der Jobs ändert sich nicht, wenn wir die Jobs nach deren Endzeiten sortieren. Für r = 1 folgt Lemma 2 aus der Beobachtung, dass der Algorithmus mit dem i1 startet, welches den minimalen Wert f (i1 ) besitzt. 30 29 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Auf Lemma 2 können wir folgenden Satz schließen: Satz 2 Earliest-Finishingtime-First berechnet eine optimale Schedule in Zeit O(n · log2 n). Beweis von Lemma 2 (Teil 2): ◮ Für r > 1 schließen wir wie folgt: ◮ ◮ ◮ ◮ ◮ Annahme, die Behauptung ist für alle ℓ < r korrekt. Somit gilt f (ir −1 ) ≤ f (jr −1 ). Da O eine zulässige Schedule ist gilt f (jr −1 ) ≤ s(jr ). Somit ist {i1 , . . . , ir −1 , jr } eine zulässige Schedule. Da unser Algorithmus das ir mit minimalem f (ir ) wählt, gilt insbesondere f (ir ) ≤ f (jr ). Somit gilt Lemma 2. Beweis von Satz 2: ◮ ◮ Ist k = m, so ist S optimal. Ist k < m, so folgt aus Lemma 2: ◮ ◮ ◮ ◮ 31 {i1 , . . . , ik , jk+1 } ist eine zulässige Schedule. R ist nach dem Durchlaufen der Schedule nicht leer. S ist nicht das Ergebnis von Greedy-Intervall-Schedule bzw. von Earliest-Finishingtime-First auf Eingabe von R — Widerspruch. Folglich ist k nicht kleiner m. 32 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Beispiel für die Online-Version: Ski-Leih Problem Definition 2 [Ski-Leih Problem] Sie fahren zum ersten mal in Skiurlaub und betrachten die Frage, ob und nach wie vielen Saisons es sich rentiert Skier zu kaufen. Hierbei müssen Sie die folgenden Punkte betrachten: Erweiterungen des Intervall-Scheduling Problems: ◮ ◮ Online-Variante: Die Menge der Jobs liegt zu Beginn der Berechnung der Schedule noch nicht vor, sondern wird erst im Verlauf der Berechnung Job für Job bekannt gegeben. Die Anfangsstücke der Schedule müssen jedoch so schnell wie möglich erstellt werden. Gewichtetes Intervall-Scheduling Problems: Jeder Job besitzt neben seinem Anfangs- und Endzeitpunkt noch ein Gewicht. Gesucht ist jetzt eine zulässige Schedule, die die Summe der Gewichte maximiert. ◮ Ein Skiausrüstung kosten K Euro. ◮ Das Leihen der Skiausrüstung kostet pro Saison L Euro. ◮ Sollten Sie die Lust am Skifahren verlieren (z.B. durch einen Unfall), so verlieren Sie die Lust am Skilauf dauerhaft. Sollten Sie sich bis dahin eigene Skier gekauft haben, so verliert die Ausrüstung in dieser Saison ihren Wert. Bei der Online-Version des Ski-Leih Problem müssen Sie zu Beginn jeder Saison entscheiden, ob Sie sich eine Skiausrüstung kaufen oder leihen. Ihr Ziel ist es die anfallenden Kosten zu minimieren. 33 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 34 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Satz 3 Der nachfolgende Online-Algorithmus approximiert die minimalen Kosten für das Ski-Leih Problem mit einem Faktor 2 für L|K : 2.3 Intervall-Partitionierungs Problem Algorithmus Online-Ski-Leih() Online Eingabe der Ereignisse e1 , e2 , . . . Online Ausgabe der Aktionen a1 , a2 , . . . 1: a1 := leihen; t := 1 2: while true do 3: Return(at ) 4: t := t + 1 5: if at−1 = keine Lust mehr oder et−1 = Lust verloren then 6: at := keine Lust mehr 7: else 8: if t ≤ K /t then at := leihen else at := kaufen end if 9: end if 10: end while Definition 3 [Intervall-Partitionierungs Problem] Gegeben sei ◮ eine Menge R = {1, . . . , n} von n Jobs und ◮ zwei Funktionen s, f : R → N. Eine Partitionierung I = {I1 , . . . , Id } nennen wir zulässig, wenn jede Menge Ii eine zulässige Schedule von Jobs aus R ist. Ein mit dem Intervall-Scheduling Problem nahe verwandtes Problem ist das Intervall-Partitionierungs Problem: Aufgabe: Gesucht ist eine zulässige Partitionierung minimaler Kardinalität! Eine Teilmenge C ⊆ R nennen wir Konfliktmenge, wenn jeder Job aus C mit jedem anderen Job aus C einen Konflikt hat, d.h. ∃t ∈ N ∀i ∈ C : s(i) ≤ t < f (i) . Die Überlappung ovl(R) einer Jobmenge R = {1, . . . , n} ist die maximale Kardinalität einer Konfliktmenge. 35 36 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Lemma 3 Für jede Eingabe R, s, f hat jede zulässige Partitionierung eine Kardinalität mindestens ovl(R). Beispiel: Gegeben ist eine Menge von Vorlesungsmodulen R = {1, . . . , n} mit entsprechenden Start- und Endzeitpunkten. Finde eine Aufteilung der Vorlesungen auf die Hörsäle, so dass nur eine minimale Anzahl an Hörsäle benötigt wird. Beweis von Lemma 3: Das Lemma folgt unmittelbar aus der Beobachtung, dass alle Jobs aus einer Konfliktmenge in unterschiedlichen Teilmengen der Partition liegen müssen. Wir wollen nun einen Algorithmus vorstellen und analysieren, der eine zulässige Partitionierung der Kardinalität ovl(R) findet. 37 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Algorithmus Starttime-Ordering(R) Eingabe: Menge R der Jobs Ergebnis: zulässige Partitionierung der Kardinalität ovl(R) 1: sei Q eine leere Priorityqueue Q für Jobs i mit Prioritäten f (i). 2: sei r1 , . . . , rn die nach den Startzeiten sortierte Folge der Jobs 3: sei ℓ := 1, m(r1 ) := 1 und füge r1 in Q und in I1 ein 4: for i = 2 to n by +1 do 5: sei rj das erste Element in Q 6: if f (rj ) > s(ri ) then 7: sei ℓ := ℓ + 1, m(ri ) := ℓ und füge ri in Q und in Iℓ ein 8: else 9: entferne rj aus Q 10: sei m(ri ) := m(rj ) und füge ri in Q und in Im(rj ) ein 11: end if 12: end for 13: Return(I1 , . . . , Iℓ ) 38 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Warum ist Starttime-Ordering ein Greedy-Algorithmus? ◮ Wir müssen das lokale Entscheidungkriterium finden, welches wir in jedem Schritt des Verfahrens benutzen: ◮ ◮ 39 In jedem Durchlauf der For-Schleife betrachten wir den noch nicht betrachteten Job ri mit der minimalen Startzeit. Wir fügen diesen Job in eine (beliebige) Teilmenge ein, deren Jobs nicht zum aktuell betrachtete Job im Konflikt stehen. ◮ Alle diese Kriterien stellen lokale Entscheidungkriterien dar. ◮ Starttime-Ordering ist somit ein Greedy-Algorithmus. 40 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Wir wollen nun den Algorithmus Starttime-Ordering analysieren: Lemma 4 Für die Ausgabe I1 , . . . , Iℓ von Starttime-Ordering gilt ℓ = ovl(R). Beweis von Lemma 4: Für die Priorityqueue Q gilt: Beobachtung 2 Die Ausgabe I1 , . . . , Iℓ von Starttime-Ordering ist eine zulässige Partition. Beweis von Beobachtung 2: Wir betrachten zunächst die Priorityqueue Q: ◮ Bei jedem Durchlauf der For-Schleife ist in Q für jede nicht-leere Teilmenge Ij das zu letzt in Ij eingefügte Element gespeichert. ◮ ri wird nur in eine Teilmenge Im(rj ) eingefügt wird, wenn s(ri ) ≥ f (rj ) ist. ◮ Per Induktion über i folgt nun, dass ein Job ri nie in eine Teilmenge eingefügt wird, welche einen Job rk enthält, welches zu ri im Konflikt steht. ◮ In jedem Schleifendurchlauf gilt, dass die Endzeit des ersten Elements in Q minimal unter allen Elementen in Q ist. ◮ In dem Schleifendurchlauf für einen Job ri wir nur dann eine neue Teilmenge Ik generiert, wenn ri im Konflikt mit dem ersten Element in Q und somit zu allen Elementen in Q steht. Wird in einem Schleifendurchlauf für einen Job ri eine neue Teilmenge Ik generiert, so gilt für alle Jobs rk in Q ◮ ◮ ◮ aufgrund der Sortierung in Zeile 2: s(rk ) ≤ s(ri ) und aufgrund der Eigenschaften der Priorityqueue: f (rk ) > s(ri ). 42 41 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Beobachtung 3 Die Laufzeit von Starttime-Ordering ist in O(n · log n). Beweis von Beobachtung 3: ◮ Um die n Jobs zu sortieren benötigen wir O(n log n) Schritte. ◮ Für jeden Job ri mit i ≥ 2 müssen wir einmal den Rumpf der For-Schleife durchlaufen. Um den Rumpf einmal zu durchlaufen müssen wir Beweis von Lemma 4 (Teil 2): ◮ Werden also mehr als ovl(R) viele Teilmengen Ik generiert, so gibt es ein ri , so dass es in R zumindest ovl(R) + 1 viele Jobs h1 , . . . , hovl(R)+1 mit ◮ s(hj ) ≤ s(ri ) < f (hj ) . ◮ ◮ ◮ Diese Jobs bilden somit eine Konfliktmenge der Kardinalität ovl(R) + 1. ◮ Dieses ist ein Widerspruch zur Definition von ovl(R). ◮ einmal auf das erste Element von Q zugreifen (O(1)), ein Element in Q einfügen (O(log ℓ)) und unter Umständen das erste Element aus Q entfernen (O(log n)). Diese Laufzeiten folgen aus unserer Annahme von Folie 10. Da die Anzahl der Teilmengen durch die Anzahl der Elemente beschränkt ist, erhalten wir eine Laufzeit von O(n · log n + n · log ℓ) = O(n · log n) 43 44 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Fassen wir unsere Beobachtungen von den Folien 38 bis 44 zusammen, so erhalten wir: Definition 4 [Intervall-Scheduling mit Deadline] Gegeben sei ◮ ◮ Wie können wir den Beweis der Optimalität von Starttime-Ordering mit Hilfe unserer beiden Schemata von Folie 7 interpretieren? ◮ i∈R eine Menge R = {1, . . . , n} von n Jobs und zwei Funktionen δ, τ : R → N. Mit τ (i) bezeichnen wir die Laufzeit von Job i und mit δ(i) die Deadline von i: Für jeden Zeitpunkt t mit min s(i) ≤ t Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 2.4 Intervall-Scheduling mit Deadline Satz 4 Es gibt ein Greedy-Algorithmus, dar das Intervall-Partitionierungs Problem in Zeit O(n · log n) löst. ◮ Andreas Jakoby Universität zu Lübeck < max f (i) Starten wir Job i zum Zeitpunkt t, so endet die Berechnung von i zum Zeitpunkt t + τ (i). Eine Schedule S für R weist jedem Job i einen Startzeitpunkt S(i) zu. Eine Schedule S nennen wir zulässig, wenn für alle Paare i, j ∈ R mit i 6= j gilt: i∈R gilt: Für alle Jobs i ∈ R mit s(i) ≤ t generiert Starttime-Ordering maximal so viele Teilmengen, wie ein optimaler Algorithmus generieren würde. ◮ die Intervalle [S(i), S(i) + τ (i)[ und [S(j), S(j) + τ (j)[ überlappen sich nicht. 46 45 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Definition 4 (Teil 2) Wir sagen, dass sich ein Job i in einer Schedule um den Wert Algorithmus Earliest-Deadline-First(R) Eingabe: Menge R der Jobs mit Laufzeiten τ (i) und Deadlines δ(i) Ergebnis: eine optimale Schedule S 1: sei r1 , . . . , rn die nach der Deadlines sortierte Folge der Jobs 2: sei t := 0 3: for i := 1 to n by +1 do 4: schedule ri für den Zeitpunkt t, d.h. S(ri ) := t 5: setze t := t + τ (ri ) 6: end for 7: Return(S) v (i) := max{0, S(i) + τ (i) − δ(i)} verspätet. Wir definieren die Verspätung einer Schedule S als L(S) := max v (i) . i∈R Eine Schedule S nennen wir optimal, wenn ◮ S zulässig ist und für alle ◮ anderen zulässige Schedules S ′ für R gilt L(S) ≤ L(S ′ ) . Aufgabe: Finde eine optimale Schedule! 47 48 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Um die Optimalität des Resultats von Earliest-Deadline-First zu zeigen, werden wir folgende Punkte analysieren: ◮ Eine Schedule S besitzt Leerzeiten, wenn für einen Zeitpunkt t Beobachtung 4 Es gibt eine optimale Schedule ohne Leerzeiten. ∈ [0, max{S(i) + τ (i)}[ Lemma 5 Alle Schedules ohne Inversion und ohne Leerzeiten besitzen die gleiche maximale Verspätung. i∈R keinen Job i ∈ R mit S(i) ≤ t Beweis von Lemma 5: < S(i) + τ (i) ◮ existiert. ◮ ◮ Für eine Schedule S nennen wir ein Paar (i, j) nennen wir Inversion, wenn S(i) < S(j) und Seien S und S ′ zwei unterschiedliche Schedules ohne Inversion und ohne Leerzeiten. S und S ′ unterscheiden sich nur in der Startreihenfolge der Jobs mit gleicher Deadline. δ(i) > δ(j) ist. 49 Algorithmik WS 06/07 2. Vorlesung, 23.10.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 5 (Teil 2): ◮ 50 Andreas Jakoby Universität zu Lübeck Um den folgenden Satz zu beweisen werden wir ein exchange argument anwenden. Sei D(i) := { j ∈ R | δ(i) = δ(j) } und sei d(i, S) der Job aus D(i), der in S als letztes ausgeführt wird, dann gilt für alle i ∈ R X S(d(i, S)) + τ (d(i, S)) = τ (j) Satz 5 Es existiert eine optimale Schedule ohne Inversion und ohne Leerzeiten. Beweis von Satz 5: j∈{k∈R|δ(k)≤δ(i)} ◮ Nach Beobachtung 4 gibt es eine optimale Schedule O ohne Leerzeiten. ◮ Gibt es in O eine Inversion, dann gibt es ein Paar i, j ∈ R, so dass i unmittelbar nach j ausgeführt wird — d.h. S(i) = S(j) + τ (j) — und δ(j) > δ(i) ist. = S ′ (d(i, S ′ )) + τ (d(i, S ′ )) . ◮ Da L(S) = maxi∈R S(d(i, S)) + τ (d(i, S)) − δ(i) ist, gilt L(S) = L(S ′ ). Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 51 52 Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Andreas Jakoby Universität zu Lübeck Beweis von Satz 5 (Teil 2): ◮ Tauschen wir das Paar i und j, dann ◮ ◮ Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Die vom Algorithmus Earliest-Deadline-First generierte Schedule ist: hat die neue Schedule O ′ eine Inversion weniger und die maximale Verspätung von O ′ ist kleiner gleich der maximalen Verspätung von O. ◮ O′ ist somit eine optimale Schedule ohne Leerzeiten und einer Inversion weniger als O. ◮ Andreas Jakoby Universität zu Lübeck ◮ ohne Leerzeiten aufgrund der Wahl von t in Zeile 2 und 5 und ◮ ohne Inversion aufgrund der Sortierens der Jobs bezüglich ihrer Deadlines in Zeile 1. Aus Lemma 5 und Satz 5 folgt nun unmittelbar: Wir können somit Schritt für Schritt alle Inversionen aus O entfernen. Satz 6 Earliest-Deadline-First generiert eine optimale Schedule. 53 Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Andreas Jakoby Universität zu Lübeck 2.5 Online-Scheduling — das Caching–Problem ◮ ◮ ◮ ◮ ◮ ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Definition 5 [Caching-Problem] Gegeben ist ◮ eine Anfragesequenz X = x1 , x2 , . . . über einem Universum U und ◮ ein Cache C der Größe k, d.h. C kann k Elemente aus U speichern. Eine Schedule für das Caching-Problem besteht aus einer Folge von Operationen. Zur Verfügung stehen: ◮ load-Operationen: load(x) legt das Datenelement x auf einem freien Cacheplatz ab. Diese Operation verursacht Kosten 1. ◮ eject-Operationen: eject(x) entfernt das Datenelement x aus dem Cache und hinterläßt einen freien Cacheplatz. Diese Operation verursacht keine Kosten. ◮ nop-Operationen: nop führt zu keiner Veränderung des Caches. Diese Operation verursacht keine Kosten. Die letzte Operation ist nicht unbedingt nötigt. Sie vereinfacht jedoch die Darstellung der Schedule. In viele Scheduling–Anwendungen sind nicht alle zeitlichen Daten vorab bekannt. In einem solchen Szenario müssen oft sukzessive Entscheidungen über eine Schedule getroffen werden, bevor weitere zeitliche Informationen bekannt werden. Fehlende Informationen über die Zukunft verhindern zumindest in einem worst–case Szenario, dass die von einem Algorithmus getroffenen sukzessiven online–Entscheidungen zu einem optimalen Schedule vervollständigt werden können. Ein Beispiel für eine solche Aufgabe ist das Caching-Problem: ◮ 54 Datenelemente müssen in einem lokalen Cache gehalten werden, damit ein Prozessor schnell auf sie zugreifen kann. Die Kapazität k (Anzahl der Speicherplätze) ist viel kleiner als die Anzahl der Datenelemente. Soll ein Datenelement x verwendet werden, dass nicht im Cache vorhanden ist, so spricht man von einem Cache-Miss. 55 56 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Definition 5 (Teil 2) Eine Schedule (oder Strategie) für eine Anfragesequenz X = x1 , x2 , . . . ist eine Sequenz O = o1 , o2 , . . . von Cache-Operationen, die zu einer Folge von Cache-Zuständen C0 , C1 , C2 , . . . führt, wobei ∅ für i = 0 Ci−1 für oi = nop Ci := C \ {x} für oi = eject(x) i−1 Ci−1 ∪ {x} für oi = load(x) Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Andreas Jakoby Universität zu Lübeck Vorbemerkungen: ◮ Ein Algorithmus muss entscheiden: ◮ ◮ und die folgenden Bedingungen erfüllt sein müssen: ◮ für alle i ist |Ci | ≤ k und ◮ für alle i ist xi ∈ C2i . Die Kosten einer Schedule sind die Summe der ausgeführten load-Operationen. Aufgabe: Finde eine Schedule für die Sequenz X mit minimalen Kosten, d.h. mit einer minimalen Anzahl von Cache-Misses! wann eine load(x)-Operation für ein Element x ausgeführt werden muss und welches Element y durch eject(y ) zuvor entfernt werden muss. ◮ Führt eine Strategie erst dann load(x) aus, wenn x in der Anfragesequenz erscheint, dann nennen wir diese Strategie lazy. ◮ Zudem verlangen wir von einer lazy Strategie, dass sie nur dann eine eject-Operation ausführt, wenn Platz im Cache benötigt wird, d.h. unmittelbar vor einer notwendigen load-Operation bei vollem Cache. 57 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Beweis von Lemma 6: Zunächst wandeln wir A in eine Strategie um, die keine überflüssigen load- und eject-Operationen beinhaltet: ◮ ◮ Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 6 (Teil 2): ◮ Wir alle load-Operationen auf gerade und alle eject-Operationen auf ungerade Stellen der Sequenz. Hierbei verfahren wir wie folgt: Lemma 6 Für jede Strategie A gibt es eine lazy Strategie B, die maximal so viele Kosten als A verursacht. ◮ 58 ◮ Ist load(x) ∈ {o2i−1 , o2i }, dann gibt es ein j ≥ i mit xj = x, so dass alle Operationen o2k−1 , o2k mit k ∈ [i; j] x nicht aus dem Cache entfernen. ◮ Wir gehen von vorne nach hinten durch die Sequenz der Operationen. Hierbei sammeln wir die load- und die eject-Operationen auf und plazieren sie neu in unsere Schedule: ◮ Ist oi = load(x), dann gibt x 6∈ Ci−1 . ◮ Ist oi = eject(x), dann gibt x ∈ Ci−1 . ◮ Alle load- und eject-Operationen, die diese Bedingungen nicht erfüllen, sind überflüssig und können durch nop-Operationen ersetzt werden. ◮ 59 Sei S = o1 , o2 , . . . die alte und S ′ = o1′ , o2′ , . . . die neue Schedule. Zum Aufsammeln der Operationen benutzen wir Multimengen L und E für die load- und die eject-Operationen. Betrachten wir ein Paar o2i−1 , o2i von Operationen, so fügen wir die vorhandenen load-Operationen zunächst in die Mengen L und die vorhandenen eject-Operationen zunächst in die Mengen E ein. Mit Hilfe der Mengen L und E können wir jetzt das Paar ′ o2i−1 , o2i′ generieren. 60 Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Beweis von Lemma 6 (Teil 3): ◮ Weiter mit der Umformung: ◮ ◮ ◮ ′ Ist xi nach den Operationen o1′ , . . . , o2i−2 im Cache vorhanden, ′ ′ dann können wir o2i−1 , o2i auf nop setzen. ′ Fehlt xi nach den Operationen o1′ , . . . , o2i−2 im Cache, dann muss es für xi im Präfix o1 , . . . , o2i eine load-Operation ′ gegeben haben, die wir im Präfix o1′ , . . . , o2i−2 noch nicht ausgeführt haben. Diese setzen wir jetzt auf o2i′ und entfernen diese aus L. ′ Wird der Cache im Verlauf der Operationen o1′ , . . . , o2i−2 vollständig gefüllt, dann gibt es im Cache nach den ′ Operationen o1′ , . . . , o2i−2 ein Element, welches sich nach den Operationen o1 , . . . , o2i nicht im Cache befindet. Da bei unserem Verfahren die load-Operationen von vorne nach hinten wandern, muss es für dieses Element in der Sequenz o1 , . . . , o2i ′ eine eject-Operation geben, die wir in o1′ , . . . , o2i−2 noch nicht ′ ausgeführt haben. Diese führen wir jetzt als o2i−1 aus und erhalten Platz für die benötigte load-Operation o2i′ . Es ist einfach zu zeigen, dass im Online-Fall für jede Strategie eine Sequenz existiert, die Kosten in der Länge der Sequenz verursacht: ◮ In den ersten k Elementen füllen wir den Cache. ◮ Als das k + 1-te Element wählen wir ein Element, welches noch nicht im Cache ist. ◮ Wir wählen xi für i ≥ k + 2 als das Element, welches wir als letzten aus dem Cache entfernt haben. Wenn die Sequenz x1 , . . . , xn im Voraus bekannt ist, können wir mit Hilfe des folgenden Greedy-Algorithmus eine optimale Schedule generieren. 61 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Algorithmus Evict-Furtherst-In-Future(X ) Eingabe: Sequenz X = x1 , . . . , xn von Datenelementen Ergebnis: eine optimale Schedule o1 , . . . , o2n 1: C := ∅ 2: for i := 1 to n by +1 do 3: t(xi ) := min{j > i|xj = xi }; 4: if xi ∈ C then 5: o2i−1 := nop; o2i := nop; C := C 6: else if |C | < k then 7: o2i−1 := nop; o2i := load(xi ); C := C ∪ {xi } 8: else 9: wähle xj ∈ C mit t(xj ) := maxx∈C t(x) 10: o2i−1 := eject(xj ); o2i := load(xi ); C := (C ∪ {xi }) \ {xj } 11: end if 12: end for 13: Return(o1 , . . . , o2n ) 62 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Kommentare zum Algorithmus ◮ 63 Bei der Berechnung von t(xi ) in den Zeile 3 gehen wir davon aus, dass t(xi ) = +∞ ist, wenn auf das Element xi zukünftig nicht mehr zugegriffen wird. 64 Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Andreas Jakoby Universität zu Lübeck Beweis von Satz 7 (Teil 2): Wir zeigen die folgende Aussage: ◮ Satz 7 Für jede Zugriffssequenz X konstruiert der Algorithmus Evict-Furtherst-In-Future eine Schedule mit minimalen Kosten. Beweis von Satz 7: Wir wollen diese Aussage über ein exchange argument beweisen. Sei Sei Oi eine optimale und lazy Schedule, die auf den ersten i Elementen der Eingabe die gleichen eject-Operationen wie S ausführt, dann können wir eine optimale und lazy Schedule Oi+1 konstruieren, die auf den ersten i + 1 Elementen der Eingabe die gleichen eject-Operationen wie S ausführt. ◮ O eine optimale und lazy Schedule und ◮ S eine Schedule wie sie über den Algorithmus konstruiert wird. ◮ Wir wollen nun O Schritt für Schritt so verändern, dass wir S erhalten. Wir erhalten hierbei eine Sequenz von optimalen und lazy Schedules O0 = O, O1 , . . . , On = S: Oi und S führen auf das i + 1-te Element der Eingabe die gleiche eject-Operation aus. In diesem Fall setzen wir Oi+1 = Oi . ◮ Oi und S führen auf das i + 1-te Element der Eingabe verschiedene eject-Operation aus. Sei y das Element, welches hierbei in S aus dem Cache entfernt wird und sei z das entsprechende Element in Oi . Wir ersetzen zunächst die Operation eject(z) in Oi durch eject(y ) und erhalten Oi′ . ◮ Wir unterscheiden die folgenden Fälle: Hierbei führt Oi auf den ersten i Elementen der Eingabe die gleichen eject-Operationen wie S aus. 65 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Beweis von Satz 7 (Teil 3): Bezüglich y und z unterscheiden wir die folgenden Fälle: ◮ Bevor y in der Eingabe wieder angefragt wird, wird y auch von Oi′ aus dem Cache entfernt: ◮ ◮ 66 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Beweis von Satz 7 (Teil 4): ◮ Es bleibt jetzt noch der Fall, dass y in O ′ nicht aus dem i Cache entfernt, bis y erneut angefragt wird. In diesem Fall verfahren wir wie folgt: Gibt es bis zu diesem Zeitpunkt keine neue Anfrage nach z, dann ersetzen wir diese eject-Operation in Oi′ durch eject(z), und wir erhalten einen Cache, der nach dieser Operation für Oi und Oi′ identische ist. Sei jetzt Oi+1 := Oi′ . Vor diesem Zeitpunkt gibt es eine neue Anfrage nach z. Wir betrachten die erste dieser Anfragen nach der i + 1-ten Anfrage. Da in Oi′ das Element z nicht aus dem Cache entfernt wurde, können wir die entsprechende load(z)-Operation aus Oi′ sowie die gefundene eject(y )-Operation aus Oi′ entfernen. Die resultierende Schedule ist jetzt nicht mehr lazy. Wir können diese Bedingung jedoch analog zu Lemma 6 wieder herstellen ohne die Operationen für die ersten i + 1-Eingabeelemente zu ändern. Sei Oi+1 die resultierende Schedule. ◮ Wir starten eine Suche nach dem ersten Auftauchen von z in der Eingabe nach dem i + 1-ten Eingabeelement. Da z zu diesem Zeitpunkt nicht im Cache bei der Schedule Oi ist, müssen wir an dieser Stelle eine load(z)-Operation ausführen. Bei Oi′ befindet sich jedoch z noch im Cache. Daher ist diese load-Operation nicht mehr nötigt und wir können sie durch ein load(y ) ersetzen. Die resultierende Schedule ist jetzt nicht mehr lazy. Wir können diese Bedingung jedoch analog zu Lemma 6 wieder herstellen ohne die Operationen für die ersten i + 1-Eingabeelemente zu ändern. Sei Oi+1 die resultierende Schedule. 67 68 Algorithmik WS 06/07 3. Vorlesung, 30.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmus von Dijkstra 2.6 Das Shortest-Path Problem ◮ ◮ ◮ ◮ ◮ ◮ ◮ Beim kürzesten Wegeproblem unterscheiden wir: ◮ Single Source Shortest Path Problem (SSSPP): Finde die billigsten Wege von einer Quelle (Startknoten) zu allen anderen Knoten. All Pairs Shortest Path Problem (APSPP): Finde die billigsten Wege zwischen allen Knotenpaaren. Der Algorithmus von Dijkstra löst das SSSPP Problem. Ideen: ◮ ◮ Als Eingabe liegt bei diesen Problemen jeweils ein gewichteter Graph G = (V , E ) mit einer Kantengewichtsfunktion f : E → R+ vor. ◮ Beachte: Die Kantengewichtsfunktion weist jeder Kante ein positives Gewicht ungleich 0 zu. ◮ Ist das Kantengewicht konstant 1, so können wir SSSPP mit Hilfe der Breitensuche lösen. ◮ Zur Vereinfachung gehen wir davon aus, dass V = [1..n] und 1 die Quelle sind. Sei C die |V | × |V |-Kostenmatrix von G , d.h. f (u, v ) für (u, v ) ∈ E C [u, v ] := ∞ sonst. In S speichern wir die Menge der Knoten v , für die wir bereits einen kürzesten Weg von 1 aus gefunden haben. Zu Beginn ist S = {1}. Im Feld D speichern wir für jeden Knoten v die Kosten des kürzesten bis jetzt gefundenen Pfades von 1 nach v , wobei wir auf diesem Pfad nur über Knoten aus S laufen dürfen. Im Feld W speichern wir den Vorgänger von v auf dem kürzesten bis jetzt gefundenen Pfad. 69 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 70 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Beispiel: ◮ ◮ Idee des Algorithmus von Dijkstra: 1. Setze S := {1}. 2. Suche den Knoten v ∈ V \ S, für den der bis jetzt gefundene Weg minimal ist. Setze S := S ∪ {v } und modifiziere die Felder D und W für die Knoten u ∈ V \ S mit (v , u) ∈ E , falls sich durch die Hinzunahme von v zu S ein kürzerer Pfad von 1 nach u ergibt. 3. Wiederhole den letzte Schritt bis S = V . S: 2 3 4 ◮ 1 1 4 1 1 5 2 2 2 Wir gehen davon aus, dass G , S, D, W global gegeben sind. 3 71 4 Sei S = {1, 2, 3} und ◮ D[4] = 4, D[5] = 2, D[6] = 6, ◮ dann ist 5 der nächste Knoten, der in S eingefügt wird. ◮ Der Pfad P5 ist 1, 2, 5. 6 72 Andreas Jakoby Universität zu Lübeck ◮ Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Wie finden wir den nächsten in S einzufügenden Knoten? Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck ◮ Algorithmus next-node() Eingabe: global gegeben Ergebnis: u ∈ V \ S mit minimaler Distanz zu 1 1: min:= ∞ 2: for v ∈ V \ S do 3: if D[v ] < min then 4: min:= D[v ] 5: u := v 6: end if 7: end for 8: Return(u) Modifikation der Felder: Algorithmus modify(u) Eingabe: u ∈ V \ S mit minimaler Distanz zu 1 Ergebnis: modifizierte Datenstruktur 1: S := S ∪ {u} 2: for v ∈ V \ S mit (u, v ) ∈ E do 3: if D[u] + C [u, v ] < D[v ] then 4: W [v ] := u 5: D[v ] := D[u] + C [u, v ] 6: end if 7: end for 73 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 74 ◮ Im Feld W steht für jeden Knoten v der kürzeste Weg über die Knoten aus S vom Knoten 1: ◮ Algorithmus Dijkstra(C ) Eingabe: global gegebene Kostenmatrix C , die leere Menge S sowie Felder D, W Ergebnis: Lösung des SSSPP im Feld W 1: S := {1} 2: for v ∈ V \ S do 3: D[v ] := C [1, v ]; W [v ] := 1 4: end for 5: while S 6= V do 6: modify(next-node()) 7: end while Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck ◮ ◮ Initialisiert wird W durch W [v ] := 1 und setzen D[v ] := C [1, v ]. Für jeden Knoten v ∈ V \ S sei D[v ] der Abstand von 1 und v in S ∪ {v }. Für jeden Knoten v ∈ V \ S sei W [v ] der Vorgänger von v auf dem kürzesten Weg von 1 nach v in S ∪ {v }. Somit ist Pv = v , W [v ], W [W [v ]], . . . , W [W [· · · [W [v ]] · · · ]] = 1 der inverse kürzeste Weg von 1 nach v in S ∪ {v }. ◮ ◮ 75 Bei der Implementierung müssen wir für ∞ einen geeigneten Wert finden, z.B.: 1 + n · maxi,j C [i, j]. Beachte: Dieses Verfahren generiert aus lokalen Eigenschaften (wir wählen den lokal billigsten Nachfolger) eine globale Eigenschaft (alle generierten Wege sind optimal) und ist somit ein Greedy-Algorithmus. 76 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck ◮ Beispiel: Kostenmatrix: 45 50 1 10 2 3 20 10 15 C 30 30 20 4 ◮ 15 5 S = {1} und next-node= 4 v D[v ] 1 ∞ 2 50 3 45 4 10 5 ∞ 50 ∞ ∞ ∞ 20 v W [v ] 1 - = S = {1, 4} und next-node= 5 v D[v ] ∞ ∞ ∞ 20 ∞ 45 10 ∞ ∞ 30 2 1 ∞ ∞ 30 15 ∞ 10 15 ∞ ∞ ∞ 3 1 4 1 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck ◮ ◮ ◮ 1 ∞ 2 45 1 ∞ 2 45 1 ∞ 2 45 3 45 4 10 5 25 v W [v ] 1 - 2 1 3 1 4 1 5 4 3 45 4 10 5 25 v W [v ] 1 - 2 5 3 1 4 1 5 4 v W [v ] 1 - 2 5 3 1 4 1 5 4 v W [v ] 1 - 2 5 3 1 4 1 5 4 S = {1, 2, 4, 5} und next-node= 3 v D[v ] 5 1 2 50 S = {1, 4, 5} und next-node= 2 v D[v ] 1 ∞ 3 45 4 10 5 25 Endzustand: S = {1, 2, 3, 4, 5} v D[v ] 3 45 4 10 5 25 77 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 78 Beweis von Lemma 7 (Teil 2): ◮ Wir betrachten nun eine Menge S der Kardinalität k und den Knoten v , der im nächsten Schritt zu S hinzugefügt wird. ◮ Betrachten wir einen Pfad Pu von 1 zu einem Knoten u ∈ S, so erkennen wir, dass dieser vollständig in S verläuft. Der Beweis, dass der Algorithmus von Dijkstra eine optimale Lösung findet erfolgt über ein greedy algorithm stays ahead Argument. Lemma 7 Sei S eine beliebige Menge, die im Algorithmus Dijkstra in einem Aufruf der Prozedur modify berechnet wird, dann gilt für alle u ∈ S, dass Pu der kürzeste Pfad von 1 nach u. ◮ ◮ Sei v der Knoten, der im k + 1-ten Schritt in S eingefügt wird. ◮ Sei (u, v ) die letzte Kante in Pv . ◮ Nach Induktion ist Pu der kürzeste Pfad von 1 nach u. ◮ Sei P ein beliebiger Pfad von 1 nach v . Wir wollen zeigen, dass P mindestens die Länge von Pv hat. ◮ Sei y der erste Knoten auf P, der nicht in S ist und sei x der direkte Nachfolger von y . S: x Beweis von Lemma 7: Der Beweis erfolgt über vollständige Induktion über die Kardinalität von S. ◮ Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck y Px Für |S| = 1, d.h. S = {1}, ist das Lemma trivialer Weise erfüllt. 1 Pu Wir nehmen nun an, dass die Aussage für das Lemma für Mengen S mit |S| ≤ k erfüllt ist. u 79 v 80 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 7 (Teil 3): ◮ Es gilt: ◮ ◮ ◮ P hat mindestens die Länge des kürzesten Pfades von 1 nach x, d.h. D[x] plus der Länge (Gewicht) der Kante (x, y ) plus der Länge des Suffixes des Pfades P von y nach v . ◮ Die Länge von P ist zumindest D[x] + C [x, y ]. ◮ Wir wählen jedoch (u, v ) so, dass D[u] + C [u, v ] minimal ist für alle u ∈ S und v ∈ V \ S. ◮ Somit ist |P| ≥ D[x] + C [x, y ] ≥ D[u] + C [u, v ] ≥ |Pv |. Satz 8 Der Algorithmus von Dijkstra löst SSSPP. Beweis: In Lemma 7 haben wir gezeigt, dass der Algorithmus von Dijkstra für jede der konstruierten Menge S und für jeden Knoten v ∈ S eine kürzesten Pfades von 1 nach v konstruiert. Dieses gilt insbesondere für S = V . 81 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 82 Definition 6 (Teil 2) Ein Fluss in N ist eine Funktion f : E → R+ 0 mit folgenden Eigenschaften: 3 Das Flussproblem für Netzwerke ◮ 3.1 Netzwerke mit Kapazitätsbeschränkung Definition 6 Ein Netzwerk N = (V , E , γ, q, s) besteht aus ◮ einem gerichteten Graph G = (V , E ), ◮ einer Quelle q ∈ V und einer Senke s ∈ V ◮ Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck die Kapazitätsschranken der Kanten werden eingehalten, d.h. ∀e ∈ E : f (e) ≤ γ(e) ◮ sowie einer Kapazitätsfunktion γ : E → R+ 0. Es sei n := |V | und m := |E |. für alle Knoten v ∈ V \ {q, s} wird die Kirchhoffsche Regel eingehalten, d.h. X X ∀v ∈ V \ {q, s} : f ((u, v )) = f ((v , w )) . (u,v )∈E 83 (v ,w )∈E 84 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Definition 6 (Teil 3) Als Wert eines Flusses definieren wir als X X W (f ) := f ((q, v )) = f ((u, s)) . (q,v )∈E Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck 4 u 5 5 3 (u,s)∈E Die Eigenschaft, dass der Ausfluss aus der Quelle identisch sein muss mit dem Abfluss in die Senke folgt unmittelbar aus der Kirchhoffschen Regel, da im Netzwerk kein Fluss verloren geht. Ein Fluss heißt maximal, falls sein Wert größtmöglich unter allen Flüssen in N ist. MAXFLOW(N) bezeichnet diesen Wert. w 4 5 5 4 7 q s 6 6 v 3 4 7 q 4 u v s 6 6 w x 4 x Ein Netzwerk und ein Fluss mit dem Wert 3. 85 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Es sollen möglichst viele Einheiten einer Ware von einem Absender zu einem Empfänger zu schicken, wobei gewisse Kapazitätsschranken auf dem Transportweg eingehalten werden müssen. Lenkung von Verkehrsströmen (Eisenbahn, PKWs) oder ◮ Lenkung von Nachrichtenströmen (Telefonverkehr, Datenverkehr im Internet). ◮ die Kapazität der Quelle (die Summe der Kapazitäten aller Kanten, die die Quelle verlassen) und ◮ die Kapazität der Senke (die Summe der Kapazitäten aller Kanten, die in der Senke enden). Es sei Beispiele für solche Transportprobleme sind: ◮ Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Der maximale Fluss ist beschränkt durch Ein Fluss ist somit ein Transportproblem: ◮ 86 γmax := max γ(e) . e∈E Da höchstens |V | − 1 Kanten die Quelle verlassen, ist der maximale Fluss ist beschränkt durch ◮ 87 |V | · γmax . 88 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Definition 7 Die Zerlegung der Kontenmenge V = Q ∪ S mit Q ∩ S = ∅ nennen wir q|s-Schnitt, falls q ∈ Q und s ∈ S ist. Die Schnittkapazität eines q|s-Schnittes definieren wir als X γ(Q, S) := γ((u, v )) . G γ(e1 ) S q Ein minimaler Schnitt von N ist ein q|s-Schnitt (Q, S), so dass γ(Q, S) minimal unter allen q|s-Schnitten ist. MINCUT(N) bezeichnet diesen Wert. s γ(er ) Für einen Fluss f sei der Nettofluss von f über einen Schnitt (Q, S) definiert als X X f (Q, S) := f ((u, v )) − f ((v , u)) ≤ γ(Q, S) . u∈Q, v ∈S γ(e2 ) Q (u,v )∈E , u∈Q, v ∈S q|s-Schnitt (Q, S) mit Schnittkapazität γ(Q, S). u∈Q, v ∈S 90 89 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 8 (Teil 2) Lemma 8 Für jeden q|s-Schnitt (Q, S) gilt f (Q, S) = W (f ) . G Beweis von Lemma 8 Der Beweis erfolgt per Induktion über die Mächtigkeit von Q. ◮ ◮ Q Für |Q| = 1, d.h. für Q = {q} folgt die Behauptung aus der Definition von W (f ). q S f1 f4 s v Sei |Q| > 1 und v ∈ Q mit v 6= q. Nach Voraussetzung gilt f3 f2 f (Q \ {v }, S ∪ {v }) = W (f ) . 91 92 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Definition 8 Der Restgraphen G ′ = (V , E ′ ) für einen Fluss f definieren wir über die Kantenmenge E ′ , wobei: Beweis von Lemma 8 (Teil 3) ◮ ◮ ◮ Sei f1 der Gesamtfluss nach v von Knoten aus Q \ {v } und f2 der Gesamtfluss nach v von Knoten aus S. ◮ ◮ Sei f3 der Gesamtfluss aus v nach Q \ {v } und f4 der Gesamtfluss von v nach S. ◮ Die Flussbedingung garantiert f1 + f2 = f3 + f4 Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Für jede Kante e ∈ E mit f (e) < γ(e) ist e ∈ E ′ mit Kapazität γ(e) − f (e). Für jede Kante e = (u, v ) ∈ E mit 0 < f (e) ist die Rückwärtskante ˜(e) = (v , u) in E ′ mit Kapazität f (e). oder f4 − f2 + f3 − f1 = 0. 4 u 5 5 f (Q, S) lässt sich darstellen als 3 5−3=2 s v 3−3 5 =0 3 4 7 q 4 u v 4 7 q s 3 f (Q, S) = f (Q \ {v }, S ∪ {v }) + f4 − f2 + f3 − f1 6 6 = f (Q \ {v }, S ∪ {v }) = W (f ) . w 4 x 3 6 6−3=3 w 4 x 94 93 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 4. Vorlesung, 06.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Sei f ein Fluss in N = (V , E , q, s, γ) und π ein zunehmender Weg in Nf = REST(N, f ) = (V , E ′ , q, s, γ). Wir gehen im folgeden davon aus, dass ein zunehmender Weg jeden Knoten maximal einmal besucht. Der nachfolgende Algorithmus modifiziert f : Definition 8 (Teil 2) Sei G ′ = (V , E ′ ) der Restgraph von G für einen Fluss f , dann ist REST(N, f ) := (V , E ′ , q, s, r ) mit γ(e) − f (e) falls e ∈ E und γ(e) > f (e) f (e) falls e = (u, v ), (v , u) ∈ E r (e) := und f (e) > 0. Algorithmus modify(N, f , π) Eingabe: Netzwerk N, Fluss f in N und zunehmender Weg π in Nf Ergebnis: um π erhöhter Fluss f ′ in N 1: ρ := min{r (ei )|ei ∈ π} 2: for ei ∈ π do 3: if ei ist Vorwärtskante in Nf , d.h. ei ∈ E then 4: f (ei ) := f (ei ) + ρ 5: else if ei ist Rückwärtskante in Nf , d.h. ei ∈ E ′ \ E then 6: f (ei ) := f (ei ) − ρ 7: end if 8: end for 9: Return(f ) Ein Weg von der Quelle zur Senke im Restgraphen heißt zunehmender Weg. 95 96 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Lemma 9 Ist f ein Fluss in N und π ein zunehmender Weg in Nf , dann ist modify(N, f , π) auch ein Fluss in N. Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 9 (Teil 2): Als zweites müssen wir nun zeigen, dass die Kirchhoffsche Regel für jeden Knoten v auf π (bis auf q und s) erfüllt ist: X X f ((u, v )) = f ((v , w )) Beweis von Lemma 9: Wir müssen zunächst zeigen, dass f ′ := modify(N, f , π) die Kapazitätsschranken γ einhält. Da wir nur den Fluss auf dem Weg π verändern, genügt es, wenn wir für alle Kanten e ∈ π zeigen, dass 0 ≤ f ′ (e) ≤ γ(e) (u,v )∈E ◮ Betritt und verlässt π den Knoten v auf jeweils einer Vorwärtskante, dann erhöhen wir beide Summen um den Wert ρ. Die Kirchhoffsche Regel bleibt somit erfüllt. ◮ Betritt und verlässt π den Knoten v auf jeweils einer Rückwärtskante, dann verringern wir beide Summen um den Wert ρ. Die Kirchhoffsche Regel bleibt somit erfüllt. gilt. Ist e eine Vorwärtskante, dann gilt 0 ≤ f (e) ≤ f (e) + ρ ≤ f (e) + r (e) = γ(e) . (v ,w )∈E Ist e eine Rückwärts Kante, dann gilt 0 = f (e) − f (e) ≤ f (e) − ρ ≤ f (e) ≤ γ(e) . 97 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck ◮ (u ′ , v ) Betreten wir v über eine Vorwärtskante und verlassen wir v auf einer Rückwärtskante (v , w ′ ), dann X X f ′ ((u, v )) = f ((u, v )) − f ((u ′ , v )) − f ((w ′ , v )) (u,v )∈E (u,v )∈E ′ ′ Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 9 (Teil 4): Beweis von Lemma 9 (Teil 3): ◮ 98 ′ (v ,w )∈E (v ,w )∈E ′ +f ((v , u ′ )) + f ′ ((v , w ′ )) X = f ((v , w )) − f ((v , u ′ )) − f ((v , w ′ )) ′ +f ((u , v )) + f ((w , v )) X = f ((u, v )) − f ((u ′ , v )) − f ((w ′ , v )) (u,v )∈E ′ Betreten wir v über eine Rückwärtskante (u ′ , v ) und verlassen wir v auf einer Vorwärtsskante (v , w ′ ), dann X X f ′ ((v , w )) = f ((v , w )) − f ((v , u ′ )) − f ((v , w ′ )) (v ,w )∈E +f ((v , u ′ )) − ρ + f ((v , w ′ )) + ρ X f ((u, v )) . = ′ +f ((u , v )) + ρ + f ((w , v )) − ρ X = f ((v , w )) . (u,v )∈E (v ,w )∈E Die Kirchhoffsche Regel bleibt somit erfüllt. Die Kirchhoffsche Regel bleibt somit erfüllt. Wir haben somit bewiesen, dass f ′ ein Fluss ist, wenn f ein Fluss ist. 99 100 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Satz 9 [MAXFLOW-MINCUT-Theorem] Für jedes Netzwerk N gilt: MAXFLOW(N) = MINCUT(N) . Aus der Konstruktion von REST(N, f ) folgt, dass jeder zunehmende Weg q immer über eine Vorwärtskante verlässt, und dass jeder zunehmende Weg s über eine Vorwärtskante erreicht. Es folgt somit: Beweis von Satz 9: Nach Lemma 8 gilt für einen maximalen Fluss f und für jeden q|s-Schnitt (Q, S) Lemma 10 Führen wir modify(N, f , π) für einen Fluss f und einen zunehmenden aus, so gilt für den resultierenden Fluss f ′ : MAXFLOW(N) = W (f ) = f (Q, S) ≤ γ(Q, S) . ′ W (f ) < W (f ) . Insbesondere gilt für den minimalen q|s-Schnitt (Q, S) Existiert somit in REST(N, f ) ein zunehmender Weg, dann ist f kein maximaler Fluss. MAXFLOW(N) ≤ γ(Q, S) = MINCUT(N) . 101 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck 102 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Satz 9 (Teil 3): Insbesondere gilt für den q|s-Schnitt (Q, S): Beweis von Satz 9 (Teil 2): Es verbleibt zu zeigen, dass ◮ MAXFLOW(N) ≥ MINCUT(N) . Es gibt keine Vorwärtskanten von Q nach S in G ′ . Somit gilt für jede Kante e ∈ Q × S: f (e) = γ(e) . Sei f ein maximaler Fluss in N. ◮ ◮ ◮ Aus Lemma 10 folgt, dass es in REST(N, f ) = (V , E ′ , q, s, r ) keinen zunehmenden Weg gibt, d.h. es gibt in G ′ = (V , E ′ ) keinen Weg von q nach s. ◮ Es gibt keine Rückwärtskanten von Q nach S in G ′ . Somit gilt für jede Kante e ∈ S × Q: f (e) = 0 . Sei Q die Menge der Knoten, die von q aus in G ′ erreichbar sind, und sei S := V \ Q. Wir erhalten (Q, S) ist ein q|s-Schnitt. MINCUT(N) ≤ γ(Q, S) = f (Q, S) = W (f ) = MAXFLOW(N) . 103 104 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Aus den bisher angestellten Beobachtungen (Lemma 10 und Satz 9) können wir den folgenden Algorithmus für das MAXFLOW-Problem herleiten Eine entscheidende Bedingung für das Terminieren unseres oben angegebenen Verfahrens General-MAXFLOW liegt darin, dass die Kapazitätsschranken und jeder konstruierte Fluss ganzzahlig sind: Algorithmus General-MAXFLOW(N) Eingabe: Netzwerk N Ergebnis: maximaler Fluss f in N 1: for e ∈ E do f (e) := 0 end for 2: while es existiert ein zunehmender Weg in REST(N, f ) do 3: sei π ein zunehmender Weg in REST(N, f ) 4: f :=modify(N, f , π) 5: end while 6: Return(f ) Lemma 11 Sei N ein Netzwerk mit Kapazitätsschranken γ(e) ∈ N, dann gilt für jeden in General-MAXFLOW konstruierten Fluss f : ∀e ∈ E : f (e) ∈ N . Beweis von Lemma 11: Der Beweis erfolgt über eine Induktion über die Anzahl t der ausgeführten while-Schleifen-Durchläufe: ◮ Für t = 0 ist f (e) = 0 für alle Kanten e ∈ E . Die Aussage des Lemmas ist somit erfüllt. 105 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 106 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Beweis von Lemma 11 (Teil 2): ◮ Annahme: die Aussage ist für den Fluss erfüllt, den wir nach dem t-ten Durchlauf der while-Schleife mit t > 0 erhalten. ◮ Im t + 1-ten Durchlauf wählen wir ρ, so dass dieser Wert entweder der Restkapazität einer Kante oder dem Fluss auf einer Kante entspricht. ρ ist somit ganzzahlig. ◮ ◮ Aus Lemma 10 und Lemma 11 folgt: Da wir die ganzzahligen Werte des alten Flusses nur um den Wert von ρ erhöhen oder verringern, sind die resultierenden Werte wieder ganzzahlig. Die Bedingung, dass die resultierenden Werte auch in N liegen, folgt aus der Beobachtung, dass das Ergebnis von modify(N, f , π) wieder ein Fluss ist. ◮ Jeder Durchlauf durch die while-Schleife erhöht den Fluss um mindestens 1. ◮ Da der maximale Fluss durch (|V | − 1) · γmax beschränkt ist, ist auch die Anzahl der Durchläufe durch die while-Schleife durch (|V | − 1) · γmax beschränkt. Satz 10 Die Laufzeit von General-MAXFLOW(N) ist durch O(|V | · γmax · TWeg ) nach oben beschränkt, wobei TWeg die Zeit ist, die wir benötigen um einen zunehmenden Weg zu finden. 107 108 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Bemerkungen ◮ Bemerkungen Bei ungünstiger Wahl der zunehmenden Wege in entsprechend konstruierten Netzwerken, können wir zeigen, dass die Laufzeit unseres Verfahren tatsächlich Ω(|V | · γmax ) Durchläufe durch die while-Schleife benötigt. Ein Beispiel für ein solches Netzwerk, ist: ◮ Sind die Kapazitätsschranken nicht ganzzahlig, so können Beispiele konstruiert werden, für die ein maximaler Fluss bei entsprechender Wahl der zunehmenden Wege nicht nach einer endlichen Anzahl von Iterationen konstruiert worden ist. ◮ Es sei a M Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck M β := 1 q √ s M 5−1 = 0, 618 . . . und α := 1 + β 2 β steht in enger Beziehung zur Fibonacci-Folge und ergibt sich aus der Lösung des goldenen Schnitt-Problems. Es gilt M b β 2 + β = 1 und somit β k+2 = β k − β k+1 Wählen wir den zunehmenden Weg abwechselnd über die Kante (a, b) und über die Rückwärtskante (b, a), so benötigen wir 2M Iterationen der while-Schleife. für alle k ≥ 2. 109 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck α v1 v3 1 v6 α α α β α α v4 β α v2 1. 2. 3. 4. 5. 6. α α α α Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Wir betrachten eine Folge von Phasen k = 0, 1, 2, . . .. Wobei jede Phase aus 6 Flußerhöhungen besteht. Wir betrachten hierbei 6 zunehmende Wege: Als Netzwerk wählen wir: q 110 α s v5 α Wir betrachten nun die Rest Kapazitäten des Netzwerks, nach dem wir verschiedene Pfade in den Fluss aufgenommen haben. Pfad Pfad Pfad Pfad Pfad Pfad q q q q q q − − − − − − v1 v2 v1 v2 v1 v2 − − − − − − v2 v1 v2 v1 v2 v1 − − − − − − v3 v3 v4 v4 v5 v5 − − − − − − v6 v6 v6 v6 v6 v6 − − − − − − s v5 − s s v3 − s s v4 − s Erhöhung β 1+3k β 2+3k β 2+3k β 3+3k β 3+3k β 4+3k Diese 5 Pfade erhöhen den Fluss um β 1+3k + 2 · (β 2+3k + β 3+3k ) + β 1+3(k+1) . 111 112 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Wir wollen im folgenden betrachten, wie sich die ausgewählten Pfade auf den Fluss auswirken. Da nur die Kanten (v1 , v2 ), (v3 , v6 ), (v4 , v6 ) und (v6 , v5 ) sowohl als Vorwärtskanten als auch als Rückwärtskanten eingesetzt werden, werden wir die Kapazitätsschranken der anderen Kanten im Folgenden vernachlässigen. Nach ℓ Runden ist der Fluss 2· = 2· ≤ ℓ X i:=0 3ℓ+4 X i:=1 β 1+3i + β 2+3i + β 3+3i Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck − β + β 1+3(ℓ+1) Pfad 1 erhöht den Fluss um β: βi − β q − v1 − v2 − v 3 − v6 − s . v1 2 − β − 2 = 2, 618 . . . ≤ 2 · α . 1−β β2 v3 β β q 0 β v6 α v4 s v2 v5 113 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Pfad 2 erhöht den Fluss um β 2 : Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Pfad 3 erhöht den Fluss um β 2 : q − v2 − v 1 − v3 − v 6 − v5 − s . v1 114 q − v1 − v2 − v4 − v6 − s . 0 v3 1 v1 v6 1 β2 β3 v4 β2 v2 v6 β3 β q 0 v3 q 1 + β3 0 β v4 β2 s v5 v2 115 β2 1 + β3 s v5 116 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Pfad 4 erhöht den Fluss um β 3 : Pfad 5 erhöht den Fluss um β 3 : q − v2 − v 1 − v4 − v 6 − v3 − s . v1 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck q − v1 − v2 − v5 − v6 − s . β3 v3 1 − β3 v1 1 − β3 v6 0 q β3 β 2 v4 v2 v6 0 q β β2 β3 v3 1 + β3 0 β v4 β4 s v2 v5 β 1 + 2β 3 s v5 117 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck q − v1 − v 2 − v5 − v 6 − v4 − s . ◮ β3 v3 1 − β3 v6 β4 q β4 β − β4 ◮ ◮ 1+β Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Wähle unter allen zunehmenden Wegen einen Weg mit maximaler Flusserhöhung. Es kann gezeigt werden, dass: v4 β − β 4 0 v2 Andreas Jakoby Universität zu Lübeck Effiziente Wahl der Flusserhöhungen: Um die Laufzeitschranke aus Satz 10 zu verbessern können wir verschiedene Ansätze verfolgen: Pfad 6 erhöht den Fluss um β 4 : v1 118 s ◮ v5 ◮ 119 Nach maximal 2|E | Flusserhöhungen hat sich die maximal noch zu erzielende Flusserhöhung halbiert. Die Anzahl der Iterationen ist höchstens 2|E | · log2 γmax . Einen maximal zunehmenden Weg können wir mit Hilfe des SSSP-Algorithmus finden. Die Gesamtlaufzeit ist somit O((m + n log n) · m · log γmax ). 120 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 ◮ ◮ Wähle einen kürzesten zunehmenden Wegen. Hierbei entspricht die Länge eines Weges der Anzahl der Kanten auf dem Weg. Es kann gezeigt werden, dass: ◮ ◮ ◮ ◮ ◮ Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Betrachte alle kürzesten zunehmenden Wegen gleichzeitig und vergrößere den Fluss entlang all dieser Wege. Es kann gezeigt werden, dass: ◮ Jede Flussvergrößerung sättigt mindestens eine Kante des Restgraphens (bei gegebener Weglänge). Nach maximal m Flussvergrößerungen müssen wir die Weglänge um 1 erhöhen. Die maximale Pfadlänge ist n − 1. Einen kürzesten zunehmenden Weg können wir mit Hilfe der Breitensuche in Zeit O(m) finden. Die Gesamtlaufzeit ist somit O(n · m2 ). ◮ ◮ ◮ Wir teilen den Restgraphen in eine Folge von Stufen auf, wobei die i-te Stufe aus allen Knoten besteht, deren Entfernung von der Quelle exakt i ist. Wir betrachten zunächst den Teilgraph des Restgraphen, der nur die Kanten beinhaltet, die aufeinanderfolgende Stufen verbinden. Diesen Teilgraph nennen wir Niveaugraph. Die Flussvergrößerung wird entlang zunehmender Wege im Niveaugraphen solange durchgeführt, bis q von s getrennt wird. Derartige Wege kann man mit Hilfe der Breitensuche mit linearem Aufwand finden. 122 121 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck In den letzten Jahrzehnten wurden verschieden Algorithmen zur Lösung des MAXFLOW-Problems vorgestellt: ◮ ◮ Weiter zu: Betrachte alle kürzesten zunehmenden Wegen gleichzeitig und vergrößere den Fluss entlang all dieser Wege: ◮ ◮ ◮ ◮ ◮ ◮ Jede Flussvergrößerung sättigt mindestens eine Kante. Somit gibt es für jeden Niveaugraphen maximal m Iterationen und der Aufwand für jede Iteration ist in O(n). Konstruieren wir den neuen Niveaugraphen, so wächst die Entfernung zwischen Quelle und Senke um mindestens 1. Wir betrachten hächstens n viele Niveaugraphen. Die Gesamtlaufzeit ist somit O(m · n2 ). ◮ ◮ ◮ ◮ ◮ ◮ ◮ ◮ ◮ 123 1956 Ford, Fulkerson: O(n · m · γmax ) 1972 Edmonds, Karp: O(n · m2 ) 1970 Dinic: O(n2 · m) 1974 Karzanov: O(n3 ) 1977 Cherkasky: O(n2 · √ m) 1978 Malhotra, Kumar, Maheshwari: O(n3 ) 1980 Galil: O(n5/3 · m2/3 ) 1978 Shiloach, 1980 Galil, Naamand: O(n · m · log2 n) 1982 Shiloach, Vishkin: O(n3 ) 1983 Sleator, Tarjan: O(n · m · log n) 1984 Tarjan: O(n3 ) 1985 Gabow: O(n · m · log γmax ) 124 Algorithmik WS 06/07 5. Vorlesung, 13.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Weitere Algorithmen: ◮ ◮ ◮ ◮ ◮ ◮ ◮ 1985 Goldberg: O(n3 ) 3.2 Das Transport-Problem 1986 Bertsekas: O(n3 ) Definition 9 [Transport-Problem] Gegeben sind zwei Folgen α1 , . . . , αn ∈ N und β1 , . . . , βm ∈ N mit 1986 Goldberg, Tarjan: O(n · m · log(n2 /m)) 1987 Cheriyan, Maheshwari: O(n2 · √ m) n X 1987 Ahuja, Orlin: O(n · m + n2 · log γmax ) 1988 Ahuja, Orlin, Tarjan: O(n · m + n2 · log γmax / log log γmax ) ◮ = m X βi . i=1 i=1 Gesucht sind n · m Werte xi,j ∈ N mit i ∈ [1..n], j ∈ [1..m], so dass 1989 Cheriyan, Hagerup: O(min{n · m · log n, n · m + n2 · log2 n}) ∀i ∈ [1..n] : Probabilistische Algorithmen und deren erwartete Laufzeit: ◮ αi m 1994 King, Rao, Tarjan: O((n · m log n)/ log n·log n ) für m ≥ 2n log n m X xi,j = αi j=1 und ∀i ∈ [1..m] : n X xi,j = βj . i=1 1996 Cheriyan, Hagerup, Mehlhorn: O(n3 / log n) 126 125 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Das Transport-Problem kann mit Hilfe eines Netzwerks und eines MAXFLOW-Problems dargestellt werden: ◮ Interpretation: ◮ Wir betrachten n Produzenten P1 , . . . , Pn , die alle die gleiche Wahr produzieren. Pi produziert αi Stücke dieser Wahre. ◮ Wir betrachten m Kunden K1 , . . . , Km für die von den Produzenten hergestellten Wahren. Kunde Kj möchte βj Stücke dieser Wahre erhalten. ◮ Wir betrachten ein Netzwerk mit n + m + 2 Knoten {q, s, v1 , . . . , vn , u1 , . . . , um } und n + m + n · m Kanten E = v1 σ σ α1 Produzent Pi liefert xi,j Stücke der Wahre an den Kunden Kj . α2 {(q, vi )|1 ≤ i ≤ n} ∪ {(uj , s)|1 ≤ j ≤ m} ∪ {(vi , uj )|1 ≤ i ≤ n, 1 ≤ j ≤ m} . v2 σ ◮ u1 β1 σ σ u2 γ((vi , uj )) := β2 σ q Als Gewichtsfunktion definieren wir s n X αi i=1 γ((q, vi )) := αi σ αn vn 127 βm σ σ γ((uj , s)) := βj um für alle i ∈ [1..n] und j ∈ [1..m]. 128 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck 4 Lineare Programmierung 4.1 Was ist lineare Programmierung Wir wollen zunächst einige Begriffe definieren: Definition 10 [Optimierungsprobleme] ◮ Eine Instanz eines Optimierungsproblems ist ein Paar (F , f ) wobei Wir erkennen: ◮ ◮ Das MAXFLOW-Problem für die so generierte P Instanz besitzt immer eine ganzzahlige Lösung f mit W (f ) = ni=1 αi . ◮ Der Flüsse über die Kanten (vi , ui ) entspricht einer Lösung für das Transport-Problem mit xi,j := f ((vi , uj )). ◮ ◮ F eine Menge von möglichen Lösungen und f : F → R eine Kostenfunktion dieser Lösungen abgibt. Eine Lösung x ∈ F nennen wir global optimal oder kurz optimal, wenn für alle y ∈ F gilt f (x) ≥ f (y ) . ◮ ◮ Gesucht ist eine optimale Lösung bezüglich der Kostenfunktion! Ein Optimierungsproblem ist eine Menge von Instanz eines Optimierungsproblems. 130 129 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Die Definition des Transport-Problem gibt uns ein System von Gleichungen oder Ungleichungen vor und kann recht einfach als ein Optimierungsproblem (Maximierungsproblem) dargestellt werden: Anmerkungen zu Definition 10: ◮ F Die Form von Optimierungsproblemen aus Definition 10 nennen wir auch Maximierungsprobleme, da wir eine Lösung x ∈ F mit f (x) ≥ f (y ) für alle y ∈ F suchen. ◮ Suchen wir ein x ∈ F mit f (x) ≤ f (y ) für alle y ∈ F , so sprechen wir auch von einem Minimierungsproblem. ◮ Beispiele für solche Minimierungs- und Maximierungsprobleme haben wir schon einige in dieser Vorlesung kennen gelernt. Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck ∈ Nm×n | m X xi,j ∀i ∈ [1..n] : αi ≤ := { x = (xi,j )i∈[1..n], j∈[1..m] ∀j ∈ [1..m] : βj ≤ f (x) := X j=1 n X i=1 xi,j } xi,j . i∈[1..n], j∈[1..m] Optimierungsprobleme dieser Form nennen wir auch lineare Programme. 131 132 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Definition 11 (Teil 2) Einen Vektor ~x nennen wir eine zulässige Lösung des Optimierungsproblems, falls: Definition 11 [Lineares Optimierungsproblem (LP)] Ein lineares Optimierungsproblem über einem geordneten Ring R ist folgendermaßen spezifiziert: ◮ ◮ Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck ◮ Gegeben sind zwei Vektoren b1 c1 ~c = ... ∈ R n und ~b = ... ∈ R m . bm cn Für alle i ∈ [1..m] die Bedingung n X j=1 ai,j · xj ≤ bi erfüllt ist. Kompakt schreiben wir auch A · ~x ≤ ~b. Gesucht ist eine zulässige Lösung x, welche und eine Matrix a1,1 . . . a1,n .. ∈ R m×n . .. A = ... . . am,1 . . . am,n Z = n X j=1 c j · xj oder kompakt Z = ~c T · ~x maximiert, wobei ~c T die Transponierte von ~c bezeichnet. 134 133 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Beispiel: Optimale Produktion ◮ Ein klassisches Beispiel für die lineare Programmierung aus der Ökonomie stellt die Optimierung einer Produktion unter gegebenen Randbedingungen dar. ◮ Ein Unternehmen möchte den Gewinn, den es mit einer Maschine macht, optimieren. Definition 11 (Teil 3) Im Wesentlichen betrachten wir lineare Programme über Z, Q und R und unterscheiden daher zwischen ◮ Integer linearen Programmen (ILP) oder ganzzahligen linearen Programmen mit R = Z, ◮ rationalen linearen Programmen (QLP) mit R = Q und ◮ ◮ Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck ◮ reelen linearen Programmen (RLP) mit R = R. ◮ Beim linearen Programmieren stellen wir ein Optimierungsproblem mit Hilfe eines Systems von linearen Ungleichungen über n Unbekannten dar. Ferner geben wir eine lineare Zielfunktion an, die es zu optimieren gilt, d.h. deren Wert es zu maximieren bzw. zu minimieren gilt. Diese Maschine kann zwei Produkte P1 und P2 herstellen. Eine Einheit von P1 kann mit Gewinn von 7 Euro und eine Einheit von P2 mit Gewinn von 4 Euro verkauft werden. Sei x1 die Anzahl der Einheiten, die die Maschine von dem Produkt P1 herstellt, und x2 die Anzahl der Einheiten, die die Maschine von dem Produkt P2 herstellt, dann gilt es, die Produktion so einzustellen, dass wir den Wert von g (x1 , x2 ) := 7 · x1 + 4 · x2 ◮ 135 maximieren. Es existieren jedoch einige Bedingungen, die wir bei der Einstellung der Maschine, d.h. bei der Bestimmung der optimalen Werte x1 und x2 , berücksichtigen müssen. 136 x2 6000 5000 4000 5000 3000 x1 2000 Vertrag P1 140 Zum Vergleich: Die benachbarten Eckpunkte 1000/4000 und 3000/1200 haben die Zielwerte 23000 bzw. 25800. ◮ 139 Solche Einschränkungen nennen wir redundant. ◮ Im obigen Fall führt jede Ungleichung zu einer Einschränkung der Lösungsmenge. Dieses ist nicht immer der Fall. Gilt für den Rohstofflieferung x1 ≤ 4000, so führt dieses zu keiner Einschränkung der Lösungsmenge. ◮ 4000 3000 Maschinenzeit (min) 1000 Lagerplatz Umwelt 2000 Rohstoffzulieferung Maschinenzeit (max) 1000 Der optimale Gewinn (Zielwert) ist 7 · 2200 + 4 · 2800 = 26600. x1 1000 Vertrag P2 ◮ Unter ihnen ist die mit den optimalen Zielwerten für g (x1 , x2 ) ausfindig zu machen. 2000 Genau die Tupel (x1 , x2 ), die konform zu allen Restriktionen sind, sind Lösungen unseres Systems. ◮ 3000 200/1700 800/500 3000/500 3000/1200 2200/2800 200/4000 1000/4000 4000 x2 5000 Das Ungleichungssystem faßt die Einschränkungen über den Lösungsraum zusammen. ◮ Andreas Jakoby Universität zu Lübeck ◮ Gesucht ist die höchste Gerade, die das Planungsvieleck 1000 2000 3000 4000 5000 6000 berührt. ◮ In unserem Fall ist der Punkt 2200/2800 optimal. Weiter oben verlaufenden Geraden stellen höhere Gewinne dar. ◮ ◮ Die zusätzlichen Linien stellen eine Auswahl von möglichen Gewinngleichungen g (x1 , x2 ) = c für verschiedene Gewinne c dar. Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Bei der Produktion von P2 werden 5 g eines umweltpolitisch nicht unbedenklichen Gases freigesetzt. Der monatliche Ausstoß dieses Gases soll daher auf 20.000 g beschränkt sein. Wir erhalten 5 · x2 ≤ 20000 . ◮ Die Produktion von P1 benötigt 3 Liter eines Rohstoffs pro Einheit, von dem im Monat 9000 Liter zur Verfügung stehen. Es gilt somit 3 · x1 ≤ 9000 . ◮ 4 · x1 + 2 · x2 ≤ 14400 . ◮ 138 137 Und schließlich muss jedes Produkt nach der Herstellung eine gewisse Zeit gelagert werden. Die monatliche Lagerkapazität des Unternehmens beschränkt sich auf 5000 Einheiten. Wir erhalten x1 + x2 ≤ 5000 . ◮ 4 · x1 + 2 · x2 ≥ 4200 . Wird die Maschine weniger als 4200 Minuten im Monat eingesetzt, dann besteht die Gefahr, dass sie Schaden nimmt. Um dieses zu verhindern fordern wir ◮ und x2 ≥ 500 . x1 ≥ 200 Für 200 Einheiten von P1 und für 500 Einheiten von P2 existieren bereits feste Verträge. Somit gilt ◮ ◮ Beschränkungen für die Produktion: ◮ Die Produktion einer Einheit von P1 benötigt 4 Minuten und die Produktion einer Einheit von P2 benötigt 2 Minuten. Für die Produktion stehen insgesamt 240 Maschinenstunden im Monat zur Verfügung, das sind 14400 Minuten. Es gilt somit ◮ Beschränkungen für die Produktion (Teil 2): Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck ◮ Bei der Bestimmung der optimalen Lösung können zwei Fälle auftreten: 1. Die Geraden der Punkte gleicher Zielwerte verlaufen nicht parallel zu einer der relevanten Seiten des Vielecks. In diesem Fall stellt ein konkreter Eckpunkt des Vielecks die eindeutige optimale Lösung dar. 2. Die Geraden der Punkte gleicher Zielwerte verlaufen parallel zu einer der relevanten Seiten des Vielecks. In diesem Fall hat jeder Punkt entlang dieser Seite denselben optimalen Zielwert. Insbesondere stellen auch die beiden Eckpunkte optimale Lösungen dar. ◮ In jedem der beiden Fälle ist eine Ecke des Vielecks optimal. ◮ Es genügt also einfach die Ecken des Planungsvielecks auszuwerten. Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 ◮ Die Auswertung der Eckpunkte ist bei zwei Variablen noch relativ überschaubar. Bei einer größeren Anzahl von Variablen – d.h. bei einer höheren Dimension – wird diese Aufgabe schnell sehr viel schwerer. ◮ Bilden die Einschränkungen kein geschlossenes Vieleck, so ist der Lösungsraum in einer Richtung unbegrenzt. ◮ In diesem Fall müssen wir die obige Betrachtungen sinngemäß anpassen. 142 141 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck 4.2 Komplexität von linearen Programmen A∈ ◮ und ein Wert z ∈ R. Frage: Existiert eine Lösung ~x ∈ ~c T · ~x ≥ z ist. R n, Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Der Beweis, dass das Entscheidungsproblem zum ILP in N P liegt, ist relativ aufwendig und soll an dieser Stelle nicht untersucht werden. Vielmehr wollen wir hier den einfachen Beweis der N P-härte vorstellen. Wir gehen davon aus, dass Um die Komplexität der eingeschränkten Versionen von linearen Programmen zu analysieren betrachten wir naheliegende Abwandlungen von linearen Programmen als Entscheidungsproblem: ◮ Gegeben sind die beiden Vektoren ~ b ∈ R m , ~c ∈ R n , die Matrix R m×n Andreas Jakoby Universität zu Lübeck ◮ so dass A · ~x ≤ ~b und N P und N P-hart bzw. N P-schwierig, ◮ polynomial-Zeit- und logarithmisch-Platz-reduzierbar sowie ◮ das 3-SAT Problem dem Teilnehmer der Veranstaltung bekannt sind. Satz 11 Das Entscheidungsproblem zum ILP ist N P-schwierig. Eine wesentliche Erkenntnis über lineare Programme ist, dass dieses Entscheidungsproblem in polynomieller Zeit lösbar ist, wenn wir R = R betrachten. Jedoch ist das Problem N P-vollständig für den Fall, dass wir eine ganzzahlige Lösung suchen. Beweis von Satz 11: Um den Satz 11 zu beweisen, wollen wir eine Reduktion von 3-SAT auf das Entscheidungsproblem zum ILP angegeben. 143 144 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Satz 11 (Teil 3): Für die auf der letzten Folie beschriebene Instanz des 3-SAT Problems generieren wir folgende Instanz für das ILP-Entscheidungsproblem: ◮ Für jede Variable xi des 3-SAT Problems betrachten wir zwei Variablen yi0 und yi1 in unserem linearen Programm. ◮ Wir generieren folgende Ungleichungen: Beweis von Satz 11 (Teil 2): Wir betrachten eine Instanz des 3-SAT Problems: ◮ Gegeben ist eine Folge von Klauseln C1 , . . . , Cm über den Variablen x1 , . . . , xn mit α α α = xi,1i,1 ∨ xi,2i,2 ∨ xi,3i,3 Ci yi0 + yi1 ≤ 1 und ∈ {x1 , . . . , xn } xi,1 , xi,2 , xi,3 −yi0 ≤ 0 und Hierbei gilt α xi,ji,j := x i,j xi,j − yi0 − yi1 ≤ −1 sowie ∈ {0, 1} . αi,1 , αi,2 , αi,3 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck für αi,j = 0 für αi,j = 1 . ◮ − yi1 ≤ 0 . Diese beiden Ungleichungen garantieren in einer zulässigen Lösung des ILPs, dass genau eine dieser Variable yi0 , yi1 den Wert 1 und eine den Wert 0 hat. α α α Für jede Klausel Ci = xi,1i,1 ∨ xi,2i,2 ∨ xi,3i,3 generieren wir die folgenden Ungleichung α α α −yi,1i,1 − yi,2i,2 − yi,3i,3 ≤ −1 . 145 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Satz 11 (Teil 4): Optimieren wollen wir die Summe aller Variablen und wählen n X i=1 (yi0 + yi1 ) ≥ n . C1 ∧ C2 ∧ . . . ∧ Cm . Dann gilt: ◮ ⇐⇒ xi = 0 yi1 = 1 ⇐⇒ xi = 1 Aufgund unserer Vereinbarung gilt yi1 = bi und yi0 = 1 − bi , und somit yi0 + yi1 = 1 − bi + bi eine erfüllende Belegung besitzt. Hierbei können wir =1 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Satz 11 (Teil 5): Sei x1 = b1 , . . . , xn = bn eine erfüllende Belegung für Es ist einach zu erkennen, dass jede zulässige Lösung des Ungleichungssystems von Folie 146 diese Ungleichung erfüllt. Wir wollen nun zeigen, dass das ILP genau dann eine zulässige Lösung besitzt, wenn C1 ∧ C2 ∧ . . . ∧ Cm yi0 146 = 1. Folglich sind alle Ungleichungen vom Typ yi0 + yi1 ≤ 1 und und − yi0 − yi1 ≤ −1 erfüllt. wählen. 147 148 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Satz 11 (Teil 6): ◮ Da x1 = b1 , . . . , xn = bn eine erfüllende Belegung ist, gibt es α α für jede Klausel Ci ein Literal xi,ji,j mit xi,ji,j = 1. Somit gilt α yi,ji,j = 1. Somit gilt α α Beweis von Satz 11 (Teil 7): Sei y10 = 1 − y11 = b1 , . . . , yn0 = 1 − yn1 = bn eine zulässige Lösung des ILPs. Dann gilt für alle Klauseln Ci , dass α yi,1i,1 + yi,2i,2 + yi,3i,3 ≥ 1 . ◮ α Somit sind auch alle Ungleichungen vom Typ α α α α −yi,1i,1 − yi,2i,2 − yi,3i,3 ≤ −1 α Somit gilt xi,ji,j = 1 und folglich ist auch die Klausel Ci erfüllt. α −yi,1i,1 − yi,2i,2 − yi,3i,3 ≤ −1 erfüllt. ◮ Es gibt somit eine zulässige Lösung. 150 149 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck 4.3 Geometrische Interpretation von linearen Programmen x3 Eine geometrische Interpretation von linearen Programmen haben wir bereits in dem Beispiel auf den Folien 139 und 140 vorgestellt. ◮ Jede Gleichung n X j=1 ai,j · xj ◮ (0, 0, 3) (1, 0, 3) = bi x1 + x1 (0, 2, 3) −x1 + Eine Ungleichung (0, 0, 0) n X j=1 x1 (2, 0, 0) ◮ ai,j · xj ≤ bi definiert einen Halbraum des n-dimensionalen Raums auf der Pn richtigen Seite der Hyperebene j=1 ai,j · xj = bi . ◮ x2 151 (0, 2, 0) (2, 2, 0) x3 ≤ ≤ x3 ≤ + x3 ≤ + x3 ≤ ≤ −x3 ≤ x2 + (2, 0, 2) mit festen Werten ai,j und bi definiert eine n − 1-dimensionale Hyperebene im n-dimensionalen Raum. ◮ Ungleichungen: 3x2 x2 −x2 4 2 3 6 0 0 0 Blau ist die Hyperebene x3 = 3 eingezeichet. Der Halbraum x3 ≤ 3 befindet sich unter der Hyperebene. 152 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck x3 ◮ (0, 0, 3) (1, 0, 3) (2, 0, 2) ◮ (0, 2, 3) ◮ x1 (0, 0, 0) x2 (0, 2, 0) (2, 0, 0) (2, 2, 0) Mit S bezeichnen wir die Menge aller zulässigen Lösungen. ◮ ◮ S ist der Schnitt aller durch die Hyperebenen beschriebenen Halbräume. Das LP heißt unlösbar, falls es keine zulässige Lösung besitzt. Für die Ringe der rationalen und reellen Zahlen gilt: ◮ ◮ ◮ Mit Sopt ⊆ S wir die Menge der optimalen zulässigen Lösungen, die Menge der zulässigen Lösungen für die die Zielfunktion Z = ~c T · ~x maximal ist. ◮ Ist S beschränkt, so bildet S ein konvexes Polyeder. Sopt ist entweder leer, einelementig oder unendlich groß. Ist Sopt 6= ∅, dann enthält die Menge Sopt mindestens einen Eckpunkt des durch A · ~x ≤ ~b beschriebenen Polyeders. Ist Sopt leer, obwohl S nicht leer ist, dann kann die Zielfunktion Z beliebig groß werden. In diesem Fall nennen wir das LP unbeschränkt. 153 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck 154 Algorithmik WS 06/07 6. Vorlesung, 20.11.2006 Andreas Jakoby Universität zu Lübeck 4.4 Formen linearer Programme Bevor wir auf den Simplex-Algorithmus eingehen, wollen wir noch auf eine Vereinfachung eingehen: ◮ ◮ ◮ 1 ◮ Wir erhalten folgende Variante des LPs ◮ Maximiere xj+ , xj− Wir ersetzen jede Variable xj durch ein Paar von + − Hilfsvariablen für die wir xj ≥ 0 und xj ≥ 0 verlangen. Diese Ungleichungen nehmen wir in unser Ungleichungssystem mit auf. Z = n X j=1 ◮ Hierbei substituieren wir das Vorkommen von xj durch xj+ − xj− . P Wir führen für jede Bedingung nj=1 ai,j · xj ≤ bi führen wir eine P sogenannte Schlupfvariable1 yi ein, die angibt, um wie viel nj=1 ai,j · xj kleiner als bi ist. cj · (xj+ − xj− ) unter den Bedingungen yi + n X j=1 und ai,j · (xj+ − xj− ) = bi x1+ , x1− , . . . , xn+ , xn− , y1 , . . . , ym ≥ 0. Nicht Schlumpfvariable! 155 156 Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck Formen von linearen Programmen In der Literatur unterscheiden wir drei Formen von linearen Programmen über einem Ring R: ◮ die generelle Form: ◮ ◮ ◮ ◮ ◮ ◮ ◮ ◮ gegeben. Abhängig vom Typ des linearen Programms unterscheiden wir zwischen dem Minimierungproblem, bei dem die Zielfunktion zu minimieren ist, und dem Maximierungsproblem, bei dem die Zielfunktion zu maximieren ist. für alle i ∈ N1 gilt xi ≤ 0, für alle i ∈ N2 gilt xi ≥ 0 und für alle i ∈ N3 ist die Variable xi nicht weiter beschränkt. Ferner ist ein Vektor ~c ∈ R n und somit die Zielfunktion gegeben. Abhängig vom Typ des linearen Programms 157 Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck die Standardform: ◮ ◮ 158 Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck ◮ Gegeben ist eine Matrix A ∈ R und ein Vektor ~b ∈ R m . n Damit eine Lösung ~x ∈ R gültig ist, müssen die folgenden Bedingung erfüllt ist: m×n A · ~x ◮ Ferner ist ein Vektor ~c ∈ R n und somit die Zielfunktion ~c T · ~x für alle i ∈ M1 gilt Ai · ~x ≤ bi , für alle i ∈ M2 gilt Ai · ~x = bi und für alle i ∈ M3 gilt Ai · ~x ≥ bi . ~c T · ~x ◮ die generelle Form (Teil 2): Sie 0 das neutrale Element in R bezüglich der Addition, dann gibt es eine Poritionierung N1 , N2 , N3 von {1, . . . , n}, so dass ◮ ◮ ◮ Gegeben ist eine Matrix A ∈ R m×n und ein Vektor ~b ∈ R m . Desweiteren ist eine Partition von {1, . . . , m} in drei paarweise disjunkte Teilmengen M1 , M2 , M3 gegeben. Seien A1 , . . . , An die Zeilenvektoren der Matrix A. Damit eine Lösung ~x ∈ R n gültig ist, müssen die folgenden Bedingungen erfüllt sein: die kanonische Form: ◮ ≤ ~b . Gegeben ist eine Matrix A ∈ R m×n und ein Vektor ~b ∈ R m . Damit eine Lösung ~x ∈ R n gültig ist, müssen die folgenden Bedingung erfüllt ist: A · ~x Sie 0 das neutrale Element in R bezüglich der Addition, dann gibt xi ≥ 0 . ◮ Ferner ist ein Vektor ~c ∈ R n und somit die Zielfunktion ◮ = ~b . Sie 0 das neutrale Element in R bezüglich der Addition, dann gibt xi ≥ 0 . Ferner ist ein Vektor ~c ∈ R n und somit die Zielfunktion ~c T · ~x ~c T · ~x gegeben. Gesucht ist eine Lösung ~x ∈ R n , die die Zielfunktion zu minimiert. gegeben. Gesucht ist eine Lösung ~x ∈ R n , die die Zielfunktion zu minimiert. 159 160 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck 4.5 Der Simplex-Algorithmus Der Simplex-Algorithmus (1951 von G. Dantig vorgestellt) ist das bekannteste Verfahren zur Lösung linearer Programme. Jedoch konnte bisher für keine Variante des Simplex-Algorithmus nachgewiesen werden, dass diese polynomielle Zeit benötigt. Wir werden daher im Verlauf dieser Vorlesung noch auf andere Verfahren zum Lösen linearer Programme eingehen. Es ist recht einfach einzusehen, dass sich jedes lineare Programm P1 , welches in der generellen Form gegeben ist, auch als ein lineares Programm P2 in kanonischer Form so darstellen läßt, dass aus einer optimalen Lösung von P2 eine optimale Lösung von P1 abgeleitet werden kann. Die jeweiligen Transformationen können linearer Zeit2 ausgeführt werden. Der Simplex-Algorithmus arbeitet in drei Phasen: ◮ ◮ ◮ Phase 1: Finde eine Basislösung oder zeige, dass das LP unlösbar ist. Phase 2: Finde eine zulässige Basislösung oder zeige, dass das LP unlösbar ist. Phase 3: Verbessere die aktuelle zulässige Basislösung solange, bis ◮ 2 ◮ Die lineare Zeit bezieht sich auf das Modell einer RAM. die aktuelle zulässige Basislösung optimal (d.h. minimal) ist oder gezeigt werden kann, dass das LP unlösbar ist. 161 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 ~x ist eine zulässige Lösung des LP mit A, ~b, ~c , wenn A · ~x = ~b und ~x ≥ 0 ist. ◮ Es existieren m linear unabhängiger Spalten Aj1 , . . . , Ajm in A und die Matrix B = (Aj1 , . . . , Ajm ). ◮ Da B eine nicht-singuläre m × m-Matrix ist, existiert die Inverse B −1 . Sei ~x B := B −1 · ~b, dann erfüllt x ∈ Rn mit B xi falls j = ji ist und xj = 0 sonst ◮ Sei A eine Matrix vom Rang m, d.h. die Zeilen von A sind linear unabhängig. Seien Aj1 , . . . , Ajm m linear unabhängiger Spalten und B = (Aj1 , . . . , Ajm ) die Matrix, die sich aus diesen Spalten zusammensetzt. ◮ ~ x B ist eine Basislösung des LP mit A, ~b, ~c , wenn B · ~x B = ~b ◮ Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck Beobachtung 5 Sei A eine Matrix deren Zeilen linear unabhängig sind, dann gilt: Definition 12 Sei A ∈ Rm×n , ~b ∈ Rm , ~c ∈ Rn ein LP in kanonischer Form mit m ≤ n. Mit A1 , . . . , An bezeichnen wir die Spalten von A, d.h. Aj ist die j-te Spalte von A. ◮ ~ x ist eine Lösung des LP mit A, ~b, ~c , wenn A · ~x = ~b ist. ◮ 162 ist. ◮ ~x B ist eine zulässige Basislösung des LP mit A, ~b, ~c , wenn B · ~x B = ~b und ~x B ≥ 0 ist. ◮ die Gleichung A · ~x = ~b. Ist ~x B ≥ 0, dann ist auch ~x ≥ 0. Sei ~c B := (cj1 , . . . , cjm ), dann gilt ~c T · ~x 163 = (~c B )T · ~x B . 164 Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck Lemma 12 Besitzt ein kanonisches lineares Programm eine zulässige Lösung, dann gibt es für dieses lineare Programm auch eine zulässige Basislösung. Beobachtung 5 (Teil 2) ◮ Beweis von Lemma 12: Sei ~x ∈ Rn eine zulässige Lösung und sei p ≤ n die Anzahl der Variablen xi mit xi > 0. ◮ Durch Vertauschen der Spalten in A und der Positionen in ~ x , ~c können wir garantieren, dass x1 , . . . , xp größer 0 sind. ◮ Da ~ x eine zulässige Lösung ist, gilt xi = 0 für alle i ∈ [p + 1..n], es gilt somit Sei Y := B −1 · A und ~z := ((~c B )T · Y )T , dann gilt ~z T · ~x Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck = (~c B )T · B −1 · A · ~x = (~c B )T · B −1 · ~b = (~c B )T · ~x B . Im Folgenden gehen wir zunächst davon aus, dass die Zeilen von A linear unabhängig sind. p X Der Einfachheit halber nennen wir die Lösung ~x , die wir aus ~x B gemäß der Regel auf der Folie 164 konstruieren auch Basislösung. j=1 ◮ xj · Aj = ~b . Sind A1 , . . . , Ap linear unabhängig, dann ist p ≤ m und wir können A1 , . . . , Ap mit Hilfe von m − p weiteren Spalten aus A zu einer Matrix B ergänzen. ~x B ist somit eine zulässige Basislösung. 165 Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck ◮ Die Lösung xj′ Es existieren p Werte α1 , . . . , αp , von denen zumindest ein Wert αr ungleich 0 ist, so dass p X j=1 αj · Aj j∈[1..p]\{r } ◮ xj − αj · xr αr = xj − 0 αj αr xj − · xr für j ∈ [1..p] \ {r } sonst. ist zulässige, wenn für alle j ∈ [1..p] \ {r } = 0 ist. Dann gilt X Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 12 (Teil 3): Beweis von Lemma 12 (Teil 2): ◮ Sind A1 , . . . , Ap linear abhängig, dann sind nicht alle diese Spalten in einer Matrix B enthalten. Es gilt: ◮ 166 αj · xr αr ≥ 0 ist. · Aj = ~b . ◮ ◮ Wir erhalten eine Lösung mit höchstens p − 1 Einträgen ungleich 0. Wir müssen jedoch zunächst annehmen, dass dieses keine zulässig Lösung ist. Ist αj = 0, so ist dieses erfüllt. Ist αj = 6 0, so muss ◮ ◮ 167 xj xr − ≥ 0 für αj > 0 und αj αr xj xr − ≤ 0 für αj < 0 sein. αj αr 168 Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck Um diese Bedingungen zu erfüllen wählen wir entweder xj xr αj > 0 = min αr αj j∈[1..p] oder ◮ xr αr = max j∈[1..p] xj αj < 0 . αj und die r -te Zeile durch 1 · (ar ,1 , . . . , ar ,n ) . ar ,s ◮ Wir können diesen Schritt wiederholen, bis eine zulässige Basislösung entstanden ist. Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Eine zentrale Komponente im Simplex-Algorithmus ist die Pivotierung oder die Gaußelimination: ◮ Sei ar ,s 6= 0 ein Eintrag in A. ◮ Wir ersetzen jede Zeile von A mit i 6= r durch ai,s · (ar ,1 , . . . , ar ,n ) (ai,1 , . . . , ai,n ) − ar ,s Beweis von Lemma 12 (Teil 4): ◮ Andreas Jakoby Universität zu Lübeck ◮ ◮ Durch diesen Schritt wird aus der s-ten Spalte (0, . . . , 0, 1, 0, . . . , 0), wobei die 1 an der r -ten Stelle steht. Um eine Basislösung zu finden, wählen wir iterativ für i = 1, 2, . . . , m ein ai,ji 6= 0 in Zeile i und pivotieren auf ai,ji . Auf diese Weise wählen wir m linear unabhängige Spalten Aj1 , . . . , Ajm von A und bestimmen eine Basislösung ~x B mit B = (Aj1 , . . . , Ajm ). 170 169 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Phase 1: Finde eine Basislösung: ◮ Algorithmus Pivotieren(A, r , s) Eingabe: k × ℓ-Matrix A, Position r ∈ [1..k] und s ∈ [1..ℓ] Ergebnis: modifizierte Matrix A mit s-ter Spalte (0, . . . , 0, 1, 0, . . . , 0) 1: for i = 1 to k by +1 with i 6= r do a 2: (ai,1 , . . . , ai,ℓ ) := (ai,1 , . . . , ai,ℓ ) − ari,s,s · (ar ,1 , . . . , ar ,ℓ ) 3: end for 4: (ar ,1 , . . . , ar ,ℓ ) := a1 · (ar ,1 , . . . , ar ,ℓ ) r ,s 5: Return(A) ◮ ◮ 171 Mit Hilfe von Tableaus reduziert sich der Simplex-Algorithmus darauf, bezüglich bestimmter Einträge zu pivotieren. Ein Tableau eines kanonischen linearen Programms ist die (m + 1) × (n + 1)-Matrix A ~b . T := ~c T 0 Sei B ∈ Rm×m eine invertierbare Teilmatrix von A, wie wir sie auf der Folie 163 beschrieben haben. Zur Vereinfachung gehen wir davon aus, dass die Spalten von B durch die ersten m Spalten von A gegeben sind, dann hat das Tableau die Form B Am+1 . . . An ~b T := . (c B )T cm+1 . . . cn 0 172 Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck ◮ Algorithmik WS 06/07 7. Vorlesung, 27.11.2006 Andreas Jakoby Universität zu Lübeck Algorithmus Finde-Basislösung(T ) Multiplizieren wir dieses Tableau von links mit B −1 0 . (~c B )T · B −1 1 A ~b Eingabe: m + 1 × n + 1-Tableau T = ~c T 0 Ergebnis: Tableau mit Basislösung ~x B oder infeasible 1: r := 1 2: while r ≤ m do 3: s := min({j ∈ [1..n]|T [r , j] 6= 0} ∪ {∞}) 4: if s = ∞ ∧ T [r , n + 1] 6= 0 then Return(infeasible) 5: else if s = ∞ ∧ T [r , n + 1] = 0 then 6: for i = r + 1 to m + 1 by +1 do 7: (T [i − 1, 1], .., T [i − 1, n + 1]) := (T [i, 1], .., T [i, n + 1]) 8: end for 9: m := m − 1 10: else setze T :=Pivotieren(T , r , s), jr := s und r := r + 1 11: end if 12: end while 13: Return(T , j1 , . . . , jm ) so erhalten wir ~x B ~x B Y I Ym+1 ... Yn = ~c T − ~z T −Z 0 cm+1 − zm+1 . . . cn − zn −Z wobei I die m × m-Einheitsmatrix ist. ◮ Algorithmisch können wir dieses mit Hilfe der Pivotierung und dem Algorithmus Finde-Basislösung auf Folie 174 lösen. ◮ Hierbei ist zu beachten, dass wir in diesem Algorithmus nicht davon ausgehen, dass sich B in den ersten m Spalten von A befindet. Ferner gehen wir nicht davon aus, dass die Zeilen von A linear unabhängig sind. 173 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck 174 ◮ Sei ~e = (e1 , . . . , em )T ∈ Rm mit −1 falls xiB < 0 und ei = 0 falls xiB ≥ 0 ◮ Sei x0 eine neue Variable, dann betrachten wir das neue kanonische lineare Programm KLP 2: Phase 2: Finde eine zulässigen Basislösung: ◮ In Phase 1 haben wir eine Basislösung ~x B = B −1 · ~b des kanonischen Programms KLP 1: ◮ ◮ minimiere Z = ~c T · ~x unter der Bedingung A · ~x = ~b und ~x ≥ 0 ◮ gefunden und dabei das Tableau ~x B Y1 ... Yn c1 − z1 . . . cn − zn −Z ◮ ◮ berechnet. ◮ Ist xiB < 0 für eine Zeile i, dann ist die gefundene Lösung nicht zulässig. Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck minimiere Z ∗ = x0 unter der Bedingung ~e · x0 + Y · ~x = ~x B und x0 , ~x ≥ 0. Wir betrachten hierbei das Tableau ~e ~x B Y1 ... Yn T ∗ = 0 c1 − z1 . . . cn − zn −Z 1 0 ... 0 0 mit den Spalten 0 bis n + 1 und den Zeilen 1 bis m + 2. Die Zeile m + 1 belassen wir zur Vereinfachung im Tableau. Sie wird nicht berücksichtigt, wenn wir das LP lösen. Wir modifiziere sie jedoch beim pivotieren. 175 176 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 13 (Teil 2): ◮ Lemma 13 KLP 2 ist immer lösbar und hat einen nicht-negativen Wert. Beweis von Lemma 13: ◮ Sei r die Zeile, für die xrB minimal ist. ◮ Wir pivotieren auf Zeile r und Spalte s = 0. ◮ Hierbei gilt T ∗ [r , s] = −1 und −1 falls xiB < 0 und ∗ T [i, s] = 0 sonst. Durch die Pivotierung erhalten wir (T ∗ [i, 0], . . . , T ∗ [i, n + 1]) −(T ∗ [r , 0], . . . , T ∗ [r , n + 1]) falls i = r (T ∗ [i, 0], . . . , T ∗ [i, n + 1]) = falls i 6= r und xiB ≥ 0 ∗ ∗ (T [i, 0], . . . , T [i, n + 1]) − (T ∗ [r , 0], . . . , T ∗ [r , n + 1]) falls i 6= r und xiB < 0 . ◮ Somit ist das Ergebnis eine zulässige Lösung des KLP 2. ◮ Wegen x0 ≥ 0 kann der optimale Wert nicht negativ sein. Beachte: Nach dem im Beweis beschriebenen Schritt liegt uns eine zulässige Basislösung des KLP 2 vor, und wir können diese analog zu Phase 3 verbessern! 177 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Lemma 14 KLP 1 ist genau dann lösbar, wenn das dazugehörige LP KLP 2 eine Lösung mit dem Wert Z ∗ = 0 besitzt. Ist Z ∗ = 0 für x0 , ~x ≥ 0, dann ist ~x eine zulässige Lösung von KLP 1. 178 Beweis von Lemma 14 (Teil 2): ◮ Beweis von Lemma 14: ◮ ◮ = ~x = Y · ~x und folglich Wir betrachten zunächst den Fall, dass Z ∗ = x0 = 0 ist. Dann gibt es ein ~x ≥ 0 in Rn , so dass = Y · ~x Somit gilt für diese Lösung B −1 · A · ~x Nach Lemma 13 ist der Wert der Zielfunktion Z ∗ von KLP 2 nicht negativ. ~e · x0 + Y · ~x Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck A · ~x ◮ B = ~x B = B −1 · ~b = ~b . Dieses ~x ist folglich eine zulässige Lösung des ursprünglichen LP KLP 1. ist (siehe Bedingung von KLP 2). 179 180 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 14 (Teil 3): Wir betrachten nun die Rückrichtung: ◮ Sei ~ x eine zulässige Lösung von KLP 1, d.h. A · ~x = ~b. ◮ ◮ Um eine erste zulässige Basislösung zu finden können wir wie folgt vorgehen: Dann gilt ◮ Wir generieren aus einer Basislösung für ein kanonisches lineares Programm ein neues kanonisches lineares Programm in der Form von KLP 2. Folglich ist x0 = 0 zusammen mit diesem Vektor ~x eine zulässige Lösung für das KLP 2, wobei der Wert der Zielfunktion Z ∗ = x0 = 0 ◮ Wir bestimmen eine zulässige Basislösung für dieses LP wie im Beweis von Lemma 13 beschrieben. ◮ Verfahren analog zur Phase 3 um eine optimale Lösung zu finden. ist. ◮ Interpretiere diese Lösung wie in Lemma 14 beschrieben. Y · ~x ◮ Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck = B −1 · A · ~x = B −1 · ~b = ~x B . Da eine Bedingung des KLP 2 x0 ≥ 0 ist, ist diese Wert der Zielfunktion minimal. 181 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Algorithmus Finde-zulässige-Basislösung(T , j1 , . . . , jm ) ~x B Y Eingabe: m + 1 × n + 1-Tableau T := T T ~c − ~z −Z B Ergebnis: Tableau mit zulässiger Basislösung ~x oder infeasible 1: if ∀i ∈ [1..m] : T [i, n + 1] ≥ 0 then Return(T , j1 , . . . , jm ) end if 2: generiere in T Spalte 0 und Zeile m + 2 3: T [m + 2, 0] := 1, T [m + 1, 0] := 0 4: for i = 1 to n + 1 by +1 do T [m + 2, i] := 0 end for 5: for i = 1 to m by +1 do 6: if T [i, n + 1] < 0 then T [i, 0] := −1 else T [i, 0] := 0 end if 7: end for 8: wähle r ∈ [1..m] mit T [r , n + 1] ≤ T [i, n + 1] für alle i ∈ [1..m] 9: setze jr := 0 und T :=Pivotieren(T , r , 0) 10: setze H =Verbessere-zulässige-Basislösung-2(T , j1 , . . . , jm ) 11: if H =unb ∨ T [m + 2, n + 1] 6= 0 then Return(infeasible) end if 12: setze (T , j1 , .., jm ) := H und entferne in T Spalte 0 und Zeile m + 2 13: Return(T , j1 , . . . , jm ) 183 182 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Phase 3: Verbessern einer zulässigen Basislösung: ◮ Da die Idee hinter dem verbessern einer zulässigen Basislösung einfacher ist, wollen wir diese Phase vorziehen. ◮ Sei ~ x B = B −1 · ~b eine zulässige Basislösung eines kanonischen linearen Programms und Z = (~c B )T · ~x B . ◮ Sei Y = B −1 · A und Yj = (y1,j , . . . , ym,j ) die j-te Spalte von Y. ◮ Da B regulär ist, gilt m X yi,j · Bi . Aj = B · Yj = i=1 ◮ Ist yr ,j 6= 0, dann sind auch die Spalten B1 , . . . , Br −1 , Aj , Br +1 , . . . , Bm linear unabhängig und wir können B durch B ∗ = (B1 , . . . , Br −1 , Aj , Br +1 , . . . , Bm ) ∗ ersetzen und eine neue Basislösung ~x B = (B ∗ )−1 · ~b . 184 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck ∗ Wir untersuchen nun, unter welchen Voraussetzungen ~x B eine zulässige Basislösung ist. Es gilt: ◮ Ist xrB = 0, dann sind beide Ungleichungen aus Lemma 15 erfüllt. ◮ Ist xrB 6= 0, dann folgt aus der zweiten Ungleichung von Lemma 15, dass yr ,j > 0 ist. Ist yi,j < 0, dann ist auch die erste Ungleichung erfüllt. ∗ ◮ Ist xrB 6= 0 und yr ,j < 0, dann ist nach Lemma 15 ~ x B keine zulässige Basislösung. ◮ Wir müssen nun noch den Fall xrB 6= 0, yr ,j > 0 und yi,j > 0 betrachten. ∗ ◮ Damit ~ x B eine zulässige Basislösung ist, muss nach Lemma 15 in diesem Fall ∗ ~x B muss keine zulässige Basislösung sein. Mit Hilfe einiger elementarer Umformungen folgt: ∗ Lemma 15 ~x B ist genau dann eine zulässige Basislösung, wenn für alle i ∈ [1..m] \ {r } xiB − xrB · ist und yi,j ≥ 0 yr ,j xrB ≥ 0 yr ,j gilt. xrB yr ,i ≤ xiB yi,j gelten. 185 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck ◮ 186 ∗ Damit ~x B eine zulässige Basislösung ist, müssen wir r so aus B auswählen, dass B xi xrB = min yi,j > 0 =: θ yr ,i yi,j i∈[1..m] Mit Hilfe einiger elementarer Umformungen3 folgt: Lemma 16 Der Wert der Zielfunktion der zulässige Basislösung ∗ ~x B ist ist. ◮ Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Z∗ = Z + Idee für einen Algorithmus: Wir wählen eine (beliebige) Spalte Aj von A, die nicht in B vorkommt. Gibt es ein yi,j > 0, dann gibt es in B eine Spalte Br , die wir durch Aj ersetzen können, ∗ um eine zulässige Basislösung ~x B zu erhalten. Diese Spalte können wir mit Hilfe der obigen Formel bestimmen. xrB · (cj − zj ) = Z + θ · (cj − zj ) . yr ,j 3 187 und etwas rechnen 188 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Idee für einen Algorithmus: ◮ ◮ Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Wann liegt eine unbeschränkte Lösung vor? Wir wählen eine Spalte Aj von A, die nicht in B vorkommt, für die (cj − zj ) < 0 ist und für die es ein yi,j > 0 gibt. Wählen wir ein geeignetes Br und ersetzen Br durch Aj , dann erhalten wir einen neuen Wert der Zielfunktion Z ∗ ≤ Z . Ist die Basislösung ~x B nicht degeneriert, d.h. ist xrB 6= 0, dann gilt sogar Z ∗ < Z . ◮ ◮ Wir betrachten eine Spalte Aj mit yi,j ≤ 0 für alle i ∈ [1..m]. Es gilt ~b = B · ~x B = m X Bi · xiB m X Bi · xiB − θ · Aj + θ · Aj m X Bi · yi,j . i=1 wobei der Wert der Zielfunktion Z = (~c B )T · ~x B ist. Bezüglich des Tableaus ~x B I Ym+1 ... Yn 0 cm+1 − zm−1 . . . cn − zm −Z ◮ Für einen beliebigen Wert θ gilt ~b = B · ~x B − θ · Aj + θ · Aj von ~x B bedeutet dieses: Wir suchen eine Spalte j mit negativem Eintrag in der letzten und positivem yi,j in der i-ten Zeile. Für jeden positiven Eintage yi,j berechnen wir θi = xiB /yi,j und wählen r , so dass θr minimal ist. Dann pivotieren wir auf Zeile r und Spalte j. = i=1 und Aj = B · Yj = i=1 190 189 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck ◮ m X i=1 ◮ Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Somit ist ~b = ◮ Andreas Jakoby Universität zu Lübeck Bi · (xiB − θ · yi,j ) + θ · Aj . Für unseren Algorithmus merken wir uns: Ist θ > 0, dann ist xiB − θ · yi,j ≥ xiB ≥ 0 für alle i ∈ [1..m]. ◮ Gibt es eine Spalte Aj , die nicht in B vorliegt und für die sowohl cj − zj < 0 als auch Yj = B −1 · Aj ≤ 0 ist, dann ist das lineare Programm unbeschränkt. ◮ Gibt es im Tableau eine Spalte j in der kein Eintrag positiv und der letzte Eintrag negativ ist, dann ist das lineare Programm unbeschränkt. Aus der obigen Gleichung erhalten wir eine neue zulässige Lösung für das LP: xi = xiB − θ · yi,j für i ∈ [1..m] und xj ◮ ◮ = θ. Als Wert der Zielfunktion erhalten wir Z ∗ = Z + θ · (cj − zj ). Ist cj − zj < 0, dann können wir den Wert der Zielfunktion beliebig klein machen. 191 192 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 17 (Teil 2): ◮ Sei ~ x ′ eine beliebige zulässige Lösung des LPs und Z ′ = ~c T · ~x ′ der dazugehörige Wert der Zielfunktion. ◮ Für alle Lösungen ~ x (also insbesondere auch für ~x ′ ) gilt Wann ist eine zulässige Lösung optimal? Lemma 17 Sei ~x B = B −1 · ~b eine zulässige Basislösung des kanonischen linearen Programms A, ~b, ~c wobei Z = (~c B )T · ~x B . Ist cj − zj ≥ 0 für alle Spalten Aj , die nicht zu B gehören,4 dann ist Z minimal und ~x B beschreibt eine optimale zulässige Lösung für das lineare Programm. B · ~x B = b = A · ~x = B · Y · ~x und somit ~x B Beweis von Lemma 17: ◮ Jede Spalte Aj von A kann als Linearkombination Aj = B · Yj geschrieben werden. Wir erhalten A = B ·Y Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck ◮ = Y · ~x . Betrachten wir nun die Zielfunktion, so erkennen wir, dass Z = (~c B )T ·~x B = (~c B )T · Y ·~x ′ = ~z T ·~x ′ ≤ c T ·~x ′ = Z ′ . und ~z T = (~c B )T · Y . ◮ 4 Das bedeutet, dass der Wert der aktuellen Lösung nicht durch Austausch einer Spalte von B mit einer anderen Spalte aus A verbessert werden kann. Die letzte Ungleichung folgt aus der Tatsache, dass ~z ≤ ~c und ~x ≥ 0 ist. Z ist somit minimal und folglich ist ~x B eine optimale zulässige Lösung. 194 193 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Gibt es im Tableau keinen negativen Eintrag in der letzten Zeile, dann haben wir eine optimale Lösung gefunden. ◮ Um die optimale Lösung auszugeben, suchen wir die m Spalten j1 , . . . , jm im Tableau , die die m × m-Einheitsmatrix auf den ersten m Zeilen enthalten. Dann gilt für die optimale Lösung ~x ∈ Rn : B xi falls j = ji ist und xj = 0 sonst Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Algorithmus Verbessere-zulässige-Basislösung(T , j1 , . . . , jm ) Eingabe: Tableau T ∈ Rm+1×n+1 Ergebnis: Tableau mit optimaler Lösung ~x B oder unbounded 1: while ∃j ∈ [1..n] : T [m + 1, j] < 0 do 2: if ∃j ∈ [1..n]∀i ∈ [1..m] : T [i, j] ≤ 0 ∧ T [m + 1, j] < 0 then 3: Return(unbounded) end if 4: wähle s ∈ [1..n] \ {j1 , . . . , jm } mit T [m + 1, s] < 0 T [i,n+1] 5: wähle r ∈ [1..m] mit TT[r [r,n+1] ,s] ≤ T [i,s] für alle i ∈ [1..m] 6: mit T [i, s] > 0 und T [r , s] > 0 7: setze T :=Pivotieren(T , r , s) und jr := s 8: end while 9: Return(T , j1 , . . . , jm ) Für unseren Algorithmus gilt: ◮ Andreas Jakoby Universität zu Lübeck 195 196 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Terminierung ◮ Aus unserer Analyse folgt bis jetzt nicht, ob die Suche nach einer optimalen Lösung jemals terminiert. ◮ Die Terminierung hängt im wesentlichen von der Wahl des Pivotelements in Zeile 4 (und 5) der Algorithmen Verbessere-zulässige-Basislösung und Verbessere-zulässige-Basislösung-2 ab. Die Regel nach der dieses Element ausgewählt wird nennen wir Pivotregel. ◮ Wenden wir die smallest-index-Regel an, dann hält die Suche nach einer optimalen Lösung immer. Die smallest-index-Regel wählt s, r wie folgt: Algorithmus Verbessere-zulässige-Basislösung-2(T , j1 , . . . , jm ) Eingabe: Tableau T ∈ Rm+2×n+2 Ergebnis: Tableau mit optimaler Lösung ~x B für KLP 2 oder unb 1: while ∃j ∈ [0..n] : T [m + 2, j] < 0 do 2: if ∃j ∈ [0..n]∀i ∈ [1..m] : T [i, j] ≤ 0 ∧ T [m + 2, j] < 0 then 3: Return(unb) end if 4: wähle s ∈ [0..n] \ {j1 , . . . , jm } mit T [m + 2, s] < 0 T [i,n+1] 5: wähle r ∈ [1..m] mit TT[r [r,n+1] ,s] ≤ T [i,s] für alle i ∈ [1..m] 6: mit T [i, s] > 0 und T [r , s] > 0 7: setze T :=Pivotieren(T , r , s) und jr := s 8: end while 9: Return(T , j1 , . . . , jm ) ◮ ◮ wähle s minimal, so dass T [m + 1, s] < 0 bzw. T [m + 2, s] < 0 ist uns wähle r minimal, so dass T [r , s] > 0 und für alle i ∈ [1..m] mit T [i, s] > 0 T [i, n + 1] T [r , n + 1] ≤ T [r , s] T [i, s] ist. 197 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Algorithmus Simplex-Algorithmus(A, ~b, ~c ) Eingabe: kanonisches lineares Programm mit m × n-Matrix A, m-dimensionalem Vektor ~b und n-dimensionalem Vektor ~c Ergebnis: optimaler Lösung ~x des kanonischen linearen Programms A ~b 1: generiere das Tableau T := ~c T 0 2: H :=Finde-Basislösung(T ) 3: if H =infeasible then Return(infeasible) end if 4: H :=Finde-zulässige-Basislösung(H) 5: if H =infeasible then Return(infeasible) end if 6: sei (T , j1 , . . . , jm ) = H 7: if ∃i ∈ [1..m] : ji = 0 then 8: wähle k ∈ [1..n] \ {j1 , . . . , jm } mit T [i, k] 6= 0 9: T := Pivotieren(T , i, k), ji := k 10: end if 198 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Simplex-Algorithmus (Teil 2): 11: 12: 13: 14: 15: 16: 17: 199 H :=Verbessere-zulässige-Basislösung(T , j1 , . . . , jm ) if H =unbounded then Return(unbounded) end if sei (T , j1 , . . . , jm ) = H for i := 1 to n by +1 do xi := 0 end for for i := 1 to m by +1 do xji := T [i, n + 1] end for Z := −T [m + 1, n + 1] Return(Z , x1 , . . . , xn ) 200 Algorithmik WS 06/07 8. Vorlesung, 04.12.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Analysieren wir die Lösungen, die der Simplex-Algorithmus findet, so erkennen wir: Beobachtung 6 Bestimmt der Simplex-Algorithmus eine optimale Lösung, dann ist diese Lösung für ein lineares Programme A ∈ Nm×n , ein Vektor ~b ∈ Nm und ein Vektor ~c ∈ Nn immer ein rationaler Vektor ~x ∈ Qn . Satz 12 Der Simplex-Algorithmus terminiert immer und bestimmt die optimale Lösung für ein kanonisches lineares Programm korrekt, wenn wir die smallest-index-Regel anwenden. Beobachtung 7 Für die zulässigen Basislösungen ~x , die der Simplex-Algorithmus auf Eingabe eines linearen Programms A ∈ Nm×n , ein Vektor ~b ∈ Nm und ein Vektor ~c ∈ Nn bestimmt, gilt ~x ∈ Qn und sowohl die Beträge der Einträge in ~x als auch deren Nenner sind durch 2L beschränkt, wobei L = m · n + ⌈log2 |P|⌉ und |P| das Produkt der Einträge in A, ~b und ~c ist, die ungleich 0 sind. 201 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck 202 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck 4.6 Lineare Ungleichungen Im Verlauf unserer weiteren Untersuchungen wird sich das folgende Lemma als sehr hilfreich erweisen: Im Folgenden wollen wir die folgenden drei Probleme betrachten: ◮ ~x ′ Lemma 18 Seien ~x und zwei zulässige Basislösungen eines linearen Programms in kanonischer Form mit k · 2−2L < ~c T · ~x , ~c T · ~x ′ ≤ (k + 1) · 2−2L A · ~x = ~b, für ein k ∈ N, dann ist ~c T · ~x = ~c T · ~x ′ . Beweis von Lemma 18: Sei ~c T · ~x 6= ~c T · ~x ′ . ◮ ◮ ~c T ~x ≥ 0 und ~c T · ~x minimal ist. ◮ ~c T · ~x ′ Nach Beobachtung 7 sind dann · ~x und zwei rationale Zahlen mit jeweils einem Nenner größer 2L . Somit ist |~c T · ~x − ~c T · ~x ′ | ≥ 2−2L . Lineare Programme in kanonischer Form: Gegeben sind eine m × n-Matrix A ∈ Nm×n , ein Vektor ~b ∈ Nm und ein Vektor ~c ∈ Nn . Gesucht ist ein Vektor ~x ∈ Qn , so dass ◮ 203 Lineare Ungleichungen: Gegeben sind eine m × n-Matrix A ∈ Nm×n und ein Vektor ~b ∈ Nm . Frage: Gibt es einen Vektor ~x ∈ Qn , so dass A · ~x ≤ ~b ist. Strikte Lineare Ungleichungen: Gegeben sind eine m × n-Matrix A ∈ Nm×n und ein Vektor ~b ∈ Nm . Frage: Gibt es einen Vektor ~x ∈ Qn , so dass A · ~x < ~b ist. 204 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Wir wollen nun zeigen: ◮ ◮ ◮ ◮ Die Existenz eines Algorithmus, der das Probleme der lineare Ungleichungen in Polynomialzeit löst, impliziert die Existenz eines polynomialzeit Algorithmus für das Problem der linearen Programme. Ein wichtiges Hilfsmittel beim folgenden Algorithmus ist die binäre Suche: ◮ Im Folgenden sei LI-Solve ein Algorithmus zum Lösen des Problems der linearen Ungleichungen. ◮ Gesucht ist eine Zahl x ∈ N mit 0 ≤ x ≤ h − 1 (h ∈ N). Um x zu finden, können wir Fragen der Form Ist x ≥ a? Zur Vereinfachung stellen wir die Eingabe von LI-Solve als Ungleichungen dar — auf die Formatierung und die Zusammenfassung der Koeffizienten in eine Matrix A verzichten wir. für beliebige Werte a an ein Orakel stellen. Es gilt: Lemma 19 x können wir mit Hilfe von ⌈log2 h⌉ Orakelfragen finden. Das Ergebnis von LI-Solve ist 1 oder 0 (bzw. true oder false), wenn eine Lösung für die lineare Ungleichungen existiert bzw. nicht existiert. 205 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck 206 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck 2. Wir testen, ob das LP unbeschränkt ist, indem wir LI-Alg einmal für das Ungleichungssystem A · ~x ≥ ~b, Unser Algorithmus zum Lösen eines kanonischen LPs verfährt wie folgt: A · ~x ≤ ~b, ~x ≥ 0, ~c T · ~x ≤ −22L − 1 aufrufen. Aus Beobachtung 7 folgt: 1. Wir testen, ob das LP lösbar ist, indem wir LI-Alg einmal für das Ungleichungssystem A · ~x ≥ ~b, A · ~x ≤ ~b, ◮ ~x ≥ 0 ◮ aufrufen. Wenn das Ungleichungssystem nicht lösbar ist, dann ist auch das LP nicht lösbar. Ist ein LP lösbar und beschränkt, d.h. der Simplex-Algorithmus findet eine optimale Lösung, dann existiert eine solche Lösung ~x , so dass 0 ≤ xi ≤ 2L für alle i ∈ [1..n] ist. Betrachten wir den minimalen Wert von ~c T · ~x , so erkennen wir, dass dieser größer gleich der Summe − n X i:=1 |ci | · 2L ≥ −2L · (|P| + n) ≥ −22L ist. Wenn das obige Ungleichungssystem lösbar ist, dann ist auch das LP unbeschränkt. 207 208 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck 4. Besitzt unser LP eine optimale Lösung ~x und kennen wir den Wert von k, so dass 3. Besitzt unser LP eine optimale Lösung ~x , dann können wir den Wert der Zielfunktion für diese Lösung ~x approximieren: ◮ ◮ ◮ k · 2−2L < ~c T · ~x Mit Hilfe der binären Suche bestimmen wir den Wert von k, so dass k · 2−2L < ~c T · ~x ≤ (k + 1) · 2−2L ist. Da der Betrag von ~c T · ~x maximal 22L ist, gilt −24L ≤ k A · ~x ≤ ~b, ≤ 24L . ~x ≥ 0, T ~c · ~x ≤ 2 −2L ≤ (k + 1) · 2−2L ist, dann können wir die Werte von j mit xj = 0 in einer zulässigen optimalen Basislösung ~x Schritt für Schritt für j = 1, 2, . . . , n bestimmen. Sei S(j) die Menge dieser Indizes, die wir bis in den Runden 1 bis j − 1 bestimmt haben, d.h. S(1) = ∅. In der j-ten Runde verfahren wir wie folgt: Nach Lemma 19 benötigen wir hierzu 4L + 1 Aufrufe von LI-Alg für Ungleichungssysteme A · ~x ≥ ~b, Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck ◮ Wir rufen LI-Alg für das Ungleichungssysteme A·~x ≥ ~b, ·a A·~x ≤ ~b, ~x ≥ 0, k ·2−2L ≤ ~c T ·~x ≤ (k +1)·2−2L und wobei die Werte von a ∈ N durch die Aufrufe der binären Suche bestimmt. xj ≤ 0, ◮ ∀i ∈ S(j) : xi ≤ 0 auf. Hat das obige Ungleichungssystem eine Lösung, dann setzen wir S(j + 1) := S(j) ∪ {j} und ansonsten S(j + 1) := S(j). 210 209 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 5. Sei H := {1, . . . , n} \ S(n + 1). Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck 9. Wir ergänzen nun H, so dass über H genau m linear unabhängig Spalten aus A indiziert werden. Diese Spalten geben uns eine Matrix B an, wie wir sie im Simplex-Algorithmus untersucht haben. Wir können somit eine optimale zulässige Basislösung über 6. Da alle Variablen xj mit j ∈ H einen Wert größer 0 haben müssen, damit ~x eine optimale Lösung ist, können wir aus dem Simplex-Algorithmus folgern, dass H maximal m Indizes beinhaltet. 7. Aus dem Simplex-Algorithmus folgt zudem, dass die durch die Indizes j ∈ H indizierten Spalten aus A linear unabhängig sind. ~x B 8. Sind die Zeilen aus A linear unabhängig (ansonsten vereinfachen wir die Problemstellung, indem wir sukzessive Zeilen aus A entfernen), dann gibt es auch m linear unabhängig Spalten in A. := B −1 · ~b berechnen. 10. Die Matrix B −1 können wir mit Hilfe der Gaußelimination aus B in polynomieller Zeit bestimmen. 211 212 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Algorithmus LP-Solve(A, ~b, ~c ) Eingabe: lineares Programm A, ~b, ~c in kanonischer Form Ergebnis: optimaler Lösung ~x des linearen Programms 1: if ¬LI-Solve(A · ~ x ≥ ~b, A · ~x ≤ ~b, ~x ≥ 0) then 2: Return(infeasible) 3: else if LI-Solve(A~ x ≥ ~b, A~x ≤ ~b, ~x ≥ 0, ~c T ~x ≤ −22L − 1) then 4: Return(unbounded) 5: end if 6: δ := 24L−1 , k+1 := 0 7: while δ ≥ 1 do 8: if LI-Solve(A~x ≥ ~b, A~x ≤ ~b, ~x ≥ 0, ~c T ~x ≤ 2−2L k+1 ) then 9: k+1 := k+1 − δ, δ := δ/2 10: else 11: k+1 := k+1 + δ, if δ > 2 then δ := δ/2 end if 12: end if 13: end while Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 LP-Solve (Teil 2): 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: sei n die Dimension von ~x und S := ∅ for i = 1 to n by +1 do if LI-Solve(A~x ≥ ~b, A~x ≤ ~b, ~x ≥ 0, ∀j ∈ S ∪ {i} : xj ≤ 0 ~c T ~x ≤ k+1 /22L , ~c T ~x ≥ (k+1 − 1)/22L ) then S := S ∪ {i} end if end for Sei m die Dimension von ~b und H := [1..n] \ S if |H| < m then Ergänze H um m − |H| Spaltenindizes aus A, so dass die über H indizierten Spalten aus A alle linear unabhängig sind. end if Sei H := {j1 , . . . , jm }. 213 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 28: 29: 30: 31: 32: Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Analysieren wir den Algorithmus LP-Solve, so sehen wir, dass wir ein lineares Programm in kanonischer Form mit Hilfe einer polynomiellen Anzahl von Aufrufen von LI-Solve lösen können. Da wir ein System linearer Ungleichungen mit Hilfe eines Aufrufs eines linearen Programms lösen können folgt: LP-Solve (Teil 3): 27: 214 Sei B := (Aj1 , . . . , Ajm ) wobei Ai die i-te Spalte aus A ist. Bestimme ~x B := B −1 · ~b, bzw. löse das System linearer Gleichungen B · ~x B = ~b. for j = 1 to n by +1 do xi := 0 end for for all ji ∈ H do xji := xiB end for Return(~c T · ~x , x1 , . . . xn ) Satz 13 Es existiert genau dann ein polynomialzeit Programm für lineare Programme, wenn es ein polynomialzeit Programm zur Lösung linearer Ungleichungen gibt. 215 216 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Der nächste Schritt in Richtung eines polynomialzeit Programms zum Lösen linearer Programme ist es lineare Ungleichungen mit Hilfe strikter linearer Ungleichungen zu lösen. Beweis von Lemma 20: Lemma 20 Ein System linearer Ungleichungen A · ~x ≤ ~b ◮ Der genau dann-Fall ist trivial. ◮ Auf den wenn-Fall werden wir hier nicht weiter eingehen, da dieser Fall nicht weiter zum Verständnis des Verfahrens zur Lösung von linearen Ungleichungen bzw. strikten linearen Ungleichungen beiträgt. hat genau dann eine Lösung, wenn das System strikter linearer Ungleichungen ~ai · ~x < bi + ε Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck für allei ∈ [1..m] mit ε = 2−2L eine Lösung hat, wobei ~b T = (b1 , . . . , bm ) und ~ai der i-te Zeilenvektor von A ist. 217 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Satz 14 Es existiert ein polynomialzeit Programm zum Lösung linearer Ungleichungen, wenn es ein polynomialzeit Programm zur Lösung strikter linearer Ungleichungen gibt. 218 Beweis von Satz 14 (Teil 2): ◮ Beweis von Satz 14: ◮ Betrachten wir ein System linearer Ungleichungen ~ai · ~x ◮ ≤ bi für i ∈ [1..m] . (1) ◮ Aus Lemma 20 wissen wir, dass dieses System genau dann eine Lösung hat, wenn das System strikter Ungleichungen ~ai · ~x < bi + 2−2L Die Größe der Ungleichungen (als Eingabe für ein Programm) vom Typ 2 wächst im Vergleich zur Größe der ursprünglichen Gleichungen vom Typ 1 maximal um den Faktor 2L, d.h. die Größe wächst maximal auf das doppelte des Quadrats der ursprünglichen Eingabe. Gibt es ein polynomialzeit Programm zum Lösung strikter linearer Ungleichungen, dann gibt es ein polynomialzeit Programm zur Lösung linearer Ungleichungen: ◮ für i ∈ [1..m] ◮ bzw. ◮ 22L · ~ai · ~x < 22L · bi + 1 für i ∈ [1..m] Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck (2) Führe die Transformation vom Typ 1 auf den Typ 2 durch. Teste, ob es eine Lösung dieses strikten Ungleichungssytem existiert. Es existiert eine Lösung des ursprünglichen Systems, genau dann, wenn es eine Lösung des transformierten Systems existiert. eine Lösung hat. 219 220 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck 4.7 Affine Transformationen und Ellipsoide ◮ Bevor wir den Ellipsoid-Algorithmus vorstellen, werden wir noch auf einige Konzepte und Ergebnisse aus der linearen Algebra eingehen: ◮ Sei Q eine nicht singuläre n × n-Matrix mit Q ∈ R n×n und ~t ∈ R n . ◮ Sei T : R n → R n mit T (~ x ) := ~t + Q · ~x für alle ~x ∈ R n , dann nennen wir T eine affine Transformation. ◮ Da Q nicht singulär ist, ist T invertierbar, wobei das Inverse T −1 von T wieder eine affine Transformation ist. ◮ Die n-Sphäre Sn (oder Einheitskugel) definieren wir über Sn Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Sei T eine affine Transformation, dann nennen wir T (Sn∗ ) := { T (~x ) | ~x ∈ Sn∗ } einen Ellipsoiden. Alternativ gilt T (Sn∗ ) = { ~y | (~y − ~t)T · B −1 · (~y − ~t) ≤ 1 }, wobei T (~x ) = ~t + Q · ~x und B = Q · Q T ist. ◮ := { ~x ∈ R n | ~x T · ~x = 1 } ◮ und die dazugehörige Vollkugel bzw. Ball Sn∗ := { ~x ∈ R n | ~x T · ~x ≤ 1 } . Da B das Produkt zweier nicht singulärer Matrizen ist, ist B positiv definit, d.h. für alle Vektoren ~x ∈ R n die ungleich dem 0-Vektor sind gilt ~x T · B · ~x > 0. Eine affine Transformation T mit ~t = 0 und Q · Q T = I nennen wir Rotation. Wie wir einfach aus aus der alternativen Darstellung von T (Sn∗ ) erkennen können, bildet eine Rotation Sn∗ auf sich selber ab. 221 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck 222 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Beispiel: Wir betrachten 2 ~t := 3 Wir werden nun einige nützliche Ergebnisse aus der linearen Algebra (ohne Beweise) vorstellen: und Q := und somit Lemma 21 Affine Transformationen T erhalten die Teilmengenbeziehung, d.h. sei S ⊆ S ′ ⊆ R n , dann ist T (S) ⊆ T (S ′ ). B = Q ·Q Lemma 22 Sei S ⊆ R n eine Teilmenge von R n mit Volumen V , dann hat T (S) ein Volumen von V · | det(Q)|. T = 4 0 0 1 und B −1 2 0 0 1 := Das Volumen dieses Ellipsoids ist 2π. 1/4 0 0 1 . y Lemma 23 Sei ~a ∈ R n ein Vektor der Länge ||~a||, dann existiert eine Rotation TR , so dass T T TR (~a) = QR · ~a = (||a||, 0, . . . , 0) ist. x 223 224 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Für das nun folgende Lemma müssen wir noch einmal zur geometrischen Interpretation von Ungleichungssystemen zurückkehren: Definition 13 (Teil 2) f ist eine Fläche (Face) von P, wenn für eine Hyperebene H entweder Definition 13 Für eine m × n-Matrix A ∈ R m×n und einen m-dimensionalen Vektor ~b ∈ R m sei P Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck P ∩ HS + ⊆ H oder P ∩ HS − ⊆ H und f = P ∩ H ist. = { ~x ∈ R n | A · ~x ≤ ~b } ◮ das durch A und ~b definierte konvexe Polytop. Für einen Vektor ~a ∈ R n und einen Wert d definieren wir die Hyperebene H und die Halbräume HS + und HS − über Eine Fläche f ist eine Facette von P, wenn f (n − 1)-dimensional ist. ◮ Eine Fläche f ist ein Knoten von P, wenn f 1-dimensional ist. ◮ Eine Fläche f ist eine Kante von P, wenn f 2-dimensional ist. Für das Polytop P definieren wir H = { ~x | ~aT · ~x = d } HS + = { ~x | ~aT · ~x ≥ d } Int(P) := { ~x ∈ R n | A · ~x < ~b } . HS − = { ~x | ~aT · ~x ≤ d } 225 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck x3 (0, 0, 3) (1, 0, 3) (0, 0, 3) (1, 0, 3) (2, 0, 2) (2, 0, 2) ◮ keine Face (0, 0, 0) x1 (0, 0, 0) Kante (0, 2, 0) (2, 2, 0) x2 (0, 2, 0) (2, 2, 0) 227 Sind alle Mengen von n + 1 Knoten linear abhängig, dann liegt P auf einer (n − 1)-dimensionalen Hyperebene H. ◮ Sei ~x ∈ Int(P) und ε > 0 der kleinste Abstand von ~x zu einer Face von P. ◮ Die Vollkugel um ~x mit Durchmesser ε liegt vollständig in P. ◮ Dieses ist ein Widerspruch, da keine n-dimensionale Vollkugel in einem (n − 1)-dimensionalen Hyperraum liegen kann. x1 (2, 0, 0) (2, 0, 0) x2 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Beweis von Lemma 24: Der Beweis erfolgt über eine Widerspruchsannahme. (0, 2, 3) Knoten Andreas Jakoby Universität zu Lübeck Lemma 24 Gilt für ein n-dimensionales Polytop P Int(P) 6= ∅, dann hat P mindestens n + 1 linear unabhängige Knoten. x3 Facette (0, 2, 3) 226 228 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Beispiel: Ellipsoid in Runde j mit 9 0 0 und Bj = tj = 0 4 0 4.8 Ellipsoid-Algorithmus für strikte lineare Ungleichungen Grundidee des Ellipsoid-Algorithmus: ◮ Der Algorithmus arbeitet in Runden. ◮ Zu jedem Zeitpunkt betrachten wir ein Ellipsoid, welches eine Lösung des strikten linearen Ungleichungssystems beinhaltet, sofern eine Lösung existiert. ◮ In jeder Runde ersetzen wir den aktuellen Ellipsoid durch einen kleineren Ellipsoid welcher ebenfalls eine Lösung beinhaltet. ◮ Nach einer hinreichenden Anzahl von Runden finden wir Lösung oder wir erhalten einen Ellipsoid, der zu klein ist, um noch eine Lösung zu beinhalten. In diesem Fall können wir ausgeben, dass keine Lösung existiert. und einer Ungleichung x + y < −1. y x + y < −1 Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Ellipsoid in Runde j + 1 mit √ −3/ √13 84/13 −32/13 tj+1 = . und Bj+1 = −32/13 496/117 −4/(3 13) y x + y < −1 Ej x 230 229 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Andreas Jakoby Universität zu Lübeck Ej x tj+1 Ej+1 231 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 11.12.2006 Algorithmus Ellipsoid-Algorithmus(A, ~b, L) Eingabe: striktes lineares Ungleichungssystem A · ~x < ~b der Größe L. Ergebnis: ~x mit A · ~x < ~b, wenn ein solcher Vektor existiert, und infeasible sonst. 1: Setze j := 0, ~t0 := (0, . . . , 0)T und B0 := n2 · 22L · I 2: while j ≤ K = 16n(n + 1)L do 3: if A · ~tj < ~b then Return(~tj ) end if 4: Wähle eine Ungleichung aus A · ~x < ~b, so dass ~aiT · ~tj ≥ bi ist, 5: d.h. eine Ungleichung, die von ~tj nicht erfüllt wird. B ·~a 1 ~tj+1 := ~tj − n+1 6: · √ Tj i ~ai Bj ~ai (B ·~a )(Bj ·~ai )T n2 2 · j ~aTi ·B ·~ 7: Bj+1 := n2 −1 Bj − n+1 j ai i 8: j := j + 1 9: end while 10: Return(infeasible) 232 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Um die erste Frage zu beantworten zeigen wir den folgenden Satz: Satz 15 Sei Bj ∈ R n×n positiv definite, ~tj ∈ R n und ~ai ∈ R n ein beliebiger Vektor, ungleich dem 0-Vektor. Seien ~tj+1 und Bj+1 ein Vektor und eine Matrix, wie sie aus Bj , ~tj ,~ai in den Zeilen 6 und 7 des Ellipsoid-Algorithmus berechnet werden, dann gilt 1. Bj+1 ist positiv definit und somit Was bleibt zu zeigen? ◮ ◮ ◮ Findet der Ellipsoid-Algorithmus immer eine Lösung, wenn eine Lösung existiert? −1 Ej+1 := { ~x ∈ R n | (~x − ~tj+1 )T · Bj+1 · (~x − ~tj+1 ) ≤ 1 } Wie können wir den Algorithmus implementieren und die Wurzel ziehen? ein Ellipsoid. 2. Der Halbellipsoied Mit welcher Präzision muss die Wurzel berechnet werden? 1 ai ] 2 Ej [~ := { ~x ∈ Ej | ~aiT · (~x − ~tj ) ≤ 0 } ist vollständig in Ej+1 enthalten. 3. Für die Volumen der Ellipsoiden Ej und Ej+1 gilt vol(Ej+1 ) vol(Ej ) < 2−1/(2(n+1)) . 233 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Um den Satz 15 zu beweisen zeigen wir zunächst zwei Lemmata: 234 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 25: Teil 1: Betrachten wir die Diagonalmatrix Q mit Diagonale Lemma 25 Sei B ∈ R n×n die Diagonalmatrix mit Diagonale n n n ,√ ,..., √ n + 1 n2 − 1 n2 − 1 2 2 n2 , n , . . . , n2n−1 , (n+1)2 n2 −1 und ~t := (−1/(n + 1), 0, . . . , 0) ∈ R n E := { ~x ∈ R n | (~x − ~t)T · B −1 · (~x − ~t) ≤ 1 } so erkennen wir, dass B = Q · Q T ist. Folglich ist B ist positiv definit und somit E ein Ellipsoid. dann gilt 1. B ist positiv definit und somit ist E ein Ellipsoid. 2. Die Halbvollkugel5 1 ∗ 2 Sn Teil 2: Wir betrachten ~x ∈ 12 Sn∗ . Es gilt (~x − ~t)T · B −1 · (~x − ~t) 2 · x1 + = (n+1) 2 n := { ~x = (x1 , . . . , xn )T ∈ Sn∗ | x1 ≤ 0 } ist vollständig in E enthalten. 3. Für die Volumen der Vollkugel Sn∗ und des Ellipsoids E gilt vol(E ) vol(Sn∗ ) 5 < 2 −1/(2(n+1)) ≤ ≤ . oder halb voll Kugel? 235 1 n+1 2 n2 −1 T ~x ~x + 2n+2 (x12 n2 n2 1 + 2n+2 (x12 + x1 ) n2 + n2 −1 n2 + x1 ) + · Pn 2 i=2 xi 1 n2 ≤ 1. Die letzte Ungleichung folgt aus der Beobachtung, dass |x12 | ≤ |x1 | für −1 ≤ xi ≤ 0 ist. 236 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 25 (Teil 2): Teil 3: Da E = T (Sn∗ ) ist, wobei die zu T gehörige Matrix durch Q gegeben ist, folgt aus Lemma 22: (n−1)/2 n2 n vol(E ) = | det(Q)| = · . vol(Sn∗ ) n+1 n2 − 1 Lemma 26 Sei Bj ∈ R n×n positiv definite, ~tj ∈ R n und ~ai ∈ R n ein beliebiger Vektor, ungleich dem 0-Vektor. Seien ~tj+1 und Bj+1 ein Vektor und eine Matrix, wie sie aus Bj , ~tj ,~ai in den Zeilen 6 und 7 des Ellipsoid-Algorithmus berechnet werden. Ferner seien B, E und 1 ∗ 2 Sn wie im Lemma 25 definiert, dann gilt gibt es eine affine Transformationen T , so dass 1. T (Sn∗ ) = { ~x ∈ R n | (~x − ~tj )T · Bj−1 · (~x − ~tj ) ≤ 1 } Für alle x > 0 gilt 1 + x ≤ ex und 1 − x ≤ e −x und somit Wir erhalten n n+1 n2 n2 − 1 1 n+1 ≤ = 1+ 1 n2 −1 ≤ e 1/(n n−1 | det(Q)| < e 2(n2 −1) 1 − n+1 2. T ( 21 Sn∗ ) = { ~x ∈ R n | (~x − ~tj )T · Bj−1 · (~x − ~tj ) ≤ 1, ~aiT · (~x − ~tj ) ≤ 0 } e −1/(n+1) = 1− 2 −1) Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck −1 3. T (E ) = { ~x ∈ R n | (~x − ~tj+1 )T · Bj+1 · (~x − ~tj+1 ) ≤ 1 } . ist. < e −1/2(n+1) < 2−1/2(n+1) . 237 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 26: Wir betrachten zunächst einmal die Voraussetzungen von Lemma 26 und einige Beobachtungen, welche aus diesen folgern: ◮ ◮ T (Sn∗ ) = { T (~y ) | ~y T · ~y ≤ 1} = { ~x | T −1 (~x )T · T −1 (~x ) ≤ 1} = { ~x | (~x − ~tj )T · (Q −1 )T · QR · QRT · Q −1 · (~x − ~tj ) ≤ 1} = { ~x | (~x − ~tj )T · (Q −1 )T · Q −1 · (~x − ~tj ) ≤ 1} = { ~x | (~x − ~tj )T · Bj−1 · (~x − ~tj ) ≤ 1} . Nach Lemma 23 existiert eine Rotation TR mit dazugehöriger Matrix QR , so dass = (||Q T · ~ai ||, 0, . . . , 0)T ist. TR ist wieder eine affine Transformationen. ◮ Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 26 (Teil 2): Teil 1: Es gilt Da Bj positiv definit ist, existiert eine nicht singuläre Matrix Q mit Bj = Q · Q T . QRT · Q T · ~ai 238 Teil 2: Es gilt QR = (QRT )−1 und somit gilt nach Lemma 21: Wir untersuchen nun die Transformation T ( 12 Sn∗ ) = T ({~y = (y1 , . . . , yn )T ∈ Sn∗ |y1 ≤ 0}) = { ~x | (~x − ~tj )T · Bj−1 · (~x − ~tj ) ≤ 1, ~aiT · (~x − ~tj ) ≤ 0} . T (~x ) := ~tj + Q · QR · ~x . und untersuchen, ob T die drei Bedingungen des Lemmas erfüllt. 239 240 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 26 (Teil 3): Teil 3: Zunächst betrachten wir Zeile 7 des Ellipsoid-Algorithmus. Es gilt (Bj · ~ai )(Bj · ~ai )T n2 2 Bj+1 = · Bj − n2 − 1 n+1 ~aiT · Bj · ~ai QQR QRT Q T · ~ai · ~aiT QQR QRT Q T 2 n2 Bj − · = n2 − 1 n+1 ~aiT · QQR QRT Q T · ~ai QQR diag(||Q T~ai ||2 , 0, . . . , 0)QRT Q T n2 2 = · Bj − n2 − 1 n+1 ||Q T · ~ai ||2 wobei diag(z1 , . . . , zn ) die n × n-Diagonalmatrix mit der Diagonale z1 , . . . , zn bezeichnet. Die letzte Gleichung folgt aus der Beobachtung QRT · Q · ~ai Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Beweis von Lemma 26 (Teil 4): 2 n2 T T QQR diag(1, 0, . . . , 0)QR Q Bj − Bj+1 = n2 − 1 n+1 n2 2 T T T T = QQR diag(1, 0, . . . , 0)QR Q QQR IQR Q − n2 − 1 n+1 n2 n−1 QQR diag( n+1 = , 1, . . . , 1)QRT Q T n2 − 1 = QQR BQRT Q T . = (||Q T~ai ||, 0, . . . , 0)T . 241 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck 242 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Beweis von Lemma 26 (Teil 5): Zunächst betrachten wir Zeile 6 des Ellipsoid-Algorithmus. Es gilt ~x − ~tj+1 = ~x − ~tj + = ~x − ~tj + = ~x − ~tj Beweis von Lemma 26 (Teil 6): Fassen wir zusammen: T (E ) = { T (~y ) | (~y − ~t)T B −1 (~y − ~t) ≤ 1 } = { ~x | (T −1 (~x ) − ~t)T B −1 (T −1 (~x ) − ~t) ≤ 1 } = { ~x | (~x − ~tj+1 )T (Q −1 )T QR B −1 QRT Q −1 (~x − ~tj+1 ) ≤ 1 } −1 = { ~x | (~x − ~tj+1 )T Bj+1 (~x − ~tj+1 ) ≤ 1 } . QQR QRT Q T~ai q (n + 1) ~aiT QQR QRT Q T ~ai QQR (||Q T ~ai ||, 0, . . . , 0)T (n + 1)||Q T ~ai || QQR (1, 0, . . . , 0)T + n+1 ~ − QQR t = QQR (T −1 (~x ) − ~t) . = ~x − ~tj + = ~x − ~tj Bj · ~ai 1 ·q n+1 ~aiT Bj ~ai 243 244 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Fassen wir Lemma 25 und 26 zusammen, so können wir jetzt Satz 15 beweisen: Beweis von Satz 15: Teil 1: ◮ ◮ ◮ Beweis von Satz 15 (Teil 2) Teil 3: Nach Lemma 26.3 gibt es eine affine Transformation T mit T (E ) = Ej+1 . ◮ Nach Lemma 22 und 25.3 gilt Nach Lemma 25.1 gibt es eine affine Transformation T ′ mit T ′ (Sn∗ ) = E . vol(Ej+1 ) vol(Ej ) Somit ist T ′ ◦ T eine affine Transformation und T ′ ◦ T (Sn∗ ) = Ej+1 ein Ellipsoid — die Komposition zweier affiner Transformationen ist eine affine Transformation. = = vol(T (E )) vol(T (Sn∗ )) det(QR) · vol(E ) det(QR) · vol(Sn∗ ) Teil 2: ◮ Nach Lemma 26.2 gilt T ( 21 Sn∗ ) = Ej [~ai ]. ◮ Nach Lemma 25.2 gilt 12 Sn∗ ⊆ E . ◮ < 2−1/(2(n+1)) . Nach Lemma 26.3 gilt Ej [~ai ] ⊆ T (E ) = Ej+1 . 246 245 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 27 (Teil 2): ◮ Nach Lemma 24 hat dieses Polytop n + 1 linear unabhängige Knoten {~v0 , . . . , ~vn }. ◮ Alle Punkte in der konvexen Hülle dieser Knoten sind Lösungen für A · ~x < ~b und liegen innerhalb der Vollkugel mit Radius n · 2L . ◮ Das Volumen dieser konvexen Hülle ist 1 1 1 . . . 1 6= 0 . · det ~v0 ~v1 . . . ~vn n! Wir können nun ein Lemma zeigen, aus dem eine Schranke für die Anzahl der Schleifendurchläufe folgt. Lemma 27 Hat ein striktes lineares Ungleichungssystem der Größe L eine Lösung, dann hat die Menge der Lösungen in der Vollkugel mit Radius n · 2L ein Volumen der Größe ≥ 2−(n+2)L . Beweis von Lemma 27: ◮ Es gilt: Hat A · ~ x < ~b eine Lösung, dann hat auch A · ~x < ~b und ∀i : xi < 2L ◮ eine Lösung. ◮ Somit hat das Polytop A · ~x ≤ ~b Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck ◮ und ∀i : xi ≤ 2L Jeden Vektor ~vi gilt ~vi = ~ui /Di wobei ~ui ein Integervektor und Di eine Determinante mit Absolutwert kleiner gleich 2L ist. Somit ist das Volumen der konvexen Hülle mindestens !−1 n Y n! |Di | > 2−(n+2)L . i=0 einen inneren Punkt. 247 248 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Satz 16 (Teil 2): ◮ Wir kommen nun zum zentralen Satz dieses Abschnitts: Hat das strikte Ungleichungssystem eine Lösung, dann existiert nach Lemma 27 eine Lösungsmenge Satz 16 Der Ellipsoid-Algorithmus entscheidet korrekt, ob ein striktes Ungleichungssystem eine Lösung besitzt. S mit einem Volumen von mindestens 2−(n+2)L . Beweis von Satz 16: ◮ ◮ ⊂ E0 = { ~x ∈ R n | ~x T B0−1~x } ◮ Stoppt der Ellipsoid-Algorithmus mit einer Ausgabe in Zeile 3, dann ist diese Ausgabe eine Lösung des Systems und das Ergebnis dieses Verfahrens somit korrekt. ◮ Nach Satz 15.2 bleibt diese Menge eine Teilmenge von Ej für alle j ∈ [1..K ]. Nach Satz 15.3 gilt Wir müssen somit zeigen, dass das Ergebnis infeasible immer korrekt ist. vol(EK ) < vol(E0 ) · 2−K /(2(n+1)) < (2 · n2 22L )n · 2−8nL < 2−(n+2)L . ◮ Somit ist S 6⊆ EK , wenn das strikte Ungleichungssystem eine Lösung besitzt. 250 249 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Definition 14 Sei x̃ der approximierte bzw. berechnete Wert von x. Die Berechnung eines Werts x erfolgt mit Präzision p ∈ N, wenn für ein θ ∈ R mit −1 < θ < 1 gilt 4.9 Präzision einer Berechnung Damit der Ellipsoid-Algorithmus implementiert werden kann, müssen wir untersuchen, wie genau wir die zu berechnenden nicht-rationalen Werte approximieren müssen. Dieses Abschätzung stellt eine weitere Herausforderung dar. Da jedoch bei der Entwicklung von Algorithmen solche Abschätzungen öfter eine Rolle spielen, werden wir hier näher darauf eingehen. x̃ = x · (1 + θ2−p ) . Betrachten wir Approximationen wir eine Matrix A oder einen Vektor ~t, so können wir für alle Einträge unterschiedliche Werte von θ wählen. Frage: Mit welcher Präzision p müssen wir die Berechnungen in der Zeile 6 und damit auch in der Zeile 7 des Ellipsoid-Algorithmus ausführen, um in wieviel Runden K korrekt entscheiden zu können, ob ein striktes Ungleichungssystem eine Lösung besitzt? 251 252 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Eine Berechnung mit Präzision p auf Eingaben die ihrerseits mit Präzision p gegeben sind besteht aus zwei Schritten: Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Bemerkungen zum Ellipsoid-Algorithmus: ◮ Sei Ej := (~ tj , Bj ) der in Runde i berechnete Ellipsoid. ◮ Die Werte ~ tj+1 , Bj+1 werden mit Hilfe der Funktionen F und G (Zeile 6 und 7 des Ellipsoid-Algorithmus) berechnet: 1. Ausführen einer Operation (Addition, Subtraktion oder Vergleich) der Exponenten von 2. 2. Ausführen einer Operation auf p-Bit Integers. ~tj+1 := F (~tj , Bj ) Für den Ellipsoid-Algorithmus gilt: 1. Der Ellipsoid-Algorithmus hat polynomielle Laufzeit. In jedem Schritt wird der Wert einer Zahl maximal verdoppelt oder halbiert. Somit ist der Exponent von 2 maximal exponentiell in L. Stellen wir L als Binärzahl dar, so können wir die benötigten Operationen in polynomieller Zeit in L durchführen. und Bj+1 := G (~tj , Bj ) . Bemerkungen zum modifizierten Ellipsoid-Algorithmus mit Präzision p: ˜t , B̃ · (1 + δ)j ) der in Runde i berechnete Ellipsoid, ◮ Sei Ẽ := (~ j ◮ 2. Die Operationen auf den p-Bit Integerwerten können wir wieder mit einer Präzision von p mit Hilfe bekannter Verfahren (z.B. mit Hilfe des Newton-Verfahrens) in polynomieller Zeit berechnen. j j wobei wir δ noch bestimmen müssen. Die Werte ~˜tj+1 , B̃j+1 werden mit Hilfe der Funktionen F̃ und G̃ berechnet: ~˜tj+1 := F̃ (~˜tj , B̃j ) und B̃j+1 := G̃ (~˜tj , B̃j ) . 254 253 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Lemma 28 Für p = c · K · n2 und δ = 1 ai ] 2 Ẽj [~ ◮ ◮ Der Faktor (1 + δ)j soll garantieren, dass garantieren, dass ein Ellipsoid Ẽj+1 eine Lösungsmenge S des strikten Ungleichungssystems A · ~x < ~b enthält, wenn der Ellipsoid Ẽj diese Menge beinhaltet. 1 Kn ist = { ~x ∈ Ẽj | ~aiT · (~x − ~˜tj ) ≤ 0} in Ẽj+1 enthalten, wobei c eine geeignete Konstante ist. Beweis von Lemma 28: Es genügt zu zeigen, dass ˜t , B̃ ), G (~˜t , B̃ ) · (1 + δ)j ) bzw. ◮ H = (F (~ j ◮ Wir führen diese Multiplikation nicht im Detail aus! Sie wird nur in unserer Argumentation bezüglich der Ellipsoiden Ẽj benötigt. j j j j alle Punkte am Rand von Hj in Ẽj+1 enthalten sind, da 21 Ẽj [~ai ] ⊆ Hj ist. Wir können also die Aussage von Lemma 28 darauf reduzieren, dass (~x − F (~˜tj , B̃j ))T G (~˜tj , B̃j )−1 (~x − F (~˜tj , B̃j )) = (1 + δ)j impliziert, dass ~x ∈ Ẽj+1 ist. 255 256 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 28 (Teil 2): ◮ Betrachten wir nun die Definition von Ẽj+1 , so sehen wir, dass ~x genau dann in Ẽj+1 ist, wenn Beweis von Lemma 28 (Teil 3): ◮ Den absolute Fehler, den wir mit einer Operation erhalten, können wir somit durch M · 2−p nach oben abschätzen und jede Sequenz von ℓ Operationen resultiert in einem absoluten Fehler kleiner gleich ℓ · M · 2−p . ◮ Zählen wir die Anzahl der benötigten arithmetischen Operationen, die wir bei einem Durchlauf (der while-Schleife) des Ellipsoid-Algorithmus benötigen, so können wir diese durch 9n2 ≤ 23n beschränken. ◮ Wir erhalten somit (~x − F̃ (~˜tj , B̃j ))T G̃ (~˜tj , B̃j )−1 (~x − F̃ (~˜tj , B̃j )) ≤ (1 + δ)j+1 ◮ ist. Sei nun r ein beliebiger Wert, der als Eintrag in einem Vektor oder einer Matrix im Ellipsoid-Algorithmus berechnet wird. Für eine geeignete Konstante c gilt |r | ≤ M Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck = 2cKn F̃ (~˜tj , B̃j ) = F (~˜tj , B̃j ) + θ · M · 23n−p und wir können sogar zeigen, dass für einen Vektor θ und |r | ≤ 22L+(2K +3)·log2 n gilt. Wählen wir für n ≥ 2 den Wert c ≥ 3, so gilt die Ungleichung |r | ≤ 2cKn . Andreas Jakoby Universität zu Lübeck G̃ (~˜tj , B̃j ) = G (~˜tj , B̃j ) + θ · M · 23n−p für eine Matrix θ (siehe Definition 14). 257 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 ◮ ◮ Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 28 (Teil 5): Beweis von Lemma 28 (Teil 4): ◮ 258 ◮ Es gilt somit ~x − F̃ (~˜tj , B̃j ) = ~x − F (~˜tj , B̃j ) + θ · M · 23n−p für einen neuen Vektor θ.6 Für alle ~x auf dem Rand von Hj , d.h. die die Gleichung (~x − F )T G −1 (~x − F ) = (1 + δ)j von Folie 256 erfüllen, gilt somit Im Folgenden wollen wir — um die Übersichtlichkeit zu erhöhen — die Parameter ~˜tj , B̃j in den Funktionen F , G , F̃ , G̃ nicht mehr aufführen. (~x −F̃ )T G̃ −1 (~x −F̃ ) = (~x −F )T G̃ −1 (~x −F )·(1+θ·M·23nL−p )2 . Für jedes ~x auf dem Rand von Hj gilt |~x − F | ≥ 2−2nL . Aus der obigen Gleichung erhalten wir somit ~x − F̃ = (~x − F ) · (1 + θ · M · 23nL−p ) . Beachte hierbei, dass L ≥ n · m ≥ 4 für n, m ≥ 2. Auch an dieser Stelle ändern wir θ wieder nach Bedarf. ◮ ◮ 6 Im Folgenden taucht an verschiedenen Stellen des Beweises θ auf. Die Werte von θ sind jedoch nicht unbedingt korreliert und stellen nur einen Korrekturterm dar, auf den wir in der abschließenden Ungleichung verzichten wollen. Jeden Eintrage aus G̃ −1 können wir als Quotient der Determinante einer Teilmatrix von G̃ und der Determinante von G̃ berechnen. Sei g̃ ein Eintrag in G̃ −1 und g der entsprechende Eintag in G −1 , dann können wir zeigen, dass g̃ 259 = g + θ · M n+1 · 23nL−p (1 + δ)Kn . 260 Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 28 (Teil 6): ◮ Wir erhalten für δ = (~x − F̃ )T G̃ −1 (~x Ferner gilt 1 Kn det(G̃ ) = det(G ) · (1 + θM n · 25nL−p · (1 + δ)Kn ) − F̃ ) und somit = (~x − F )T G̃ −1 (~x − F ) · (1 + θ · M · 23nL−p )2 = (~x − F )T G −1 (~x − F ) · (1 + θ · M · 23nL−p )2 +θ · M n+3 · 25nL−p (1 + δ)Kn vol(Ẽj+1 ) vol(Ẽj ) = (1 + δ)j · (1 + θ · M n+3 · 25nL−p (1 + δ)Kn ) . ◮ Wählen wir K = 32n(n + 1)L und p = Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 Andreas Jakoby Universität zu Lübeck 5Kn2 , < 2−1/(2n+2) (1 + δ)n (1 + M n · 25nL−p · (1 + δ)Kn ) . Wählen wir wieder K = 32n(n + 1)L und p = 5Kn2 , dann gilt dann gilt vol(Ẽj+1 ) (1 + θ · M n+3 · 25nL−p (1 + δ)Kn ) < (1 + δ) vol(Ẽj ) < 2−1/(4n+4) . und wir erhalten die zu beweisende Aussage von Folie 257. 261 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 10. Vorlesung, 18.12.2006 262 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 5 Matching-Probleme 5.1 Definition von Matching-Probleme Nach K Durchläufen durch die while-Schleife konvergiert somit die Suche nach einer Lösung, oder es existiert keine solche. Da nun jede Operation in polynomieller Zeit ausgeführt werden kann, erhalten wir: Definition 15 [2-dimensionales Matching] ◮ Satz 17 Wählen wir K := 32n(n + 1)L und bestimmen wir die Einträge von ~tj+1 und Bj+1 in jedem Durchlauf der while-Schleife mit einer Präzision p := 5Kn2 , dann entscheidet der Ellipsoid-Algorithmus in polynomieller Zeit korrekt, ob ein striktes Ungleichungssystem eine Lösung besitzt. ◮ ◮ ◮ 263 Sei G = (V , E ) ein ungerichteter Graph und E ′ ⊆ E . E ′ ist ein Matching, wenn für alle Kantenpaare e1 , e2 ∈ E ′ mit e1 6= e2 gilt, dass e1 ∩ e2 = ∅ ist, d.h. die beiden Kanten verbinden unterschiedliche disjunkte Knotenpaare. Ein Matching E ′ nennen wir maximal, wenn es keine echte Obermenge E ′′ ⊃ E ′ gibt, die die Matching-Bedingung erfüllt. E ′ heißt Maximum- oder optimales Matching, wenn die E ′ ein Matching größtmöglicher Kardinalität (in der Menge aller Matchings von G ) ist. E ′ ist ein perfektes Matching, falls jeder Knoten von G mit einer Kante aus E ′ inzident ist. 264 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Definition 15 (Teil 2) ◮ Unter dem (2-dimensionalen) Matching-Problem verstehen wir das Problem, für einen ungerichteten Graphen zu entscheiden, ob für diesen ein perfektes Matching existiert. ◮ Ist zusätzlich zum Graphen G noch eine Kostenfunktion κ : E → R auf den Kanten gegeben, so ergibt sich das gewichtete Matching-Problem. Hierbei unterscheiden wir zwei Varianten: 1. Gesucht ist ein Matching E ′ ⊆ E , welches den Wert des Matchings X W (E ′ ) := κ(e) Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Eine für viele Anwendungen interessante Variante des Matching-Problems erhalten wir, wenn wir uns auf bipartite Graphen einschränken: Definition 16 ◮ Einen Graphen G = (V , E ) nennen wir bipartit oder 2-färbbar, falls wir seine Knotenmenge in zwei Teilmengen V1 , V2 partitionieren können, so dass V1 ∩ V2 = ∅, V1 ∪ V2 = V und jede Kanten mit einem Knoten aus V1 und mit einem Knoten aus V2 inzident ist. e∈E ′ maximiert. 2. Gesucht ist ein optimales Matching E ′ , so dass W (E ′ ) minimal ist. Wir werden hier auf die zweite Variante eingehen. ◮ Das Matching-Problem für bipartite Graphen nennen wir auch Heiratsproblem. Anwendungen: Ressourcen optimal zuordnen, Prozesse zu Prozessoren zuordnen oder Clients zu Servern zuordnen. 265 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Definition 17 [3DM, 3-DIM-MATCHING] ◮ Gegeben eine Menge M von Tripeln über einer Grundmenge A × B × C paarweise disjunkter Komponentenmengen A, B, C . Ein Matching von M ist eine Teilmenge M ′ ⊆ M, so dass jedes Element aus A ∪ B ∪ C in höchstens einem Tripel aus M ′ vorkommt. ◮ Ein Matching M ′ , bei dem jedes Element aus A ∪ B ∪ C genau einmal vertreten ist, ist ein perfektes 3-dimensionales Matching. ◮ Das Entscheidungsproblem, ob für eine Menge M ein perfektes 3-dimensionales Matching existiert nennen wir 3-DIM-MATCHING oder kurz 3DM. Definition 18 [X3C, exakte 3-Überdeckung] ◮ Ist M eine Menge von 3-elementigen Mengen über einer endlichen Grundmenge C , wird aus dem 3DM Problem das Problem für eine Menge M zu entscheiden, ob eine exakte 3-Überdeckung existiert. Wir nennen diese Problem X3C. 266 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck 5.2 Das Heiratsproblem Satz 18 [Heiratssatz] Ein bipartiter Graph G = (V , E ) mit Knotenpartitionierung V1 , V2 besitzt genau dann ein perfektes Matching, wenn |V1 | = |V2 | ist und für alle Teilmengen U1 ⊆ V1 und deren Korrespondenz auf der anderen Seite Γ(U1 ) := { v ∈ V2 | ∃u ∈ U1 : {u, v } ∈ E } die Ungleichung |U1 | ≤ |Γ(U1 )| erfüllt ist. Bemerkung: Aus diesem Satz können wir keinen effizienten Algorithmus für das Heiratsproblem herleiten, da es exponentiell viele Teilmengen von V1 gibt. 267 268 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Beweis von Satz 18 (Teil 2): Um zu zeigen, dass die Bedingungen des Satzes auch hinreichend sind, greifen wir auf Satz 9 (MAXFLOW-MINCUT-Theorem auf Folie 102) zurück. In einer Übungsaufgabe haben wir bereits gesehen, dass wir das Matching-Problem für bipartite Graphen einfach auf ein Flußproblem reduzieren können: Beweis von Satz 18: Die Notwendigkeit der beiden Bedingungen, folgt unmittelbar aus der Definition des Heiratsproblems: ◮ Andreas Jakoby Universität zu Lübeck Sei E ′ ein perfektes Matching und U1 eine beliebige Teilmenge von V1 , dann ist jeder Knoten aus U1 über E ′ mit genau einem Knoten aus V2 verbunden. Somit gilt |U1 | ≤ |Γ(U1 )|. ◮ Füge eine Quelle q und eine Senke s zu G hinzu und verbinde q mit alle Knoten aus V1 und alle Knoten aus V2 mit s. ◮ Richte alle Kanten von q nach s. Insbesondere richte alle Kanten zwischen V1 und V2 , so dass sie von V1 nach V2 verlaufen. ◮ Gebe allen Kanten die Kapazität 1. Sei H das resultierende Netzwerk. 270 269 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Beweis von Satz 18 (Teil 3): V1 V2 u1 v1 u2 v2 q Beweis von Satz 18 (Teil 4): Wir erkennen: ◮ s um vm ◮ Zu jedem Matching E ′ in G korrespondiert eindeutig ein Fluss f in H gleicher Größe, wenn man über die Kanten in H, deren Urbilder in G zu E ′ gehören, jeweils eine Einheit fließen läßt. Analoges gilt auch in umgekehrter Richtung, wenn wir einen ganzzahligen Fluss betrachten. Wie wir aus dem Algorithmus zur Bestimmung des maximalen Flusses (Algorithmus modify auf Folie 96) erkennen können, existiert zu jedem Graphen mit ganzzahliger Kapazitätsfunktion γ : E → N ein maximaler Fluss f , der ganzzahlig ist, d.h. ein Fluss der Form f : E → N. 271 272 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Beweis von Satz 18 (Teil 6): ◮ Beweis von Satz 18 (Teil 5): ◮ Angenommen, ein bipartiter Graph G mit |V1 | = |V2 | besitzt kein perfektes Matching. Da q mit jedem Knoten in V1 ∩ S = V1 \ Q ′ und jeder Knoten aus S ′ = Q ∩ V2 mit s verbunden ist, gilt |V1 | > MAXFLOW((H, γ)) Aus der letzten Beobachtung auf der Folie 272 können wir somit folgern, dass der Wert des maximalen Flusses kleiner als |V1 | ist. = γ(Q, S) = ◮ Wir betrachten nun einen minimalen q|s-Schnitt (Q, S) in H. ≥ |V1 \ Q ′ | + |Γ(Q ′ ) ∩ S| + |Γ(Q ′ ) ∩ Q| ◮ Die Schnittkapazität γ(Q, S) ist die Anzahl der Kanten, die von Q nach S führen. = |V1 | − |Q ′ | + |Γ(Q ′ )| . ◮ ◮ X γ((u, v )) (u,v )∈E u∈Q,v ∈S Sei Q ′ := Q ∩ V1 . ◮ ◮ Dies impliziert |Q ′ | > |Γ(Q ′ )| und die zweite Bedingung ist verletzt. Gibt es kein perfektes Matching für einen bipartiten Graphen, so gilt die zweite Bedingung nicht. 274 273 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck V1 ∩ S V2 u1 v1 u2 v2 u3 v3 u4 v4 u5 v5 Q q ′ Q = V1 ∩ Q Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Wie wir schon angemerkt haben, können wir aus Satz 18 keinen effizienten Algorithmus zum Lösen des Matching-Problems für bipartite Graphen herleiten. Unsere Überlegungen aus dem Beweis von Satz 18 zeigt jedoch, dass unser Algorithmus von Folie 105 das Matching-Problem für bipartite Graphen zu finden. Einen zunehmenden Weg in dem von uns konstruierten Graphen können wir in H Zeit O(|E |) finden. Beweis von Satz 18 (Teil 7): V1 Andreas Jakoby Universität zu Lübeck s Satz 19 Ein optimales Matching für bipartite Graphen können wir in Zeit O(|V | · |E |) finden. Γ(Q ′ ) ∩ S Es kann sogar gezeigt werden, dass Matching-Problems für bipartite Graphen in Zeit O(|V |2,5 ) gelöst werden kann. Für das gewichtete Matching-Problem für bipartite Graphen können wir nicht so einfach einsehen, dass dieses Problem auch mit Hilfe des General-MAXFLOW Algorithmus gelöst werden kann. ′ Γ(Q ) ∩ V2 275 276 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck ◮ 5.3 Heiratsproblem mit Kantenkosten Unser Algorithmus basiert auf der Idee der zunehmenden Wegen aus Kapitel 3.1. Wir gehen hierbei wie folgt vor: ◮ ◮ ◮ Gegeben ist ein ungerichteter bipartiter Graph G = (V1 ∪ V2 , E ) mit |V1 | = |V2 | = n und eine Gewichtsfunktion κ : E → R+ . Wir betrachten jedoch einen Restgraphen, der sich vom Restgraph von Folie 94 unterscheidet. Wir definieren: ◮ Für G bezeichnen wir mit H = (VH , EH ) den gewichteten Graphen, den wir analog zu H im Heiratssatzes konstruiert haben. Wir setzen jedoch für alle e = (u, v ) ∈ EH 0 für u = q oder v = s γ((u, v )) = κ({u, v }) für u ∈ V1 und v ∈ V2 . ◮ Für ein Matching M in G bezeichnen wir mit HM = (VM , EM ) den gewichteten Graphen mit VM := V1 ∪ V2 ∪ {q, s}, S S EM := {(q, u)|u ∈ V1 \ e∈M e} ∪ {(v , s)|v ∈ V2 \ e∈M e} ∪{(u, v ) ∈ V1 × V2 |{u, v } ∈ E \ M} ∪{(v , u) ∈ V2 × V 1|{u, v } ∈ M} Unser Algorithmus konstruiert iterativ Matchings Mi der Größe i = 1, . . .P , n. Hierbei soll Mn minimale Kosten haben, d.h. W (Mn ) = e∈Mn κ(e) soll minimal unter allen perfekten Matchings sein. Wir gehen wie folgt vor: Sei Mi ein Matching mit minimalen Kosten der Größe i und Π ein zunehmender Weg mit minimalen Kosten. Wir verschmelzen nun Mi und Π zu einem Matching Mi+1 der Größe i + 1 mit minimalen Kosten. und wir setzen für alle e = (u, v ) ∈ EM für u = q oder v = s 0 κ({u, v }) für u ∈ V1 , v ∈ V2 und {u, v } 6∈ M γ((u, v )) = −κ({u, v }) für u ∈ V1 , v ∈ V2 und {u, v } ∈ M . 278 277 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck ◮ V1 V2 u1 v1 u2 v2 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Aus der Definition von HM und dem erweiterten Matching M ′ bezüglich eines alternierenden Pfades Π folgt: Beobachtung 8 Sei M ein Matching und Π ein alternierender q-s-Pfades in HM . Sei M ′ das über Π erweiterte Matching, dann gilt M = {{u1 , v2 }} s um ◮ Andreas Jakoby Universität zu Lübeck Ein gerichteter Pfad von q nach s in HM ist ein alternierender Pfad: q ◮ Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 vm M ′ = {{u1 , v1 }, {um , v2 }} Sei M ein Matching in G und Π ein q-s-Pfad in HM , wir konstruieren ein neues Matching M ′ , indem wir alle Kanten von V1 nach V2 in Π zu M hinzufügen, und alle Kanten von V2 nach V1 in Π aus M löschen. Wir erweitern M über Π. Für einen q-s-Pfad ΠP= w0 , . . . , wt definieren wir die Kosten von Π als W (Π) := i∈{1,...,t−2} γ((wi , wi+1 )). |M ′ | = |M| + 1 und W (M ′ ) = W (M) + W (Π) . Beobachtung 9 M ist genau dann ein perfektes Matching, wenn es in HM keine Kante mehr gibt, die mit q oder s inzident ist. 279 280 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Wir nennen einen Kreis C = w1 , . . . , wt (mit w1 = wt ) in HM negativ, wenn X W (C ) := γ((wi , wi+1 )) < 0 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Lemma 29 Sei M ein perfektes Matching, wobei es in HM keinen negativen Kreis gibt, dann ist M ein minimales Matching. Beweis von Lemma 29: Sei M ein nicht minimales perfektes Matching, wobei es in HM keinen negativen Kreis gibt. Sei M ′ ein perfektes Matching mit minimalen Kosten. i∈{1,...,t−1} ist. Modifizieren wir M über einen Kreis C , analog wie wir eine Matching über einen q-s-Pfad erweitern, so erhalten wir: Beobachtung 10 Sei M ein perfektes Matching und C ein negativer Kreis in HM , dann gilt für das über C modifizierte Matching M ′ : M ′ ist ein perfektes Matching und W (M ′ ) = W (M) + W (C ) < W (M). Somit sind die Kosten für M nicht minimal. ◮ Sei S die Menge der Kanten, die in einer der Mengen M oder M ′ enthalten sind, aber nicht in beiden. ◮ Die Menge der Kanten in S formen eine Menge von knotendisjunkten Kreisen {C1 , . . . , Ck } in HM . P Es gilt W (M ′ ) = W (M) + i∈{1,...,k} W (Ci ). ◮ ◮ Wir können sogar die Umkehrung dieser Beobachtung zeigen. Da W (M ′ ) < W (M) ist, gibt es einen Kreis Ci mit W (Ci ) < 0. 282 281 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Um die Analyse zu vereinfachen, führen wir für alle Knoten Gewichte δ : V → R+ ein. Wir nenne δ auf ein Matching abgestimmt, wenn Unser Ziel ist es nun die Matchings M1 , . . . , Mn so zu konstruieren, dass ◮ wir Mi über einen minimalen q-s-Pfad erweitern und ◮ hierbei kein negativer Kreis in HMi+1 entsteht. ◮ für alle Knoten u ∈ V1 , welche nicht mit einer Kante aus M inzident sind, gilt δ(u) = 0, ◮ für alle {u, v } ∈ E mit u ∈ V1 , v ∈ V2 gilt δ(u) + κ({u, v }) ≥ δ(v ) und ◮ Somit erhalten wir nach Lemma 29 ein perfektes Matching Mn mit minimalen Kosten. für alle {u, v } ∈ E mit u ∈ V1 , v ∈ V2 mit {u, v } ∈ M gilt δ(u) + κ({u, v }) = δ(v ). Für jede Kante (x, y ) ∈ EM mit x, y ∈ V1 ∪ V2 des Graphen HM definieren wir γδ ((x, y )) := δ(x) + γ((x, y )) − δ(y ) . 283 284 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Beachte: Die Werte γ((x, y )) für {x, y } ∈ M und (x, y ) ∈ EM sind negativ und zudem ist x ∈ V2 und y ∈ V1 . Aus der Definition von γδ ((x, y )) folgt jedoch, dass für solche Kanten γδ ((x, y )) = 0 ist. Betrachten wir nun das Problem einen q-s-Weg mit minimalen Kosten zu finden: Beobachtung 11 Die Werte γδ ((x, y )) sind für alle Kanten (x, y ) in HM zwischen V1 und V2 bzw. V2 und V1 immer größer oder gleich 0. Folgen wir nun einem Kreis C in HM , so gilt folglich: Beobachtung 12 Für alle Kreise C = w1 , . . . , wt mit w1 = wt in HM gilt t−1 X i=1 γδ ((wi , wi+1 )) = t−1 X i=1 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck ◮ Für einen Knoten v ∈ V1 ∪ V2 seien dδ,M (v ) die minimalen Kosten eines Wegs von q nach v in HM bei Kostenfunktion γδ . ◮ Sei v ∈ V2 ein Knoten, der nicht mit einer Kante des Matchings M inzident ist, dann sind die minimalen Kosten eines q-v -Wegs in HM bei Kostenfunktion γ durch dδ,M (v ) + δ(v ) gegeben. Es gilt: Lemma 30 Da die Kostenfunktion γδ positiv ist, können wir den kürzesten Weg von q zu jedem Knoten v ∈ V1 ∪ V2 bezüglich der Kostenfunktion γδ mit Hilfe des Algorithmus von Dijkstra in Zeit O(|E | · log2 n) bestimmen. Um einen den kürzesten q-s-Pfad bezüglich der Kostenfunktion γ zu bestimmen benötigen wir zusätzliche Kosten O(n). γ((wi , wi+1 )) ≥ 0 . Beobachtung 13 Gibt es für ein Matching M eine abgestimmte Gewichtsfunktion δ, dann gibt es in HM keinen negativen Kreis. 285 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Betrachten wir nun die Funktion δ0 (u) := 0 für alle u ∈ V1 und δ0 (v ) := min{u,v }∈E κ({u, v }) für alle v ∈ V2 , dann erkennen wir: 286 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 31: ◮ {x, y } ∈ M und x ∈ V1 : Beobachtung 14 δ0 ist eine mit M0 := ∅ abgestimmte Gewichtsfunktion. Wir müssen somit nur noch zeigen, dass wir über unser Verfahren zum Erweitern eines Matchings Mi immer garantieren können, dass eine für Mi+1 abgestimmte Gewichtsfunktion existiert: ◮ Lemma 31 M ein Matching und δ eine für M abgestimmte Gewichtsfunktion. Sei ferner M ′ das Matching, welches wir aus M erhalten, indem wir dieses bezüglich eines q-s-Wegs mit minimalen Kosten in HM erweitern, dann ist ◮ ◮ ◮ Es gilt (y , x) ∈ EM ist die einzige mit der wir x betreten können. Es gilt dδ,M (x) = dδ,M (y ) + γδ ((y , x)) mit γδ ((y , x)) := δ(y ) + γ((y , x)) − δ(x) = 0. Somit erhöhen wir sowohl δ ′ (x) als auch δ ′ (y ) um den Wert dδ,M (y ). Die Werte von δ ′ (x) und δ ′ (y ) erfüllen somit bezüglich der Kante {x, y } die Bedingungen einer für M ′ abgestimmten Gewichtsfunktion. δ ′ (v ) := δ(v ) + dδ,M (v ) eine für M ′ abgestimmte Gewichtsfunktion. 287 288 Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 31 (Teil 2): ◮ {x, y } ∈ M ′ \ M und x ∈ V1 : ◮ ◮ ◮ Beweis von Lemma 31 (Teil 3): ◮ {x, y } 6∈ M ′ ∪ M und x ∈ V1 : Die Kante (x, y ) ∈ EM befindet sich auf dem q-y -Weg mit minimalen Kosten. Es gilt dδ,M (y ) = dδ,M (x) + γδ ((x, y )) mit γδ ((x, y )) := δ(x) + γ((x, y )) − δ(y ). Wir erhalten δ ′ (x) := δ(x) + dδ,M (x) δ ′ (y ) := δ(y ) + dδ,M (y ) = ◮ ◮ ◮ Der Konten y muss auf einem kürzeren Pfad ohne die Kante (x, y ) in HM von q erreichbar sein. Es gilt dδ,M (y ) ≤ dδ,M (x) + γδ ((x, y )) mit γδ ((x, y )) := δ(x) + γ((x, y )) − δ(y ). Wir erhalten δ ′ (x) + γ((x, y )) − δ ′ (y ) = δ(x) + dδ,M (x) + γ((x, y )) − δ(y ) − dδ,M (y ) ≥ 0. δ(x) + dδ,M (x) + κ({x, y }) . Für den neuen Graphen HM ′ gilt ferner ◮ γ((y , x)) := −κ({x, y }) . ◮ Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Andreas Jakoby Universität zu Lübeck Die Werte von δ ′ (x) und δ ′ (y ) erfüllen somit bezüglich der Kante {x, y } die Bedingungen einer für M ′ abgestimmten Gewichtsfunktion. Die Werte von δ ′ (x) und δ ′ (y ) erfüllen somit bezüglich der Kante {x, y } die Bedingungen einer für M ′ abgestimmten Gewichtsfunktion. 289 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 Algorithmus Bipartites-Matching(G , κ) Eingabe: ungerichteter bipartiter Graph G = (V1 ∪ V2 , E ) und Kostenfunktion κ Ergebnis: perfektes Matching M mit minimalen Kosten 1: Sei M = ∅ und initialisiere δ := δ0 . 2: while M ist kein perfektes Matching do 3: Finde eine q-s-Weg Π mit minimalen Kosten in HM 4: bezüglich der Kostenfunktion γδ 5: Erweitere M bezüglich Π. Sei M ′ das neue Matching. 6: Berechne eine für M ′ abgestimmte Gewichtsfunktion δ ′ 7: Setze M := M ′ und δ := δ ′ . 8: end while 290 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 11. Vorlesung, 8.1.2007 5.4 Die Komplexität des Matching-Problems Die folgenden Ergebnisse präsentieren wir wieder ohne Beweis: Satz 21 3DM und X3C sind N P-vollständig. Das Problem für einen Graphen zu entscheiden, ob es für diesen ein perfektes Matching gibt, kann in polynomieller Zeit gelöst werden. Der Beweis der N P-Vollständigkeit von 3DM und somit auch für X3C kann in vielen Lehrbüchern der Komplexitätstheorie nachgelesen werden. Der Beweis, dass ein perfektes Matching in polynomieller Zeit generiert werden kann, ist sehr aufwendig und ist daher nur in wenigen Lehrbüchern zu finden. Satz 20 Bipartites-Matching findet ein perfektes Matching mit minimalen Kosten für ungerichtete bipartite Graphen G = (V1 ∪ V2 , E ) mit |V1 | = |V2 | = n in Zeit O(|E | · n · log2 n). 291 292 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck 5.5 Eine Anwendung für das 2-dimensionalen Matching Approximation von Rundwegen ◮ Satz 22 Der Algorithmus von Cristofides berechnet in Zeit O(|V |3 ) auf Eingabe eines gewichteten vollständigen Graphen G = (V , E ), dessen Kantengewichtsfunktion die Dreiecksungleichung erfüllt, einen Rundweg, der alle Knoten mindestens einmal besucht und dessen Kosten maximal um den Faktor 23 schlechter sind als die Kosten eines optimalen Rundwegs. Wir betrachten nun folgende Variante des Rundwege Problems: ◮ ◮ ◮ Gegeben ist ein vollständiger Graph G = (V , E ), d.h. es existiert eine Kante zwischen jedem Knotenpaar aus V . Gegeben eine Kantengewichtsfunktion f : E → R+ , die die Dreiecksungleichung erfüllt, d.h. f ({u, w }) ≤ f ({u, v }) + f ({v , w }) für alle u, v , w ∈ V . Gesucht ist ein Rundweg, der alle Knoten mindestens einmal besucht und der minimale Kosten besitzt. ◮ Dieses Problem wird in der Literatur auch metrisches TSP (Traveling Salesperson Problem) genannt. ◮ Viele Rundreiseprobleme, die in der Praxis vorkommen, können wir so darstellen, dass sie dem metrischen TSP entsprechen. ◮ Dieses Problem ist N P-vollständig. Anstelle des Algorithmus von Cristofides wollen wir zunächst einen sehr einfachen und schnellen Algorithmus vorstellen, der zwar nur einen um den Faktor ≤ 2 schlechtere Rundreise konstruiert, für den wir aber nur auf das MST und das Eulertour Problem zurückgreifen müssen. 293 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 294 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Das Königsberger Brückenproblem – die Eulertour ◮ Algorithmus TSP-via-MST(G ) Eingabe: ungerichteter Graph G Ergebnis: eine Rundreise 1: Finde einen MST T von G . 2: Verdopple die Kanten in T . Sei T ′ der resultierende Multigraph. 3: Berechne eine Eulertour auf T ′ . 4: Gebe die Knoten in der Reihenfolge aus, in der sie besucht 5: werden. In der Innenstadt von Königsberg vereinigen sich der Alte und der Neue Pregel zum Pregelfluß. Im 18. Jahrhundert führten 7 Brücken über die verschiedenen Flüsse, die die vier Stadtteile A, B, C und D miteinander verbanden. Stadtteil C Stadtteil B Stadtteil D Stadtteil A ◮ 295 Der damalige Herrscher von Königsberg frage sich, ob es möglich ist eine Rundfahrt (Start- und Zielort sind gleich) zu unternehmen, wobei jede Brücke genau einmal überquert wird. 296 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck ◮ C D A ◮ ◮ ◮ ◮ Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Algorithmus Eulertour(G ) Eingabe: ungerichteter Graph G Ergebnis: eine Eulertour in G oder keine Tour, wenn keine Eulertour existiert 1: Sei v ein beliebiger Knoten in G und S eine leerer Stack. 2: Lege v auf S ab und sei Π ein Pfad der nur aus v besteht. 3: while S ist nicht leer do 4: Sei v der oberste Stackeintrag, entferne v von S. 5: Suche einen Kreis in G von v nach v , indem wir sukzessive 6: noch nicht benutzte Kanten benutzen und diese aus G löschen. 7: if es existiert kein solcher Kreis then Return(keine Tour) end if 8: Sei Π′ der gefundene Kreis von v nach v . 9: Füge in S alle Knoten aus Π′ ein, die noch Kanten in G haben. 10: Ersetze ein Vorkommen von v in Π durch Π′ . 11: end while 12: if alle Kanten aus G wurden gelöscht und alle Knoten besucht 13: then Return(Π) else Return(keine Tour) end if Die Antwort geht auf Euler zurück, der die Stadt 1736 als Graph modellierte. B Andreas Jakoby Universität zu Lübeck Gibt es für einen Startknoten v einen Weg von v nach v , der alle Kanten genau einmal durchläuft? Euler zeigte: Satz 23: In einem zusammenhängenden Graph existiert genau dann ein Rundweg, der alle Kanten genau einmal besucht, wenn alle Knoten im Graphen einen geraden Grad besitzen. In Königsberg gab es keinen derartigen Rundweg. Eine Eulertour kann in Zeit O(|E |) konstruiert werden. 297 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 298 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 5.6 2-dimensionales Matching Algorithmus von Cristofides Wie wir aus dem Algorithmus von Christofides erkennen, ist es eine lohneswerte Aufgabe mehr über das 2-dimensionale Matching zu erfahren. Wir wollen daher im Folgenden einen PolznomialzeitAlgorithmus für dieses Problem herleiten. Wir definieren: Algorithmus Cristofides(G ) Eingabe: ungerichteter Graph G Ergebnis: eine Rundreise 1: Finde einen MST T von G . 2: Sei G ′ der vollständige Teilgraph von G , der aus den Knoten 3: von G besteht, die in T ungeraden Grad haben. 4: Sei M ein minimales perfektes Matching in G ′ . 5: Sei G ′′ der Multigraph den wir durch die Vereinigung von M 6: und T erhalten. 7: Berechne eine Eulertour auf G ′′ . 8: Gebe die Knoten in der Reihenfolge aus, in der sie besucht 9: werden. Definition 19 Sei M ⊆ E ein Matching für einen Graph G = (V , E ). 299 ◮ Eine Kante e ∈ M nennen wir matched oder überdeckt, alle verbleibenden Kanten nennen wir frei. ◮ Knoten, die mit einer überdeckten Kante inzident sind, nennen wir auch matched oder überdeckt. ◮ Sei {u, v } ∈ M, dann nennen wir u den Partner (engl. mate) von v . ◮ Einen Knoten v nennen wir unbenutzt oder offen (engl. exposed), wenn er nicht mit einer überdeckten Kante inzident ist. 300 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Definition 19 (Teil 2) Wir nennen einen Pfad Π = u1 , . . . , uk ◮ ◮ Analog zu Beobachtung 8 auf Folie 280 gilt: alternierend, wenn die Kanten {u1 , u2 }, {u3 , u4 }, . . . frei und die Kanten {u2 , u3 }, {u4 , u5 }, . . . überdeckt sind. Beobachtung 15 Sei M ein Matching und Π ein augmentierender Pfad bezüglich M, dann ist M∆E (Π) ebenfalls ein Matching und augmentierend oder Verbesserungspfad, wenn Π alternierend ist und u1 und uk unbenutzt sind. |M ∆ E (Π)| = |M| + 1 . Sei Π = u1 , . . . , uk ein augmentierender Pfad, dann nennen wir die Knoten auf den ungeraden Positionen äußere (engl. outer) und die Knoten auf den geraden Positionen innere (engl. inner) Knoten. Ferner gilt: Satz 24 Ein Matching M für einen Graphen G = (V , E ) ist genau dann maximal, wenn es keinen augmentierender Pfad bezüglich M gibt. Für einen Pfad Π = u1 , . . . , uk sei E (Π) := { {ui , ui+1 } | i ∈ {1, . . . , k − 1} } Beweis von Satz 24: Die erste Richtung dieses Beweises folgt unmittelbar aus Beobachtung 15: Gibt es einen augmentierenden Pfad, dann kann M nicht maximal sein. und M ∆ E (Π) := (M \ E (Π)) ∪ (E (Π) \ M) die symmetrische Differenz von M und E (Π). 301 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 302 Im Prinzip basieren die meisten Matching-Algorithmen auf folgendem Ansatz: Beweis von Satz 24 (Teil 2): Für die Rückrichtung zeigen wir, dass die für den Fall, dass M nicht maximal ist, ein augmentierender Pfad existiert. Sei M ′ ein optimales Matching, d.h. |M ′ | > |M|. Wir betrachten nun den Graphen ◮ Starte mit einem Matching M, z.B. dem leeren Matching. ◮ Suche einen augmentierenden Pfad Π und setze G ′ := (V , M ∆ M ′ ) = (V , (M \ M ′ ) ∪ (M ′ \ M)) . ◮ ◮ ◮ ◮ Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck M Da jeder Knoten maximal zu einer Kante in M und zu einer Kante in M ′ inzident ist, ist der Grad jedes Knotens in G ′ maximal 2. ◮ := M ∆ E (Π) . Widerhole diesen Schritt, bis kein augmentierender Pfad mehr existiert. Wir müssen also nur noch die Frage beantworten, wie wir einen augmentierenden Pfad finden. Die zusammenhängenden Konponenten in G ′ sind somit entweder einzelne Knoten oder Kreise oder Pfade. In unserem Algorithmus gehen wir davon aus, dass ein Matching M über ein Feld mate gegeben ist: Da |M ′ | > |M| muss es einen Pfad in G ′ geben, der eine Kante mehr aus M ′ als aus M besitzt. ◮ Dieser Pfad ist somit ein augmentierender Pfad bezüglich M. ◮ 303 für alle offene Knoten u ∈ V ist mate[u] = 0 und für alle überdecken Knoten u ∈ V mit {u, v } ∈ M ist mate[u] = v . 304 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Wir betrachten nun einen gerichteten Hilfsgraphen, den wir mit Hilfe der folgenden Prozedur erhalte: Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Beispiel: Rot das Matching, Blau ein fehlerhafter augmentierender Pfad und Grün ein augmentierender Pfad. Algorithmus AuxiliaryDigraph(G , s,mate) Eingabe: ungerichteter Graph G = (V , E ), Startknoten s und Matching M gegeben über ein Feld mate Ergebnis: ein Hilfsgraph H und Feld exposed 1: E ′ := ∅ 2: for all v ∈ V do exposed[v ] := 0 end for 3: for all {u, v } ∈ E (wiederhole für {u, v } und für {v , u}) do 4: if mate[v ] = 0 und v 6= s then 5: exposed[u] := v 6: else 7: if mate[v ] 6∈ {0, u} then E ′ := E ′ ∪ {(u, mate[v ])} end if 8: end if 9: end for 10: Return((V , E ′ ), exposed) v0 v0 v1 v2 v3 v4 v5 v6 v8 v9 v1 v2 v3 v4 v5 v6 v8 v9 v0 v7 v0 v7 v1 v2 v3 v4 v5 v6 v8 v9 v1 v2 v3 v4 v5 v6 v8 v9 v7 v7 306 305 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Definition 20 ◮ Sei s ein offener Knoten und (H, exposed) := AuxiliaryDigraph(G , s, mate) , ◮ dann gilt: ◮ ◮ Zu jedem augmentierenden Pfad Π mit Startknoten s korrespondiert ein Pfad Π′ von s zu einem Knoten v mit exposed[v ] 6= 0, der genau die äußerne Knoten von Π besucht. Ein Kreis C = u0 , . . . , u2k , u0 nennen wir Blüte (engl. blossom) bezüglich eines Matchings, wenn es in C k überdeckte und k + 1 freie Kanten {ui mod (2k+1) , u(i+1) mod (2k+1) } gibt. In einer Blüte gibt es einen Knoten ui (o.B.d.A. u0 ) mit zwei freien Kanten {u2k , u0 }, {u0 , u1 } 6∈ M. Diesen Knoten nennen wir die Basis der Blüte. v1 Ist Π′ ein Pfad in H von einem Knoten von s zu einem Knoten v mit exposed[v ] 6= 0, dann entspricht dieser Pfad einem augmentierenden Pfad Π in G , es sei denn ... Dieses es sei denn ..., d.h. die Form von blauen Pfaden (Folie 306), müssen wir nun etwas näher betrachten. v1 307 v2 v2 v4 v5 v6 v9 v8 v7 v4 v5 v6 v9 v8 v7 v3 v3 308 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Sei G = (V , E ) ein ungerichteter Graph, M ⊆ E ein Matching in G , s ∈ V ein offener Knoten in G und H = (V , E ′ ) mit (H, exposed) := AuxiliaryDigraph(G , s,mate). Sei C = u0 , . . . , uk eine Blüte in G , dann definieren wir für C einen neuen Knoten vC die Graphen G /C := (V /C , E /C ) und H/C := (V /C , E ′ /C ) wie folgt Aufgrund der Blüten entspricht ein s-u-Pfad Π′ mit exposed[u] 6= 0 im Hilfsgraph H nicht immer einem augmentierenden Pfad Π. Um dieses Problem zu beseitigen, wollen wir Blüten aus dem Graphen entfernen. V /C E /C Wir entfernen jedoch nur solche Blüten, welche wir auf der Suchen nach einem augmentierenden Pfad entdecken! ′ E /C := (V \ {u0 , . . . , uk }) ∪ {vC } := (E \ { {v , ui } | ui ∈ C , v ∈ V }) ′ ∪{ {v , vC } | v ∈ V /C und ∃ui ∈ C : {v , ui } ∈ E } := (E \ { (v , ui ), (ui , v ) | ui ∈ C , v ∈ V }) ∪{ (v , vC ) | v ∈ V /C und ∃ui ∈ C : (v , ui ) ∈ E } M/C ∪{ (vC , v ) | v ∈ V /C und ∃ui ∈ C : (ui , v ) ∈ E } := (M ∩ E /C ) ∪{ {v , vC } | v ∈ V /C und ∃ui ∈ C : {v , ui } ∈ M } d.h. mate[vC ] := mate[u0 ] für die Basis u0 309 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 310 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Beispiel: Die reduzierten Graphen für die Blüte v6 , v7 , v9 : v0 Ferner setzen wir exposed[vC ] :=exposed[u0 ] für die Basis u0 von C. v1 v2 v3 v4 v5 v6 v8 v9 v1 v2 v3 v4 v5 vC Den Knoten vC wollen wir im Folgenden den Knospenknoten für C und den Graphen G /C den um C reduzierten Graphen nennen. v0 v8 311 v0 v7 v0 v1 v2 v3 v4 v5 v6 v8 v9 v1 v2 v3 v4 v5 vC v7 v8 312 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Wir müssen nun die Frage untersuchen, wie wir eine Blüte finden bzw. erkennen und dann diese entfernen. Betrachten wir zunächst jedoch die Frage, wie wir nach einem augmentierenden Pfad suchen: ◮ wir starten in einem offenen Knoten s ◮ und traversieren von s aus G , ähnlich der Breitensuche. Hierbei gehen wir von einem Knoten u immer zu allen Knoten v , die eine Entfernung von zwei zu u haben, und zu denen ein Pfad bestehen aus einer freien gefolgt von einer überdeckten Kante existiert: 1: Q := {s} 2: while Q 6= ∅ do 3: wähle u ∈ Q und setze Q := Q \ {u} 4: for all nicht besuchte Knoten v ∈ V mit (u, v ) ∈ E ′ do 5: Q := Q ∪ {v } 6: if exposed[v ] 6= 0 then augmentierender Pfad gefunden end if 7: if v schließt eine Blüte C then entferne C end if 8: end for end while 313 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Beispiel: s s v1 v2 v3 v4 v5 v6 v8 v9 v1 v2 v3 v4 v5 v6 s v7 s v7 v1 v2 v3 v4 v5 v6 v8 v9 v1 v2 v3 v4 v5 v6 v7 v7 mate[v7 ] = v9 v8 v9 v8 v9 mate[v9 ] = v7 314 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Wie können wir den Traversionsbaum speichern und erkennen, ob ein Knoten schon einmal besucht wurde: Wir können erkennen: ◮ Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Ein Knoten v schließt eine Blüte, wenn wir den Partner des Knotens im Matching bereits betrachtet haben. ◮ Daher modifizieren wir unser Programm von Folie 313 wie folgt: 1: Q := {s} 2: for all v ∈ V do seen[v ] := 0 end for 3: while Q 6= ∅ do 4: wähle u ∈ Q und setze Q := Q \ {u} 5: for all nicht besuchte Knoten v ∈ V mit (u, v ) ∈ E ′ do 6: Q := Q ∪ {v } 7: seen[mate[v ]] := 1 8: if exposed[v ] 6= 0 then augmentierender Pfad gefunden end if 9: if seen[v ] = 1 then entferne gefundene Blüte C end if 10: end for end while 315 Mit Hilfe eines Felds label speichern wir die rückwärts gerichteten Kanten des Baums. Daher modifizieren wir unser Programm von Folie 315 wie folgt: 1: for all v ∈ V do label[v ] := −1 end for 2: Q := {s}, label[s] := 0 3: for all v ∈ V do seen[v ] := 0 end for 4: while Q 6= ∅ do 5: wähle u ∈ Q und setze Q := Q \ {u} 6: for all v ∈ V mit (u, v ) ∈ E ′ und label[v ] = −1 do 7: Q := Q ∪ {v } 8: seen[mate[v ]] := 1, label[v ] := u 9: if exposed[v ] 6= 0 then augmentierender Pfad gefunden end if 10: if seen[v ] = 1 then entferne gefundene Blüte C end if 11: end for end while 316 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Sei T der über label gegebenen Baum und v ein Knoten mit seen[v ] = 1. Beispiel: s v1 v2 v3 v4 v5 v6 v8 ◮ Dann ist der erste gemeinsame Knoten b des v -s-Pfads Πv ,s in T mit dem mate[v ]-s-Pfad Πmate[v ],s in T die Basis der Blüte, die durch v geschlossen wurde. ◮ Sei Πv ,s = v , u1 , . . . , ua , b, w1 , . . . , wc , s und Πmate[v ],s = mate[v ], v1 , . . . , vd , b, w1 , . . . , wc , s, dann definieren wir v7 v9 Baum gegeben über das Feld label s s v1 v2 Bv v3 v4 v5 v6 v7 v6 v8 v9 := b, mate[vd ], vd , mate[vd−1 ], . . . , v1 , v , mate[v ], u1 , mate[u1 ], . . . , mate[ua ], b . v2 seen[v9 ] = 1 v8 v9 Bv ist eine Blüte mit Basis b. Wir wollen nun noch einige wichtige Sätze bezüglich der betrachteten Graphen und Matchings, sowie der konstruierten (bzw. gefundenen Blumen) aufführen. v7 318 317 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Beweis von Satz 25: Der Fall, dass ein augmentierenden Pfad in G /Bv existiert, wenn ein augmentierender Pfad in G existiert, ist für die Beschreibung unseres Verfahrens nicht relevant. Daher werden wir diesen Fall nur kurz beschreiben, und genauer auf die Rückrichtung eingehen. Beobachtung 16 Sei Bv eine Blüte, die wir mit Hilfe des Programm-Fragments auf Folie 316 gefunden haben, dann existiert ein alternierender Pfad von s zu jedem Knoten in Bv , welcher mit einer überdeckten Kante endet. Satz 25 Sei Bv eine Blüte, die wir mit Hilfe des Programm-Fragments auf Folie 316 gefunden haben, dann existiert genau dann ein augmentierender Pfad startend in s bezüglich M in G , wenn es einen augmentierenden Pfad startend in s (bzw. in vBv , wenn s die Basis von Bv ist) bezüglich M/Bv in G /Bv gibt. Aus einem augmentierenden Pfad in G /Bv können wir zudem effizient den augmentierenden Pfad in G berechnen. Existiert ein augmentierender Pfad Π in G und haben wir auf der Suche nach diesem Pfad eine Blüte Bv entdeckt, wobei Π′ der gefundenen alternierende Pfad von s zur Basis von Bv ist, dann unterscheiden wir die folgenden Fälle: ◮ Π betritt Bv nicht, ◮ Π betritt oder verläßt Bv über eine überdeckte Kante, d.h. über die Basis von Bv , ◮ Π betritt und verläßt Bv über freie Kanten und Π schneidet Π′ nicht oder ◮ Π betritt und verläßt Bv über freie Kanten und Π schneidet Π′ . Für jeden dieser Fälle können wir einen augmentierenden Pfad aus Π und Π′ in G /Bv konstruieren. Bemerkung Haben wir also eine solche relevante Blüte gefunden, dann können wir diese ohne bedenken entfernen und die Suche im reduzierten Graphen fortsetzen. 319 320 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Beweis von Satz 25 (Teil 2): Um die Rückrichtung zu zeigen, geben wir einen Algorithmus an, der aus einem augmentierenden Pfad Π in G /Bv und der Blüte Bv einen augmentierenden Pfad in G generiert. Algorithmus AddBlossom(Π, vBv ) Eingabe: augmentierender Pfad Π für G /Bv und Knospenknoten vBv mit Blüte Bv = b, u1 , . . . , uk , b und Basis b Ergebnis: augmentierender Pfad Π′ für G 1: if Knospenknoten vBv für Bv ist nicht in Π then Return(Π) 2: else 3: Sei Π = Πl , vl , vBv , vr , Πr für Teilpfade Πl und Πr 4: if {vl , vBv } ist frei then h := vl else h := vr end if 5: Sei h′ ein Knoten aus Bv mit {h, h′ } ∈ E (es gilt {h, h′ } 6∈ M) 6: Π′′ ein alternierender Pfad in Bv von b nach h′ 7: if {vl , vBv } ist frei then Π′′ invertierter Pfad Π′′ end if 8: Return(Πl , vl , Π′′ , vr , Πr ) 9: end if 321 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Bemerkung Da es bei der Suche nach einem augmentierenden Pfad mehrere Blüten Bv entdeckt werden können, kann der resultierende augmentierende Pfad auch mehrere Knospenknoten enthalten. Wir müssen dann für jeden dieser Knoten die Prozedur AddBlossom aufrufen. Beweis von Satz 25 (Teil 3): Im Algorithmus AddBlossom haben wir den Fall unterschlagen, dass Π im Knospenknoten vBv startet. In diesem Fall ist Πl der leere Pfad und vl nicht definiert. Wir können annehmen, dass (vl , vBv ) nicht frei ist, und wählen h := vr . Die Ausgabe ist in diesem Fall Π′′ , vr , Πr für den nicht-invertierten Pfad Π′′ . 322 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Gegeben ein Matching M für unseren Startgraphen G und ein augmentierender Pfad Π für einen (möglicherweise) reduzierten Graphen G ′ , dann können wir ein neues Matching wie folgt bestimmen: Bemerkung Wir werden sehen, dass wir innerhalb der while-Schleife des Programm-Fragments von Folie 316 nur in der Prozedur AddBlossom auf den ungerichteten Graphen G zurückgreifen müssen. Für diese Prozedur spielt es aber keine Rolle, ob es in E noch einige Kanten gibt, die im betrachteten Graph G eigentlich nicht mehr vorhanden sind. Daher genügt es, wenn wir diesen Graphen für eine gefundene Blüte Bv um den Knospenknoten vBv und die entsprechenden Kanten erweitern und die eigentliche Reduktion H/Bv nur im Hilfsgraphen H durchführen, der wiederum bei dem Aufbau des augmentierenden Pfads in AddBlossom nicht mehr benötigt wird. 323 Algorithmus Augment(Π, M) Eingabe: augmentierender Pfad Π und ein Matching M Ergebnis: erweitertes Matching von M 1: while es gibt einen Knospenknoten in Π do 2: wähle eine Knospenknoten vBv in Π 3: Π := AddBlossom(Π, vBv ) 4: end while 5: Return(M ∆ E (Π)) 324 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Wir fassen nun unsere Überlegungen zum Erweitern eines Matchings M über augmentierende Pfad startend bei einem offenen Knoten s zusammen und erweitern das Programm-Fragment von Folie 316 entsprechend. Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Im Anschluß erweitern wir den Traversionsbaum bis wir einen augmentierenden Pfad gefunden haben: 9: 10: Algorithmus ModifyMatching(G , s, M) Eingabe: ungerichteter Graph G = (V , E ), offener Startknoten s und ein Matching M Ergebnis: erweitertes Matching von M 1: for all u ∈ V do mate[u] := 0 end for 2: for all {u, v } ∈ M do mate[u] := v ; mate[v ] := u end for 3: (H, exposed) := AuxiliaryDigraph(G , s, mate) 4: if exposed[s] 6= 0 then 5: Π := s, exposed[s]; Return(Augment(Π, M)) 6: end if 7: for all v ∈ V do label[v ] := −1; seen[v ] := 0 end for 8: Q := {s}, label[s] := 0 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: while Q 6= ∅ do wähle u ∈ Q und setze Q := Q \ {u} for all v ∈ V mit (u, v ) ∈ E ′ und label[v ] = −1 do Q := Q ∪ {v } seen[mate[v ]] := 1, label[v ] := u if exposed[v ] 6= 0 then Π := v , exposed[v ] while v 6= s do Π := label[v ], mate[v ], Π v := label[v ] end while Return(Augment(Π, M)) end if 325 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 326 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Treffen wir auf der Suche nach einem augmentierenden Pfad auf eine Blüte, so müssen wir diese entfernen. 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: if seen[v ] = 1 then bestimme Blüte Bv mit Hilfe des Traversionsbaums, der über label gegeben ist sei b die Basis von Bv wähle einen neuen Knoten vBv setze blossom[vBv ] := Bv setze H := H/Bv , G = (V ∪ {vBv }, E ∪ (E /Bv )) for all v ∈ V mit label[v ] in Bv do label[v ] := vBv end for setze mate[vBv ] :=mate[b] setze exposed[vBv ] :=exposed[b] setze Q := (Q \ Bv ) ∪ {vBv } end if end for end while Return(M) 327 Aus unseren Überlegungen können wir folgern: Lemma 32 Existiert ein augmentierender Pfad von s zu einem anderen offenen Knoten in G mit Matching M, dann generiert ModifyMatching(G , s, M) ein neues Matching M ′ mit |M ′ | = |M| + 1. Beobachtung Unter Verwendung von entsprechenden effizienten Datentypen, ist die Laufzeit von ModifyMatching(G , s, M) in O(|V |3 ). 328 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Betrachten wir nun die offenen Knoten v , für die es bezüglich eines Matchings keinen augmentierenden Pfad mit Startknoten v gibt: Wir müssen nun noch analysieren, welche Knoten sich als Startknoten s eignen. Es gilt: Lemma 33 Existiert kein augmentierender Pfad startend in einem offenen Konten s bezüglich eines Matching M, und sei Π ein beliebiger augmentierender Pfad bezüglich M, dann existiert auch kein augmentierender Pfad startend in s bezüglich Augment(Π, M). Beobachtung Ist für ein Matching M ein Knoten v ∈ V überdeckt, dann ist für jeden augmentierenden Pfad Π der Knoten v auch in dem Matching Augment(Π, M) überdeckt. Finden wir also in ModifyMatching(G , s, M) einen augmentierenden Pfad, ist s in dem resultierenden Matching überdeckt und kann im Folgenden als Startknoten ausgeschlossen werden. Beweis von Lemma 33: Der Beweis erfolgt über einen Widerspruch. Sei Π′ ein augmentierender Pfad startend in s bezüglich Augment(Π, M). Dann können wir mit Hilfe von Π und Π′ einen augmentierender Pfad startend in s bezüglich M generieren. 329 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 330 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Algorithmus GeneralMatching(G ) Eingabe: ungerichteter Graph G = (V , E ) Ergebnis: optimales Matching für G 1: M := ∅ 2: for all u ∈ V do considered[u] := 0 end for 3: while es existiert ein Knoten s ∈ V mit considered[s] = 0 do 4: considered[s] := 1 5: if s ist offen then 6: M := ModifyMatching(G , s, M) 7: end if 8: end while Beobachtung Modifizieren wir ein gegebenes Matching M sukzessive mit Hilfe des Algorithmus ModifyMatching und existiert kein augmentierender Pfad startend in einem offenen Konten s bezüglich M, dann können wir s als Startknoten für alle zukünftigen Aufrufe von ModifyMatching ausschließen. Jeden Knoten müssen wir somit maximal einmal Startknoten in ModifyMatching einsetzen. Fassen wir diese Überlegungen zusammen, so können wir einen Algorithmus für das Matchingproblem vorstellen. Satz 26 GeneralMatching(G ) generiert ein optimales Matching für G in Zeit O(|V |4 ) 331 332 Algorithmik WS 06/07 12. Vorlesung, 15.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck 5.7 Gewichtetes 2-dimensionalen Matching Zur Erinnerung: Wir betrachten einen ungerichteten Graphen G = (V , E ) mit Kantengewichten κ : E → R. Gesucht ist ein optimales Matching M ⊆ E , für das X κ(e) Aus der Literatur ist bekannt: Satz 27 Ein optimales Matching für ungerichtete Graphen kann in Zeit O(|V |5/2 ) generiert werden. e∈M minimal ist. Sei n = |V |. Im Folgenden nehmen wir an, dass n gerade ist.7 7 Sollte n ungerade sein, dann fügen wir zu V einen isolierten Knoten hinzu. 333 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck P Sei V = {1, . . . , n}, κ∗ := 2 · e∈E κ(e) und κ({i, j}) falls {i, j} ∈ E ci,j := κ∗ sonst, 334 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Da das Problem ein Integer lineares Programm zu lösen jedoch N P-schwierig ist, suchen wir nach Möglichkeiten ein Eingabe für das gewichtete 2-dimensionale Matching-Problem als reelles lineares Programm darzustellen. Betrachten wir das ILP von Folie 335 als RLP, so besteht die Gefahr, dass in einem Lösungsvektor einzelne Variablen xi,j nicht-ganzzahlige Werte annehmen. Solche Werte ergeben jedoch im Kontext des gewichteten 2-dimensionalen Matchings keinen Sinn. dann können wir das gewichtetes 2-dimensionalen Matching durch das folgende ILP lösen: X minimiere ci,j · xi,j i,j∈[1..n] unter den Bedingungen Pn ◮ j=1 xi,j = 1 für alle i ∈ {1, . . . , n} ◮ xi,j = xj,i ≥ 0 und xi,i = 0 für alle i, j ∈ {1, . . . , n}. Ein optimales Matching M mit minimalem Gewicht erhalten wir über M = { {i, j} ∈ E | xi,j = 1 } . Wie schon beim ungewichteten Fall, können wir auch für den gewichteten Fall zeigen, dass das wesentliche Problem im Umfeld der Kreise mit ungerader Länge zu finden ist. 335 336 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck Es gilt: Satz 28 [Edmonds] Das gewichtete 2-dimensionale Matching-Problem mit Kostenfunktion κ({i, j}) := ci,j für alle i, j ∈ {1, . . . , n} ist äquivalent zum RLP X minimiere ci,j · xi,j Für unser LP verallgemeinern wir den Begriff des Kreise mit ungerader Länge: ◮ ◮ ◮ Wir betrachten die Teilmengen S1 , . . . , Sm ⊆ {1, . . . , n} mit ungerader Kardinalität und |Si | > 1 (für alle i ∈ {1, . . . , m}). i,j∈[1..n] Wir wählen si , so dass |Si | = 2si + 1 ist. unter den Bedingungen Pn ◮ j=1 xi,j = 1 für alle i ∈ {1, . . . , n}, Es gilt m = 2n−1 − n. ◮ ◮ xi,j = xj,i ≥ 0 und xi,i = 0 für alle i, j ∈ {1, . . . , n} und P yk + i,j∈Sk xi,j = sk und yk ≥ 0 für alle k ∈ {1, . . . , m}. 338 337 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Bemerkungen zum Satz 28: ◮ ◮ ◮ ◮ Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck In unserem Verfahren bestimmen wir für alle Knoten i eine Folge Da m exponentiell ist, erhalten wir aus dem gegebenen LP noch keinen effizienten Algorithmus. αit mit αi0 := Um dieses Satz zu beweisen, müssen wir zeigen, dass das gegebene LP immer eine ganzzahlige optimale Lösung besitzt, welche zu einem optimalen Matching korrespondiert. und für alle Kreise Sk eine Folge Es kann gezeigt werden, dass die sogenannte Primal-Dual-Methode immer in eine ganzzahlige und optimale Lösung konvergiert. Hierbei gilt für alle t und i, j, k γkt mit γk0 := 0 . X αit + αjt + Da auf die Primal-Dual-Methode in dieser Vorlesung nicht eingegangen wurde, verzichten wir auf den Beweis und die Analyse des daraus resultierenden Verfahrens und stellen stattdessen nur den Algorithmus und einige wesentliche Punkte auf dem Weg zu diesem Verfahren vor. 1 · min ci,j 2 j∈V γkt k mit i,j∈Sk ≤ ci,j und γkt 339 ≤ 0. 340 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck Wir definieren ◮ Jet als die Menge aller zulässigen Kanten, d.h. die Menge der Kanten {i, j} mit X αit + αjt + γkt = ci,j Wir betrachten nun die folgenden Graphen k mit i,j∈Sk ◮ Jbt als die Menge aller zulässigen Kreise, d.h. die Menge der Kreise Si mit γkt = 0 . ◮ Ferner sei t t Somit gilt für alle Si ∈ J b γkt G t := (V , Jet ) und ◮ den zulässigen Graphen GJt := (VJt , EJt ), den wir durch t sukzessives reduzieren der Mengen aus J b erhalten. Um einen Graphen G um eine Knotenmenge Si zu reduzieren, d.h. G /Si zu berechnen, gehen wir analog zum Reduzieren eines Graphen um einen Kreis C auf Folie 310 vor. Sukzessive konstruieren wir zu jedem Graph G t ein Matching M t . Analog zum zulässigen Graphen definieren wir das zulässigen t Matching M t /J b als das Matching von GJt welches wir aus M t t durch sukzessives reduzieren der Mengen aus J b erhalten. := { Si | Si 6∈ Jbt } . Jb ◮ < 0. 341 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck 9 8 11 B Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck Für die von uns konstruierten Mengen und Graphen sollen folgende Eigenschaften gelten: t Beispiel: G t und GJt für J b := {{1, 2, 3}, {1, 2, 3, 4, 10}, {7, 8, 9}}: 1 342 11 Eigenschaftsannahme t 2 3 10 4 5 12 7 6 1. Ist Si ∈ J b , dann hat der Graph G t eingeschränkt auf die Knotenmenge Si , genau si überdeckte Kanten, d.h. |M t ∩ 2Si | = si . Ein Matching M, welches diese Voraussetzung t erfüllt, d.h. für alle Si ∈ J b gilt |M ∩ 2Si | = si nennen wir ein passendes Matching. 12 A 5 6 Im Wesentlichen werden wir in unserem Algorithmus perfekte Matchings auf zulässigen Graphen GJt bei gegebenen zulässigen t Matching M t /J b berechnen, und hierbei unseren Algorithmus ModifyMatching von Folie 325 anwenden. t 2. Sind Si , Sj ∈ J b und Si ∩ Sj 6= ∅, dann ist entweder Si ⊆ Sj oder Si ⊇ Sj . Aus der zweiten Eigenschaftsannahme können wir unmittelbar t folgern, dass |J b | ≤ n/2 für alle t ist. 343 344 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck Wir wenden nun iteriert unseren Algorithmus ModifyMatching von Folie 325 auf den zulässigen Graphen GJt an, bis wir keinen augmentierenden Pfad mehr finden können. Sei Mct das resultierende optimale Matching für GJt . Ferner sei Gct = (Vct , Ect ) der Graph, den wir durch das reduzieren der Blumen aus GJt (bezüglich Mct ) erhalten, die wir mit Hilfe von ModifyMatching startend in einem offenen Knoten entdecken können. Betrachten wir in Gct wieder alternierende Pfade, die in noch nicht überdeckten Knoten starten, so können wir die Knotenmenge Vct in Die Knoten von Gct nennen wir Pseudoknoten. Ein Pseudoknoten ist entweder ◮ ein Knoten aus V oder ◮ ein Repräsentant einer Menge aus J b oder ◮ ein Knospenknoten einer Blüte. Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck t ◮ innere Knoten, d.h. Knoten, die von einem offenen Knoten über einen alternierenden Pfad ungerader Länge erreicht werden können, und ◮ äußere Knoten, d.h. Knoten, die von einem offenen Knoten über einen alternierenden Pfad gerader Länge erreicht werden können, und ◮ Knoten die von einem offenen Knoten über einen alternierenden Pfad nicht erreicht werden können partitionieren. Bemerkung: Eine Blüte stellt einen Kandidaten für einen neuen t+1 Kandidaten für eine Menge ungerader Kardinalität für J b dar. 346 345 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck . Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck . Wir partitionieren die Menge aller Knoten V in I t ∪ O t ∪ R t , wobei ◮ I t die Menge der Knoten innerhalb von innere Pseudoknoten ist, ◮ O t die Menge der Knoten innerhalb von äußere Pseudoknoten ist und ◮ R t die Menge der verbleibenden Knoten ist. Beispiel: Für unser Beispiel von Folie 343 gilt Gct = GJt 2 1 9 8 11 3 10 12 7 4 5 B 11 12 A 6 5 6 Ferner definieren wir ◮ ΨtO als die Menge der Knotenmengen ungerader Kardinalität (> 1), die jeweils zu einem äußere Pseudoknoten oder zu einer Blüte korrespondieren und und erhalten wir: Ot ΨtO ◮ Ψt I als die Menge der Knotenmengen ungerader Kardinalität (> 1), die jeweils zu einem inneren Pseudoknoten korrespondiert, der keine Blüte ist. 347 = {11, 12, 6, 1, 2, 3, 4, 10} = {{1, 2, 3, 4, 10}} It ΨtI = {5, 7, 8, 9} = {{7, 8, 9}} . 348 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck Sei δ1t := δ2t := δ3t := θt min ci,j − i, j ∈ O t wobei i, j nicht im gleichen Pseudoknoten enthalten sind min t i∈O , j∈R t min t − Sk ∈ΨI αit 2 − Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmus WeightedMatching(C ) Eingabe: eine symmetrische n × n-Matrix C = (ci,j )1≤i,j≤n mit positiven Einträgen bei geradem n Ergebnis: perfektes Matching für Kn mit gewichten ci,j mit minimalen Kosten. 1: for all i ∈ V do αi := minj∈V ci,j /2 end for 2: for all k ∈ {1, . . . , m} do γk := 0 end for 3: M := ∅; J b := ∅ 4: while |M| < n/2 do 5: konstruiere GJ 6: bestimme ein optimales Matching M ′ für GJ ausgehend von M 7: bestimme den dazugehörigen Graph Gc 8: bestimme das maximale passende Matching M ′′ von (V , Je ) 9: aus dem optimalen Matching M ′ von GJ αjt (ci,j − αit − αjt ) γkt 2 := min{δ1t , δ2t , δ3t } . Im folgenden Algorithmus verzichten wir auf die Angabe t der einzelnen Variablen und Mengen da sich dieser Index nur auf die Nummer des Durchlaufs durch die while-Schleife bezieht. 349 Andreas Jakoby Universität zu Lübeck 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 350 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck 6 Backtracking bei diskreten Optimierungsproblemen bestimme die Mengen O, I , ΨO und ΨI berechne θ for all j ∈ O do αj := αj + θ end for for all j ∈ I do αj := αj − θ end for for all Sk ∈ ΨO do γk := γk − 2θ end for for all Sk ∈ ΨI do γk := γk + 2θ end for ′ sei J b := {Sk ∈ J b ∪ ΨO |γk < 0} ′ sei J b := J b und M := M ′′ end while Return(M) Optimierungsprobleme wurden auf Folie 130 definiert: ◮ Eine Instanz eines Optimierungsproblems ist ein Paar (F , f ) wobei ◮ ◮ ◮ F eine Menge von möglichen Lösungen und f : F → R eine Kostenfunktion dieser Lösungen abgibt. Eine Lösung x ∈ F nennen wir global optimal oder kurz optimal, wenn für alle y ∈ F gilt f (x) ≥ f (y ) . Für den Algorithmus WeightedMatching gilt: ◮ Satz 29 Mit Hilfe von WeightedMatching können wir ein optimales Matching mit minimalem Gewicht in Zeit O(n4 ) bestimmen. Gesucht ist eine optimale Lösung bezüglich der Kostenfunktion! ◮ Ein Optimierungsproblem ist eine Menge von Instanz eines Optimierungsproblems. 351 352 Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Andreas Jakoby Universität zu Lübeck 6.1 Das Rucksackproblem Oft finden wir auch eine alternative Definition: Ein Optimierungsproblem wird durch ◮ ◮ Definition 21 [Rucksackproblem] ◮ Gegeben ist eine Folge von n Gütern mit Bewertungsvektor V = (v0 , . . . , vn−1 ) ∈ Nn und Gewichtsvektor W = (w0 , . . . , wn−1 ) ∈ Nn sowie eine Gewichtsobergrenze M ∈ N, d.h. I = (V , W , M). ◮ Eine Lösung ist ein binärer Verktor X = (x0 , . . . , xn−1 ) ∈ {0, 1}n . ◮ Gesucht ist ein Lösungverktor X = (x0 , . . . , xn−1 ) ∈ {0, 1}n , so dass Pn−1 val(I , X ) := i=0 vi · xi eine Menge X potentieller Lösungen und einer Kostenfunktion dieser Lösungen val : I × X → R. Hierbei ist I die Menge aller Probleminstanzen (Eingaben) I von Q. Eine Instanz bezüglich Definition 10 erhalten wir dann über (F , f ) mit F := X und f ≡ val(I , ·) . Abhängig von der Problemdefinition suchen wir nach ◮ ◮ unter der Nebenbedingung Pn−1 einem X ∈ X (oder allen X ∈ X ), die f minimieren bzw. maximieren oder i=0 dem minimalen bzw. maximalen Wert von f . 353 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Algorithmus KS-ExhaustiveSearch(ℓ, Xopt , Vopt , Xakt , I ) Eingabe: Instanz I = (V , W , M), bisher beste Lösung Xopt mit Wert Vopt , neuer Lösungsversuch Xakt = (xakt,0 , . . . , xakt,n−1 ) Ergebnis: neue beste Lösung Xneu mit Wert Vneu 1: if ℓ = n then P 2: if n−1 i · xakt,i ≤ M then i=0 wP 3: Vakt := n−1 i=0 vi · xakt,i 4: if Vakt > Vopt then Vopt := Vakt ; Xopt := Xakt end if 5: end if 6: else 7: xakt,ℓ := 0 8: (Xopt , Vopt ) :=KS-ExhaustiveSearch(ℓ + 1, Xopt , Vopt , Xakt , I ) 9: xakt,ℓ := 1 10: (Xopt , Vopt ) :=KS-ExhaustiveSearch(ℓ + 1, Xopt , Vopt , Xakt , I ) 11: end if 12: Return(Xopt , Vopt ) w i · xi ≤ M maximal ist. xi = 1 bedeutet, dass das i-te Gut in den Rucksack aufgenommen Pn−1 wird. M gibt die maximale Belastung des Rucksacks an und i=0 wi · xi das aktuelle Gewicht. 354 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 13. Vorlesung, 22.1.2007 Beobachtung KS-ExhaustiveSearch(0, (0, . . . , 0), 0, (0, . . . , 0), I ) findet eine optimale Lösung für das Rucksackproblem durch vollständiges Durchsuchen des Lösungsraumes. Wir nenne eine solche Suche nach einer optimalen Lösung exhaustive search. Beobachtung Da der Lösungsraum {0, 1}n exponentielle Größe hat, und wir für jeden Lösungsvektor einmal die Summe in Zeile 3 von KS-ExhaustiveSearch auswerten müssen, ist die Laufzeit von KS-ExhaustiveSearch in O(n · 2n ). 355 356 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Um die folgende allgemeine Backtracking-Strategie anwenden zu können, müssen wir die Form des Lösungsraums einschränken: ◮ Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Wird die optimale Lösung über eine globale Variable festgehalten, dann können wir die Beschreibung des Backtrackingalgorithmus erheblich vereinfachen: 6.2 Die allgemeine Backtracking-Strategie ◮ Andreas Jakoby Universität zu Lübeck Algorithmus Backtrack(ℓ, x1 , . . . , xℓ−1 ) Eingabe: Tiefe ℓ ∈ N, partielle Lösung (x1 , . . . , xℓ−1 ) Ergebnis: optimale Lösung (x1 , . . . , xn−1 ) über eine globale Variable 1: if x1 , . . . , xℓ−1 ist eine zulässige Lösung then 2: bewerte x1 , . . . , xℓ−1 3: else 4: bestimme Cℓ 5: for all x ∈ Cℓ do Backtrack(ℓ + 1, x1 , . . . , xℓ−1 , x) end for 6: end if X = X0 × X1 × . . . × Xn wobei Xℓ für alle ℓ endlich ist, d.h. der Lösungsraum ist das kartesische Produkt von jeweils endlich vielen Alternativen Xℓ . Cℓ ⊆ Xℓ bezeichnet eine möglichst kleine Auswahlmenge zu betrachtender Alternativen. Mit Cℓ können wir versuchen die Alternativen einzuschränken. 357 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck wℓ + i=0 xi · w i Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Algorithmus KS-Backtrack(ℓ, Xakt , Vakt , Wakt ) Eingabe: Instanz I = (V , W , M), bisher beste Lösung Xopt mit Wert Vopt sind global gegeben, neuer Lösungsversuch Xakt = (xakt,0 , . . . , xakt,n−1 ) mit Wert Vakt und Gewicht Wakt Ergebnis: global gegeben neue beste Lösung Xopt mit Wert Vopt 1: if ℓ = n then 2: if Vakt > Vopt then Vopt := Vakt ; Xopt := Xakt end if 3: else 4: if Wakt + wℓ ≤ M then Cℓ := {0, 1} else Cℓ := {0} end if 5: for all x ∈ Cℓ do 6: xakt,ℓ := x 7: KS-Backtrack(ℓ + 1, Vakt + x · vℓ , Wakt + x · vℓ ) 8: end for 9: end if Beispiel: Bei der Lösung des Rucksackproblems können wir in manchen Fällen eine Beschleunigung dadurch erzielen, dass wir das ℓ-te Gut nur dann zu einer partiellen Lösung x0 , . . . , xℓ−1 hinzufügen, wenn ℓ−1 X 358 ≤ M ist. 359 360 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Für einen Knoten v definieren wir: Beispiel: das Clique-Problem Γ(v ) := { u ∈ V | {u, v } ∈ E } . Definition 22 [Clique-Problem] ◮ Ein vollständiger Graph Kℓ mit ℓ Knoten ist ein ungerichteter Graph, in dem es zwischen jedem Knotenpaar eine Kante gibt. ◮ Gegeben ein ungerichteter Graph G = (V , E ). Eine Clique von G ist ein vollständiger Subgraph von G . Wir gehen davon aus, dass die Knoten in G bezüglich einer Relation ≺ vollständig geordnet sind. Dann ist B(v ) := { u ∈ V | v ≺ u } . Wir betrachten die folgenden Probleme: ◮ Eine Liste von Elementen vi1 , . . . , vik bezeichnen wir mit Gegeben ein ℓ ∈ N. Gibt es in G eine Clique der Größe ℓ? ◮ Bestimme das maximale ℓ ∈ N, so dass es in G eine Clique der Größe ℓ gibt. ◮ Bestimme alle Cliquen in G . hvi1 , . . . , vik i . Die leere Liste bezeichnen wir mit hi. Um ein Element x hinten an die Liste L anzufügen benutzen den Operator ◦: Wir werden hier die dritte Variante untersuchen. hvi1 , . . . , vik , xi := hvi1 , . . . , vik i ◦ x 361 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Algorithmus Clique-Backtrack(ℓ, Xakt , Nℓ−1 , G , S) Eingabe: Instanz G , bisher gefundene Cliquen S, Knotenmengen Nℓ neuer Versuch eine Clique zu finden Xakt = hxakt,0 , . . . , xakt,ℓ−1 i Ergebnis: neue Menge von Cliquen S 1: S := S ∪ {Xakt } 2: if ℓ = 0 then 3: Nℓ := V und Cℓ := V 4: else 5: Nℓ := Nℓ−1 ∩ Γ(xakt,ℓ−1 ) und Cℓ := Nℓ ∩ B(xakt,ℓ−1 ) 6: end if 7: if Nℓ = ∅ then Xakt ist eine maximale Clique end if 8: for all x ∈ Cℓ do 9: xakt,ℓ := x 10: S :=Clique-Backtrack(ℓ + 1, Xakt ◦ xakt,ℓ , Nℓ , G , S) 11: end for 12: Return(S) 362 Andreas Jakoby Universität zu Lübeck ◮ ◮ 363 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Über Induktion können wir zeige, dass für ℓ = 0 V N ∩ B(x ) Cℓ = ℓ akt,ℓ−1 Tℓ−1 = B(xakt,ℓ−1 ) ∩ i=0 Γ(xakt,i ) sonst. Somit beschränken wir uns bei der Auswahl von xakt,ℓ auf solche Knoten, die mit den Knoten in Xakt eine Clique bilden. Tℓ−1 Da Nℓ = i=0 Γ(xakt,i ) ist die Clique genau dann maximal, wenn Nℓ = ∅ ist, d.h. Xakt kann um keinen Knoten aus V zu einer größeren Clique erweitert werden. 364 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck 1. Lösung: Das Exact-Cover-Problem können wir mit Hilfe des Cliquen-Problems lösen: ◮ Für eine Instanz S wir definieren einen Graphen G = (V , E ) wie folgt: Beispiel: das Exact-Cover-Problem Definition 23 [Exact-Cover-Problem] ◮ ◮ Gegeben ist eine Menge S = {S1 , . . . , Sm } von Teilmengen Si ⊆ U einer Grundmenge U. U = j=1 ◮ V := S Eine Auswahl Si1 , . . . , Sik von Mengen aus S heißt exakte Überdeckung, wenn jedes Element aus U in genau einer Teilmenge der Auswahl Sij enthalten ist, d.h. k [ Sij und |U| = k X j=1 ◮ ◮ ◮ U Entscheide, ob eine exakt Überdeckung existiert. Finde eine exakt Überdeckung. Finde alle exakten Überdeckungen. 365 Andreas Jakoby Universität zu Lübeck und E := { {Si , Sj } | Si ∩ Sj = ∅ } . Die maximale Cliquen stellen dann mögliche exakte Überdeckungen dar. Eine Clique Si1 , . . . , Sik ist genau dann eine exakte Überdeckung, wenn |Sij | . Gegeben eine Instanz S = {S1 , . . . , Sm }, dann unterscheiden wir zwischen den folgenden Varianten des Exact-Cover-Problems: ◮ Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 ′ ,U ′ Algorithmus XCover-Backtrack(ℓ, Xakt , Cℓ−1 ℓ−1 , r , M) Eingabe: bisher gefundene Überdeckungen M, neuer Versuch eine Überdeckung zu finden Xakt = hxakt,0 , . . . , xakt,ℓ−1 i Ergebnis: neue Menge von Überdeckungen M 1: if ℓ = 0 then 2: U0 := {0, . . . , n − 1}, r := 0, C0′ := {0, . . . , m − 1} 3: else ′ 4: Uℓ := Uℓ−1 \ Sxℓ−1 , r := r ′ , Cℓ′ := Γ(xℓ−1 ) ∩ B(xℓ−1 ) ∩ Cℓ−1 5: while r 6∈ Uℓ und r < n do r := r + 1 end while 6: end if 7: if r = n then M := M ∪ {Xakt } end if 8: Cℓ := Cℓ′ ∩ H(r ) 9: for all x ∈ Cℓ do 10: xakt,ℓ := x 11: M :=XCover-Backtrack(ℓ + 1, Xakt ◦ xakt,ℓ , Cℓ′ , Uℓ , r , M) 12: end for 13: Return(M) = k [ Sij . j=1 Diese Idee führt uns zum folgenden Algorithmus, der auf Clique-Backtrack basiert. Sei U = {0, . . . , n − 1} und S := {S1 , . . . , Sm }, wobei S lexikographisch sortiert ist, d.h. für alle i ∈ {0, . . . , m − 2} gilt Si ≤lex Si+1 . Andreas Jakoby Universität zu Lübeck 366 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 In XCover-Backtrack gehen wir davon aus, dass Γ, B und H global gegeben sind. Die Werte dieser Funktionen werden in der folgenden Prozedur initialisiert: Algorithmus ExactCover(n, S) Eingabe: Größe n der Grundmenge U und sortierte Instanz S Ergebnis: neue Menge aller Überdeckungen S 1: m := |S| 2: for i := 0 to m − 1 do Γ(i) := {j|Si ∩ Sj = ∅} end for 3: for i := 0 to m − 1 do B(i) := {i + 1, . . . , m − 1} end for 4: for i := 0 to n − 1 do H(i) := {j|Sj ∩ {0, 1, . . . , i} = {i}} end for 5: H(n) := ∅ 6: M :=XCover-Backtrack(0, hi, {0, . . . , m − 1}, {0, . . . , n − 1}, 0, ∅) 7: Return(M) 367 368 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Beispiel: Gegeben sei S := {S0 , S1 , S2 , S3 , S4 , S5 , S6 , S7 } mit U = [0..10] und S0 S2 S4 S6 := := := := {0, 1, 2, 8, 10} {2, 5, 8, 10} {3, 5, 7} {4, 6} S1 S3 S5 S7 := := := := Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Beispiel (Teil 2) Γ(0) Γ(2) Γ(4) Γ(6) {0, 1, 8} {2, 9, 10} {3, 5, 6, 10} {5, 6, 7, 8} = = = = {4, 6} {6} {1, 3, 6} {0, 1, 2, 3, 4} Wir erhalten H(0) H(2) H(4) H(6) H(8) H(10) = = = = = = {0, 1} {2, 3} {6} ∅ ∅ ∅ H(1) H(3) H(5) H(7) H(9) = = = = = ∅ {4, 5} {7} ∅ ∅ Γ(1) Γ(3) Γ(5) Γ(7) = = = = S3 S7 S1 S6 S2 S5 S4 S0 {3, 4, 5, 6} {1, 4, 6, 7} {1} {3} 369 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck ↓ ↓ r = 3 C1 = {4} Xakt = h0, 4i U2 = {4, 6, 9} C2′ = {6} ↓ r = 0 C0 = {0, 1} Xakt = h0i U1 = {3, 4, 5, 6, 7, 9} C1′ = {4, 6} r = 4 C2 = {6} Xakt = h0, 4, 6i U3 = {9} C3′ = ∅ Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Beispiel (Teil 4) 2. Wurzel-Blatt-Pfad im Backtracking-Baum: Beispiel (Teil 3) 1. Wurzel-Blatt-Pfad im Backtracking-Baum: U0 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} C0′ = {0, 1, 2, 3, 4, 5, 6, 7} 370 r = 9 C3 = ∅ U0 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} C0′ = {0, 1, 2, 3, 4, 5, 6, 7} r = 0 C0 = {0, 1} U1 = {2, 3, 4, 5, 6, 7, 9, 10} C1′ = {3, 4, 5, 6} r = 2 C1 = {3} U2 = {3, 4, 5, 6, 7} C2′ = {4, 6} r = 3 C2 = {4} U3 = {4, 6} C3′ = {6} r = 4 C3 = {6} ↓ Xakt = h1i ↓ Xakt = h1, 3i ↓ Xakt = h1, 3, 4i ↓ Xakt = h1, 3, 4, 6i U3 = ∅ 371 r = 11 C3′ = ∅ C3 = ∅ M = {h1, 3, 4, 6i} 372 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck 6.3 Backtracking mit Bounding-Funktion ◮ ◮ Für ein Optimierungsproblem Q sei Y die Menge aller partiellen Lösungen, d.h. jedes Element Y ∈ Y kann zu einer Lösung X ∈ X erweitert werden. ◮ ◮ Somit kann keine Erweiterung von Y den Wert von bound(I , Y ) überschreiten. ◮ Liegt beim Backtracking bound(I , Y ) unter dem Wert des bisher gefundenen Maximums, dann müssen wir die Erweiterungen comp(Y ) nicht mehr weiter untersuchen. ◮ Mit Hilfe einer Bounding-Funktion können wir in vielen Fällen das Backtracking erheblich beschleunigen. ◮ Für ein Minimierungsproblem nennen wir eine Funktion bound : I × Y → R Bounding-Funktion, wenn für alle I ∈ I, alle Y ∈ Y und alle X ∈ comp(Y ) Definiere comp : Y → X wie folgt comp(Y ) := { X | Y kann zu X erweitert werden } . Für ein Maximierungsproblem nennen wir eine Funktion bound : I × Y → R Bounding-Funktion, wenn für alle I ∈ I, alle Y ∈ Y und alle X ∈ comp(Y ) Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck val(I , X ) ≥ bound(I , Y ) val(I , X ) ≤ bound(I , Y ) ist. ist. 374 373 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Algorithmus BoundedBacktrack(ℓ, X , Xopt , Vopt , I ) Eingabe: Tiefe ℓ ∈ N, partielle Lösung X := (x1 , . . . , xℓ−1 ), bisherige beste Lösung Xopt mit Wert Vopt , Instanz I Ergebnis: optimale Lösung aus comp(X ) ∪ {Xopt } 1: if X ist eine zulässige Lösung then 2: V := val(I , X ) 3: if V > Vopt then Vopt := V ; Xopt := X end if 4: end if 5: bestimme Cℓ 6: for all x ∈ Cℓ do 7: B := bound(I , X ◦ x) 8: if B > Vopt then 9: (Xopt , Vopt ) := BoundedBacktrack(ℓ+1, X ◦x, Xopt , Vopt , I ) 10: end if end for 11: Return(Xopt , Vopt ) Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Eine Bounding-Funktion für das Rucksackproblem ◮ ◮ In viele Fällen ist das finden einer sinnvollen Bounding-Funktion eine schwieriges Problem. Betrachten wir das Rucksackproblem: ◮ ◮ ◮ ◮ 375 Betrachten wir nun einmal den Fall, dass wir auch Anteile von einem Gut in unseren Rucksack einpacken können. Hierbei hat der Anteil ε mit 0 ≤ ε ≤ 1 von einem Gut j ein Gewicht von ε · wj und einen Wert von ε · vj . Wir erhalten hierbei die rationale Variante des Rucksackproblems. Wir wählen i, so dass der Quotient vi /wi maximal ist. Es gilt: Für das Gewicht von wi können wir maximal den Wert vi bekommen. Diese Überlegung führt uns zu folgendem Algorithmus für die rationale Variante des Rucksackproblems. 376 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmus RationalesRucksack(n, V , W , M) Eingabe: Instanz (V , W , M) mit n Gütern Ergebnis: optimale Lösung (x0 , . . . , xn−1 ) ∈ [0; 1]n des Rucksackproblems, wobei xi den Anteil vom i-ten Guts in der Lösung ist. 1: sortiere die Güter nach dem Wert der Quotienten vi /wi 2: sei i0 , . . . , in−1 die resultierende Folge der Güter 3: for j := 0 to n − 1 do xj := 0 end for 4: sei j := 0; V := 0; W := 0 5: while W ≤ M und j < n do 6: if W + wwij ≤ M then 7: xij := 1; W := W + wij ; V := V + vij ; j := j + 1 8: else 9: xij := M−W wi ; W := M; V := V + xij · vij ; j := j + 1 Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 Andreas Jakoby Universität zu Lübeck Algorithmus BoundingRucksack(ℓ, Xakt , Vakt , Wakt ) Eingabe: Instanz I = (V , W , M), bisher beste Lösung Xopt mit Wert Vopt sind global gegeben, neuer Lösungsversuch Xakt = (xakt,0 , . . . , xakt,n−1 ) mit Wert Vakt und Gewicht Wakt Ergebnis: neue beste Lösung Xopt mit Wert Vopt global gegeben 1: if ℓ = n then 2: if Vakt > Vopt then Vopt := Vakt ; Xopt := Xakt end if 3: else 4: if Wakt + wℓ ≤ M then Cℓ := {0, 1} else Cℓ := {0} end if 5: for all x ∈ Cℓ do 6: xakt,ℓ := x j end if 11: end while 12: Return((x0 , . . . , xn−1 )) 10: 377 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 14. Vorlesung, 29.1.2007 378 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck 6.4 Das Traveling Salesperson Problem 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: Eine Variante des Traveling Salesperson Problems haben wir bereits im Abschnitt 5.5 (Folien 293 bis 299) kennen gelernt. Wir wollen uns nun der allgemeinen Variante des TSP Problems zuwenden: sei I ′ = (V ′ , W ′ , M − Wakt − x · wℓ ) die Instanz I eingeschränkt auf die Güter i > ℓ ′ , . . . , x′ (xℓ+1 n−1 ) :=RationalesRucksack(n − ℓ − 1, ′ ′ Pn−1 V′ , W , M − Wakt − x · wℓ ) B := Vakt + x · wℓ + i:=ℓ+1 xi · wi if B > Vopt then BoundingRucksack(ℓ + 1, Xakt , Vakt + x · vℓ , Wakt + x · vℓ ) end if end for end if Definition 24 [Traveling Salesperson Problem (TSP)] ◮ Gegeben ist ein ungerichteter Graph G = (V , E ) und eine Kostenmatrix M = (mi,j )i,j∈V , wobei mi,j = ∞ für {i, j} 6∈ E ist.8 ◮ Einen Hamiltonischer Kreis ist eine Knotenfolge v0 , v1 , . . . , vn , welcher jeden Knoten genau einmal besucht. ◮ Die Kosten eines Kreises v0 , . . . , vn definieren wir wie folgt: cost(v0 , . . . , vn−1 ) := n−1 X mvi ,v(i+1) mod n . i:=0 ◮ 8 379 Gesucht ist ein Hamiltonischer Kreis mit minimalen Kosten. Zur Vereinfachung bezeichnen wir die Knoten mit natürlichen Zahlen. 380 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Algorithmus TSP-Backtrack(ℓ, Cℓ−1 , Xakt , Xopt , Vopt ) Eingabe: offene Knoten Cℓ−1 , neuer Lösungsversuch Xakt = xakt,0 , . . . , xakt,ℓ−1 , bisher beste Lösung Xopt mit Wert Vopt Ergebnis: neue beste Lösung Xopt mit Wert Vopt 1: if ℓ = n then 2: Vakt := cost(Xakt ) 3: if Vakt < Vopt then Vopt := Vakt ; Xopt := Xakt end if 4: else 5: if ℓ = 0 then Cℓ := {0} end if 6: if ℓ = 1 then Cℓ := {1, . . . , n − 1} end if 7: if ℓ > 1 then Cℓ := Cℓ−1 \ {xakt,ℓ−1 } end if 8: for each xakt,ℓ ∈ Cℓ do 9: (Xopt , Vopt ) := TSP-Backtrack(ℓ + 1, Cℓ , Xakt ◦ xakt,ℓ , Xopt , Vopt ) 10: end for 11: end if 12: Return(Xopt , Vopt ) Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck 1. Bounding-Funktion ◮ Für eine Knotenmenge W ⊆ V und ein Knoten x ∈ V sei b(x, W ) := min mx,w w ∈W die kostenminimale Verbindung von x zu einem Knoten der Menge W . ◮ Für einen Pfad X := x0 , . . . , xℓ−1 in G sei X := V \ X und die Bounding-Funktion X ℓ−2 b(xℓ−1 , X ) + b(v , X ∪ {x0 }) für ℓ < n X BTSP(X ) := mxi ,xi+1 + v ∈X i=0 mxℓ−1 ,x0 für ℓ = n . Da es für jeden Knoten in X ∪ {xℓ−1 } einen Nachfolger auf dem Hamiltonischen Kreis geben muss, ist BTSP eine BoundingFunktion, die die Länge jedes Hamiltonischen Kreises mit dem Teilpfad X nach unten beschränkt. 382 381 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Algorithmus TSP-Bounding(ℓ, Cℓ−1 , Xakt , Xopt , Vopt ) Eingabe: offene Knoten Cℓ−1 , neuer Lösungsversuch Xakt = xakt,0 , . . . , xakt,ℓ−1 , bisher beste Lösung Xopt mit Wert Vopt Ergebnis: neue beste Lösung Xopt mit Wert Vopt 1: if ℓ = n then 2: Vakt := cost(Xakt ) 3: if Vakt < Vopt then Vopt := Vakt ; Xopt := Xakt end if 4: else 5: if ℓ = 0 then Cℓ := {0} end if 6: if ℓ = 1 then Cℓ := {1, . . . , n − 1} end if 7: if ℓ > 1 then Cℓ := Cℓ−1 \ {xakt,ℓ−1 } end if 8: for each xakt,ℓ ∈ Cℓ mit Vopt ≥ BTSP(Xakt ◦ xakt,ℓ ) do 9: (Xopt , Vopt ) := TSP-Bounding(ℓ + 1, Cℓ , Xakt ◦ xakt,ℓ , Xopt , Vopt ) 10: end for 11: end if 12: Return(Xopt , Vopt ) 383 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 2. Bounding-Funktion ◮ Eine zweite Bounding-Funktion erhalten wir, indem wir die Einträge der Kostenmatrix zunächst Spalten- und dann Zeilenweise um das jeweilige Minimum der jeweiligen Spalte bzw. der Zeile verkleinern, und die Summe dieser Minima bestimmen. Sei redval diese Summe. ◮ Die resultierende Matrix besitzt weiterhin nur positive Einträge. Jedoch gibt es in jeder Zeile und in jeder Spalte mindesten eine 0. ◮ Den Wert von redval können wir mit dem Algorithmus auf der folgenden Folie bestimmen. 384 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck Algorithmus Redval(M) Eingabe: k × k-Kostenmatrix Ergebnis: Wert von redval 1: redval:= 0 2: for i := 0 do k − 1 do 3: row:= minj∈[0..k−1] mi,j 4: for j := 0 to k − 1 do mi,j := mi,j −row end for 5: redval:=redval+row 6: end for 7: for j := 0 do k − 1 do 8: col:= mini∈[0..k−1] mi,j 9: for i := 0 to k − 1 do mi,j := mi,j −col end for 10: redval:=redval+col 11: end for 12: Return(redval) Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Lemma 34 Jeder Hamiltonsche Kreis in einem Graphen G mit Kostenmatrix M hat Kosten mindestens Redval(M). Beweis von Lemma 34: ◮ Markieren wir für einen Hamiltonischen Kreis in der Kostenmatrix genau die Kosten der Kanten des Kreises, so wird in jeder Zeile und in jeder Spalte genau ein Eintrag mi,j markiert. ◮ Es kann gezeigt werden, dass die Summe dieser Werte mindestens den Wert Redval(M) haben muss. Um die Bounding-Funktion zu berechnen, müssen wir die Kostenmatrix abhängig vom aktuellen Pfad modifizieren. 385 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck ◮ ◮ ◮ Für einen Pfad X := x0 , . . . , xℓ−1 sei X := V \ X . Sei MX die Teilmatrix der Kostenmatrix M, die nur aus den Einträgen besteht, deren Zeilen und Spalten durch Knoten aus X indiziert sind. Wir indizieren die Zeilen und Spalten aus MX durch die jeweiligen Knoten aus X . M X 386 Andreas Jakoby Universität zu Lübeck ◮ Jetzt fügen wir in MX noch eine Spalte und eine Zeile hinzu. Diese können wir zum Beispiel and der Position von x0 tun. ◮ In der neuen Zeile tragen wir die Kosten ein, um von dem jeweiligen Knoten aus X den Knoten x0 zu erreichen. ◮ In der neuen Spalte tragen wir die Kosten ein, um von xℓ−1 den jeweiligen Knoten aus X zu erreichen. ◮ An die Stelle, wo sich die neue Zeile und die neue Spalte schneiden, setzten wir ∞. MX ◮ X 387 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Sei M ′ die resultierende Matrix, dann setzten wir ( ℓ−2 X Redval(M ′ ) für ℓ < n BTSP2(X ) := mxi ,xi+1 + mxℓ−1 ,x0 für ℓ = n . i=0 388 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Algorithmus BTSP2(X ) Eingabe: ein Pfad X = x0 , . . . , xℓ−1 in G Ergebnis: ein Bounding-Wert 1: if ℓ = n then 2: Return(cost(X )) 3: else ′ ) 4: sei M ′ = (mi,j i,j∈[0..n−ℓ] eine n − ℓ + 1 × n − ℓ + 1-Matrix ′ 5: sei m0,0 := ∞; j := 1; i := 1 ′ := m 6: for all v ∈ X do m0,j xℓ−1 ,v ; j := j + 1 end for ′ 7: for all v ∈ X do mi,0 := mv ,x0 ; i := i + 1 end for 8: i := 0 9: for all u ∈ X do 10: j := 1; i := i + 1 ′ := m 11: for all v ∈ X do mi,j u,v ; j := j + 1 end for 12: end forP ℓ−2 13: Return( i=0 mxi ,xi+1 + Redval(M ′ )) 14: end if Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 6.5 Das MAXCLIQUE Problem ◮ Wir wollen nun das Problem untersuchen, die Größe einer maximalen Clique zu bestimmen. ◮ Dieses Problem ist ebenfalls N P-schwierig. ◮ Ausgehend vom Algorithmus Clique-Backtrack 389 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Algorithmus MAXCLIQUE(ℓ, Xakt , Cℓ−1 , G , Vopt ) Eingabe: Instanz G , bisher gefundene maximale Größe einer Clique Vopt , Knotenmengen Cℓ−1 , neuer Versuch eine Clique zu finden Xakt = hx0 , . . . , xℓ−1 i Ergebnis: maximale Größe einer Clique 1: if ℓ = 0 then Cℓ := V else Cℓ := Cℓ−1 ∩ Γ(xℓ−1 ) ∩ B(xℓ−1 ) end if 2: if Cℓ = ∅ then 3: if ℓ > Vopt then Return(ℓ) else Return(Vopt ) end if 4: else 5: for all x ∈ Cℓ do 6: Vopt :=MAXCLIQUE(ℓ + 1, Xakt ◦ x, Cℓ , G , Vopt ) 7: end for 8: end if 9: Return(Vopt ) 391 390 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Welche Bounding-Funktion können wir für das MAXCLIQUE Problem angeben? ◮ Wir betrachten das Knotenfärbungsproblem für den Restgraphen mit Knotenmenge Cℓ : Jeder Knoten des Graphen soll ein Farbe bekommen, wobei benachbarte Knoten unterschiedlich gefärbt werden müssen. Ziel ist es die Anzahl der Farben zu minimieren. ◮ Besitzt ein Graph eine k-Färbung, so besitzt der Graph keine Clique der Größe k + 1! ◮ Das Färbungsproblem ist N P-schwierig. ◮ Daher suchen wir nach einem Greedy-Verfahren, welches die Färbung gut approximiert. 392 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck ◮ Sei V = {0, . . . , n − 1} die betrachtete Knotenmenge für das Färbungsproblem. ◮ Sei N bzw. [0..k − 1] die Menge der Farben. ◮ Für eine Farbe h ist CClass[h] die Menge der Knoten mit Farbe h. ◮ Für einen Knoten v ist Color[v ] die Farbe von v . Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Algorithmus Greedy-Color(G ) Eingabe: Graph G Ergebnis: Obere Schranke für die Anzahl der Farben k 1: k := 0 2: for v = 0 to n − 1 do 3: h := 0 4: while h < k und CClass[h] ∩ Γ(v ) 6= ∅ do h := h + 1 end while 5: if h = k then k := k + 1; CClass[h] := ∅ end if 6: CClass[h] :=CClass[h] ∪ {v } 7: Color[v ] := h 8: end for 9: Return(k) 393 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck ◮ Besitzt ein Graph einen maximalen Grad von d, d.h. |Γ(v )| ≤ d für alle Knoten des Graphen, dann findet der Algorithmus eine Färbung mit d + 1 Farben. ◮ Berechnen wir in MAXCLIQUE für jeden Graphen Gℓ = (Cℓ , E ∩ 2Cℓ ) mit Greedy-Color eine obere Schranke kℓ für die minimale Anzahl an benötigten Farben, so erhalten wir hierbei auch eine obere Schranke für die maximale Größe kℓ einer Clique in Gℓ . ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 6.6 Branch-and-Bound Verfahren Man kann Beispiele finden, bei denen Greedy-Color nicht die optimale Färbung findet. ◮ 394 Die maximale Größe einer Cliquen die wir ausgehend von Xakt finden können ist dann Xakt + Greedy-Color(Gℓ ) . 395 ◮ Mit Hilfe einer gegebenen Bounding-Funktion versuchen wir die Reihenfolge beim Traversieren des Backtracking-Baums so zu manipulieren, dass wir einige Lösungskandidaten zusätzlich ausschließen können. ◮ Für ein Maximierungsproblem sortieren wir Cℓ absteigend in Abhängigkeit vom Wert der Bounding-Funktion. Wir betrachten anschließend die Elemente aus Cℓ entsprechend der erhaltenen Reihenfolge. ◮ Erhalten wir für ein Elemente aus Cℓ eine Lösung, deren Wert nahe am Wert der Bounding-Funktion liegt, dann können wir alle Elemente aus Cℓ , für die die Bonding-Funktion einen kleineren Wert liefert, als Kandidaten für eine optimale Lösung ausschießen. 396 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck Algorithmus BranchAndBound(ℓ, X , Xopt , Vopt , I ) Eingabe: Tiefe ℓ ∈ N, partielle Lösung X := (x1 , . . . , xℓ−1 ), bisherige beste Lösung Xopt mit Wert Vopt , Instanz I Ergebnis: optimale Lösung aus comp(X ) ∪ {Xopt } 1: if X ist eine zulässige Lösung then 2: V := val(I , X ) 3: if V > Vopt then Vopt := V ; Xopt := X end if 4: end if 5: bestimme Cℓ und Fℓ = {(x, bound(I , X ◦ x))|x ∈ Cℓ } 6: sortiere Fℓ absteigend nach der zweiten Koordinate 7: sei Fℓ [1], . . . , Fℓ [k] die resultierende sortierte Folge 8: for i = 1 to k do 9: Sei (x, B) := Fℓ [i] 10: if B ≤ Vopt then Return(Xopt , Vopt ) end if 11: (Xopt , Vopt ) := BranchAndBound(ℓ + 1, X ◦ x, Xopt , Vopt , I ) 12: end for 13: Return(Xopt , Vopt ) Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck 6.7 Heuristische Suche Eine Bounding-Funktion gibt eine Approximation eines Optimierungsproblems an. Eine Kollektion verschiedener Strategien zur Approximation von Optimierungsproblemen finden wir unter der Bezeichnung Heuristiken. Zu den bekanntesten Heuristiken gehören: ◮ die Nachbarschaftssuche, ◮ das Hill-Climbing, ◮ das Simulated Annealing, ◮ die Tabu-Suche und ◮ die Genetischen Algorithmen. 398 397 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck 7 2-Personen-Spielen ◮ ◮ ◮ ◮ Zufallsentscheidungen, wie zum Beispiel mit Würfeln oder mit Durchmischen von Karten, und deterministischen Spielen, ◮ Spielen mit unvollständiger Information, wie zum Beispielen verdeckte Karten, und Spielen mit vollständiger Information, wie zum Beispiel Schach, Dame oder Go. Bei einem Nullsummenspiel ist der Gewinn des einen Spieler zugleich der Verlust des anderen Spielers. Eine weitere Form von Optimierungsproblemen finden wir bei 2-Personen-Spielen: ◮ Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Bei 2-Personen-Spielen unterscheiden wir zwischen Speilen mit 7.1 Typen von 2-Personen-Spielen ◮ Andreas Jakoby Universität zu Lübeck Ein Spiel, bei dem 2 Speiler abwechselnd Züge aus einer vorgegebenen Menge von endlich vielen Alternativen wählen, kann durch einen Spielbaum beschrieben werden. Jeder Knoten repräsentiert eine Spielstellung und jede Kante einen Spielzug. Die Kanten zu den Kinder eines Knoten repräsentieren jeweils einem alternativen Zug. ◮ ◮ Der Spielbaum eines solchen 2-Personen-Spiels stellt eine Verallgemeinerung eines Lösungsbaums eines Optimierungsproblems (Aufrufbaums des Backtrackingverfahrens) dar. ◮ 399 Jede Endstellung des Speils können wir mit einer Zahl bewerten, die angibt, welchen Betrag der erste Spieler dem zweiten zu zahlen hat. Bei einem Spiel mit nur einfachen Gewinn- oder Verlustbedingungen können wir diese Bewertung mit +1 für Gewinn, −1 für Verlust und 0 für Unentschieden durchführen. 400 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 7.2 Alpha-Beta-Suche bei 2-Personen-Spielen ◮ ◮ ◮ Da wir einen exponentiell großen Spielbaum in der Regel nicht vollständig durchsuchen können, suchen wir nach geeigneten heuristischen Verfahren, mit deren Hilfe wir uninteressante Teilbäume erkennen und somit aussparen können. ◮ eine α-Schranke, für den maximalen Gewinn, den Spieler 1 aus dieser Spielstellung heraus erzielen kann, und eine β-Schranke, für den maximalen Gewinn, den Spieler 2 aus dieser Spielstellung heraus erzielen kann. Bei einem Nullsummenspiel entspricht der maximale Gewinn des einen Spielers dem maximalem Verlust des zweiten Spielers. 401 Algorithmik WS 06/07 15. Vorlesung, 5.2.2007 Andreas Jakoby Universität zu Lübeck Literatur: ◮ Skript zu Algorithmik vom Wintersemester 2005-06 Prof. R. Reischuk: ◮ ◮ Greedy-Algorithmen, Scheduling, Flussproblem Combinatorial Optimization – Theory and Algorithms, B. Korte, J. Vygen: ◮ ◮ Lineare Programme, Simplex-Algorithmus, lineare Ungleichungen, Ellipsoid-Methode, Matching-Probleme Algorithm Design, J. Kleinberg, É. Tardos: ◮ ◮ Greedy-Algorithmen, Scheduling, Flussproblem, Simplex-Algorithmus, Matching-Probleme, Backtracking Combinatorial Optimization – Algorithms and Complexity, C. H. Papadimitriou, K. Steiglitz: ◮ ◮ Die α- und β-Schranke werden aus den Werten der Vorgängerknoten durch Maximieren oder Minimieren berechnet, je nach dem Spieler, der am Zug ist. ◮ Wir sprechen von einem α-Schnitt, wenn eine Spielstellung, wo Spieler 1 am Zug ist, nicht weiter betrachtet wird, weil der Gegner garantiert nicht in diese Spielstellung ziehen würde, weil er durch eine Alternative eine bessere Schranke erzielen kann. ◮ Das duale mit vertauschten Rollen der Spieler nennen wir β-Schnitt. ◮ Eine weitere Betrachtung von 2-Personen-Spielen würde den Rahmen dieser Vorlesung sprengen. Diese entspricht der Funktionsweise einer Bounding-Funktion beim Backtracking. Bei 2-Personen-Spielen benötigen wir allerdings 2 Werte: ◮ ◮ ◮ Simplex-Algorithmus, Ellipsoid-Methode How to Solve It: Modern Heuristics, Z. Michalewicz, D.B. Fogel: ◮ Heuristische Suche 403 402