Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 1. Vorlesung, 24.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 1 Einleitung Motivation ◮ 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. Algorithmik Andreas Jakoby [email protected] Sprechstunde: Mittwochs 15:00-17:00 WS 07/08 1 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 1. Vorlesung, 24.10.2006 2 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.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: ◮ zentrale Entwurfsmethoden für Algorithmen ◮ Analysemethoden für Algorithmen und für algorithmische Problemstellungen ◮ wichtige Optimierungsalgorithmen Divide and Conquer Dynamisches Programmieren Greedy-Algorithmen Backtracking Lineares Programmieren Transformationen 3 4 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Scheinvergabe: ◮ Um einen Schein für diese Vorlesung zu erhalten, ist die erfolgreiche Teilnahme an der abschließenden Prüfung erforderlich. ◮ 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. Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 2 Divide and Conquer Beispiele für Divide and Conquer Algorithmen: ◮ Sortierverfahren wie Merge-Sort, Quicksort ◮ Türme von Hanoi ◮ ◮ Matrizenmultiplikation, Multiplikation großer Zahlen Geometrische Probleme: Closest Pair, Liniensegment-Schnittproblem, Voronoi-Diagramme 5 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 2.1 Das Divide and Conquer Prinzip 6 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Anmerkungen: ◮ c ist oft eine kleine Konstante, z.B. c = 1 oder c = 2. Problemunabhängige Formulierung des Divide and Conquer Verfahrens zur Lösung eines Problems der Größe n: ◮ 1. Divide: Teile das Problem in k Teilprobleme, wenn n > c ist; sonst löse das Problem der Größe ≤ c direkt. 2. Conquer: Löse die Teilproblem (rekursiv) auf dieselbe Art. 3. Merge: Füge die Teillösungen zur Gesamtlösung zusammen. ◮ 7 Die Teilprobleme ist oft disjunkt. Dieses muss jedoch nicht immer gelten. Oft bleiben beim Divide and Conquer kleine Restprobleme übrig, die nicht vom Typ des ursprünglichen Problems sind. Diese werden im Merge-Schritt direkt gelöst. 8 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 1. Vorlesung, 24.10.2006 Laufzeit des Divide and Conquer Verfahrens ist a für n ≤ c T (n) = T (n1 ) + . . . + T (nk ) + tmerge (n1 , . . . , nk ) sonst, wobei n1 , . . . , nk die Größen der Teilprobleme sind. In vielen Fällen teilen wir ein Problem in zwei Teilprobleme der Größe und der Merge-Schritt hat oft eine lineare Laufzeit, dann gilt 1 für n ≤ 1 T (n) = 2T (n/2) + O(n) für n ≥ 2 . Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 2.2 Beispiel: Voronoi-Diagramme Definition 1: Gegeben ist eine Menge von Punkten S in der Ebene. Ein Voronoi-Diagramm VD(S) von S ist eine Einteilung der Ebene in konvexe Regionen, so dass ◮ in jeder Region exakt ein Punkt aus S liegt und ◮ die zu p ∈ S gehörige Region alle Punkte umfaßt, die näher an p als an jedem anderen Punkt von S liegen. n 2 Diese Rekursionsformel hat die Lösung T (n) = O(n log n)1 . 1 Im Allgemeinen bezeichnen wir mit log den Logarithmus zur Basis 2 9 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 10 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 1: Eingabe: 10 Punkten S in der Ebene. Algorithmus Voronoi-Diagramme(S) Eingabe: Punktmenge S in der Ebene Ergebnis: Voronoi-Diagramm von S 1: if |S| = 1 then 2: VD(S) besteht aus einer Region, die die ganze Ebene umfaßt 3: else 4: Teile S anhand der x-Koordinate in zwei Hälften Sl und Sr 5: VD(Sl ) := Voronoi-Diagramme(Sl ) 6: VD(Sr ) := Voronoi-Diagramme(Sr ) 7: VD(S) := VD-Merge(VD(Sl ), VD(Sr )) 8: end if 9: Return(VD(S)) 11 12 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Andreas Jakoby Universität zu Lübeck Beispiel Teil 1: Conquer: Bestimme das Voronoi-Diagramme für Sl . Beispiel Teil 1: Divide: Teile S in Sl und Sr . 12 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 1: Conquer: Bestimme das Voronoi-Diagramme für Sr . 12 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 1: Merge: Vereine die beiden Teillösungen. 12 12 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: Seien pl ∈ Sl und pr ∈ Sr die beiden Punkte mit maximaler y -Koordinate. Anmerkungen: ◮ Sortieren wir zunächst die initiale Eingabemenge bezüglich der Koordinaten (x, y ), so können wir einen Aufteilung von S in jedem Rekursionsschritt bezüglich einer (fast) vertikalen Linie in Zeit O(|S|) finden. Wir betrachten hier nicht den konkreten Algorithmus und die konkrete Datenstruktur. Die Aufteilung und das Vereinigen ist jedoch in linearer Zeit möglich. ◮ Ein Voronoi-Diagramm für eine Menge S mit n Punkten kann somit in Zeit O(n log n) konstruiert werden. Wir wollen nun noch auf die Idee für ein Merge-Verfahren eingehen. ◮ 13 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: Von y = +∞ bis zum ersten Schnittpunkt mit einer Grenzlinie aus VD(Sl ) oder aus VD(Sr ) folge der Mittelsenkrechten der Verbindungslinie von pl und pr . 14 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: Ist die Schnittpunkt mit einer Grenzlinie von VD(Sl ) so ersetzte pl durch den Punkt aus Sl , der unterhalb der geschnittenen Grenzlinie liegt. 14 14 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: Ist die Schnittpunkt mit einer Grenzlinie von VD(Sr ) so ersetzte pr durch den Punkt aus Sr , der unterhalb der geschnittenen Grenzlinie liegt. Andreas Jakoby Universität zu Lübeck Beispiel Teil 2: Von dem letzten Schnittpunkt bis zum ersten Schnittpunkt mit einer Grenzlinie aus VD(Sl ) oder aus VD(Sr ) folge der Mittelsenkrechten der Verbindungslinie von pl und pr . 14 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: Von dem letzten Schnittpunkt bis zum ersten Schnittpunkt mit einer Grenzlinie aus VD(Sl ) oder aus VD(Sr ) folge der Mittelsenkrechten der Verbindungslinie von pl und pr . 14 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: und so weiter und so weiter 14 14 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: und so weiter und so weiter Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: und so weiter und so weiter 14 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel Teil 2: Im Bereich der oberen neuen Grenzlinie kann es zu Fehlern kommen, daher sollten wir für diesen Bereich das Verfahren noch einmal von unten nach oben durchlaufen. 14 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 3 Dynamisches Programmieren ◮ ◮ ◮ 14 Beim Dynamischen Programmieren handelt es sich um einen rekursiven Ansatz, bei dem wir versuchen ähnlich wie beim Divide und Conquer ein Problem mit Hilfe kleinerer Probleminstanzen zu lösen. Da verschiedene kleinere Probleminstanzen mehrere male auftreten können speichern wir die entsprechenden Lösungen so lange bis sie nicht mehr benötigt wird. Für viele Anwendungen ist es nicht möglich eine einfache Aufteilung eines Problems in kleinere (disjunkte) Teilprobleme zu finden. Beim dynamischen Programmieren, betrachten wir daher eine Folge von möglichen Aufteilungen und optimieren über diese Möglichkeiten. 15 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 1. Vorlesung, 24.10.2006 3.1 Die Schritte des Dynamischen Programmierens Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 1. Vorlesung, 24.10.2006 3.2 Beispiele Problemunabhängig können wir die folgenden Schritte für das dynamische Programmieren zur Lösung eines Problems der Größe n formulieren: 1. DPR 1: Beschreibe das Problem rekursiv. 2. DPR 2: Bestimme die Menge R der kleineren Probleme, auf die bei der Lösung eines Problems P direkt oder indirekt rekurriert wird. Beispiel 1: Fibonacci-Zahlen ◮ DPR 1: 1 fib(n) = fib(n − 1) + fib(n − 2) 3. DPR 3: Bestimme eine Aufrufreihenfolge P1 , . . . , Pr der Probleme in R, so dass bei der Lösung eines Problems Pi nur Probleme Pj mit j < i benutzt werden. 4. DPR 4: Berechne und Speichere die sukzessive die Lösungen für P1 , . . . , Pr in dieser Reihenfolge, wobei einmal berechnete Lösungen mindestens solange gespeichert werden, wie bei später zu berechnenden Problemen noch direkt auf sie zurückgegriffen werden muss. ◮ DPR 2: R ◮ für n ∈ {1, 2} für n > 2 . = {fib(1), fib(2), . . . , fib(n − 1)} . DPR 3: fib(1), fib(2), . . . , fib(n − 1) . ◮ DPR 4: Berechne fib(1), fib(2), . . . , fib(n) nach der Formel unter DPR 1 und speichere fib(i) bis fib(i + 2) berechnet wurde. 16 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 1. Vorlesung, 24.10.2006 Algorithmus Fibonacci(n) Eingabe: n ∈ N Ergebnis: fib(n) 1: for i = 1 to n by +1 do 2: if n = 1 then 3: alt:= 0; neu:= 1 4: else 5: tmp:=alt+neu 6: alt:=neu; neu:=tmp 7: end if 8: end for 9: Return(neu) 17 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Beispiel 2: Editierdistanz Definition 2: Sei x = x[1]x[2] . . . x[k] = x[1..k] ∈ Σk eine Zeichenkette der Länge k und a ∈ Σ, wir definieren die Operationen del(x, i) := x[1] . . . x[i − 1]x[i + 1] . . . x[k] add(x, i, a) := x[1] . . . x[i]ax[i + 1] . . . x[k] ◮ change(x, i, a) := x[1] . . . x[i − 1]ax[i + 1] . . . x[k] Die Editierdistanz EdDist(x, y ) von x, y ∈ Σ∗ ist die minimale Anzahl der obigen Operationen, die nötig sind, um aus der Zeichenkette x in die Zeichenkette y zu überführen. ◮ ◮ 18 19 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 ◮ ◮ ◮ ◮ Fall 1 EdDist(x[1..k], y [1..m]) =EdDist(x[1..k], y [1..m − 1]) + 1 Fall 2 EdDist(x[1..k], y [1..m]) =EdDist(x[1..k − 1], y [1..m]) + 1 Fall 3a EdDist(x[1..k], y [1..m]) =EdDist(x[1..k − 1], y [1..m − 1]) + 1 wenn x[k] 6= y [m] ist DPR 2 DPR 3 EdDist(x[1..0], y [1..0]), . . . , EdDist(x[1..k], y [1..0]), . . . , EdDist(x[1..0], y [1..m]), . . . , EdDist(x[1..k], y [1..m]) ◮ Fall 3b EdDist(x[1..k], y [1..m]) =EdDist(x[1..k − 1], y [1..m − 1]) wenn x[k] = y [m] ist Ferner gilt: ◮ Fall 4 EdDist(x[1..k], λ) = k ◮ Fall 5 EdDist(λ, y [1..m]) = m ◮ ◮ 1. Vorlesung, 24.10.2006 R = { EdDist(x[1..i], y [1..j]) | i ≤ k und j ≤ m und i +j 6= k +m } Für DPR 1 unterscheiden wir die folgenden Fälle: ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck DPR 4 für x[k] = y [m] EdDist(x[1..k], y [1..m]) = min{EdDist(x[1..k], y [1..m − 1]) + 1, EdDist(x[1..k − 1], y [1..m]) + 1, EdDist(x[1..k − 1], y [1..m − 1])} und für x[k] 6= y [m] Fall 6 EdDist(λ, λ) = 0 EdDist(x[1..k], y [1..m]) = 1 + min{EdDist(x[1..k], y [1..m − 1]), EdDist(x[1..k − 1], y [1..m]), EdDist(x[1..k − 1], y [1..m − 1])} . 20 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 1. Vorlesung, 24.10.2006 Algorithmus Editierdistanz(x, y ) Eingabe: x = x[1] . . . x[k], y = y [1] . . . y [m] ∈ Σ∗ Ergebnis: Editierdistanz EdDist(x, y ) ∈ N 1: for i = 0 to k by +1 do 2: for j = 0 to m by +1 do 3: if i = 0 then 4: EdDist(x[1..i], y [1..j]) := j 5: else if j = 0 then 6: EdDist(x[1..i], y [1..j]) := i 7: else 8: A:= 1 + min{EdDist(x[1..i], y [1..j − 1]), EdDist(x[1..j − 1], y [1..i]) 9: B:= EdDist(x[1..i − 1], y [1..j − 1]) 10: if x[i] 6= y [j] then B := B + 1 end if 11: EdDist(x[1..i], y [1..j]) := min{A, B} 12: end if 13: end for 14: end for 15: Return(EdDist(x, y )) 22 21 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 1. Vorlesung, 24.10.2006 λ p pl pla plas plast plasti plastik λ 0 1 2 3 4 5 6 7 n 1 1 2 3 4 5 6 7 na 2 2 2 2 3 4 5 6 nat 3 3 3 3 3 3 4 5 natu 4 4 4 4 4 4 4 5 natur 5 5 5 5 5 5 5 5 natura 6 6 6 5 6 6 6 6 23 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 ◮ ◮ Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 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. 4 Greedy-Algorithmen (gierige Algorithmen) ◮ Andreas Jakoby Universität zu Lübeck 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. Verschiedene lokale Kriterien führen zu verschiedenen Algorithmen. Analysemethoden für Greedy-Verfahren ◮ 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. Beispiele: die Algorithmus von Kruskal, die Konstruktion eines Huffman-Codes und der Approximationsalgorithmus für das Binpacking Problem Best-Fit. 24 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 4.1 Minimale Spannbäume ◮ ◮ ◮ ◮ ◮ ◮ 25 Andreas Jakoby Universität zu Lübeck ◮ 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. P Gesucht ist ein Baum T = (V , E ′ ) mit E ′ ⊆ E , so dass, 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. 26 Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 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 starten mit |V | einelementigen Mengen, von denen jede einen anderen Knoten des Graphen enthält. Diese Mengen werden als Bäume mit jeweils einem Knoten interpretiert. 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. 27 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 ◮ ◮ 2. Vorlesung, 31.10.2007 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: Was ist eine Priorityqueue? ◮ Wir betrachten eine Teilmenge M eines Universums U, wobei jedem Element m ∈ M eine Priorität p(m) (oder kurz p) zugeordnet wird. ◮ insert(m, p): fügt m ∈ U mit Priorität p in M ein. ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ ◮ deletemin: gibt das Element aus M mit minimaler Priorität zurück und entfernt dieses aus M. readmin: gibt das Element aus M mit minimaler Priorität zurück ohne es zu entfernen. 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. U = {1, . . . , n} sei ein Universum. P = {P1 , . . . , Pk } sei eine Menge von disjunkten, nicht leeren S Teilmengen von U mit U = ni=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 . ◮ ◮ 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 . 28 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 29 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 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 ′ )) Die UNION/FIND-Datenstruktur kann recht einfach so implementiert werden, dass ◮ die Initialisierung in Zeit O(|U|), jede union-Operation in konstanter Zeit und ◮ jede find-Operation in Zeit O(log |U|) 2 ausgeführt werden kann. Einige aufwendigere Implementierungen erlauben es die Laufzeit der find-Operation erheblich zu reduzieren. ◮ 30 31 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 2. Vorlesung, 31.10.2007 3 1 2 4 6 4. deletemin= {5, 6} find(5) 6= find(6) 16 5 1 2 3 5 2 1 5 2 4 4 13 6 2 5. deletemin= {2, 6} find(2) = find(6) 3 3 5 6 5 2. Vorlesung, 31.10.2007 3. deletemin= {5, 1} find(5) 6= find(1) Beispiel 1 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 6 4 1 7 6 2 4 1 2 4 1 2 4 1 9 3 3 3 0. Initialisierung 1 1. deletemin= {3, 6} find(3) 6= find(6) 1 5 6. deletemin= {1, 6} find(1) = find(6) 2. deletemin= {1, 2} find(1) 6= find(2) 5 1 6 6 4 2 1 2 1 2 4 5 2 4 8. deletemin= {3, 4} find(3) 6= find(4) 3 1 1 6 1 4 2 5 2 4 6 6 4 3 5 2 2 2 7. deletemin= {2, 3} find(2) = find(3) 3 1 5 3 4 6 1 4 2 4 1 9 3 3 3 3 3 3 32 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 33 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 2. Vorlesung, 31.10.2007 Beweis von Lemma 1: Angenommen, T enthält W aber nicht W ′ . Korrektheit V \S S ◮ Lemma 1 Sei ◮ G = (V , E ) ein ungerichteter Graph, ◮ T = (V , ET ) ein minimaler Spannbaum für G , ◮ e 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. ◮ ◮ ◮ ◮ ◮ ◮ 34 Dann gilt e 6∈ ET . 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 . 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 ′ ). 35 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 2. Vorlesung, 31.10.2007 Korrektheit vom Kruskals Algorithmus ◮ Beweis von Lemma 1 (Teil 2) P P ◮ Ist f (e) < f (e ′ ), so gilt w ∈ET f (w ) für w ∈ET′ f (w ) < ′ ′ 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. ◮ 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. 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. 36 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 37 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 2. Vorlesung, 31.10.2007 Laufzeit von Kruskals Algorithmus ◮ ◮ ◮ ◮ ◮ Die Initialisierung der Priorityqueue gelingt in Zeit O(|E |). Die Initialisierung der Partitionen gelingt in Zeit O(|V |). Satz 1 Sei G = (V , E ) ein zusammenhängender, ungerichteter, gewichteter Graph. Dann berechnet Kruskals Algorithmus einen minimalen Spannbaum für G in Zeit 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 |). O(|E | · log |E |) . Beobachtung 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. 38 39 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 4.2 Intervall-Scheduling Definition 3 [Intervall-Scheduling Problem] Gegeben sei ◮ 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) Definition 3 (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! 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. ◮ 40 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 41 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 2. Vorlesung, 31.10.2007 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. Wir starten mit einer einfachen Beobachtung: Beobachtung 2 Für alle Auswahlmechanismen ist das Ergebnis S eine zulässige Schedule. 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. 42 43 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 2. Vorlesung, 31.10.2007 ◮ wähle wähle wähle wähle 2. Vorlesung, 31.10.2007 Anhand der nachfolgenden Graphik können wir leicht erkennen, dass die ersten drei Auswahlmechanismen auf Folie 44 keine optimale Schedule liefern. 1. Einfache Auswahlmechanismen: 1. 2. 3. 4. Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck i mit s(i) = minj∈R s(j) i mit f (i) − s(i) = minj∈R f (j) − s(j) das i, welches mit den wenigsten Jobs in R im Konflikt steht i mit f (i) = minj∈R f (j) 2. 3. ◮ 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! 44 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 3. Vorlesung, 7.11.2007 Benutzen wir den vierten Auswahlmechanismus, so können wir unseren Greedy-Algorithmus wie folgt implementieren: 45 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 Vergleichen wir nun S mit einer beliebigen optimalen Schedule O: ◮ Sei O = {j1 , . . . , jm } und S = {i1 , . . . , ik }. ◮ Wir wollen zeigen, dass m = k ist. 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). ◮ 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. ∀ℓ < m : f (jℓ ) ≤ s(jℓ+1 ) 46 und ∀ℓ < k : f (iℓ ) ≤ s(iℓ+1 ) ◮ 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. 47 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 Wir wollen nun die zentrale Beobachtung für unsere Greedy-Verfahren bei Benutzung der vierten Auswahlmethode beweisen: 3. Vorlesung, 7.11.2007 Beweis von Lemma 2 (Teil 2): ◮ Für r > 1 schließen wir wie folgt: Lemma 2 Für alle r ≤ k gilt ◮ ◮ f (ir ) ≤ f (jr ) . ◮ ◮ Beweis von Lemma 2: Wir zeigen Lemma 2 mit Hilfe einer Induktion über r . ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ Für r = 1 folgt Lemma 2 aus der Beobachtung, dass der Algorithmus mit dem i1 startet, welches den minimalen Wert f (i1 ) besitzt. 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. 48 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 49 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 3. Vorlesung, 7.11.2007 Aus Lemma 2 können wir folgenden Satz schließen: Erweiterungen des Intervall-Scheduling Problems: Satz 2 Earliest-Finishingtime-First berechnet eine optimale Schedule in Zeit O(n · log2 n). ◮ Beweis von Satz 2: ◮ Ist k = m, so ist S optimal. ◮ Ist k < m, so folgt aus Lemma 2: ◮ ◮ ◮ ◮ {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. ◮ 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. 50 51 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 3. Vorlesung, 7.11.2007 Satz 3 Der nachfolgende Online-Algorithmus approximiert die minimalen Kosten für das Ski-Leih Problem mit einem Faktor 2 für L|K : Beispiel für die Online-Version: Ski-Leih Problem Definition 4 [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: 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 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. ◮ ◮ 52 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 53 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 3. Vorlesung, 7.11.2007 4.3 Intervall-Partitionierungs Problem Ein mit dem Intervall-Scheduling Problem nahe verwandtes Problem ist das Intervall-Partitionierungs Problem: Definition 5 [Intervall-Partitionierungs Problem] Gegeben sei ◮ eine Menge R = {1, . . . , n} von n Jobs und 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. 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. ◮ 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. 54 55 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 3. Vorlesung, 7.11.2007 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ℓ ) Lemma 3 Für jede Eingabe R, s, f hat jede zulässige Partitionierung eine Kardinalität mindestens ovl(R). 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. 56 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 57 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 3. Vorlesung, 7.11.2007 Wir wollen nun den Algorithmus Starttime-Ordering analysieren: Beobachtung 3 Die Ausgabe I1 , . . . , Iℓ von Starttime-Ordering ist eine zulässige Partition. Warum ist Starttime-Ordering ein Greedy-Algorithmus? ◮ Wir müssen das lokale Entscheidungkriterium finden, welches wir in jedem Schritt des Verfahrens benutzen: ◮ ◮ ◮ ◮ Beweis von Beobachtung 3: 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(r ) eingefügt wird, wenn j 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 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. 58 59 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 Lemma 4 Für die Ausgabe I1 , . . . , Iℓ von Starttime-Ordering gilt ℓ = ovl(R). Beweis von Lemma 4: Für die Priorityqueue Q gilt: ◮ ◮ ◮ ◮ 3. Vorlesung, 7.11.2007 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 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 ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck s(hj ) ≤ s(ri ) < f (hj ) . ◮ ◮ aufgrund der Sortierung in Zeile 2: s(rk ) ≤ s(ri ) und aufgrund der Eigenschaften der Priorityqueue: f (rk ) > s(ri ). Diese Jobs bilden somit eine Konfliktmenge der Kardinalität ovl(R) + 1. Dieses ist ein Widerspruch zur Definition von ovl(R). 60 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 61 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 3. Vorlesung, 7.11.2007 Beobachtung 4 Die Laufzeit von Starttime-Ordering ist in O(n · log n). Fassen wir unsere Beobachtungen von den Folien 56 bis 62 zusammen, so erhalten wir: 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 Satz 4 Es gibt ein Greedy-Algorithmus, dar das Intervall-Partitionierungs Problem in Zeit O(n · log n) löst. Beweis von Beobachtung 4: ◮ ◮ ◮ ◮ ◮ Wie können wir den Beweis der Optimalität von Starttime-Ordering mit Hilfe unserer beiden Schemata von Folie 25 interpretieren? 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)). ◮ Für jeden Zeitpunkt t mit min s(i) ≤ t Diese Laufzeiten folgen aus unserer Annahme von Folie 28. ◮ i∈R Da die Anzahl der Teilmengen durch die Anzahl der Elemente beschränkt ist, erhalten wir eine Laufzeit von O(n · log n + n · log ℓ) = < max f (i) 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. O(n · log n) 62 63 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 4. Vorlesung, 14.11.2007 4.4 Intervall-Scheduling mit Deadline ◮ eine Menge R = {1, . . . , n} von n Jobs und zwei Funktionen δ, τ : R → N. verspätet. Wir definieren die Verspätung einer Schedule S als Mit τ (i) bezeichnen wir die Laufzeit von Job i und mit δ(i) die Deadline von 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: ◮ 4. Vorlesung, 14.11.2007 Definition 6 (Teil 2) Wir sagen, dass sich ein Job i in einer Schedule um den Wert v (i) := max{0, S(i) + τ (i) − δ(i)} Definition 6 [Intervall-Scheduling mit Deadline] Gegeben sei ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 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 ′ ) . die Intervalle [S(i), S(i) + τ (i)[ und [S(j), S(j) + τ (j)[ überlappen sich nicht. Aufgabe: Finde eine optimale Schedule! 64 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 4. Vorlesung, 14.11.2007 65 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 4. Vorlesung, 14.11.2007 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 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) t ∈ [0, max{S(i) + τ (i)}[ i∈R keinen Job i ∈ R mit S(i) ≤ t ◮ < S(i) + τ (i) existiert. Für eine Schedule S nennen wir ein Paar (i, j) nennen wir Inversion, wenn S(i) < S(j) und δ(i) > δ(j) ist. 66 67 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 4. Vorlesung, 14.11.2007 4. Vorlesung, 14.11.2007 Beweis von Lemma 5 (Teil 2): ◮ 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) Beobachtung 5 Es gibt eine optimale Schedule ohne Leerzeiten. Lemma 5 Alle Schedules ohne Inversion und ohne Leerzeiten besitzen die gleiche maximale Verspätung. Beweis von Lemma 5: ◮ Seien S und S ′ zwei unterschiedliche Schedules ohne Inversion und ohne Leerzeiten. ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck j∈{k∈R|δ(k)≤δ(i)} = S ′ (d(i, S ′ )) + τ (d(i, S ′ )) . ′ S und S unterscheiden sich nur in der Startreihenfolge der Jobs mit gleicher Deadline. ◮ Da L(S) = maxi∈R S(d(i, S)) + τ (d(i, S)) − δ(i) ist, gilt L(S) = L(S ′ ). 68 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 4. Vorlesung, 14.11.2007 Um den folgenden Satz zu beweisen werden wir ein exchange argument anwenden. Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 4. Vorlesung, 14.11.2007 Beweis von Satz 5 (Teil 2): ◮ Tauschen wir das Paar i und j, dann Satz 5 Es existiert eine optimale Schedule ohne Inversion und ohne Leerzeiten. ◮ ◮ Beweis von Satz 5: ◮ Nach Beobachtung 5 gibt es eine optimale Schedule O ohne Leerzeiten. ◮ 69 ◮ 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. ◮ 70 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. Wir können somit Schritt für Schritt alle Inversionen aus O entfernen. 71 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 4. Vorlesung, 14.11.2007 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 4. Vorlesung, 14.11.2007 4.5 Online-Scheduling — das Caching–Problem ◮ ◮ Die vom Algorithmus Earliest-Deadline-First generierte Schedule ist: 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: ◮ ◮ Satz 6 Earliest-Deadline-First generiert eine optimale 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: ◮ ◮ ◮ 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. 72 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 4. Vorlesung, 14.11.2007 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: ◮ ◮ ◮ ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 4. Vorlesung, 14.11.2007 Definition 7 (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 := Ci−1 \ {x} für oi = eject(x) Ci−1 ∪ {x} für oi = load(x) Definition 7 [Caching-Problem] Gegeben ist ◮ 73 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. 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! Die letzte Operation ist nicht unbedingt nötigt. Sie vereinfacht jedoch die Darstellung der Schedule. 74 75 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 4. Vorlesung, 14.11.2007 ◮ ◮ ◮ 4. Vorlesung, 14.11.2007 Lemma 6 Für jede Strategie A gibt es eine lazy Strategie B, die maximal so viele Kosten als A verursacht. Vorbemerkungen: ◮ Ein Algorithmus muss entscheiden: ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 6: Zunächst wandeln wir A in eine Strategie um, die keine überflüssigen load- und eject-Operationen beinhaltet: 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. ◮ ◮ 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. 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. 76 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 4. Vorlesung, 14.11.2007 ◮ ◮ ◮ ◮ 4. Vorlesung, 14.11.2007 ◮ ◮ 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: ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 6 (Teil 3): ◮ Weiter mit der Umformung: 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: ◮ 77 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. ◮ 78 ′ 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′ . 79 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 5. Vorlesung, 21.11.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 5. Vorlesung, 21.11.2007 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 ) 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. ◮ 80 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 5. Vorlesung, 21.11.2007 81 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 5. Vorlesung, 21.11.2007 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 ◮ O eine optimale und lazy Schedule und ◮ S eine Schedule wie sie über den Algorithmus konstruiert wird. Kommentare zum Algorithmus ◮ 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. 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: ◮ Hierbei führt Oi auf den ersten i Elementen der Eingabe die gleichen eject-Operationen wie S aus. 82 83 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 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. Wir unterscheiden die folgenden Fälle: ◮ ◮ 5. Vorlesung, 21.11.2007 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 O ′ i aus dem Cache entfernt: Beweis von Satz 7 (Teil 2): Wir zeigen die folgende Aussage: ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 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′ . ◮ 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. 84 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 Beweis von Satz 7 (Teil 4): ◮ Es bleibt jetzt noch der Fall, dass y in O ′ nicht aus dem Cache i entfernt, bis y erneut angefragt wird. In diesem Fall verfahren wir wie folgt: ◮ 85 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 4.6 Das Shortest-Path Problem ◮ Beim kürzesten Wegeproblem unterscheiden wir: ◮ 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. ◮ ◮ ◮ ◮ 86 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. 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. 87 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 5. Vorlesung, 21.11.2007 Algorithmus von Dijkstra ◮ ◮ Der Algorithmus von Dijkstra löst das SSSPP Problem. Ideen: ◮ ◮ ◮ ◮ ◮ ◮ 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 . ◮ Wir gehen davon aus, dass G , S, D, W global gegeben sind. 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. 88 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 Beispiel: 3 4 ◮ 1 1 4 1 1 2 4 ◮ ◮ 5 2 2 3 Andreas Jakoby Universität zu Lübeck ◮ S: 2 89 ◮ 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 90 Algorithmik WS 07/08 5. Vorlesung, 21.11.2007 Wie finden wir den nächsten in S einzufügenden Knoten? 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) 91 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 5. Vorlesung, 21.11.2007 Modifikation der Felder: Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 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 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 92 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 5. Vorlesung, 21.11.2007 Im Feld W steht für jeden Knoten v der kürzeste Weg über die Knoten aus S vom Knoten 1: ◮ ◮ ◮ 93 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 Beispiel: 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 50 1 10 2 3 20 10 Pv Kostenmatrix: 45 15 = v , W [v ], W [W [v ]], . . . , W [W [· · · [W [v ]] · · · ]] = 1 C 30 30 20 15 4 5 der inverse kürzeste Weg von 1 nach v in S ∪ {v }. ◮ ◮ 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. ◮ S = {1} und next-node= 4 v D[v ] 94 1 ∞ 2 50 3 45 4 10 5 ∞ = v W [v ] ∞ ∞ ∞ 20 ∞ 50 45 ∞ 10 ∞ ∞ ∞ ∞ 20 30 1 - 2 1 3 1 10 ∞ 15 ∞ ∞ 30 ∞ 15 ∞ ∞ 4 1 5 1 95 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ S = {1, 4} und next-node= 5 v D[v ] ◮ 2 50 1 ∞ 2 45 1 ∞ 2 45 1 ∞ 2 45 3 45 4 10 5 25 v W [v ] 3 45 4 10 5 25 v W [v ] S = {1, 2, 4, 5} und next-node= 3 v D[v ] ◮ 1 ∞ S = {1, 4, 5} und next-node= 2 v D[v ] ◮ 5. Vorlesung, 21.11.2007 3 45 4 10 5 25 3 45 4 10 5 25 1 - 2 1 2 5 3 1 3 1 4 1 4 1 5. Vorlesung, 21.11.2007 5 4 Der Beweis, dass der Algorithmus von Dijkstra eine optimale Lösung findet erfolgt über ein greedy algorithm stays ahead Argument. 5 4 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. v W [v ] 1 - 2 5 3 1 4 1 5 4 v W [v ] 1 - 2 5 3 1 4 1 5 4 Endzustand: S = {1, 2, 3, 4, 5} v D[v ] 1 - Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 7: Der Beweis erfolgt über vollständige Induktion über die Kardinalität von S. ◮ Für |S| = 1, d.h. S = {1}, ist das Lemma trivialer Weise erfüllt. ◮ Wir nehmen nun an, dass die Aussage für das Lemma für Mengen S mit |S| ≤ k erfüllt ist. 96 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 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. ◮ ◮ x y 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 Vorgänger von y. Px 1 ◮ Pu u v ◮ 5. Vorlesung, 21.11.2007 ◮ Sei v der Knoten, der im k + 1-ten Schritt in S eingefügt wird. ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 7 (Teil 3): ◮ Es gilt: Betrachten wir einen Pfad Pu von 1 zu einem Knoten u ∈ S, so erkennen wir, dass dieser vollständig in S verläuft. S: 97 ◮ ◮ ◮ 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 |. ◮ 98 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 . 99 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 5. Vorlesung, 21.11.2007 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 5 Backtracking bei diskreten Optimierungsproblemen Wir wollen zunächst einige Begriffe definieren: Definition 8 [Optimierungsprobleme] ◮ Eine Instanz eines Optimierungsproblems ist ein Paar (F , f ) wobei 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 . ◮ ◮ ◮ 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. 100 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 5. Vorlesung, 21.11.2007 101 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 5. Vorlesung, 21.11.2007 Oft finden wir auch eine alternative Definition: Ein Optimierungsproblem wird durch Anmerkungen zu Definition 8: ◮ Die Form von Optimierungsproblemen aus Definition 8 nennen wir auch Maximierungsprobleme, da wir eine Lösung x ∈ F mit f (x) ≥ f (y ) für alle y ∈ F suchen. ◮ ◮ 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 8 erhalten wir dann über ◮ ◮ 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. (F , f ) mit F := X und f ≡ val(I , ·) . Abhängig von der Problemdefinition suchen wir nach ◮ einem X ∈ X (oder allen X ∈ X ), die f minimieren bzw. maximieren oder ◮ dem minimalen bzw. maximalen Wert von f . 102 103 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 28.11.2007 5.1 Das Rucksackproblem 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 Pn−1 2: if i=0 wi · xakt,i ≤ M then Pn−1 3: Vakt := 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 ) Definition 9 [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 val(I , X ) := unter der Nebenbedingung Pn−1 i=0 Pn−1 w i · xi i=0 vi · 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. Andreas Jakoby Universität zu Lübeck 104 Algorithmik WS 06/07 6. Vorlesung, 28.11.2007 105 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 28.11.2007 5.2 Die allgemeine Backtracking-Strategie Beobachtung 6 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. Um die folgende allgemeine Backtracking-Strategie anwenden zu können, müssen wir die Form des Lösungsraums einschränken: ◮ 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. Beobachtung 7 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 ). 106 107 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 28.11.2007 Wird die optimale Lösung über eine globale Variable festgehalten, dann können wir die Beschreibung des Backtrackingalgorithmus erheblich vereinfachen: Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 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 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 wℓ + ℓ−1 X i=0 xi · w i ≤ M ist. 108 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 28.11.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 · wℓ ) 8: end for 9: end if 109 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 28.11.2007 Beispiel: das Clique-Problem Definition 10 [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 betrachten die folgenden Probleme: ◮ 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 . Wir werden hier die dritte Variante untersuchen. 110 111 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 Für einen Knoten v definieren wir: Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.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) Γ(v ) := { u ∈ V | {u, v } ∈ E } . 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 } . Eine Liste von Elementen vi1 , . . . , vik bezeichnen wir mit hvi1 , . . . , vik i . Die leere Liste bezeichnen wir mit hi. Um ein Element x hinten an die Liste L anzufügen benutzen den Operator ◦: hvi1 , . . . , vik , xi := hvi1 , . . . , vik i ◦ x 112 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 28.11.2007 113 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 Beispiel: das Exact-Cover-Problem ◮ ◮ Definition 11 [Exact-Cover-Problem] ◮ Gegeben ist eine Menge S = {S1 , . . . , Sm } von Teilmengen Si ⊆ U einer Grundmenge U. ◮ Eine Auswahl Si , . . . , Si von Mengen aus S heißt exakte 1 k Überdeckung, wenn jedes Element aus U in genau einer Teilmenge der Auswahl Sij enthalten ist, d.h. Über Induktion können wir zeige, dass für ℓ = 0 V Nℓ ∩ B(xakt,ℓ−1 ) Cℓ = 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. U = k [ j=1 ◮ und |U| = k X j=1 |Sij | . Gegeben eine Instanz S = {S1 , . . . , Sm }, dann unterscheiden wir zwischen den folgenden Varianten des Exact-Cover-Problems: ◮ ◮ ◮ 114 Sij Entscheide, ob eine exakt Überdeckung existiert. Finde eine exakt Überdeckung. Finde alle exakten Überdeckungen. 115 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 Für eine Instanz S wir definieren einen Graphen G = (V , E ) wie folgt: V := S ◮ 6. Vorlesung, 28.11.2007 ′ Algorithmus XCover-Backtrack(ℓ, Xakt , Cℓ−1 , Uℓ−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) 1. Lösung: Das Exact-Cover-Problem können wir mit Hilfe des Cliquen-Problems lösen: ◮ Algorithmik WS 06/07 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 k [ Sij . U = 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 . 116 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 6. Vorlesung, 28.11.2007 117 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 Beispiel: Gegeben und S0 := S2 := S4 := S6 := 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) sei S := {S0 , S1 , S2 , S3 , S4 , S5 , S6 , S7 } mit U = [0..10] {0, 1, 2, 8, 10} {2, 5, 8, 10} {3, 5, 7} {4, 6} S1 S3 S5 S7 := := := := {0, 1, 8} {2, 9, 10} {3, 5, 6, 10} {5, 6, 7, 8} Wir erhalten H(0) H(2) H(4) H(6) H(8) H(10) 118 = = = = = = {0, 1} {2, 3} {6} ∅ ∅ ∅ H(1) = ∅ H(3) = {4, 5} H(5) = {7} H(7) = ∅ H(9) = ∅ 119 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 Beispiel (Teil 3) 1. Wurzel-Blatt-Pfad im Backtracking-Baum: Beispiel (Teil 2) Γ(0) = {4, 6} Γ(2) = {6} Γ(4) = {1, 3, 6} Γ(6) = {0, 1, 2, 3, 4} S3 U0 C0′ Γ(1) = {3, 4, 5, 6} Γ(3) = {1, 4, 6, 7} Γ(5) = {1} Γ(7) = {3} = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} = {0, 1, 2, 3, 4, 5, 6, 7} ↓ U1 C1′ S7 S1 S6 S2 S5 S4 S0 U2 C2′ U3 C3′ r C1 = 3 = {4} r C2 = 4 = {6} r C3 = 9 = ∅ Xakt = h0, 4i = {4, 6, 9} = {6} ↓ = 0 = {0, 1} Xakt = h0i = {3, 4, 5, 6, 7, 9} = {4, 6} ↓ r C0 Xakt = h0, 4, 6i = {9} = ∅ 120 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 121 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.2007 Beispiel (Teil 4) 2. Wurzel-Blatt-Pfad im Backtracking-Baum: 5.3 Backtracking mit Bounding-Funktion U0 C0′ U1 C1′ U2 C2′ U3 C3′ U3 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} r = 0 = {0, 1, 2, 3, 4, 5, 6, 7} C0 = {0, 1} ↓ Xakt = h1i = {2, 3, 4, 5, 6, 7, 9, 10} r = 2 = {3, 4, 5, 6} C1 = {3} ↓ Xakt = h1, 3i = {3, 4, 5, 6, 7} r = 3 = {4, 6} C2 = {4} ↓ Xakt = h1, 3, 4i = {4, 6} r = 4 = {6} C3 = {6} ↓ Xakt = h1, 3, 4, 6i = ∅ r = 11 C3′ = ∅ C3 = ∅ M = {h1, 3, 4, 6i} ◮ 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. ◮ 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 ) val(I , X ) ≤ bound(I , Y ) ist. 122 123 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck ◮ ◮ ◮ ◮ 6. Vorlesung, 28.11.2007 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 6. Vorlesung, 28.11.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 ) 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 ) val(I , X ) ≥ bound(I , Y ) ist. 124 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 ◮ In viele Fällen ist das finden einer sinnvollen Bounding-Funktion eine schwieriges Problem. Betrachten wir das Rucksackproblem: ◮ ◮ ◮ ◮ Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 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 Eine Bounding-Funktion für das Rucksackproblem ◮ 125 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. j Diese Überlegung führt uns zu folgendem Algorithmus für die rationale Variante des Rucksackproblems. 10: 11: 12: 126 end if end while Return((x0 , . . . , xn−1 )) 127 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 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 Andreas Jakoby Universität zu Lübeck 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 sei I ′ = (V ′ , W ′ , M − Wakt − x · wℓ ) die Instanz I eingeschränkt auf die Güter i > ℓ ′ ′ ) :=RationalesRucksack(n − ℓ − 1, (xℓ+1 , . . . , xn−1 V ′ , W ′ , M − Wakt − x · wℓ ) Pn−1 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 128 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 Definition 12 [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.2 ◮ 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 ◮ Gesucht ist ein Hamiltonischer Kreis mit minimalen Kosten. 2 Zur Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.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 ) 5.4 Das Traveling Salesperson Problem ◮ 129 Vereinfachung bezeichnen wir die Knoten mit natürlichen Zahlen. 130 131 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 1. Bounding-Funktion ◮ 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 mxi ,xi+1 + BTSP(X ) := 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 Bounding- Funktion, die die Länge jedes Hamiltonischen Kreises mit dem Teilpfad X nach unten beschränkt. 132 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 ◮ ◮ 133 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 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) 2. Bounding-Funktion ◮ Algorithmik WS 06/07 7. Vorlesung, 05.12.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 ) Für eine Knotenmenge W ⊆ V und ein Knoten x ∈ V sei b(x, W ) := Andreas Jakoby Universität zu Lübeck 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. 134 135 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 ◮ ◮ Lemma 8 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 Kosten- matrix 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. Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck ◮ 7. Vorlesung, 05.12.2007 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 Um die Bounding-Funktion zu berechnen, müssen wir die Kosten- matrix abhängig vom aktuellen Pfad modifizieren. X MX X 136 Andreas Jakoby Universität zu Lübeck ◮ ◮ ◮ ◮ ◮ Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 137 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.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 ′ := mxℓ−1 ,v ; j := j + 1 end for 6: for all v ∈ X do m0,j ′ 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 ′ 11: for all v ∈ X do mi,j := mu,v ; j := j + 1 end for 12: end forP ℓ−2 13: Return( i=0 mxi ,xi+1 + Redval(M ′ )) 14: end if 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 ∞. Sei M ′ die resultierende Matrix, dann setzten wir ( ℓ−2 X Redval(M ′ ) für ℓ < n mxi ,xi+1 + BTSP2(X ) := mxℓ−1 ,x0 für ℓ = n . i=0 138 139 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 ◮ ◮ Algorithmik WS 06/07 7. Vorlesung, 05.12.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 ) 5.5 Das MAXCLIQUE Problem ◮ Andreas Jakoby Universität zu Lübeck 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 140 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.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. ◮ 141 Andreas Jakoby Universität zu Lübeck ◮ ◮ ◮ ◮ Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 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 . Daher suchen wir nach einem Greedy-Verfahren, welches die Färbung gut approximiert. 142 143 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.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) Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck ◮ ◮ ◮ 7. Vorlesung, 05.12.2007 Man kann Beispiele finden, bei denen Greedy-Color nicht die optimale Färbung findet. 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ℓ . Die maximale Größe einer Cliquen die wir ausgehend von Xakt finden können ist dann Xakt + Greedy-Color(Gℓ ) . 144 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 ◮ ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 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 ) 5.6 Branch-and-Bound Verfahren ◮ 145 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. 146 147 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 6 2-Personen-Spielen Eine weitere Form von Optimierungsproblemen finden wir bei 2-Personen-Spielen: ◮ ◮ ◮ ◮ 7. Vorlesung, 05.12.2007 Bei 2-Personen-Spielen unterscheiden wir zwischen Speilen mit ◮ 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. 6.1 Typen von 2-Personen-Spielen ◮ Algorithmik WS 06/07 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. 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. 148 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 149 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 6.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. ◮ Diese entspricht der Funktionsweise einer Bounding-Funktion beim Backtracking. Bei 2-Personen-Spielen benötigen wir allerdings 2 Werte: ◮ ◮ ◮ ◮ 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. ◮ ◮ 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. Bei einem Nullsummenspiel entspricht der maximale Gewinn des einen Spielers dem maximalem Verlust des zweiten Spielers. 150 151 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 8. Vorlesung, 12.12.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 12.12.2007 7 Heuristiken 7.1 Local Search Im 5-ten Kapitel haben wir verschiedene Bounding-Funktionen betrachtet. Eine Bounding-Funktion stellte eine Art von Approximation eines Optimierungsproblems dar und vice versa. Eine Kollektion verschiedener Approximationen sind unter dem Namen Heuristiken bekannt. Einige bekannte Heuristiken sind: ◮ ◮ ◮ ◮ ◮ ◮ Local Search, Hill-Climbing, Simulated Annealing, Tabu-Search, und ◮ ◮ Genetic Algorithmen. Im Folgenden wollen wir auf einige wesentliche Ideen von Local Search Algorithmen eingehen. ◮ Ein Local Search Algorithmus ist ein Verfahren, welches den Lösungsraum durchsucht, in dem es von einer aktuellen Lösung zu einer neuen Lösung geht, welche sich in der Nachbarschaft befindet. Local Search Heuristiken finden oft ihre Anwendung bei Problemen, die nur mit großem Berechnungsaufwand exakt gelöst werden können. Ein Nachteil von Local Search Heuristiken ist die Schwierigkeit ihrer Analyse. Für einige Local Search Heuristiken sind keine bewiesenen Approximationsaussagen bekannt. 152 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 8. Vorlesung, 12.12.2007 Viele Local Search Algorithmen wurden durch physikalische Systeme inspiriert: Bei einem Minimierungsproblem versuchen wir eine Größe zu minimieren. In einem physikalischen System wird fortwährend eine Minimierung der potentiellen Energie durchgeführt. ◮ Z.B. rollt ein Ball immer bergab. ◮ A ◮ ◮ B C ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 12.12.2007 Verwandschaft zu Optimierungsproblemen Physikalische Systeme Optimierungsprobleme ◮ große Anzahl möglicher ◮ große (exponentielle) Anzahl Zustände möglicher Lösungen C ◮ Energie der einzelnen ◮ Kostenfunktion c(S) für Zustände jede Lösung S ◮ minimiere die Energie ◮ minimiere/maximiere die Kosten ◮ benachbarte Zustände ◮ Neu: Nachbarschaftsrelation ∼ Kommentare: Local Search und physikalische Systeme ◮ 153 Betrachte einen Ball, der in A startet. Position B ist ein lokales Minimum. B ist der tiefste Punkt, wenn wir die Nachbarschaft von B betrachten. Der Ball wird das globale Minimum in der Position C nie erreichen. Ein weiteres System mit potentialer Energie stellt ein erhitzte Flüssigkeit dar, die sich abkühlt und dabei den Aggregatzustand wechselt. Dieses führt uns zur statistischen Mechanik. ◮ ◮ ◮ ◮ 154 Für zwei S, S ′ benachbarte Lösungen S.S ′ schreiben wir S ∼ S ′ . Die Nachbarschaftsrelation definiert einen (ungerichteten) Graph aller möglichen Lösungen. Die Nachbarschaft eines Zustands definieren wir durch N(S) = {S ′ |S ∼ S ′ }. Die Kostenfunktion ist ein Teil der Problembeschreibung. Die Nachbarschaftsrelation können wir frei wählen. 155 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 8. Vorlesung, 12.12.2007 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 12.12.2007 7.2 Anwendung: Neuronale Hopfield Netzwerke Basisstrategie für Local Search Algorithmen: 1: Sei S ∈ C die gegenwärtige Lösung. 2: iterate wähle S ∈ N(S) 3: merke die jeweilige Lösung mit minimalen Kosten 4: Return(S) Definition 13 [Neuronale Hopfield Netzwerke] ◮ Gegeben ist ein ungerichteter Graph G = (V , E ) und eine Kanten-Gewichtsfunktion w : E → Z \ {0}. Für e ∈ E schreiben wir we := w (e). ◮ Eine Konfiguration S : V → {−1, +1} ist eine Zuweisung der Werte −1 und +1 für die Knoten in G . Für v ∈ V schreiben wir auch sv := S(v ) und nennen sv den Zustand von v . Kommentare: ◮ Local Search findet immer besser und bessere Lösungen. ◮ Local Search Algorithmen durchlaufen Wege in dem durch ∼ definierten Graphen dar, die versuchen in Richtung einer guten Lösung zu gehen. ◮ ◮ Eine Kannte e = {u, v } muss die folgende Bedingung erfüllen: Ist we > 0 dann ist die Bedingung erfüllt, wenn u und v unterschiedliche Zustände haben. Ist we < 0 dann ist die Bedingung erfüllt, wenn u und v gleiche Zustände haben. Somit gilt we · su · sv ≤ 0. |we | nennen wir das absolute Gewicht von e. 156 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 8. Vorlesung, 12.12.2007 157 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 12.12.2007 Definition 13 (Teil 2) Beispiel ◮ Gegeben ist eine Konfiguration S. Eine Kante e = {u, v } nennen wir schlecht, wenn sie die Bedingung verletzt, d.h. we · su · sv > 0. Ansonsten nennen wir e gut. ◮ Ein Knoten u ist stabil in S wenn X we · su · sv ≤ 0 . 1 1 1 Ein neuronales Hopfield Netzwerk, in dem mindestens zwei Knoten die Bedingung nicht erfüllen. Algorithmus Hopfield-1(G , w ) Eingabe: neuronales Hopfield Netzwerk G und Gewichtsfunktion w Ergebnis: stabile Konfiguration 1: for all v ∈ V do sv := +1 end for 2: while S ist keine stabile Konfiguration do 3: wähle einen nicht stabilen Knoten u 4: ändere den Zustand von u, d.h. su := −su 5: end while 6: Return(S) e={u,v }∈E Eine Konfiguration S ist stabil wenn alle Knoten in S zufriedengestellt sind. ◮ Finde eine stabile Konfiguration. Hat jedes neuronales Hopfield Netzwerk eine stabile Konfiguration? Betrachten wir die gerichtete Variante dieses Problems, so erkennen wir, dass der obige Graph keine stabile Konfiguration besitzt, wenn wir alle Kanten im Uhrzeigersinn richten. ◮ Beobachtung 8 Wenn Hopfield-1(G , w ) terminiert, dann ist das Ergebnis eine stabile Konfiguration. Fragen: Hält Hopfield-1(G , w ) immer an? Wenn ja, wie schnell terminiert Hopfield(G , w )? 158 159 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 8. Vorlesung, 12.12.2007 Beispiel: Für rote Knoten u sei su = +1 und für blaue Knoten u sei su = −1. Grüne Knoten u sind stabil. −10 −10 8 8 −4 8 8. Vorlesung, 12.12.2007 Wählen wir c : C → R als die zu maximierende Kostenfunktion, dann können wir Hopfield-1(G , w ) so modifizieren, dass er die Form eines Local Search Algorithmus hat. ◮ Für eine Konfiguration S und einen Knoten u −10 −4 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck −4 ◮ ◮ ◮ −1 −1 −1 −1 −1 −1 ◮ −10 2 8 6 −4 −1 −6 8 −12 −1 −10 −10 −18 −18 1 −1 −1 und −4 −5 −4 −1 Das Gewicht dieser Mengen definieren wir wie folgt: X |we | c(S) := e∈g (S) −6 8 −4 −1 1 −1 −1 sei g (S) die Menge der guten Kanten in G , sei g (S, u) die Menge der guten Kanten inzident zu u und sei b(S, u) die Menge der schlechten Kanten inzident zu u. γS+ (u) := −1 X e∈g (S,u) |we | und γS− (u) := X e∈b(S,u) |we | . −1 160 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 8. Vorlesung, 12.12.2007 Beobachtung 9 Seien S, S ′ zwei Konfigurationen, wobei S ′ durch das ändern des Zustands eines Knotens u aus S entsteht, dann gilt 161 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 8. Vorlesung, 12.12.2007 Wir definieren die Nachbarschaft einer Konfiguration S wie folgt N(S) := { S ′ | Konfiguration S ′ kann durch das ändern des Zustands eines Knotens generiert werden } . c(S ′ ) := c(S) − γS+ (u) + γS− (u) . Beobachtung 10 Sei S eine Konfiguration und u ein nicht stabiler Knoten in S, dann gilt su = γS− (u) − γS+ (u) > 0 und somit Wir erhalten den folgenden modifizierten Algorithmus: Algorithmus Hopfield-2(G , w ) Eingabe: neuronales Hopfield Netzwerk G und Gewichtsfunktion w Ergebnis: stabile Konfiguration 1: for all v ∈ V do sv := +1 end for 2: while ∃S ′ ∈ N(S) : c(S ′ ) > c(S) do 3: wähle eine Konfiguration S ′ ∈ N(S) mit c(S ′ ) > c(S) 4: sei S := S ′ 5: end while 6: Return(S) γS− (u) > γS+ (u) Beobachtung 11 Seien S, S ′ zwei Konfigurationen, wobei S ′ durch das ändern des Zustands eines nicht stabilen Knotens u aus S entsteht, dann gilt c(S ′ ) > c(S) . Somit erhöht sich der Wert der Kostenfunktion bei jedem Schleifendurchlauf in Hopfield-1(G , w ). 162 163 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 8. Vorlesung, 12.12.2007 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 7.3 Maximum-Cut Approximation via Local Search Wir wollen nun ein Optimierungsproblem analysieren, welches mit Hilfe eines Local Search Algorithmus approximiert werden kann. In jeder Wiederholung der while-Schleife erhöht sichP der Wert von c(S) um mindestens 1. Der maximale Wert von c(S) ist e∈E |we |. Da wir jeden Schleifendurchlauf in Zeit O(|E |) im Wortmodel3 durchführen können, gilt: Definition 13 [Maximum-Cut Problem] ◮ Gegeben ist ein ungerichteter Graph G = (V , E ) und eine positive ganzzahlige Gewichtsfunktion w : E → N. Für e ∈ E schreiben wir we := w (e). ◮ Gegeben eine Partition A, B der Knotenmenge, dann definieren wir X we . w (A, B) = Satz 9 Hopfield-2(G , w ) gibt eine stabile Konfiguration für ein neuronales Hopfield Netzwerk G P = (V , E ) mit Gewichten w : E → Z \ {0} in Zeit O(|E | · e∈E |we |) aus. Beachte, dass für große Werte we die Laufzeit von Hopfield-2(G , w ) exponentiell sein kann. e=(u,v )∈E mit u∈A,v ∈B Finde eine Partition A, B welche w (A, B) maximiert. Die Entscheidungsproblemvariante dieses Problem definieren wir wie folgt: Gegeben G , w und eine Schranke β, entscheide, ob eine Partition A, B mit w (A, B) ≥ β existiert. Die Entscheidungsproblemvariante von Maximum-Cut ist N P-vollständig. ◮ ◮ 3 Operationen auf ganzen Zahlen haben einen Zeitbedarf von einer Einheit im Wortmodel 164 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Kommentare: ◮ Nicht verwechseln: Minimum-Cut ist in P — dieses Problem wird im weiteren Verlauf dieses Kurses untersucht. ◮ Das Maximum-Cut Problem kann als die Optimierungsproblemvariante des Problems verstanden werden, eine neuronales Hopfield Netzwerks mit positiven Kantengewicht verstanden werden: ◮ ◮ ◮ 165 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 Basierend auf unseren Beobachten auf der letzten Folie können folgenden Algorithmus für das Maximum-Cut Problem herleiten: Algorithmus ApproxMaxCut(G , w ) Eingabe: ungerichteter Graph G = (V , E ) mit Gewichtsfunktion w Ergebnis: Knotenpartition A, B 1: A := ∅; B := V 2: while (∃u ∈ A : w (u, B) < w (u, A)) ∨ (∃u ∈ B : w (u, A) < w (u, B)) do 3: sei u ein Knoten, der die Bedingung in Zeile 2 erfüllt 4: if u ∈ A then A := A \ {u}; B := B ∪ {u} 5: else B := B \ {u}; A := A ∪ {u} enf if 6: end while 7: Return(A, B) Eine Konfiguration S korrespondiert wie folgt zu einer Partition AS , BS : Ein Knoten u ist genau dann in AS , wenn su = −1 und u ist genau dann in BS , wenn su = +1. Das Maximum-Cut Problem ist das Problem die Summe der absoluten Werte aller guten Kanten zu maximieren, d.h. maximiere c(S) = w (AS , BS ). Eine Teilmenge C ⊆ V und ein Knoten u definieren wir X w (u, C ) := we . Beachte, dass ApproxMaxCut(G , w ) dem Algorithmus Hopfield-2(G , w ) entspricht. e={u,v }∈E mit v ∈C 166 167 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Satz 10 Sei A, B das Ergebnis von ApproxMaxCut(G , w ) und sei A∗ , B ∗ eine optimale Lösung für das Maximum-Cut Problem. Dann gilt Beweis von Satz 10: Zur Vereinfachung der Notation definiere X we und wuv := w{u,v } wE := Es gilt: ◮ Für alle u ∈ A gilt X wuv v ∈A ≤ 2· wuv ◮ v ∈B (ansonsten bewegen wir u nach B) und für alle u ∈ B gilt X X wuv . wuv ≤ X wuv = {u,v }⊆B X u,v ∈B wuv ≤ X wuv = w (A, B) . u∈B,v ∈A Der Faktor 2 auf der rechten Seite resultiert davon, dass wir jede Kante zweimal erhalten. Wir addieren nun die beiden linken und rechten Seiten dieser Ungleichungen: X X 2· wuv + 2 · wuv ≤ 2 · w (A, B) . {u,v }⊆A v ∈A v ∈B u∈A,v ∈B bzw. := 0 . X u,v ∈A {u,v }⊆A e∈E wuv 9. Vorlesung, 19.12.2007 Beweis von Satz 10 (Teil 2): ◮ Wir bilden die Summe der beiden Seiten der obigen Ungleichungen über alle u ∈ A bzw. u ∈ B: X X X 2· wuv = wuv ≤ wuv = w (A, B) 2 · w (A, B) ≥ w (A∗ , B ∗ ) . und für {u, v } 6∈ E Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck {u,v }⊆B 168 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Proof of Theorem 10 (Part 3): ◮ Wir haben X X wuv + wuv {u,v }⊆A und somit X {u,v }⊆A ◮ wuv + {u,v }⊆B X {u,v }⊆B 169 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 Die Laufzeit von ApproxMaxCut: ◮ Da ApproxMaxCut äquivalent zu Hopfield-2 ist, ist auch die Laufzeit von ApproxMaxCut in O(|E | · W ). ◮ Ist W groß (ist die Länge der binären Kodierung linear in G ), dann ist die Laufzeit von ApproxMaxCut exponentiell in |V |. ◮ Im Folgenden wollen wir ApproxMaxCut so modifizieren, dass die Laufzeit in O(ε−1 · |E | · log W ) für ε > 0 ist. Wir erkaufen dieses über eine Approximationsgüte von 2 + ε.4 ≤ w (A, B) wuv + w (A, B) ≤ 2 · w (A, B) . Die linke Seite dieser Ungleichung entspricht der Summe über alle we über alle Kanten e in G . Wir erhalten w (A∗ , B ∗ ) ≤ wE ≤ 2 · w (A, B) . 4 Beachte: Eine solche Approximation können wir benutzen um eine Bounding Funktion zu generieren wie sie im Kapitel 5 diskutiert haben: Bestimme die Partition A, B und den Wert w (A, B). Dann ist (2 + ε) · w (A, B) eine obere Schranke für die optimale Lösung. 170 171 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 9. Vorlesung, 19.12.2007 Algorithmus ApproxMaxCut-2(G , w , ε) Eingabe: ungerichteter Graph G = (V , E ) mit Kantengewichtsfunktion w und Approximationsparameter ε > 0 Ergebnis: Kontenpartition A, B 1: A := ∅; B := V 2·ε 2: while (∃u ∈ A : w (u, B) + |V | · w (A, B) < w (u, A)) 2·ε 3: oder (∃u ∈ B : w (u, A) + |V | · w (A, B) < w (u, B)) do 4: sei u ein Knoten, der die Bedingung in Zeile 2 oder 3 erfüllt 5: if u ∈ A then A := A \ {u}; B := B ∪ {u} 6: else B := B \ {u}; A := A ∪ {u} enf if 7: end while 8: Return(A, B) Wir nenne eine Modifikation der Mengen A und B in der while-Schleife von ApproxMaxCut ein Big-Improvement-Flip, wenn für die resultierende Partition A′ , B ′ gilt w (A, B) + Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 2·ε · w (A, B) ≤ w (A′ , B ′ ) . |V | Wir betrachten nun nur noch Big-Improvement-Flips im modifizierten 2·ε Algorithmus, d.h. wir addieren |V | · w (A, B) auf jede linkte Seite einer Ungleichung in Zeile 2 von ApproxMaxCut. 172 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Satz 11 Sei A, B das Ergebnis von ApproxMaxCut(G , w , ε) und sei A∗ , B ∗ eine optimale Lösung für das Maximum-Cut Problem. Dann gilt ∗ Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Beweis von Satz 11 (Teil 2): ◮ Summieren wir beide Seiten dieser Ungleichungen über alle u ∈ A bzw. alle u ∈ B so erhalten wir ∗ (2 + ε) · w (A, B) ≥ w (A , B ) . Beweis von Satz 11: Der Beweis erfolgt analog zum Beweis von Satz 2·ε 10. Wir müssen nur den Term |V | · w (A, B) (bzw. Vielfache dieses Terms) auf der rechten Seite der Ungleichungen addieren. ◮ 173 2· X wuv = X wuv u,v ∈A {u,v }⊆A Für alle u ∈ A gilt X wuv v ∈A ≤ X 2·ε wuv · w (A, B) + |V | 2· v ∈B (ansonsten bewegen wir u nach B) und für alle u ∈ B gilt X v ∈B wuv ≤ X 2·ε wuv . · w (A, B) + |V | X {u,v }⊆B wuv = X u,v ∈B wuv ≤ 2 · ε · |A| · w (A, B) + |V | = 2 · ε · |A| · w (A, B) + w (A, B) |V | ≤ 2 · ε · |B| · w (A, B) + |V | = 2 · ε · |B| · w (A, B) + w (A, B) . |V | X wuv X wuv u∈A,v ∈B u∈B,v ∈A v ∈A 174 175 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Beweis von Satz 11 (Teil 3): ◮ Addieren wir jeweils die linken und die rechten Seiten dieser Ungleichungen, dann erhalten wir 2· X wuv +2· {u,v }⊆A X wuv ≤ wuv + X {u,v }⊆B bzw. X {u,v }⊆A ◮ und somit X {u,v }⊆A ◮ wuv + {u,v }⊆B X {u,v }⊆B Beweis von Satz 12: ◮ Jede Modifikation einer Permutation ändert w (A, B) um einen Faktor von mindestens (1 + |Vε | ). ◮ ≤ (1 + ε) · w (A, B) Da (1 + n1 )n ≥ 2 ist, erhalten wir wuv + w (A, B) ≤ (2 + ε) · w (A, B) . Die linke Seite dieser Ungleichung entspricht der Summe über alle we über alle Kanten e in G . Wir erhalten w (A∗ , B ∗ ) ≤ wE 9. Vorlesung, 19.12.2007 Satz 12 Die Laufzeit von ApproxMaxCut-2(G , w , ε) ist maximal O(ε−1 · |V | · |E | · log2 W ). 2 · ε · (|A| + |B|) ·w (A, B)+2·w (A, B) . |V | wuv Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck ≤ (2 + ε) · w (A, B) . ε 1+ |V | |V |/ε ≥ 2. |V | ε ◮ Wir verdoppeln somit das Gewicht der Partition in Schleifendurchläufen. ◮ Da das maximale Gewicht W ist, können wir das Gewicht einer Partition maximal log W mal verdoppeln. ◮ Folglich wird die while-Schleife maximal |V |·log W ε mal wiederholt. 176 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 177 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 7.4 Anwendung: Vertex Cover Aus der obigen Definition können wir die folgenden Punkte herleiten: ◮ Die Menge der möglichen Lösungen C ist die Menge aller Teilmengen S ⊆ V die eine Knotenüberdeckung von G darstellen. ◮ Die Kostenfunktion ist die Größe der Knotenüberdeckung, d.h. für alle S ∈ C gilt c(S) := |S|. Abschließend werden wir nun noch das Vertex Cover Problem untersuchen. Definition 14 [Vertex Cover Problem] ◮ Gegeben ist ein ungerichteter Graph G = (V , E ). Eine Teilmenge S ⊆ V ist ein Knotenüberdeckung für G wenn für alle Kanten {u, v } ∈ E gilt {u, v } ∩ S 6= ∅. ◮ Finde eine Teilmenge S ⊆ V minimaler Kardinalität, welche eine Knotenüberdeckung von G darstellt. ◮ Unter der Entscheidungsvariante für dieses Problem verstehen wir das folgende Problem: Gegeben G und eine Schranke β, entscheide, ob es eine Knotenüberdeckung S von G mit |S| ≤ β gibt. Die Entscheidungsvariante des Vertex Cover Problems ist N P-vollständig. Eine erste Analyse führt uns zu der folgenden Nachbarschaftsrelation: S ∼ S ′ , wenn S ′ aus S durch das Löschen oder Hinzufügen eines einzelnen Knotens generiert werden kann. Beobachtung 12 Jede Knotenüberdeckung S hat maximal |V | Nachbarn, i.e. |N(S)| ≤ |V |. ◮ Beobachtung 13 V ist eine Knotenüberdeckung für G = (V , E ). 178 179 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Wir wollen nun die Arbeitsweise von VertexCover(G ) auf einigen speziellen Graphen analysieren: ◮ Besitz G keine Kante, dann ist die optimale Lösung für das Vertex Cover Problem die leere Menge. Diese Lösung wird in |V | Iterationen der while-Schleife erreicht. ◮ Ist G der vollständige Graph, dann ist die optimale Lösung für das Vertex Cover Problem V \ {v } für alle v ∈ V . Da für alle v ∈ V N(V \ {v }) = V ist, erreicht unser Algorithmus diese Lösung mit nur einem Schleifendurchlauf. Benutzen wir die Notation der letzten Folie, dann erhalten wir den folgenden Local Search Algorithmus: Algorithmus VertexCover(G ) Eingabe: ungerichteter Graph G = (V , E ) Ergebnis: Knotenüberdeckung S für G 1: S := V 2: while ∃S ′ ∈ N(S) : c(S ′ ) < c(S) do 3: sei S ′ ∈ N(S) eine Knotenüberdeckung für G mit c(S ′ ) < c(S) 4: sei S := S ′ 5: end while 6: Return(S) ◮ Beobachtung 14 Innerhalb der while-Schleife wird niemals ein Knoten zur Menge S hinzugefügt. Erreicht der Algorithmus ein lokales Minimum S, so stoppt die Berechnung und das Minimum wird ausgegeben. Ist G der Sterngraph, dann ist es möglich, dass unser Algorithmus zunächst das Zentrum des Sterns löscht. Nach einem solchen Schritt können wir eine optimale Lösung nur noch um einen Faktor von |V | − 1 approximieren. z 180 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 181 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 7.5 Der Metropolis Algorithm und Simulated Annealing ◮ Aus unseren Beobachtungen auf Folie 181 können wir die folgenden Folgerungen ableiten: ◮ Für einige Probleme scheint es nötig zu sein, dass wir aufwendigere Nachbarschaftsrelationen benutzen, z.B. addiere oder lösche eine konstante Anzahl von Knoten. ◮ Für einige Probleme kann es hilfreich sein, einen Weg aus einem lokalen Optimum zu finden. Für ein Minimierungsproblem kann es besser sein zeitweise auch Lösungen mit höheren Kosten zu akzeptieren. Analog, für ein Maximierungsproblem kann es besser sein zeitweise auch Lösungen mit niedrigeren Kosten zu akzeptieren. Um aus einem lokalem Optimum heraus zu kommen wurde 1953 von Metropolis, Rosenbluth, Rosenbluth, Teller und Teller ein Verfahren vorgestellt, welches ein physikalisches System entsprechend den Prinzipien der statistischen Mechanik simuliert: ◮ ◮ ◮ 182 Die Wahrscheinlichkeit das wir ein physikalischen System in einem Zustand mit Energie E zu finden, ist proportional zur Gibbs-Boltzmann Funktion e −E /(kT ) wobei T > 0 die Temperatur und k > 0 eine Konstante ist. Ein solches System finden wir mit höherer Wahrscheinlichkeit in einem Zustand mit geringer Energie. Bei hohen Temperaturen ist die Wahrscheinlichkeit hoch, dass ein System in einen Zustand mit hoher Energie wechselt — zumindest ist diese Wahrscheinlichkeit höher als bei niedriger Temperatur. 183 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Metropolis, Rosenbluth, Rosenbluth, Teller und Teller stellten das folgende Verfahren vor, um eine Schritt für Schritt Simulation für ein System bei fester Temperatur T durchzuführen: ◮ Zu jedem Zeitpunkt t befindet sich das System im Zustand St . ◮ Um den Nachfolgezustand St+1 aus dem Zustand St zu bestimmen, verfahren wir wie folgt: ◮ ◮ ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 Algorithmus MinimizationMetropolis(I ) Eingabe: Instanz I Ergebnis: Lösung S 1: sei S eine initiale Lösung S0 2: seien k und T zwei Konstanten 3: while we continue do 4: wähle S ′ ∈ N(S) zufällig 5: if c(S ′ ) ≤ c(S) then 6: S := S ′ 7: else ′ 8: mit Wahrscheinlichkeit e −(c(S )−c(S))/(kT ) sei S := S ′ 9: und ansonsten belasse S unverändert 10: end if 11: end while 12: Return(S) Sei S ′ ein zufälliger zu St benachbarter Zustand. Ist E (S ′ ) < E (St ), dann wählen wir St+1 := S ′ . Ist E (S ′ ) ≥ E (St ), dann wählen wir St+1 := S ′ mit ′ Wahrscheinlichkeit e −(E (S )−E (S))/(kT ) , ansonsten ist St+1 := St . Sei C die (endliche) Menge der Zustände, die von einem festen initialen Zustand erreichbar sind. Diese Simulation besitzt die folgende Eigenschaft: P Satz 13 Sei Z = S∈C e −E (S)/(kT ) . Für einen Zustand S sei fS (t) der Anteil der ersten t Zustände, in denen sich das System im Zustand S befindet. Für t → ∞ ist mit einer Wahrscheinlichkeit, die gegen 1 geht, fS (t) gleich Z1 e −E (S)/(kT ) . ◮ 184 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 Kommentare: ◮ Der Metropolis Algorithmus stellt eine Methode dar, um einem lokalen Minimum zu entkommen. ◮ Betrachten wir zum Beispiel wieder das Vertex Cover Problem auf einem Sterngraphen, so erkennen wir, dass der Metropolis Algorithmus jedes lokale Minimum wieder schnell verläßt. ◮ Betrachten wir jedoch das Vertex Cover Problem auf einem Graphen ohne kanten, dann stellen wir fest, dass der Metropolis Algorithmus dazu tendiert Knoten zu der Lösung, die nur noch wenige Knoten besitzt, hinzuzufügen. ◮ Um dieses Problem zu lösen wollen wir den Einfluss und die Bedeutung der Temperatur T im Kontext von Optimierungsproblemen neu analysieren. ◮ Ist T hoch, dann durchläuft der Metropolis Algorithmus einen zufälligen Lauf durch den Graphen, der mehr oder weniger unabhängig von der Kostenfunktion ist. ◮ Ist T klein, dann werden die Lösungen auf dem Pfad immer besser. Da keine schlechtere Lösung akzeptiert wird, wird der Metropolis Algorithmus im ersten erreichten (lokalen) Optimum stecken bleiben. 185 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 9. Vorlesung, 19.12.2007 Simulated annealing ◮ Simulated Annealing simuliert den physikalische Prozess des langsamen Abkühlens eines erhitzten Systems. ◮ ◮ 186 Um die Form der Abkühlung zu implementieren benutzen wir eine sogenannte Abkühlungsschedule τ : N → R+ \ {0} um im Metropolis Algorithmus die Temperatur in jedem Schleifendurchlauf zu bestimmen. Die Auswirkungen der Abkühlungsschedule ist in vielen Fällen sehr aufwendig zu analysieren. Daher existieren oft nur Ergebnisse, die die Auswirkungen bei einer Folge von Versuchen beschreiben. 187 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 9. Vorlesung, 19.12.2007 Algorithmus MinimizationSimulatedAnnealing(I ) Eingabe: Instanz I Ergebnis: Lösung S 1: sei S eine initiale Lösung S0 2: sei k eine Konstante 3: sei t = 0 4: while we continue do 5: wähle ein zufällige Lösung S ′ ∈ N(S) 6: if c(S ′ ) ≤ c(S) then 7: S := S ′ 8: else ′ 9: mit Whrscheinlichkeit e −(c(S )−c(S))/(kτ (t)) sei S := S ′ 10: und ansonsten lasse S unverändert 11: end if 12: t := t + 1 13: end while 14: Return(S) Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 8 Das Flussproblem für Netzwerke 8.1 Netzwerke mit Kapazitätsbeschränkung Definition 15 Ein Netzwerk N = (V , E , γ, q, s) besteht aus ◮ ◮ ◮ einem gerichteten Graph G = (V , E ), einer Quelle q ∈ V und einer Senke s ∈ V sowie einer Kapazitätsfunktion γ : E → R+ 0. Es sei n := |V | und m := |E |. 188 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Definition 15 (Teil 2) Ein Fluss in N ist eine Funktion f : E → R+ 0 mit folgenden Eigenschaften: ◮ die Kapazitätsschranken der Kanten werden eingehalten, d.h. 10. Vorlesung, 9.1.2008 (q,v )∈E (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. 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 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Definition 15 (Teil 3) Als Wert eines Flusses definieren wir als X X W (f ) := f ((q, v )) = f ((u, s)) . ∀e ∈ E : f (e) ≤ γ(e) ◮ 189 (v ,w )∈E 190 191 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 4 u 5 5 3 w 4 4 7 q 6 6 s 6 6 w x 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. Beispiele für solche Transportprobleme sind: ◮ Lenkung von Verkehrsströmen (Eisenbahn, PKWs) oder ◮ 5 5 s 4 10. Vorlesung, 9.1.2008 Ein Fluss ist somit ein Transportproblem: v 3 4 7 q 4 u v Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck x ◮ Lenkung von Nachrichtenströmen (Telefonverkehr, Datenverkehr im Internet). Ein Netzwerk und ein Fluss mit dem Wert 3. 192 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Definition 16 Die Zerlegung der Kontenmenge V = Q ∪ S mit Q ∩ S = ∅ nennen wir q|s-Schnitt, falls q ∈ Q und s ∈ S ist. Der maximale Fluss ist beschränkt durch ◮ die Kapazität der Quelle (die Summe der Kapazitäten aller Kanten, die die Quelle verlassen) und Die Schnittkapazität eines q|s-Schnittes definieren wir als X γ(Q, S) := γ((u, v )) . die Kapazität der Senke (die Summe der Kapazitäten aller Kanten, die in der Senke enden). Es sei γmax := max γ(e) . ◮ (u,v )∈E , u∈Q, v ∈S 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. e∈E Da höchstens |V | − 1 Kanten die Quelle verlassen, ist der maximale Fluss ist beschränkt durch ◮ 193 Für einen Fluss f sei der Nettofluss von f über einen Schnitt (Q, S) definiert als X X f ((v , u)) ≤ γ(Q, S) . f ((u, v )) − f (Q, S) := |V | · γmax . u∈Q, v ∈S 194 u∈Q, v ∈S 195 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Lemma 9 Für jeden q|s-Schnitt (Q, S) gilt G γ(e1 ) f (Q, S) = W (f ) . γ(e2 ) Q S Beweis von Lemma 9 Der Beweis erfolgt per Induktion über die Mächtigkeit von Q. q ◮ s γ(er ) ◮ Für |Q| = 1, d.h. für Q = {q} folgt die Behauptung aus der Definition von W (f ). Sei |Q| > 1 und v ∈ Q mit v 6= q. Nach Voraussetzung gilt f (Q \ {v }, S ∪ {v }) = W (f ) . q|s-Schnitt (Q, S) mit Schnittkapazität γ(Q, S). 196 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 G ◮ Q ◮ S f1 10. Vorlesung, 9.1.2008 Sei f3 der Gesamtfluss aus v nach Q \ {v } und f4 der Gesamtfluss von v nach S. Die Flussbedingung garantiert f1 + f2 = f3 + f4 f4 s v f3 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Beweis von Lemma 9 (Teil 3) ◮ Sei f1 der Gesamtfluss nach v von Knoten aus Q \ {v } und f2 der Gesamtfluss nach v von Knoten aus S. Beweis von Lemma 9 (Teil 2) q 197 ◮ f2 oder f4 − f2 + f3 − f1 = 0. f (Q, S) lässt sich darstellen als f (Q, S) = f (Q \ {v }, S ∪ {v }) + f4 − f2 + f3 − f1 = f (Q \ {v }, S ∪ {v }) = W (f ) . 198 199 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Definition 17 Der Restgraphen G ′ = (V , E ′ ) für einen Fluss f definieren wir über die Kantenmenge E ′ , wobei: ◮ ◮ 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 ẽ = (v , u) in E ′ mit Kapazität f (e). 4 u 5 5 3 5−3=2 s v 3−3 5 Ein Weg von der Quelle zur Senke im Restgraphen heißt zunehmender Weg. =0 3 4 7 q 4 u v Definition 17 (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 ((v , u)) falls e = (u, v ), (v , u) ∈ E r (e) := und f ((v , u)) > 0. 4 7 q s 3 6 6 w 4 x 3 6 6−3=3 w 4 x 200 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 10. Vorlesung, 9.1.2008 201 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Lemma 10 Ist f ein Fluss in N und π ein zunehmender Weg in Nf , dann ist modify-flow(N, f , π) auch ein Fluss in N. 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 : Beweis von Lemma 10: Wir müssen zunächst zeigen, dass f ′ := modify-flow(N, f , π) Algorithmus modify-flow(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 ) 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) gilt. Ist e eine Vorwärtskante, dann gilt 0 ≤ f (e) ≤ f (e) + ρ ≤ f (e) + r (e) = γ(e) . Ist e eine Rückwärts Kante, dann gilt 0 = f (e) − f (e) ≤ f (e) − ρ ≤ f (e) ≤ γ(e) . 202 203 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Beweis von Lemma 10 (Teil 3): ◮ Beweis von Lemma 10 (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 )) (u,v )∈E ◮ ◮ Betreten wir v über eine Vorwärtskante (u ′ , v ) 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 (v ,w )∈E (u,v )∈E +f ′ ((u ′ , v )) + f ′ ((w ′ , v )) X f ((u, v )) − f ((u ′ , v )) − f ((w ′ , v )) = 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. (u,v )∈E +f ((u ′ , v )) + ρ + f ((w ′ , v )) − ρ X = f ((v , w )) . 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. (v ,w )∈E Die Kirchhoffsche Regel bleibt somit erfüllt. 204 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Beweis von Lemma 10 (Teil 4): ◮ 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 205 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 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: (v ,w )∈E Lemma 11 Führen wir modify-flow(N, f , π) für einen Fluss f und einen zunehmenden aus, so gilt für den resultierenden Fluss f ′ : +f ′ ((v , u ′ )) + f ′ ((v , w ′ )) X = f ((v , w )) − f ((v , u ′ )) − f ((v , w ′ )) W (f ) < W (f ′ ) . (v ,w )∈E +f ((v , u ′ )) − ρ + f ((v , w ′ )) + ρ X = f ((u, v )) . Existiert somit in REST(N, f ) ein zunehmender Weg, dann ist f kein maximaler Fluss. (u,v )∈E Die Kirchhoffsche Regel bleibt somit erfüllt. Wir haben somit bewiesen, dass f ′ ein Fluss ist, wenn f ein Fluss ist. 206 207 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Satz 14 [MAXFLOW-MINCUT-Theorem] Für jedes Netzwerk N gilt: Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Beweis von Satz 14 (Teil 2): Es verbleibt zu zeigen, dass MAXFLOW(N) = MINCUT(N) . MAXFLOW(N) ≥ MINCUT(N) . Beweis von Satz 14: Nach Lemma 9 gilt für einen maximalen Fluss f und für jeden q|s-Schnitt (Q, S) 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. MAXFLOW(N) = W (f ) = f (Q, S) ≤ γ(Q, S) . Insbesondere gilt für den minimalen q|s-Schnitt (Q, S) ◮ MAXFLOW(N) ≤ γ(Q, S) = MINCUT(N) . ◮ Sei Q die Menge der Knoten, die von q aus in G ′ erreichbar sind, und sei S := V \ Q. (Q, S) ist ein q|s-Schnitt. 208 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 10. Vorlesung, 9.1.2008 Beweis von Satz 14 (Teil 3): Insbesondere gilt für den q|s-Schnitt (Q, S): ◮ Es gibt keine Vorwärtskanten von Q nach S in G ′ . Somit gilt für jede Kante e ∈ Q × S: Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 10. Vorlesung, 9.1.2008 Aus den bisher angestellten Beobachtungen (Lemma 11 und Satz 14) können wir den folgenden Algorithmus für das MAXFLOW-Problem herleiten 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-flow(N, f , π) 5: end while 6: Return(f ) f (e) = γ(e) . ◮ 209 Es gibt keine Rückwärtskanten von Q nach S in G ′ . Somit gilt für jede Kante e ∈ S × Q: f (e) = 0 . Wir erhalten MINCUT(N) ≤ γ(Q, S) = f (Q, S) = W (f ) = MAXFLOW(N) . 210 211 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 11. Vorlesung, 16.1.2008 Beweis von Lemma 12 (Teil 2): 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: ◮ Lemma 12 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 12: Der Beweis erfolgt über eine Induktion über die Anzahl t der ausgeführten while-Schleifen-Durchläufe: ◮ ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Für t = 0 ist f (e) = 0 für alle Kanten e ∈ E . Die Aussage des Lemmas ist somit erfüllt. 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. 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-flow(N, f , π) wieder ein Fluss ist. 212 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 11. Vorlesung, 16.1.2008 213 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 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: Aus Lemma 11 und Lemma 12 folgt: ◮ 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 15 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. a M M 1 q M s M b 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. 214 215 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Bemerkungen ◮ 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 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Als Netzwerk wählen wir: α v1 v3 β q 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 α v4 α v2 α α α α β 2 + β = 1 und somit β k+2 = β k − β k+1 v6 β α √ 1 α α α α s v5 α Wir betrachten nun die Rest Kapazitäten des Netzwerks, nach dem wir verschiedene Pfade in den Fluss aufgenommen haben. für alle k ≥ 2. 216 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 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: 1. 2. 3. 4. 5. 6. 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 217 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Nach ℓ Runden ist der Fluss Erhöhung β 1+3k β 2+3k β 2+3k β 3+3k β 3+3k β 4+3k 2· Diese 5 Pfade erhöhen den Fluss um ℓ X β 1+3i + β 2+3i + β 3+3i i:=0 3ℓ+4 X − β + β 1+3(ℓ+1) βi − β = 2· ≤ 2 − β − 2 = 2, 618 . . . ≤ 2 · α . 1−β i:=1 β 1+3k + 2 · (β 2+3k + β 3+3k ) + β 1+3(k+1) . 218 219 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 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. Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Pfad 2 erhöht den Fluss um β 2 : q − v2 − v1 − v3 − v6 − v5 − s . Pfad 1 erhöht den Fluss um β: v1 1 q − v1 − v2 − v3 − v6 − s . v1 q β β q 0 β β2 β3 v6 v4 β2 α v4 v6 β β2 v3 0 v3 v2 1 + β3 s v5 s v2 v5 220 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Pfad 3 erhöht den Fluss um β 2 : β 0 β q − v2 − v1 − v4 − v6 − v3 − s . v1 v4 β3 v3 1 − β3 v6 3 β2 v2 11. Vorlesung, 16.1.2008 0 v3 1 q Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Pfad 4 erhöht den Fluss um β 3 : q − v1 − v2 − v4 − v6 − s . v1 221 v6 0 β2 1 + β3 q β3 β2 v4 β2 s v2 v5 222 β 1 + β3 s v5 223 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Pfad 5 erhöht den Fluss um β 3 : Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Pfad 6 erhöht den Fluss um β 4 : q − v1 − v2 − v5 − v6 − s . v1 q − v1 − v2 − v5 − v6 − v4 − s . β3 v3 1 − β3 v1 1 − β3 v6 β 0 q 0 β v4 β4 v2 β3 v3 β 1 + 2β 3 q β4 β − β4 v4 β − β 4 0 s v2 v5 v6 4 1+β s v5 224 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Effiziente Wahl der Flusserhöhungen: Um die Laufzeitschranke aus Satz 10 zu verbessern können wir verschiedene Ansätze verfolgen: ◮ Wähle unter allen zunehmenden Wegen einen Weg mit maximaler Flusserhöhung. Es kann gezeigt werden, dass: ◮ ◮ ◮ ◮ 225 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 11. Vorlesung, 16.1.2008 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: ◮ 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 ). ◮ ◮ ◮ ◮ 226 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 ). 227 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 11. Vorlesung, 16.1.2008 Betrachte alle kürzesten zunehmenden Wegen gleichzeitig und vergrößere den Fluss entlang all dieser Wege. Es kann gezeigt werden, dass: ◮ ◮ ◮ ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 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. 11. Vorlesung, 16.1.2008 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 ). 228 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 In den letzten Jahrzehnten wurden verschieden Algorithmen zur Lösung des MAXFLOW-Problems vorgestellt: ◮ ◮ ◮ ◮ ◮ ◮ ◮ ◮ ◮ ◮ ◮ ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 11. Vorlesung, 16.1.2008 Weitere Algorithmen: ◮ 1985 Goldberg: O(n3 ) ◮ 1986 Goldberg, Tarjan: O(n · m · log(n2 /m)) Ford, Fulkerson: O(n · m · γmax ) Edmonds, Karp: O(n · m2 ) Dinic: O(n2 · m) Karzanov: O(n3 ) √ 1977 Cherkasky: O(n2 · m) 1978 Malhotra, Kumar, Maheshwari: O(n3 ) 1980 Galil: O(n5/3 · m2/3 ) 1956 1972 1970 1974 1978 1982 1983 1984 229 ◮ ◮ ◮ 1986 Bertsekas: O(n3 ) √ 1987 Cheriyan, Maheshwari: O(n2 · m) 1987 Ahuja, Orlin: O(n · m + n2 · log γmax ) 1988 Ahuja, Orlin, Tarjan: O(n · m + n2 · log γmax / log log γmax ) ◮ 1989 Cheriyan, Hagerup: O(min{n · m · log n, n · m + n2 · log2 n}) Probabilistische Algorithmen und deren erwartete Laufzeit: ◮ 1994 King, Rao, Tarjan: O((n · m log n)/ log m ) für m ≥ 2n log n n·log n ◮ Shiloach, 1980 Galil, Naamand: O(n · m · log2 n) Shiloach, Vishkin: O(n3 ) Sleator, Tarjan: O(n · m · log n) Tarjan: O(n3 ) ◮ 1996 Cheriyan, Hagerup, Mehlhorn: O(n3 / log n) 1985 Gabow: O(n · m · log γmax ) 230 231 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 11. Vorlesung, 16.1.2008 8.2 Das Transport-Problem Definition 18 [Transport-Problem] Gegeben sind zwei Folgen α1 , . . . , αn ∈ N und β1 , . . . , βm ∈ N mit n X αi = m X 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. βi . i=1 i=1 Gesucht sind n · m Werte xi,j ∈ N mit i ∈ [1..n], j ∈ [1..m], so dass ∀i ∈ [1..n] : m X xi,j = αi j=1 und ∀i ∈ [1..m] : n X ◮ Produzent Pi liefert xi,j Stücke der Wahre an den Kunden Kj . xi,j = βj . i=1 232 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 233 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 11. Vorlesung, 16.1.2008 Das Transport-Problem kann mit Hilfe eines Netzwerks und eines MAXFLOW-Problems dargestellt werden: ◮ Wir betrachten ein Netzwerk mit n + m + 2 Knoten {q, s, v1 , . . . , vn , u1 , . . . , um } und n + m + n · m Kanten E = v1 σ ◮ σ ◮ u1 u2 σ vn γ((vi , uj )) β2 σ αn Als Gewichtsfunktion definieren wir β1 σ v2 q ◮ σ σ α1 α2 Wir erkennen: {(q, vi )|1 ≤ i ≤ n} ∪ {(uj , s)|1 ≤ j ≤ m} ∪ {(vi , uj )|1 ≤ i ≤ n, 1 ≤ j ≤ m} . βm σ n X αi i=1 s σ := Das MAXFLOW-Problem für die so generierte Instanz besitzt immer Pn eine ganzzahlige Lösung f mit W (f ) = i=1 αi . Der Flus über die Kanten (vi , ui ) entspricht einer Lösung für das Transport-Problem mit xi,j := f ((vi , uj )). γ((q, vi )) γ((uj , s)) := αi := βj um für alle i ∈ [1..n] und j ∈ [1..m]. 234 235 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 9 Lineare Programmierung Optimierungsprobleme wurden auf Folie 101 definiert: ◮ Eine Instanz eines Optimierungsproblems ist ein Paar (F , f ) wobei ◮ ◮ F F eine Menge von möglichen Lösungen und f : F → R eine Kostenfunktion dieser Lösungen abgibt. ◮ ∈ Nm×n | m X ∀i ∈ [1..n] : αi ≤ xi,j := { x = (xi,j )i∈[1..n], Eine Lösung x ∈ F nennen wir global optimal oder kurz optimal, wenn für alle y ∈ F gilt j∈[1..m] ∀j ∈ [1..m] : βj ≤ f (x) ≥ f (y ) . ◮ 11. Vorlesung, 16.1.2008 Die Definition des Transport-Problem gibt uns ein System von Gleichungen oder Ungleichungen vor und kann recht einfach als ein Optimierungsproblem (Maximierungsproblem) dargestellt werden: 9.1 Was ist lineare Programmierung ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck f (x) Gesucht ist eine optimale Lösung bezüglich der Kostenfunktion! Ein Optimierungsproblem ist eine Menge von Instanz eines Optimierungsproblems. := 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. 236 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 ◮ ◮ Für alle i ∈ [1..m] die Bedingung 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 A = ... am,1 11. Vorlesung, 16.1.2008 n X bm Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Definition 19 (Teil 2) Einen Vektor ~x nennen wir eine zulässige Lösung des Optimierungsproblems, falls: Definition 19 [Lineares Optimierungsproblem (LP)] Ein lineares Optimierungsproblem über einem geordneten Ring R ist folgendermaßen spezifiziert: ◮ Gegeben sind zwei Vektoren b1 c1 ~c = ... ∈ R n und ~b = ... ∈ R m . cn 237 . . . a1,n .. ∈ R m×n . .. . . . . . 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. 238 239 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 11. Vorlesung, 16.1.2008 Beispiel: Optimale Produktion ◮ Definition 19 (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 ◮ reelen linearen Programmen (RLP) mit R = R. ◮ 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. ◮ ◮ ◮ 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 ◮ 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. 240 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 11. Vorlesung, 16.1.2008 Beschränkungen für die Produktion: ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 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 11. Vorlesung, 16.1.2008 Beschränkungen für die Produktion (Teil 2): ◮ ◮ 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 und x2 ≥ 500 . Wird die Maschine weniger als 4200 Minuten im Monat eingesetzt, dann besteht die Gefahr, dass sie Schaden nimmt. Um dieses zu verhindern fordern wir 4 · x1 + 2 · x2 ≥ 4200 . 3 · x1 ≤ 9000 . ◮ ◮ Für 200 Einheiten von P1 und für 500 Einheiten von P2 existieren bereits feste Verträge. Somit gilt x1 ≥ 200 4 · x1 + 2 · x2 ≤ 14400 . ◮ 241 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 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 . 5 · x2 ≤ 20000 . 242 243 - - * * * - * - * - * - * * - - * * - * - * - - * - * - * * * * - * - * - * * - * - - * * - * - * - - - * - * * * * + * * * * * * * * * * * * * * * * * * * * * * * + + + + * * * * * * * * x2 )( * )( )( * )( )( )( )( * )( )( * * * , - * , , - * * , , - * * , , - * , , - * , , - * * , , - * * , - * , - * , - , - + + + + + + + * * * * * * * * , , - * , , - * , , - * , , - * , , - * , - , , - * , , - * , , - * , , - * * * * * * * * * * * + + + + + + + + + + - - * - , - , - * * , - * , - * , - * , - * , - * , - * , - * , - - * , - * , - * * * * * * * * * + + + + + + + + + - * - * - - * - * * - - - * * - * , , , , , , , , , , , , , , , , , - - - - - - - - - * * * * * , - , , - * * * , , - * , - * , - * , - * , - * , - , - * , - , - * , - * + , - * * * * * * * * + + + + + + + + - * " - * * - * , , - , , - * , , - * , - , - , - , - , - , - , - * * + + * * * * * * * * * * * * + + + + + + + + + + + + * * * * * * * * * * * * * * * * * * * + * * * * * * * * * * * * + + + + + + + + + + * * * * * * * * * * * * * * * * * * * * * * * + + + + + + + + + + + * * * * * * * * * * * * * * * )( * )( )( * )( )( )( )( )( )( )( )( )( & & * + & - & & * ' - - & & & * & & * & & * & ' ' + ' ' + ' ' + ' - - * & - , , - - * & - , - * + & , , - * + & * & & * & & ' + ' ' + ' ' , , - * + & & ' ' - , - & & ' ' , - & & * & & * & ' ' + ' ' + ' * * * * * * + + + + + + & * & & * & & ' + ' & & * + & & * + * & & * * ' * & & * ' * & & & * & & * & & * & & * & & * & ' ' + ' ' + ' ' + ' ' + ' ' + ' * * * * * , , - - * , - & & * & & * + ' ' + - , - * + & & ' ' & & * & ' & * & + ' ' *)( & & & * + ' & & * + & & * & & * ' ' + ' ' + * * * * * * & & * & & * & & ' ' + ' ' + ' ' * & & + ' ' & & ' ' * + + * & + ' *)( & * & ' + ' *)( )( & * & ' + ' *)( )( & & * * & ' & * & ' + ' ' * & & * & + ' *)( )( & * & ' + ' *)( )( & & & & * & ' + ' & & * & + ' ' * & * & + ' & & & * & ' + ' * & & * & & * & & ' ' + ' ' + ' ' ' & * & ' + ' *)( & * & ' + ' *)( )( * * * & & * & & * & & * & & * & & * & & * & & * & & * & & * & & * & & * & & * & & * & & * + + + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + * * * * * * * * * * * * * * * * * + + + + + + + + + + + + + + + + + & ! & * & ' + ' & * & + ' ' *)( )( *)( & & * & & ' + ' )( + + & * ' + ' & * ' + ' ' * * * + + + + ! * + )( + + & * ' + ' * * + * + & * + ' * + * * + + * + )( & * + * + + & * ' + & * + * + * * + + & ' ! * + * + ' * & ' ! * + * + , , & * + + & * ' + ! * + * + & ' & ' * + * + * + & ' * + & * ' + * + * + * + * + & * ' + & ' ! & ' ' & ' * + & * ' + * & * + ' ' * + & * ' + & *)( + & * + & ' - & ' ' + + )( + & ' * + & * ' + - * * + + ! ' *)( )( + & ' * + + ' *)( )( & * ' + ' + ' * + ' *)( + & * * + ' ' * + )( + + & * ' + ' * + + ' *)( + & * ' + ' + + )( + + + & & ' * + * * + ' & ' * + ! * + * & * ' + ! * + + & ' * + * + + + + & * * * + * + , - & ' * * + + + + + + + * * + ' + ! + & ' , , - & ' * + , - + * * + - & ' * ' & & ' , - & * ! & ' , * + & * ' + , - ' + ! & * ' + - & ' * & * & ' + , - , , * + & * ' + , + + & * ' + * - & ' * ' * * + & ' + * + & * ' + , - , , , , , - ' + ' ' ' ' * + * * & ' & ' * + & ' ! + )( & * + & * ' + * + ! * + & ' ' * & ' * + & ' ! + ' *)( )( & * + + & * ' + ' * + & ' * + , - ' , * + & * ' + , + * + + + & ' & & + & ' - & * + - & ' + * + ' ' & & ' & & ' & * + ' ' ' & & ' ' & * ' * + & * ' + )( & ' ' + & & & ' * ' ' & * ' + & ' , - * + & * ' + & + & * & & ' & ' , - & ' ! * * ' + ' & * ' + * + & * ' + , - * + & * ! & ' + & * & ' , - * + ' + * , + + + + * + - & ' * * ' + * + & ' , - + + & ' & * , - * , , - & , * + , - + & * *)( - & ' , - * ' + + * + & + * + * ' & * & ' + * ' + , - * + & * , - * + , * + ' + ' , , - , , - * + & ' * + & ' + , - * ' )( - & * ' + , - , , - * + & ' * , - ' ! + & & , - + & * ' + - & * ' + , - , , - * & ' * ' ' - + & ' * & - * + & ' , - , , , , , - * & ' + ' ! & ' * + , * + & * ! , - & ' + ' & * * + * + , - + + , - & ' & * & ' ' , * + & ' ' + & * + , - & * ' + & *)( & ' ' , - * + & ' ' + & * + - & * ' + , * * + * + ! & * + * + , - * + ' * & * & ' , - * + * + + ! , , - * + ' + & ' , - + * ! * + , * + + & & * & * ' + , - * , - & ' ' + & ' , , - * + * + , - * + ' & )( , - & ' & & * ' + ' , - * + * + * + , - * + ' & * ' , - & * ' + )( & * + , - * + * + , - * ' + & * , - + ' ' - * + * + , - * ' * * + * , & * + 5000 , - * " 4000 , - - 6000 x1 , - , , - + " # , - , - + * , - , - ' + * , , - & * - - * , - ' * , * + + , - + + + + + + + - * , - * & * ' + , - , , * + + , - + & ' - * + + , - & * * + & * ' + * + * ! , - ' + ' * + + + + ' + ' + + ' ' ' ' ' ' * + & ' - + * , - + + + * + * * , , , , , , - ! + + + , + * * + + + - & * , - * + * * * + , ' + , - - * , , - * , * + + , - * + , * + + - + & ' * + ' + - & * ' + , - - * , - ! ! , , , - * & ' * - * + + * + , * , * - , + & * ' + , + * + - * & ' * + * + + & ' - * , , , , , - * + + , - , * , , , * & ' * + + & ' + & ' ' * , , * + & ' ' , - , , * + & * ' + ' * , , - * + & * ' + , - , , , , , - , - * + , - , * * , * , - - * + + , - + + + , - * * + - + * + - * + * * + + , - , & * - & ' - + + - , - , - ' + , - * + & ' - - * , , , , , , * * * , , * * + - , + + , - * * - - , - , - , + + ! , * + + - * + * , * * + * , - * + , + + , - + , * + * + , - , + * * , - ! * , * * ! + , - * + , + ! , * + * ' - * + * + * , - , - , + * , + + , - * + * + + , - * * , , , , * + + & , - + - * * + + + ' * + , - * * + , - , * + , - + + + + + * + , - * - , * + ! * * , - ' + ' + ' , , * & * * + ' ' , , - * , - + - * * + + , - - * + , - , - * ! , * + , * + * * , , - + * , - * + + + , - * , * + + , * + & + * + & ' ' , * + , - * * - * , - , - , , , * + + * + * + , * + ' ' * )( * + * + & * + , - & * + * + * + & ' , - * + * + , * + ' + + * )( + * + * + , - & + * )( + * + * + & ' , - * + * + * + , * + ' & * + * )( + * + * + + * + * )( + * + * + & * ' + , - , - & * * + * + * )( + * + * + + * + * )( + * + * + + * + * )( + * + * + + * + * )( + * + * + + * + * )( + + * + " + * + + + * + " # # + + + + + + " & ' , - * * + * + , * + ' + * * + , - & + + + + + + + + + + + + & * ' + , - * + * + , - * + * * + * + * , - + + * + + * + + , - * ' ' * + + + + + , - & * + + + + * + + + + + + + + + + + + + * , + + * + , - + + * + , - - * + + , - + + , - - * * , + * , - - * + , - , - , * * + , * , * + ! + + , - * + + * , - - , - , + + + , - - - * , - , * * * , - * + + , , + + - , - , * + , - , - * + + , - ' * - * , - , + - , , * + + , - & * , - - * + , - - * + + * + * + - * , - * + * , - , * + + * + * + - * , - , , * + + * + * + - * , - , , * + + * + * + - * , - , , * + + * + * + - * , - , , * + + * + * + + - * , - , , * + + * + + + + + - * + * , , * * + * , , + * + - , - * + * + , , - * , * + + + + " , , , , , , , - , , , , * + + , - + * + - * + , - ' * + * + * , - - * + * + - , , , , * + + , - , , * + * - * , - & * , - - * + + , * + , * + + - , , , , , , - * - - * - , - , * * , - , - * + + + * + , , + , * + * + - , - + + + + , , * , - - * , + + , - , , * + + , * + * * - * , - - , , * + + , * + , ! * - , + ! , * + * - * , * + * , - * + + + , - + , * + * * , - * + , - * * + , * + * + + + * , - * + * + , - * + * * * , - + * + + * + , - * + * + , - , - - + * + + , * * + * + + , * , - , - + , * + + - * * , - * + + , - * + , - * * , , , , , , - ! ! - + + + ! , - , * * + + * , - * + * , * * + * * , - * + , - , * + + + , * + + * + + , * - * * , - * + * * , - - * , - , - , + + + , - ! ! , * + + , - * + + , - * - * , - * * , * + * + - * , - + * , %$ , - + , * + * - , , - * + + , - * + * , - - * , - , , - * + + , - * + , - - * , - , , - * + + , - + * + , - , - * * + + + + , * + + - , - - * + + , - + + + * + , * + + , * + * + * + , * + + , * + + * * + , * + + , * , - * , - * * * , - , * + - , , , , , , - - + , * + + , - , + + + , - * - , + * , - * , - , * * * , * + + , - , + + , * + , - * - * * + * + , * + + , * + + , - * + * + , * + + , * , - * + * + , * + + , * + + , - * + * + , * + + + * , - * + * + , * + + , * + * + + , * * + + + + + * + , - , - , * * + * , - , %$ + , * - * * + ! * + * * + + , * + + , - , + + + + , - - * + * + , - + , - - * + * + + , - , * + + * + , , , , * + * + + , , * + + + * + , , , , , , , - * * + , - , - + * + - - * + + + + , - - * , , , , , , , , - - * , - , * + * , * + + + * + , + + , - * * + * + - - , - + + , * + + * + - * * * , - , * + , - , * + + , - , + + + , * - * * * , - , * + , - , * + + , - , + + + , * + + - * * + + , * * + , - , - , + + + + , * * + + , * + + , * + - * , - , , , * + + , * + + , * + - * , - , , * + + , * + + , * + - * , - , , * + + , * + + , * + - * , - , , * + + , * + + , * + + - * , - , , * + + , * + + , * , - + + , - * + , * , , , - * * + , * + - + * + , - , * + * * + - - * + + + , - , , , , , , , - , - , + * + - , * + + + + + + + + + + + , * + + + + + + + + + + + + , - * + , - , - , , * + + * + * , - * + , * + * , * + + * * , - + * , - * + * + , * + * - & & * & & * & & * & & * & ' ' + ' ' + ' ' + ' ' + ' * * * * + + + + 247 In diesem Fall müssen wir die obige Betrachtungen sinngemäß anpassen. ◮ ◮ ◮ 246 11. Vorlesung, 16.1.2008 Andreas Jakoby Universität zu Lübeck 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. Algorithmik WS 07/08 Algorithmik WS 07/08 11. Vorlesung, 16.1.2008 245 244 ◮ 2000 ◮ * + , * + , * + * * * , - + + + + , * + + + + , - * + , - , * + + + , * + + , * - * , - , - * + , , - * + + , * + + , * - * , - , * , * + + , * + + , * - * , - , , * + + , * + + + + + + + + , * - * , - , , * + + , * + * , # , - - * , - , , * + + , * + + , )( * + , * - * , - , , * + + , * + * # * + , - - * , - , , * + + , * + + * * * + * + * + , * - * , - , , * + + , * + * * * * + * + , - - * , - , , * + + , * + + + + * + * + * + , * - * , - , , * + + , * + * + + * + * + * + , - - * , - , , * + + , * + + " )( * + * + * + * + * + , * - * , - , , * + + , * + * " + * + * + * + * + , - - * , - , , * + + , * + + # * )( + * + * + * * + , - - * , - , , * + + , * + * , * * )( + * + * + * * - * , - , , * + + , * + + - - * , - , , * + + , * + , - - * , - , , * + + , - + * + + * )( + * + * + + * - * * + " + * + + , - * + * + * )( + * + * - , , , , , - , + * + - , * + * " * , - + + + + , * + + # + , - * # + * + * )( + + * + + + * + + + * + + + + + + + , * + + " * + * , - * # * + * , * + + * * * + , - * + + + * * , * + * " + + + + + + + , - + + + + , * + + # + , - * " * + , * + + " * + , - * # * + , * + + # * + , - * + + * * + , * + * + + * + , - + + + + , * + + " * * + * + , - * " + * + + + + + * , * + + " + + + + + + + + , - * # + , * + + " * + , - * + # * + , * + * * * * + , - + + + + , * + + * + * + , - * # * + + + + * , * + + + + + + + * + + , - * " * , * + + # + , - * # * , * + + + - , - * * - , - , * + + , * + - + + + + + , - * + , - , * + + , + * , * , * * + + , ! * * * * * ! , * + * + + %$ , * + + * , - * , - , * + %$ , - - , - * + + - * %$ , * , , - * * * + + %$ , - * + + - * %$ , - , , * + + %$ * + + , * + + + , - * + + , * + , * + " - , - * " - , * * + , * + , , * - , - * # * * * + , * + # + , , - , - * # + * - * + , * + , , , - + + , , * - + * + - * - , , * + + , , * - + + + + - * + , , * - , , * - * + , , * - , , + * + , , * * + + + + , , , , , , , , - - , - * * - * + , * + " * * + , - * * + * + * + , * + , , - * + , - * * * * + * + * + , * + + + - + * + , - * , , , , , * + + * + * + , * + " * , - * # + * + , * + # * , - * # + * + , * + + - , - * " , * + , * + , - + + , , , , * + * , - * , * * + , * + * + + , - + * * - * + , * - * , ! * + + * , - * + + %$ , - , , , , ! ! %$ , - + + , - * * + * + + , * * + * , - * , - * + %$ , * + * * , - + , * + + + %$ , - + , , , + + + , , * + + * + , * - * %$ , * + , - ! ! , * + + %$ , - * " * - , - - * %$ , * + * + + * , * , * + + , - , , * + + %$ , - + + # + , , * + + , , , , * + - * + , * - * %$ , * , , * + + %$ , - + * + + * + , * + + + , - - , , , * + + , - - * %$ , * , , * + + %$ , - + + # + * + + , , * - + + * + , , * - * + , * - * %$ , * , , * + + %$ , - + * * - , - - * %$ , * , , * + + %$ , - + + * - * + , * - * %$ , * , , * + + %$ , - + * , , , - - * %$ , * , , * + + %$ , - + + " - * + , * - * %$ , * , , * + + %$ , - + * " * , - - * %$ , * , , * + + %$ , - + + + * * + , * - * %$ , * , , * + + %$ , - + * * + , - - * %$ , * , , * + + %$ , - + + * + , * + , * - * %$ , * , , * + + %$ , - + * " - , - - * %$ , * , , * + + %$ , - + + " - , * * + , * - * %$ , * , , * + + %$ , - + * , , * - , - - * %$ , * , , * + + %$ , - + + # * - * + , * - * %$ , * , , * + + %$ , - + * # + - , - - * %$ , * , , * + + %$ , - + + # + , , * - * + , - - * %$ , * , , * + + %$ , - + * , , , - * - + * + , , * + + + , , * - + + + + , - - * - , , * + + , , * - , , * - * + , , * - , , - * + , , * - + * + , , * * + + + + , , , , , , , , - * * - * %$ , * , , * + + %$ , - + + - * %$ , * , , * + + %$ , - + - - * %$ , * , , * + + %$ , - , - - * %$ , - , , * + + %$ * + * - - * , + " - * + + %$ , * * + - , , , , , - - + + * + - * + + * , + * ! , * + * + , , - * + * , - * + * * , - + , * + + + , * + * + + * * + * + , - * + , , , - + + * + * + , * + * + + + + , , , , * + * + , - * + " * * + , * + * + # + , - * + # * * + , * + * + # + , - * + + + + * , - , * + , - - * , + * * , - * + + , * + , ! * * - * + , * + , + ! , * + - * , * + * , - * + + + , - + , * + + + - , - , - * " , * + , * + * + , * + + , - , - , - * , * * + , * + * + , * + + + * * , - , - - + * * * + * + , * + * + , * + * , , , , , , - ! ! + * + , - , - , - + + ! , - * + + + + , , * + - , - * + , * + * + , * + * + + + " , * * + , - , - * * * * + * * * * * + * + * + + + , - + * + + ! + , * + * " * - * + , * + * + , * + - * , - + ! , * + + , * + + # + + , - , - - * , - , , * + + , * + * + + * * # + , , - * + , * + * + , * + - * , - , , * + + , * + * + * + , , , - * * - + , , * + + + , , + + , , * - - * * - , , * + + , , + + , , * + - * * - , , * + + , , * + + , - * + , , - + - * + * * - , , , * + + , , - * , - * , - - * , - , , * + + , * + + , + - * , - , , * + + , * + * * - * , - , , , - * + + , * + + + , * + - * , - * * ◮ * - , , , , , * * , - - * + + , * + + ! * * - * + , * + - , , , , - - * + + + ! ! * * + * * * + + * * + + * + * + * + + + * + + * + * + + " * * , - * + * + * + + , - * + * + * + * , * + * + * + * - * + * + * + * * * + * + * + * , - * + * * * * * * + + * + , * + * + + * + + * * + * * * ! ! + * + + + + ! * + * + + , * * + * + + + * + + + * + * + + + + * + * + + , - * + * + + * , - - , * * + * + * , - + , * * + + + + + + * + + # - * * , - + * + * , - * + + , * + + , * , - * + * * , , * + + * , - * + , * + + , * + + , - * + * + * * + * * + * + * * * * + * * * + * + * + + + * + * + , - * + * + * + , , , - * * , - * + , * + + , * , - - * * + * + * + * , , , * + , - * + * + * + , * + * + * + + ! ! ◮ + + * , - * + * , - * + , * + + , * + + , - - * , - * + * * + * * * , , * + + , * + * + + + * * * + + , * + * + + , - , , * + * + - - , , * + + * , - * + , * + + , * , - - * , - , , * + + , * + * + * + * * + ! * + * * + + + * + * * * + + * + * * * + + * * + * * + + + + + * + + * + * * + * * ! ! + * + * + + " * + - - + * , - * + , * + + , * + + , - - * , - , , * + + , * + * + * + * + * " + , , * - , , , , , * - + + + + + , , * , - * + , * + + , * , - - * , - , , * + + , * + * + * + * + + # * * + , * - * , - , , * + + , * + * + * + * * # + * , - , + + , * + + + - * , - * + , * + + , * , - - * , - , , * + + , * + * + * + + + " , * + , * - * , - , , * + + , * + * + * * + * , - * * , - , + + , * + , * + * + , * - * , - , , * + + , * + * + + * + + + * - * - * - + + * + , + + , - , , , - * , - + - , - * - - * + , , * + * , - * + , * + , , * + + - - * , - * + , , * + * + , * + * * - , - - * , - , , * + + , * + * * + * " * * + , - - * , - , , * + + , * + * + + # + - , * + , , * - * * + - * , - , , * + + , * + + - - * , - , , * + + , * + , - - * , - , , * + + , * + - - * # * * + + , + # + - , , , , , - - * + * * + + * + + + + * * + * * + + * * + * + + * * + + + + ! * + * + + * * ! ! + * + * + + * + * + * + + * + * + " , * + * + * + , - * + * + * + , * * + * + * + + * * * + * + * + * + * + * + * + * + * + * + * + + + , - * + * + * + * + * + 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 * * - * * - , , * + + , , * + + , - * + , , - , * + * * + - - - , , * + + , - * + * * + * * + * + * ◮ - , - * + + * + * + * + * 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. Solche Einschränkungen nennen wir redundant. * - , , , , , * * * + * + * + * * * + * + * + * + * + + - * + * + * + * + * + * + * + " - * + * + , * * * + * + * + + * + * + # - * * + + + + + + * + * + " , * + + * , - * * + * + , , , , - * + + * + * + * + + - * + + , + * + + - - , , * + * + - - , , * + + * + * + " * , , - + * + + + + + + * + * + " + * + * + * - * + * + # * * + * + # + , - * - , , , , , * - + + + + + , , - * + + + + + + * + * + * + * * + * ! ! * + + * + * , , * + * + * " - * * + * + * , * + * + * + * + * - * * + * + * + + * + * + * + * %$ , , - * - , * + - - * + , , - * * , + + , - * + - * + , , * + - - * + , , * - * , , * + , , - + * + * + * " * * + * + * # + * + * + * # * * + * + * # + * + * + * + - * + * + * , , * + * + * " - * + * + * * - %$ * + * + * , * * + * + ! * + + ! * + * + ◮ * * - * + * ! ! * + * + * + * * ! ! ! * + * + * + * + * + * + * + + * + * + * + * + + * + * + * * * * + * + * + + + * + * + * + + + , - * + * + * + * + %$ , - * + * + * + " - %$ * * + * + * + " + * + * + * + , , * - * + * + * + # * , - * + * + * + * + # + %$ , - * + * + * + # + %$ , - * + * + * + , , , - * %$ , * + + , , - * + + %$ , - , , - * %$ , * + * * - + + %$ , - + , , - - * %$ , * , , * + + %$ , + * * - * %$ , - , , * - + + %$ * + - - - * , , * - , , , , * + + * + * + * + + - * + * + * + " , * + * + * " * * * + * + + + + + * + * * * * - * , * + + + + + * + + - * * + , , , - * + - * + + %$ , - * + , , - * + + %$ + * + - * * - * + * In unserem Fall ist der Punkt 2200/2800 optimal. Der optimale Gewinn (Zielwert) ist 7 · 2200 + 4 · 2800 = 26600. Zum Vergleich: Die benachbarten Eckpunkte 1000/4000 und 3000/1200 haben die Zielwerte 23000 bzw. 25800. 6000 x1 + * + , , * + * + * + * + * * * + * + * + * + + + * + " * + , * + , , - + * + * + * + * * + * + * + * + * + # + * + * + # * * + * + + - * + * + " , * + + + + + + * + * + # - * + * + , * * + * + + + * + * + " * - * + + + + + + * + * + " + * * + * + " + * + * + , , , - * + * + # + , , * - - * * - + * + + + + + + * + + ! ! ! * + * + + * * * + * + + * + * # * - * + * + * # + , , * - + , , - + * * - * + , , * + + , , * - + , , * + , , * - * + * + * + 4000 5000 * + - * + - + * + * + * " - * + * + * * - * + * + * # , * + * + * # - * + * + * # * * + * + * + * * * + * + * + + * + * + * " + * + * + * " + , - * + * + * " - , - * + * + * # , * * * + * + * " + * + * + " * - * + * * * + * + * + * + * + * * + * + * + + * + * + * + + * + * + # + + * + * + * + # + , , - * + * + * + # , , - * * + , , - + + , , * - + * * - - * + , , - , * + * * - + , , * - , , , * + + , , - + , , * * - * * , , * - + + , - * + * + * + * + ! ! ! 3000 * + , - , - * + - * - , , , , * * * + * + * + # * * + * + * + # * * + * + * + * + * + * + * + * + * + + + * + * + - + * + * + * + + , * + * + * + - * + * + + , , - * + * * + * + * + " * * * - * + + * + * + * + " + * + * + * + # * * + * + * + # + * + * + * + " * * + * + * + * " + * + * + * + + # * + * + * + * * + " + * + * + + * * + * + , + * + * + - + , * * + + * + " + + + + + + * + " * * + * + # + + , - * * + * + # * * + * * + * + # + * + * + - * + * + * - , - * + * + * * + * + ! ! 2000 - * * * + * + * * + * + ! 1000 * + + + * + * + * , , , , * + * + * + * + * * * + * + * * * + * + * + + + * + * + * + + + * + * + * , * + * + * + * - * + * + * + - * + * + + + * * * + * * + * + * + " * * + * + * + " + * + * + * + 4000 Maschinenzeit (max) * + + - * + + * + * + * + * + + 5000 Andreas Jakoby Universität zu Lübeck * * * + * + + + * + * + * + * + * + + + , * * + * + * + " + + + + + + * * + * + # * * + * * + * + # + * + * + * # * * * * + * + + * + + + " + * + + * + * * " # # Maschinenzeit (min) * * * + * + * * * * + * + * * + * + * + * + + , * * + + * * * * + * + + * + + * + * + " # * + * + 1000 * + * + * + * * + * + * + + + + * + * * + " Lagerplatz * * - * + * + + + * + * + * + * + * + + + * + * + " # # 2000 * * * + + * * - * * + * + " " * + + " # # # + + * * " " Vertrag P1 * + + " # # # + + + " 3000 * " # # Umwelt * Rohstoffzulieferung # * 1000 ◮ Vertrag P2 " " + 3000 3000/500 3000/1200 1000 2000 ◮ ◮ Das Ungleichungssystem faßt die Einschränkungen über den Lösungsraum zusammen. Genau die Tupel (x1 , x2 ), die konform zu allen Restriktionen sind, sind Lösungen unseres Systems. Unter ihnen ist die mit den optimalen Zielwerten für g (x1 , x2 ) ausfindig zu machen. 3000 200/1700 800/500 2200/2800 200/4000 1000/4000 4000 x2 5000 " # # + ◮ Gesucht ist die höchste Gerade, die das Planungsvieleck berührt. ◮ ◮ Die zusätzlichen Linien stellen eine Auswahl von möglichen Gewinngleichungen g (x1 , x2 ) = c für verschiedene Gewinne c dar. Weiter oben verlaufenden Geraden stellen höhere Gewinne dar. ◮ Algorithmik WS 07/08 11. Vorlesung, 16.1.2008 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 11. Vorlesung, 16.1.2008 " # Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 9.2 Komplexität von linearen Programmen Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 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 ◮ N P und N P-hart bzw. N P-schwierig, ◮ polynomial-Zeit- und logarithmisch-Platz-reduzierbar sowie 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 m×n A∈R und ein Wert z ∈ R. ◮ Frage: Existiert eine Lösung ~ x ∈ R n , so dass A · ~x ≤ ~b und T ~c · ~x ≥ z ist. das 3-SAT Problem dem Teilnehmer der Veranstaltung bekannt sind. ◮ 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. Satz 16 Das Entscheidungsproblem zum ILP ist N P-schwierig. Beweis von Satz 16: Um den Satz 11 zu beweisen, wollen wir eine Reduktion von 3-SAT auf das Entscheidungsproblem zum ILP angegeben. 248 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 α ∈ αi,1 , αi,2 , αi,3 α xi,ji,j := x i,j xi,j und − yi0 − yi1 ≤ −1 sowie −yi0 ≤ 0 und {0, 1} . Hierbei gilt 12. Vorlesung, 23.1.2008 yi0 + yi1 ≤ 1 α = xi,1i,1 ∨ xi,2i,2 ∨ xi,3i,3 ∈ {x1 , . . . , xn } Ci xi,1 , xi,2 , xi,3 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck Beweis von Satz 16 (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 16 (Teil 2): Wir betrachten eine Instanz des 3-SAT Problems: ◮ Gegeben ist eine Folge von Klauseln C1 , . . . , Cm über den Variablen x1 , . . . , xn mit α 249 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 . 250 251 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Beweis von Satz 16 (Teil 4): Optimieren wollen wir die Summe aller Variablen und wählen n X i=1 Beweis von Satz 16 (Teil 5): Sei x1 = b1 , . . . , xn = bn eine erfüllende Belegung für C1 ∧ C2 ∧ . . . ∧ Cm . (yi0 + yi1 ) ≥ n . Dann gilt: ◮ Aufgund unserer Vereinbarung gilt y 1 = bi und y 0 = 1 − bi , und i i somit yi0 + yi1 = 1 − bi + bi = 1 . Es ist einach zu erkennen, dass jede zulässige Lösung des Ungleichungssystems von Folie 251 diese Ungleichung erfüllt. Wir wollen nun zeigen, dass das ILP genau dann eine zulässige Lösung besitzt, wenn C1 ∧ C2 ∧ . . . ∧ Cm Folglich sind alle Ungleichungen vom Typ eine erfüllende Belegung besitzt. Hierbei können wir yi0 = 1 ⇐⇒ xi = 0 yi1 = 1 ⇐⇒ xi = 1 yi0 + yi1 ≤ 1 − yi0 − yi1 ≤ −1 und erfüllt. und wählen. 252 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Beweis von Satz 16 (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 α α α yi,1i,1 + yi,2i,2 + yi,3i,3 ≥ 1 . ◮ 253 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Beweis von Satz 16 (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 Somit sind auch alle Ungleichungen vom Typ α α α α α −yi,1i,1 − yi,2i,2 − yi,3i,3 ≤ −1 α −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. erfüllt. ◮ Es gibt somit eine zulässige Lösung. 254 255 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 9.3 Geometrische Interpretation von linearen Programmen x3 Eine geometrische Interpretation von linearen Programmen haben wir bereits in dem Beispiel auf den Folien 244 und 245 vorgestellt. (0, 0, 3) ◮ Jede Gleichung n X j=1 ◮ ai,j · xj ◮ Ungleichungen: (1, 0, 3) x1 x1 + x2 + x3 3x2 + x2 −x2 + + x3 x3 x3 (2, 0, 2) = bi (0, 2, 3) −x1 mit festen Werten ai,j und bi definiert eine n − 1-dimensionale Hyperebene im n-dimensionalen Raum. Eine Ungleichung n X ai,j · xj ≤ bi (0, 0, 0) x1 ◮ (2, 0, 0) j=1 ◮ definiert einen Halbraum des n-dimensionalen Raums auf der Pn richtigen Seite der Hyperebene j=1 ai,j · xj = bi . x2 (0, 2, 0) (2, 2, 0) −x3 ≤ ≤ ≤ ≤ ≤ ≤ ≤ Blau ist die Hyperebene x3 = 3 eingezeichet. Der Halbraum x3 ≤ 3 befindet sich unter der Hyperebene. 256 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 4 2 3 6 0 0 0 257 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 x3 (0, 0, 3) ◮ (1, 0, 3) (2, 0, 2) ◮ (0, 2, 3) ◮ x1 (0, 0, 0) x2 (0, 2, 0) (2, 0, 0) Mit S bezeichnen wir die Menge aller zulässigen Lösungen. ◮ ◮ S ist der Schnitt aller durch die Hyperebenen beschriebenen Halbräume. 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. Das LP heißt unlösbar, falls es keine zulässige Lösung besitzt. Für die Ringe der rationalen und reellen Zahlen gilt: ◮ ◮ ◮ ◮ 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. (2, 2, 0) 258 259 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 9.4 Formen linearer Programme ◮ Bevor wir auf den Simplex-Algorithmus eingehen, wollen wir noch auf eine Vereinfachung eingehen: ◮ ◮ ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Wir erhalten folgende Variante des LPs ◮ Maximiere Z xj+ , xj− von Wir ersetzen jede Variable xj durch ein Paar Hilfsvariablen für die wir xj+ ≥ 0 und xj− ≥ 0 verlangen. Diese Ungleichungen nehmen wir in unser Ungleichungssystem mit auf. Hierbei substituieren wir das Vorkommen von xj durch xj+ − xj− . Pn Wir führen für jede Bedingung j=1 ai,j · xj ≤ bi führen wir eine sogenannte Schlupfvariable5 yi ein, die angibt, um wie viel Pn a · x j kleiner als bi ist. j=1 i,j 5 Nicht = n X cj · (xj+ − xj− ) j=1 ◮ unter den Bedingungen yi + n X ai,j · (xj+ − xj− ) = bi j=1 und x1+ , x1− , . . . , xn+ , xn− , y1 , . . . , ym ≥ 0. Schlumpfvariable! 260 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 261 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Formen von linearen Programmen In der Literatur unterscheiden wir drei Formen von linearen Programmen über einem Ring R: ◮ die generelle Form: ◮ ◮ Gegeben ist eine Matrix A ∈ R 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: ◮ ◮ ◮ 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 . ◮ ◮ ◮ Sie 0 das neutrale Element in R bezüglich der Addition, dann gibt ≥ 0. Ferner ist ein Vektor ~c ∈ R n und somit die Zielfunktion ~c T · ~x 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. n 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 ≤ ~b . xi Sie 0 das neutrale Element in R bezüglich der Addition, dann gibt es eine Poritionierung N1 , N2 , N3 von {1, . . . , n}, so dass ◮ ◮ die Standardform: m×n ◮ ◮ ◮ gegeben. Gesucht ist eine Lösung ~x ∈ R n , die die Zielfunktion zu minimiert. T Ferner ist ein Vektor ~c ∈ R und somit die Zielfunktion ~c · ~x gegeben. Abhängig vom Typ des linearen Programms unterscheiden wir zwischen dem Minimierungproblem, hierbei ist die Zielfunktion zu minimieren, und dem Maximierungsproblem, hierbei ist die Zielfunktion zu maximieren. 262 263 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 12. Vorlesung, 23.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 die kanonische Form: ◮ ◮ 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 = ~b . Sie 0 das neutrale Element in R bezüglich der Addition, dann gibt xi ◮ 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 Zeit6 ausgeführt werden. ≥ 0. Ferner ist ein Vektor ~c ∈ R n und somit die Zielfunktion ~c T · ~x gegeben. Gesucht ist eine Lösung ~x ∈ R n , die die Zielfunktion zu minimiert. 6 Die lineare Zeit bezieht sich auf das Modell einer RAM. 264 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 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. 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 ◮ ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 12. Vorlesung, 23.1.2008 Definition 20 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. ◮ ~ x ist eine zulässige Lösung des LP mit A, ~b, ~c , wenn A · ~x = ~b und ~x ≥ 0 ist. 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 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. 9.5 Der Simplex-Algorithmus ◮ 265 die aktuelle zulässige Basislösung optimal (d.h. minimal) ist oder gezeigt werden kann, dass das LP unlösbar ist. 266 267 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 12. Vorlesung, 23.1.2008 Beobachtung 15 Sei A eine Matrix deren Zeilen linear unabhängig sind, dann gilt: ◮ ◮ ◮ ◮ ◮ 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 Beobachtung 15 (Teil 2) ◮ Sei Y := B −1 · A und ~ z := ((~c B )T · Y )T , dann gilt ~z T · ~x = (~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. die Gleichung A · ~x = ~b. Ist ~x B ≥ 0, dann ist auch ~x ≥ 0. Sei ~c B := (cj1 , . . . , cjm ), dann gilt ~c T · ~x = Der Einfachheit halber nennen wir die Lösung ~x , die wir aus ~x B gemäß der Regel auf der Folie 268 konstruieren auch Basislösung. = (~c B )T · ~x B . 268 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 13. Vorlesung, 30.1.2008 269 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 13. Vorlesung, 30.1.2008 Beweis von Lemma 13 (Teil 2): ◮ Sind A1 , . . . , Ap linear abhängig, dann sind nicht alle diese Spalten in einer Matrix B enthalten. Es gilt: Lemma 13 Besitzt ein kanonisches lineares Programm eine zulässige Lösung, dann gibt es für dieses lineare Programm auch eine zulässige Basislösung. Beweis von Lemma 13: 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 p X xj · Aj = ~b . ◮ p X αj · Aj = 0 j=1 ist. Dann gilt X j=1 ◮ Es existieren p Werte α1 , . . . , αp , von denen zumindest ein Wert αr ungleich 0 ist, so dass j∈[1..p]\{r } 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. ◮ 270 « „ αj · xr · Aj xj − αr = ~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. 271 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 13. Vorlesung, 30.1.2008 Beweis von Lemma 13 (Teil 3): ◮ Die Lösung α xj − αrj · xr xj′ = 0 αj · xr αr ≥ 0 oder ist. ◮ ◮ Ist αj = 0, so ist dieses erfüllt. Ist αj = 6 0, so muss ◮ ◮ 13. Vorlesung, 30.1.2008 Beweis von Lemma 13 (Teil 4): ◮ Um diese Bedingungen zu erfüllen wählen wir entweder xj xr = min α > 0 j αr αj j∈[1..p] für j ∈ [1..p] \ {r } sonst. ist zulässige, wenn für alle j ∈ [1..p] \ {r } xj − Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ xr αr = max j∈[1..p] xj αj < 0 . αj Wir können diesen Schritt wiederholen, bis eine zulässige Basislösung entstanden ist. xr xj − ≥ 0 für αj > 0 und αj αr xr xj − ≤ 0 für αj < 0 sein. αj αr 272 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 13. Vorlesung, 30.1.2008 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,1 , . . . , ai,n ) − 1 · (ar ,1 , . . . , ar ,n ) . ar ,s ◮ ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 13. Vorlesung, 30.1.2008 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) ai,s · (ar ,1 , . . . , ar ,n ) ar ,s und die r -te Zeile durch ◮ 273 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 ). 274 275 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 13. Vorlesung, 30.1.2008 Phase 1: Finde eine Basislösung: ◮ ◮ 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 ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 13. Vorlesung, 30.1.2008 Multiplizieren wir dieses Tableau von links mit B −1 0 . (~c B )T · B −1 1 so erhalten wir ~x B Y I Ym+1 = ~c T − ~z T −Z 0 cm+1 − zm+1 Sei B ∈ Rm×m eine invertierbare Teilmatrix von A, wie wir sie auf der Folie 267 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 ... Yn . . . cn − zn ~x B −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 278 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. 276 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 13. Vorlesung, 30.1.2008 277 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 13. Vorlesung, 30.1.2008 Algorithmus Finde-Basislösung(T ) Eingabe: m + 1 × n + 1-Tableau T = A ~b ~c T 0 oder infeasible Phase 2: Finde eine zulässigen Basislösung: Ergebnis: Tableau mit Basislösung ~x B 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 ) ◮ 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 Y1 ... Yn c1 − z1 . . . cn − zn ~x B −Z berechnet. ◮ 278 Ist xiB < 0 für eine Zeile i, dann ist die gefundene Lösung nicht zulässig. 279 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ ◮ 13. Vorlesung, 30.1.2008 Sei ~e = (e1 , . . . , em )T ∈ Rm mit −1 falls xiB < 0 und ei = 0 falls xiB ≥ 0 ◮ ◮ Beweis von Lemma 14: ◮ Sei r die Zeile, für die x B minimal ist. r ◮ 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. minimiere Z ∗ = x0 unter der Bedingung ~e · x0 + Y · ~x = ~x B und x0 , ~x ≥ 0. Wir betrachten hierbei das Tableau ~e Y1 ... Yn ∗ 0 c − z . . . c T = 1 1 n − zn 1 0 ... 0 13. Vorlesung, 30.1.2008 Lemma 14 KLP 2 ist immer lösbar und hat einen nicht-negativen Wert. Sei x0 eine neue Variable, dann betrachten wir das neue kanonische lineare Programm KLP 2: ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ~x B −Z 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. 280 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 13. Vorlesung, 30.1.2008 Beweis von Lemma 14 (Teil 2): ◮ Durch die Pivotierung erhalten wir ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Lemma 15 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. (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 . Beweis von Lemma 15: ◮ Nach Lemma 14 ist der Wert der Zielfunktion Z ∗ von KLP 2 nicht negativ. ◮ Wir betrachten zunächst den Fall, dass Z ∗ = x0 = 0 ist. Dann gibt es ein ~x ≥ 0 in Rn , so dass ~e · x0 + Y · ~x 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! ◮ 281 = Y · ~x = ~x B ist (siehe Bedingung von KLP 2). 282 283 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 ◮ Somit gilt für diese Lösung B −1 · A · ~x = Y · ~x A · ~x ◮ = ~x B Dann gilt Y · ~x = B −1 · ~b ◮ und folglich 14. Vorlesung, 6.2.2008 Beweis von Lemma 15 (Teil 3): Wir betrachten nun die Rückrichtung: ◮ Sei ~ x eine zulässige Lösung von KLP 1, d.h. A · ~x = ~b. Beweis von Lemma 15 (Teil 2): ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck = ~b . = B −1 · A · ~x = B −1 · ~b = ~x B . 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 Dieses ~x ist folglich eine zulässige Lösung des ursprünglichen LP KLP 1. ist. ◮ Da eine Bedingung des KLP 2 x0 ≥ 0 ist, ist diese Wert der Zielfunktion minimal. 284 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 14. Vorlesung, 6.2.2008 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 14. Vorlesung, 6.2.2008 Algorithmus Finde-zulässige-Basislösung(T , j1 , . . . , jm ) ~x B Y Eingabe: m + 1 × n + 1-Tableau T := T T ~c − ~z −Z Ergebnis: Tableau mit zulässiger Basislösung ~x B 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 ) Um eine erste zulässige Basislösung zu finden können wir wie folgt vorgehen: ◮ Wir generieren aus einer Basislösung für ein kanonisches lineares Programm ein neues kanonisches lineares Programm in der Form von KLP 2. ◮ Wir bestimmen eine zulässige Basislösung für dieses LP wie im Beweis von Lemma 14 beschrieben. ◮ Verfahren analog zur Phase 3 um eine optimale Lösung zu finden. ◮ 285 Interpretiere diese Lösung wie in Lemma 15 beschrieben. 286 287 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 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 Aj = B · Yj = ◮ m X i=1 ∗ ~x B muss keine zulässige Basislösung sein. Mit Hilfe einiger elementarer Umformungen folgt: ∗ Lemma 16 ~x B ist genau dann eine zulässige Basislösung, wenn für alle i ∈ [1..m] \ {r } yi,j ≥ 0 xiB − xrB · yr ,j ist und yi,j · Bi . 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 ) xrB ≥ 0 yr ,j gilt. ∗ ersetzen und eine neue Basislösung ~x B = (B ∗ )−1 · ~b . 288 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 289 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 ∗ 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 16 erfüllt. Ist xrB 6= 0, dann folgt aus der zweiten Ungleichung von Lemma 16, 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 16 ~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 16 in diesem Fall xiB xrB ≤ yr ,i yi,j ◮ ∗ 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] ist. ◮ 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. gelten. 290 291 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Idee für einen Algorithmus: ◮ Mit Hilfe einiger elementarer Umformungen7 folgt: ∗ Lemma 17 Der Wert der Zielfunktion der zulässige Basislösung ~x B ist Z∗ = Z + xrB · (cj − zj ) = Z + θ · (cj − zj ) . yr ,j ◮ 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 . Bezüglich des Tableaus ~x B I Ym+1 ... Yn 0 cm+1 − zm−1 . . . cn − zm −Z 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. 7 und etwas rechnen 292 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 293 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Wann liegt eine unbeschränkte Lösung vor? ◮ ◮ ◮ Wir betrachten eine Spalte Aj mit yi,j ≤ 0 für alle i ∈ [1..m]. Es gilt m X ~b = B · ~x B = Bi · xiB ~b = ◮ ◮ wobei der Wert der Zielfunktion Z = (~c B )T · ~x B ist. Für einen beliebigen Wert θ gilt ~b = B · ~x B − θ · Aj + θ · Aj = i=1 und Aj = B · Yj m X = m X i=1 m X i=1 i=1 ◮ Somit ist Bi · (xiB − θ · yi,j ) + θ · Aj . − θ · yi,j ≥ xiB ≥ 0 für alle i ∈ [1..m]. Ist θ > 0, dann ist 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] xiB und Bi · xiB − θ · Aj + θ · Aj xj ◮ ◮ Bi · yi,j . 294 = θ. 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. 295 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 ◮ 14. Vorlesung, 6.2.2008 Wann ist eine zulässige Lösung optimal? Lemma 18 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,8 dann ist Z minimal und ~x B beschreibt eine optimale zulässige Lösung für das lineare Programm. Für unseren Algorithmus merken wir uns: ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 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. Beweis von Lemma 18: ◮ Jede Spalte Aj von A kann als Linearkombination Aj = B · Yj geschrieben werden. Wir erhalten A = B ·Y und ~z T = (~c B )T · Y . 8 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. 296 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Beweis von Lemma 18 (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 und somit ◮ = 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 ′ . ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 14. Vorlesung, 6.2.2008 Für unseren Algorithmus gilt: B · ~x B = b = A · ~x = B · Y · ~x ~x B 297 ◮ 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 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. 298 299 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 14. Vorlesung, 6.2.2008 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 ) 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 ) 300 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 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: ◮ ◮ 301 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 14. Vorlesung, 6.2.2008 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 wähle s minimal, so dass T [m + 1, s] < 0 bzw. T [m + 2, s] < 0 ist und 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. 302 303 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 14. Vorlesung, 6.2.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Simplex-Algorithmus (Teil 2): 11: 12: 13: 14: 15: 16: 17: Satz 17 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. 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 ) 304 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 14. Vorlesung, 6.2.2008 Analysieren wir die Lösungen, die der Simplex-Algorithmus findet, so erkennen wir: 305 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 14. Vorlesung, 6.2.2008 Lemma 19 Seien ~x und ~x ′ zwei zulässige Basislösungen eines linearen Programms in kanonischer Form mit Beobachtung 16 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 . k · 2−2L < ~c T · ~x , ~c T · ~x ′ ≤ (k + 1) · 2−2L für ein k ∈ N, dann ist ~c T · ~x = ~c T · ~x ′ . Beweis von Lemma 19: Sei ~c T · ~x 6= ~c T · ~x ′ . ◮ Nach Beobachtung 17 sind dann ~ c T · ~x und ~c T · ~x ′ zwei rationale Zahlen mit jeweils einem Nenner größer 2L . ◮ Somit ist |~ c T · ~x − ~c T · ~x ′ | ≤ 2−2L . Beobachtung 17 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|⌉ Dieses stellt eine wesentliche Beobachtung auf dem Weg zu einem polynomial zeitbeschränkten Verfahren zur Lösung linearer Algorithmen dar, dem Ellipsoid-Algorithmus. und |P| das Produkt der Einträge in A, ~b und ~c ist, die ungleich 0 sind. 306 307 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 10.1 Definition von Matching-Probleme Definition 21 [2-dimensionales Matching] ◮ 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. ◮ ◮ 15. Vorlesung, 13.2.2008 Definition 21 (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. 10 Matching-Probleme ◮ Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 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. 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 κ(e) W (E ′ ) := e∈E ′ maximiert. 2. Gesucht ist ein optimales Matching E ′ , so dass W (E ′ ) minimal ist. Leider können wir hier nur auf eine eingeschränkte Version weiter eingehen. 308 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 ◮ Definition 22 ◮ 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 Algorithmik WS 07/08 15. Vorlesung, 13.2.2008 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 24 [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. ◮ V1 ∪ V2 = V und jede Kanten mit einem Knoten aus V1 und mit einem Knoten aus V2 inzident ist. ◮ Andreas Jakoby Universität zu Lübeck Definition 23 [3DM, 3-DIM-MATCHING] Eine für viele Anwendungen interessante Variante des Matching-Problems erhalten wir, wenn wir uns auf bipartite Graphen einschränken: V1 ∩ V2 = ∅, 309 Das Matching-Problem für bipartite Graphen nennen wir auch Heiratsproblem. Anwendungen: Ressourcen optimal zuordnen, Prozesse zu Prozessoren zuordnen oder Clients zu Servern zuordnen. 310 311 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 10.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 Beweis von Satz 18: Die Notwendigkeit der beiden Bedingungen, folgt unmittelbar aus der Definition des Heiratsproblems: ◮ 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 )|. Γ(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. 312 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 15. Vorlesung, 13.2.2008 313 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Beweis von Satz 18 (Teil 3): Beweis von Satz 18 (Teil 2): Um zu zeigen, dass die Bedingungen des Satzes auch hinreichend sind, greifen wir auf Satz 14 (MAXFLOW-MINCUT-Theorem auf Folie 208) zurück. Es ist einfach möglich, das Matching-Problem für bipartite Graphen auf ein Flußproblem zu reduzieren: ◮ 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. V1 V2 u1 v1 u2 v2 q 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. s um ◮ vm Wie wir aus dem Algorithmus zur Bestimmung des maximalen Flusses (Algorithmus modify-flow auf Folie 202) 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. 314 315 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Beweis von Satz 18 (Teil 5): Beweis von Satz 18 (Teil 4): Wir erkennen: ◮ ◮ ◮ 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. ◮ ◮ ◮ ◮ Angenommen, ein bipartiter Graph G mit |V1 | = |V2 | besitzt kein perfektes Matching. Aus der letzten Beobachtung auf der Folie 316 können wir somit folgern, dass der Wert des maximalen Flusses kleiner als |V1 | ist. Wir betrachten nun einen minimalen q|s-Schnitt (Q, S) in H. Die Schnittkapazität γ(Q, S) ist die Anzahl der Kanten, die von Q nach S führen. Sei Q ′ := Q ∩ V1 . 316 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Beweis von Satz 18 (Teil 6): ◮ 317 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Beweis von Satz 18 (Teil 7): 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, γ)) V1 ∩ S X = γ(Q, S) = γ((u, v )) q |V1 \ Q ′ | + |Γ(Q ′ ) ∩ S| + |Γ(Q ′ ) ∩ Q| ′ ◮ ◮ u1 v1 u2 v2 u3 v3 u4 v4 u5 v5 ′ = |V1 | − |Q | + |Γ(Q )| . ′ V2 Q (u,v )∈E u∈Q,v ∈S ≥ V1 Q ′ = V1 ∩ Q ′ 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. s Γ(Q ′ ) ∩ S Γ(Q ′ ) ∩ V2 318 319 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 10.3 Heiratsproblem mit Kantenkosten 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 211 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. Unser Algorithmus basiert auf der Idee der zunehmenden Wegen aus Kapitel 8.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+ . ◮ Unser Algorithmus konstruiert iterativ Matchings Mi der Größe i = 1, . . . , n. PHierbei soll Mn minimale Kosten haben, d.h. W (Mn ) = e∈Mn κ(e) soll minimal unter allen perfekten Matchings sein. Satz 19 Ein optimales Matching für bipartite Graphen können wir in Zeit O(|V | · |E |) finden. 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. ◮ 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. 320 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 15. Vorlesung, 13.2.2008 Wir betrachten jedoch einen Restgraphen, der sich vom Restgraph von Folie 200 unterscheidet. Wir definieren: ◮ 321 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck ◮ 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 . 15. Vorlesung, 13.2.2008 Ein gerichteter Pfad von q nach s in HM ist ein alternierender Pfad: V1 V2 u1 v1 u2 v2 q ◮ 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} s um ∪{(u, v ) ∈ V1 × V2 |{u, v } ∈ E \ M} ◮ ∪{(v , u) ∈ V2 × V 1|{u, v } ∈ M} und wir setzen für alle e = (u, v ) ∈ EM 8 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 . ◮ 322 M = {{u1 , v2 }} 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 Π = w0 , . . . , wt definieren wir die Kosten von Π P als W (Π) := i∈{1,...,t−2} γ((wi , wi+1 )). 323 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 15. Vorlesung, 13.2.2008 Wir nennen einen Kreis C = w1 , . . . , wt (mit w1 = wt ) in HM negativ, wenn X W (C ) := γ((wi , wi+1 )) < 0 ′ Aus der Definition von HM und dem erweiterten Matching M bezüglich eines alternierenden Pfades Π folgt: Beobachtung 18 Sei M ein Matching und Π ein alternierender q-s-Pfades in HM . Sei M ′ das über Π erweiterte Matching, dann gilt |M ′ | = |M| + 1 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 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: und W (M ′ ) = W (M) + W (Π) . Beobachtung 20 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. Beobachtung 19 M ist genau dann ein perfektes Matching, wenn es in HM keine Kante mehr gibt, die mit q oder s inzident ist. Wir können sogar die Umkehrung dieser Beobachtung zeigen. 324 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 15. Vorlesung, 13.2.2008 325 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 15. Vorlesung, 13.2.2008 Lemma 20 Sei M ein perfektes Matching, wobei es in HM keinen negativen Kreis gibt, dann ist M ein minimales Matching. Beweis von Lemma 20: Sei M ein nicht minimales perfektes Matching, wobei es in HM keinen negativen Kreis gibt. Sei M ′ ein perfektes Matching mit minimalen Kosten. ◮ ◮ ◮ ◮ 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 HM entsteht. i+1 Somit erhalten wir nach Lemma 20 ein perfektes Matching Mn mit minimalen Kosten. 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 ). Da W (M ′ ) < W (M) ist, gibt es einen Kreis Ci mit W (Ci ) < 0. 326 327 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 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. Um die Analyse zu vereinfachen, führen wir für alle Knoten Gewichte δ : V → R+ ein. Wir nenne δ auf ein Matching abgestimmt, wenn 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 ◮ 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 ◮ Beobachtung 21 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 22 Für alle Kreise C = w1 , . . . , wt mit w1 = wt in HM gilt t−1 X i=1 γδ ((x, y )) := δ(x) + γ((x, y )) − δ(y ) . γδ ((wi , wi+1 )) = t−1 X i=1 γ((wi , wi+1 )) ≥ 0 . Beobachtung 23 Gibt es für ein Matching M eine abgestimmte Gewichtsfunktion δ, dann gibt es in HM keinen negativen Kreis. 328 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 15. Vorlesung, 13.2.2008 Betrachten wir nun das Problem einen q-s-Weg mit minimalen Kosten zu finden: 329 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 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: 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: ◮ Beobachtung 24 δ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 22 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 Lemma 21 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). δ ′ (v ) := δ(v ) + dδ,M (v ) eine für M ′ abgestimmte Gewichtsfunktion. 330 331 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 Beweis von Lemma 22 (Teil 2): ◮ {x, y } ∈ M ′ \ M und x ∈ V1 : ◮ Beweis von Lemma 22: ◮ {x, y } ∈ M und x ∈ V1 : ◮ ◮ ◮ ◮ ◮ 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. ◮ 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) ′ δ (y ) := δ(x) + dδ,M (x) := δ(y ) + dδ,M (y ) = δ(x) + dδ,M (x) + κ({x, y }) . Für den neuen Graphen HM ′ gilt ferner γ((y , x)) := −κ({x, y }) . ◮ Die Werte von δ ′ (x) und δ ′ (y ) erfüllen somit bezüglich der Kante {x, y } die Bedingungen einer für M ′ abgestimmten Gewichtsfunktion. 332 Algorithmik WS 07/08 Andreas Jakoby Universität zu Lübeck 15. Vorlesung, 13.2.2008 ◮ ◮ 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. ◮ Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 15. Vorlesung, 13.2.2008 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 9: Return(M) Beweis von Lemma 22 (Teil 3): ◮ {x, y } 6∈ M ′ ∪ M und x ∈ V1 : ◮ 333 Die Werte von δ ′ (x) und δ ′ (y ) erfüllen somit bezüglich der Kante {x, y } die Bedingungen einer für M ′ abgestimmten Gewichtsfunktion. 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). 334 335 Andreas Jakoby Universität zu Lübeck Algorithmik WS 07/08 15. Vorlesung, 13.2.2008 10.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. 336