Eine Bounding-Funktion für das Rucksackproblem In viele Fällen ist

Werbung
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
Herunterladen