• Rucksackproblem/Knapsack Problem (KP):
• Rucksackproblem/Knapsack Problem (KP):
• Rucksackproblem/Knapsack Problem (KP):
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Approximationsalgorithmen <strong>Rucksackproblem</strong> 24<br />
<strong>•</strong> <strong>Rucksackproblem</strong>/<strong>Knapsack</strong> <strong>Problem</strong> (<strong>KP</strong>):<br />
✄ gegeben:<br />
n items, jedes mit Profit pi und Gewicht wi,<br />
ein Rucksack/bin mit Kapazität c<br />
✄ <strong>Problem</strong>:<br />
Wähle eine Teilmenge von items mit<br />
maximalem Profit und Gewicht ≤ c.<br />
Algorithmus einfacher Greedy:<br />
Sortiere die items nach Effizienz:<br />
p1<br />
w1<br />
≥ p2<br />
w2<br />
≥ . . . ≥ pn<br />
wn<br />
for i := 1 to n do<br />
if item i paßt in den Rucksack<br />
pack es ein<br />
end for<br />
Einfacher Greedy kann unbeschränkt schlecht werden.<br />
Verbesserter Algorithmus Greedy:<br />
Sei z E . . . der Wert des Rucksacks nach einfacher Greedy.<br />
z G := max{z E , max{pi | i = 1, . . . , n}}<br />
Greedy hat eine scharfe Gütegarantie von 1/2.
Approximationsalgorithmen <strong>Rucksackproblem</strong> 25<br />
Beachte: ein einziges “großes” item hat Haupteinfluß.<br />
Verbesserung:<br />
“Rate” das item mit größtem Profit in der Optimallösung.<br />
=⇒ alle items durchprobieren.<br />
Algorithmus G 2/3 :<br />
for i := 1 to n do<br />
packe item i in den leeren Rucksack<br />
wende Greedy auf das Restproblem<br />
mit Kapazität c − wi an<br />
end for<br />
z A := Maximum der n Rucksack-Lösungen<br />
G 2/3 hat eine scharfe Gütegarantie von 2/3.<br />
Verallgemeinerung:<br />
“Rate” die 2 items mit größtem Profit in der Optimallösung.<br />
=⇒ alle Paare von items durchprobieren.<br />
=⇒ scharfe Gütegarantie von 3/4.
Approximationsalgorithmen <strong>Rucksackproblem</strong> 26<br />
Weitere Verallgemeinerung:<br />
“Rate” die ℓ items mit größtem Profit in der Optimallösung.<br />
=⇒ alle ℓ-Tupel von items durchprobieren.<br />
=⇒ scharfe Gütegarantie von ℓ+1<br />
ℓ+2 .<br />
Laufzeit:<br />
<br />
Tupel =⇒ O(nℓ ) viele Greedy Iterationen =⇒ O(nℓ+1 )<br />
n<br />
ℓ<br />
Verbesserung auf O(n ℓ ) möglich.
Approximationsalgorithmen Approximationsschemata 27<br />
Betrachte die relative Abweichung ε als Input-Wert.<br />
Definition: Maximierung<br />
Ein Algorithmus A ist ein ε–Approximationsschema,<br />
wenn A für jedes ε ∈ (0, 1) ein (1 − ε)–Approximationsalgorithmus<br />
ist.<br />
Minimierung analog.<br />
Natürlich wächst die Laufzeit mit sinkendem ε.<br />
Definition:<br />
Ein Approximationsschema A ist ein Polynomiales<br />
Approximationsschema (PTAS), wenn die Laufzeit<br />
von A polynomial in der Länge der Instanz ist.<br />
Definition:<br />
Ein Approximationsschema A ist ein Voll-Polynomiales<br />
Approximationsschema (FPTAS), wenn die Laufzeit<br />
von A polynomial in der Länge der Instanz und in 1/ε ist.<br />
analog:<br />
asymptotisches PTAS und asymptotisches FPTAS.
Approximationsalgorithmen Approximationsschemata 28<br />
(PTAS):<br />
Konstruktionsprinzip beschränkte Enumeration.<br />
✄ Grundidee:<br />
Wähle ein geeignetes Unterproblem der Größe k<br />
Löse das Unterproblem optimal durch vollständige<br />
Enumeration<br />
Erweitere die Lösung zu einer Gesamtlösung<br />
Multi-Prozessor Scheduling:<br />
Approximationsschema (Graham)<br />
Algorithmus Scheduling-PTAS:<br />
Sortiere die jobs in absteigender Reihenfolge<br />
p1 ≥ p2 ≥ . . . ≥ pn<br />
(∗) wähle Parameter k<br />
bestimme die optimale Anordnung der jobs 1, . . . , k<br />
führe (LPT) für die restlichen jobs aus.
Approximationsalgorithmen Approximationsschemata 29<br />
Scheduling-PTAS hat eine Gütegarantie von 1 + m−1<br />
k .<br />
Für gegebenes ε wähle k := (m − 1)/ε<br />
=⇒ ε–Approximationsschema<br />
Laufzeit:<br />
Optimallösung für k jobs durch Enumeration in O(m k ) Zeit.<br />
Gesamtzeit: O(m m/ε + n log n) =⇒ PTAS<br />
m wird als konstant betrachtet.
Approximationsalgorithmen Approximationsschemata 30<br />
(PTAS) für das <strong>Rucksackproblem</strong> (<strong>KP</strong>):<br />
✄ Idee: (Sahni ’75)<br />
wähle einen Parameter ℓ<br />
“rate” die ℓ items mit größtem Profit in Optimallösung<br />
fülle die Restkapazität mit Greedy.<br />
“raten” =⇒ alle Teilmengen mit ℓ items durchprobieren<br />
Gütegarantie:<br />
A ≥<br />
ℓ + 1<br />
ℓ + 2 Opt<br />
wähle ℓ := ⌈1 ε⌉−2 =⇒ (1−ε)–Approximationsalgorithmus.
Approximationsalgorithmen Approximationsschemata 31<br />
Laufzeit:<br />
n<br />
ℓ<br />
<br />
Teilmengen mit ℓ Elementen<br />
=⇒ O(n ℓ ) viele Greedy Iterationen =⇒ O(n ℓ+1 )<br />
Verbesserung: (Caprara et al.’00)<br />
Systematisches Enumerieren der Teilmengen:<br />
n ℓ−1 Iterationen mit jeweils n Teilmengen<br />
mit sinkenden Kapazitäten<br />
=⇒ Greedy kann in O(n) für jede Iteration<br />
alle n Lösungen bestimmen.<br />
=⇒ Gesamtzeit O(n ℓ )<br />
Zeit O(n) O(n log n) O(n 2 ) O(n 3 ) O(n 4 ) . . . O(n ℓ )<br />
Sahni ’75 1/2 1/2 1/2 2/3 3/4 . . . ℓ−1<br />
ℓ<br />
verbess. 1/2 2/3 ∗ 3/4 4/5 5/6 . . . ℓ+1<br />
ℓ+2
Approximationsalgorithmen Approximationsschemata 32<br />
<strong>•</strong> d-dimensionales <strong>Rucksackproblem</strong> (d<strong>KP</strong>):<br />
✄ gegeben:<br />
n Objekte mit Profit pj und d Gewichten wij,<br />
ein Rucksack mit Kapazitätsvektor ci.<br />
✄ <strong>Problem</strong>:<br />
Wähle eine Teilmenge von Objekten mit maxim.<br />
Profit und Gewicht ≤ ci ∀i = 1, . . . , d.<br />
ILP-Formulierung:<br />
(d<strong>KP</strong> ) maximiere<br />
unter d.B.<br />
n<br />
j=1<br />
pj xj<br />
n<br />
wij xj ≤ ci , i = 1, . . . , d,<br />
j=1<br />
xj ∈ {0, 1}, j = 1, . . . , n.<br />
Satz: Die Optimallösung der LP-Relaxation von (d<strong>KP</strong>) hat<br />
höchstens min{n, d} nicht-ganzzahlige Variablenwerte.
Approximationsalgorithmen Approximationsschemata 33<br />
Einfacher Approximationsalgorithmus:<br />
LP-Relaxation optimal lösen<br />
Nimm alle items mit Variablenwert 1 (=abrunden)<br />
Oder: Größtes Einzelitem (vgl. Greedy)<br />
=⇒ Approximation mit scharfer Gütegarantie 1<br />
d+1 .<br />
Das spezielle LP kann in O(n) Zeit gelöst werden.<br />
PTAS: analog zu (<strong>KP</strong>)<br />
wähle einen Parameter ℓ<br />
“rate” die ℓ items mit größtem Profit in Optimallösung<br />
– Algorithmus.<br />
fülle die Restkapazität mit dem 1<br />
d+1<br />
Laufzeit: O(n ℓ+1 )<br />
wähle ℓ := ⌈d ε⌉ − (d + 1) =⇒ PTAS für d<strong>KP</strong>.<br />
Für d = 1 entsteht genau das frühere PTAS für <strong>KP</strong>.<br />
Satz: Bereits für 2-<strong>KP</strong> gibt es kein FPTAS (unter P=N P).
Approximationsalgorithmen Approximationsschemata 34<br />
(FPTAS):<br />
Konstruktionsprinzip Skalierung.<br />
✄ Grundidee:<br />
Beachte:<br />
1. Dynamisches Programmieren liefert die Optimallösung<br />
in pseudopolynomialer Zeit.<br />
2. Skalieren der Eingabewerte eliminiert die<br />
Eingabedaten aus der Laufzeit-Komplexität<br />
Skalieren entspricht einer Klasseneinteilung in Intervalle<br />
Alle Werte eines Intervalls werden gleichgesetzt<br />
(FPTAS) für das <strong>Rucksackproblem</strong> (<strong>KP</strong>):<br />
1. Dynamisches Programmieren nach Profiten<br />
Definiere array y:<br />
y(p) enthält das minimale Gewicht einer Teilmenge<br />
von items mit Gesamtprofit p.<br />
Optimallösung: z ∗ := max {p | y(p) ≤ c}<br />
yj(p): Einschränkung auf item Menge {1, . . . , j}
Approximationsalgorithmen Approximationsschemata 35<br />
Rekursive Berechnung durch Einfügen von item j + 1:<br />
yj+1(p) := min{yj(p), yj(p − pj+1) + wj+1} .<br />
Dynamisches Programmieren nach Profiten:<br />
Bestimme obere Schranke P ≥ z ∗<br />
for p := 0 to P do<br />
y(p) := c + 1 dummy Initialisierung<br />
for j := 0 to n − 1 do<br />
for p := P down to pj+1 do<br />
versuche item j + 1 zu packen<br />
if y(p − pj+1) + wj+1 < y(p) then<br />
y(p) := y(p − pj+1) + wj+1<br />
z ∗ := max {p | y(p) ≤ c}
Approximationsalgorithmen Approximationsschemata 36<br />
Pseudopolynomialer Algorithmus<br />
Laufzeit: O(nP ) Speicher: O(nP )<br />
Beachte die notwendige Manipulation der item-Mengen!<br />
Adaptieren des Dynamischen Programmieren:<br />
Ziel: Ersetzen von P durch n, 1/ε.<br />
Wähle eine Konstante K und skaliere den Profit-Bereich:<br />
˜pi :=<br />
⎢<br />
⎣ pi<br />
Dynamisches Programmieren mit den skalierten Profit-<br />
Werten für K = ε pmax/n liefert ein FPTAS.<br />
Laufzeit:<br />
˜P ≤ n ˜pmax ≤ n pmax<br />
K<br />
K<br />
⎥<br />
⎦<br />
= n n pmax<br />
ε pmax<br />
Zeit und Speicher: O(n 3 /ε) (Ibarra, Kim’75)<br />
= n2<br />
ε<br />
Beachte: Skalieren der Gewichte führt zu Schwierigkeiten!
Approximationsalgorithmen Komplexitätstheorie 37<br />
Kurzüberblick Komplexitätstheorie:<br />
Definition:<br />
Für eine Instanz I eines <strong>Problem</strong>s P ist<br />
L(I): Anzahl der Eingabewerte<br />
Max(I): Betrag des größten Eingabewertes<br />
Länge der Instanz: O(L(I) · log(Max(I)))<br />
Definition:<br />
Ein Algorithmus A für das <strong>Problem</strong> P ist polynomial,<br />
wenn seine Laufzeit für jede Instanz I ein Polynom<br />
in L(I) und log(Max(I)) ist.<br />
Ein Algorithmus A für P ist pseudopolynomial,<br />
wenn seine Laufzeit für jede Instanz I ein Polynom<br />
in L(I) und Max(I) ist.<br />
Korollar:<br />
Wenn Max(I) ein Polynom in L(I) ist, dann ist jeder<br />
pseudopolynomiale Algorithmus bereits ein polynomialer<br />
Algorithmus.<br />
Korollar:<br />
Wenn Max(I) ein Polynom in L(I) ist und P ein N Pvollständiges<br />
<strong>Problem</strong> ist, dann gibt es keinen pseudopolynomialen<br />
Algorithmus für P (unter P=N P).
Approximationsalgorithmen Komplexitätstheorie 38<br />
Betrachte das Unterproblem Ppoly von P , welches nur jene<br />
Instanzen I enthält, für die Max(I) ein Polynom in L(I)<br />
ist.<br />
Definition:<br />
Wenn Ppoly N P-vollständig ist, so nennt man P streng<br />
N P-vollständig.<br />
Satz:<br />
Wenn P streng N P-vollständig ist, dann gibt es keinen<br />
pseudopolynomialen Algorithmus für P (unter P=N P).<br />
Satz:<br />
Ist Opt(I) ein Polynom in L(I) und Max(I), dann gilt:<br />
Wenn es ein FPTAS für P gibt, dann gibt es auch einen<br />
pseudopolynomialen Algorithmus für P .<br />
Korollar:<br />
Ist Opt(I) ein Polynom in L(I) und Max(I), dann gilt:<br />
Wenn P streng N P-vollständig ist, dann gibt es kein FPTAS<br />
für P (unter P=N P).
Approximationsalgorithmen Komplexitätstheorie 39<br />
Satz: (für Minimierung)<br />
Ist für ein <strong>Problem</strong> P bereits das Entscheidungsproblem:<br />
“Gibt es einen zulässige Lösung mit Wert ≤ k ? ”<br />
N P-vollständig, dann folgt:<br />
Es gibt keinen polynomialen Approximationsalgorithmus mit<br />
Gütegarantie < 1 + 1/k.<br />
(=⇒ es gibt kein PTAS.)<br />
Vorsicht mit dem Begriff asymptotisch:<br />
Multi-Prozessor Scheduling ist streng N P-vollständig =⇒<br />
kein FPTAS<br />
Es gibt ein PTAS, aber kein asymptotisches FPTAS.<br />
Bin-Packing ist streng N P-vollständig =⇒ kein FPTAS<br />
Es gibt keine Approximation besser als 3/2, also kein PTAS.<br />
Trotzdem gibt es ein asymptotisches PTAS !!<br />
Fernandez de la Vega, Luecker (1981),<br />
und sogar ein asymptotisches FPTAS<br />
Karmakar, Karp (1982).
Approximationsalgorithmen Komplexitätstheorie 40<br />
Komplexitätshierarchie:<br />
in absteigender Reihenfolge der Schwierigkeit:<br />
Optimierungsprobleme in N P:<br />
Die Zulässigkeit einer möglichen Lösung kann in<br />
polynomialer Zeit überprüft werden.<br />
APX: Es gibt einen polynomialen Approximationsalgorithmus<br />
mit konstanter Gütegarantie k.<br />
MAX-SNP: konstante Gütegarantie existiert, aber<br />
das Erreichen einer gewissen Güte 1+δ ist N P-schwer.<br />
PTAS: Beliebige Gütegarantie 1 + ε ist erreichbar in einer<br />
Zeit polynomial in der Länge der Instanz.<br />
FPTAS: Beliebige Gütegarantie 1+ε ist erreichbar in einer<br />
Zeit polynomial in der Länge der Instanz und in 1/ε.<br />
Optimierungsprobleme in P:<br />
Optimallösung kann in polynomialer Zeit berechnet werden.<br />
Neueres Konzept:<br />
Probabilistically Checkable Proofs:<br />
PCP-Theorem