Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 Eine Bounding-Funktion für das Rucksackproblem I I In viele Fällen ist das finden einer sinnvollen Bounding-Funktion eine schwieriges Problem. Betrachten wir das Rucksackproblem: I I I I Betrachten wir nun einmal den Fall, dass wir auch Anteile von einem Gut in unseren Rucksack einpacken können. Hierbei hat der Anteil ε mit 0 ≤ ε ≤ 1 von einem Gut j ein Gewicht von ε · wj und einen Wert von ε · vj . Wir erhalten hierbei die rationale Variante des Rucksackproblems. Wir wählen i, so dass der Quotient vi /wi maximal ist. Es gilt: Für das Gewicht von wi können wir maximal den Wert vi bekommen. Diese Überlegung führt uns zu folgendem Algorithmus für die rationale Variante des Rucksackproblems. 126 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 j 10: 11: 12: end if end while Return((x0 , . . . , xn−1 )) 127 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 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 128 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 0 = (V 0 , W 0 , M − Wakt − x · w` ) die Instanz I eingeschränkt auf die Güter i > ` 0 0 ) :=RationalesRucksack(n − ` − 1, (x`+1 , . . . , xn−1 V 0 , W 0 , M − Wakt − x · w` ) Pn−1 0 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 129 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 5.4 Das Traveling Salesperson Problem Definition 12 [Traveling Salesperson Problem (TSP)] I 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.1 I Einen Hamiltonischer Kreis ist eine Knotenfolge v0 , v1 , . . . , vn , welcher jeden Knoten genau einmal besucht. I 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 I Gesucht ist ein Hamiltonischer Kreis mit minimalen Kosten. 1 Zur Vereinfachung bezeichnen wir die Knoten mit natürlichen Zahlen. 130 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 ) 131 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 1. Bounding-Funktion I Für eine Knotenmenge W ⊆ V und ein Knoten x ∈ V sei b(x, W ) := min mx,w w ∈W die kostenminimale Verbindung von x zu einem Knoten der Menge W. Für einen Pfad X := x0 , . . . , x`−1 in G sei X := V \ X und die Bounding-Funktion X `−2 b(x`−1 , X ) + b(v , X ∪ {x0 }) für ` < n X BTSP(X ) := mxi ,xi+1 + v ∈X i=0 mx`−1 ,x0 für ` = n . I 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 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 ) 133 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 2. Bounding-Funktion I 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. I Die resultierende Matrix besitzt weiterhin nur positive Einträge. Jedoch gibt es in jeder Zeile und in jeder Spalte mindesten eine 0. I Den Wert von redval können wir mit dem Algorithmus auf der folgenden Folie bestimmen. 134 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) 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: I 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. I Es kann gezeigt werden, dass die Summe dieser Werte mindestens den Wert Redval(M) haben muss. Um die Bounding-Funktion zu berechnen, müssen wir die Kosten- matrix abhängig vom aktuellen Pfad modifizieren. 136 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 I Für einen Pfad X := x0 , . . . , x`−1 sei X := V \ X . I Sei MX die Teilmatrix der Kostenmatrix M, die nur aus den Einträgen besteht, deren Zeilen und Spalten durch Knoten aus X indiziert sind. I Wir indizieren die Zeilen und Spalten aus MX durch die jeweiligen Knoten aus X . M X MX X 137 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 I 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. I In der neuen Zeile tragen wir die Kosten ein, um von dem jeweiligen Knoten aus X den Knoten x0 zu erreichen. I In der neuen Spalte tragen wir die Kosten ein, um von x`−1 den jeweiligen Knoten aus X zu erreichen. I An die Stelle, wo sich die neue Zeile und die neue Spalte schneiden, setzten wir ∞. I Sei M 0 die resultierende Matrix, dann setzten wir ( `−2 X Redval(M 0 ) für ` < n BTSP2(X ) := mxi ,xi+1 + mx`−1 ,x0 für ` = n . i=0 138 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 0 )i,j∈[0..n−`] eine n − ` + 1 × n − ` + 1-Matrix 4: sei M 0 = (mi,j 0 5: sei m0,0 := ∞; j := 1; i := 1 0 := mx`−1 ,v ; j := j + 1 end for 6: for all v ∈ X do m0,j 0 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 0 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 0 )) 14: end if 139 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 5.5 Das MAXCLIQUE Problem I Wir wollen nun das Problem untersuchen, die Größe einer maximalen Clique zu bestimmen. I Dieses Problem ist ebenfalls N P-schwierig. I Ausgehend vom Algorithmus Clique-Backtrack 140 Andreas Jakoby Universität zu Lübeck 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 ) 141 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? I 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. I Besitzt ein Graph eine k-Färbung, so besitzt der Graph keine Clique der Größe k + 1! I Das Färbungsproblem ist N P-schwierig. I Daher suchen wir nach einem Greedy-Verfahren, welches die Färbung gut approximiert. 142 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 I Sei V = {0, . . . , n − 1} die betrachtete Knotenmenge für das Färbungsproblem. I Sei N bzw. [0..k − 1] die Menge der Farben. I Für eine Farbe h ist CClass[h] die Menge der Knoten mit Farbe h. I Für einen Knoten v ist Color[v ] die Farbe von v . 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) 144 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 I Man kann Beispiele finden, bei denen Greedy-Color nicht die optimale Färbung findet. I 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. I 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` . I Die maximale Größe einer Cliquen die wir ausgehend von Xakt finden können ist dann Xakt + Greedy-Color(G` ) . 145 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 5.6 Branch-and-Bound Verfahren I 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. I 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. I 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 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 ) 147 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 6 2-Personen-Spielen 6.1 Typen von 2-Personen-Spielen I Eine weitere Form von Optimierungsproblemen finden wir bei 2-Personen-Spielen: I I I I 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. 148 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 Bei 2-Personen-Spielen unterscheiden wir zwischen Speilen mit I Zufallsentscheidungen, wie zum Beispiel mit Würfeln oder mit Durchmischen von Karten, und deterministischen Spielen, I 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. I I I 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. 149 Algorithmik WS 06/07 Andreas Jakoby Universität zu Lübeck 7. Vorlesung, 05.12.2007 6.2 Alpha-Beta-Suche bei 2-Personen-Spielen I 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. I Diese entspricht der Funktionsweise einer Bounding-Funktion beim Backtracking. Bei 2-Personen-Spielen benötigen wir allerdings 2 Werte: I I I I eine α-Schranke, für den maximalen Gewinn, den Spieler 1 aus dieser Spielstellung heraus erzielen kann, und eine β-Schranke, für den maximalen Gewinn, den Spieler 2 aus dieser Spielstellung heraus erzielen kann. Bei einem Nullsummenspiel entspricht der maximale Gewinn des einen Spielers dem maximalem Verlust des zweiten Spielers. 150 Andreas Jakoby Universität zu Lübeck Algorithmik WS 06/07 7. Vorlesung, 05.12.2007 I Die α- und β-Schranke werden aus den Werten der Vorgängerknoten durch Maximieren oder Minimieren berechnet, je nach dem Spieler, der am Zug ist. I 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. I Das duale mit vertauschten Rollen der Spieler nennen wir β-Schnitt. I Eine weitere Betrachtung von 2-Personen-Spielen würde den Rahmen dieser Vorlesung sprengen. 151