Algorithmik 1 Einleitung

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