63
Datenstrukturen und Algorithmen (Folie 462, Seite 85 im Skript) Paradigmen Dynamisches Programmieren 0/1-Knapsack Gegeben sei ein Rucksack mit einer unbeschr¨ ankten Kapazit¨ at und verschiedene Gegenst¨ ande. Jeder Gegenstand hat eine gegebene Gr¨ oße und einen gegebenen Wert. Es gibt einen Zielwert. Frage: K¨ onnen wir Gegenst¨ ande ausw¨ ahlen, die in den Rucksack hineinpassen und deren zusammengez¨ ahlte Werte den Zielwert ¨ uberschreiten? Formaler: Definition Eingabe: Positive Integer (c 1 ,..., c n ), (v 1 ,..., v n ), und C Ausgabe: Der Maximalwert v , so daß es eine Menge I ⊆{1,..., n} gibt mit i I c i C i I v i = v

0/1-Knapsack -  · Datenstrukturen und Algorithmen (Folie 462, Seite 85 im Skript) Paradigmen Dynamisches Programmieren 0/1-Knapsack Gegeben sei ein Rucksack mit einer unbeschr ankten

Embed Size (px)

Citation preview

Datenstrukturen und Algorithmen (Folie 462, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

0/1-Knapsack

Gegeben sei ein Rucksack mit einer unbeschrankten Kapazitat und verschiedeneGegenstande. Jeder Gegenstand hat eine gegebene Große und einen gegebenen Wert.Es gibt einen Zielwert. Frage: Konnen wir Gegenstande auswahlen, die in den Rucksackhineinpassen und deren zusammengezahlte Werte den Zielwert uberschreiten?

Formaler:

Definition

Eingabe: Positive Integer (c1, . . . , cn), (v1, . . . , vn), und CAusgabe: Der Maximalwert v , so daß es eine Menge I ⊆ {1, . . . , n} gibt mit∑

i∈I ci ≤ C∑i∈I vi = v

Datenstrukturen und Algorithmen (Folie 462, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

0/1-Knapsack

Gegeben sei ein Rucksack mit einer unbeschrankten Kapazitat und verschiedeneGegenstande. Jeder Gegenstand hat eine gegebene Große und einen gegebenen Wert.Es gibt einen Zielwert. Frage: Konnen wir Gegenstande auswahlen, die in den Rucksackhineinpassen und deren zusammengezahlte Werte den Zielwert uberschreiten?

Formaler:

Definition

Eingabe: Positive Integer (c1, . . . , cn), (v1, . . . , vn), und CAusgabe: Der Maximalwert v , so daß es eine Menge I ⊆ {1, . . . , n} gibt mit∑

i∈I ci ≤ C∑i∈I vi = v

Datenstrukturen und Algorithmen (Folie 463, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

Knapsack

2

60

4

100

6

120

10

Rucksack

Datenstrukturen und Algorithmen (Folie 463, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

Knapsack

10

4

6

= 220

100

120

10

2

4

= 160

60

100

10

2

6

= 180

60

120

Datenstrukturen und Algorithmen (Folie 464, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

0/1-Knapsack

0/1-Knapsack kann durch brute force gelost werden, indem alle UntermengenI ⊆ {1, . . . , n} aufgezahlt werden und beide Bedingungen uberpruft werden.

Es gibt allerdings 2n solche Untermengen. Zu langsam!

Konnen wir dieses Problem durch dynamisches Programmieren losen?

Ja, indem alle Unterprobleme mit unterer Kapazitat zuerst gelost werden.

Datenstrukturen und Algorithmen (Folie 464, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

0/1-Knapsack

0/1-Knapsack kann durch brute force gelost werden, indem alle UntermengenI ⊆ {1, . . . , n} aufgezahlt werden und beide Bedingungen uberpruft werden.

Es gibt allerdings 2n solche Untermengen. Zu langsam!

Konnen wir dieses Problem durch dynamisches Programmieren losen?

Ja, indem alle Unterprobleme mit unterer Kapazitat zuerst gelost werden.

Datenstrukturen und Algorithmen (Folie 464, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

0/1-Knapsack

0/1-Knapsack kann durch brute force gelost werden, indem alle UntermengenI ⊆ {1, . . . , n} aufgezahlt werden und beide Bedingungen uberpruft werden.

Es gibt allerdings 2n solche Untermengen. Zu langsam!

Konnen wir dieses Problem durch dynamisches Programmieren losen?

Ja, indem alle Unterprobleme mit unterer Kapazitat zuerst gelost werden.

Datenstrukturen und Algorithmen (Folie 464, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

0/1-Knapsack

0/1-Knapsack kann durch brute force gelost werden, indem alle UntermengenI ⊆ {1, . . . , n} aufgezahlt werden und beide Bedingungen uberpruft werden.

Es gibt allerdings 2n solche Untermengen. Zu langsam!

Konnen wir dieses Problem durch dynamisches Programmieren losen?

Ja, indem alle Unterprobleme mit unterer Kapazitat zuerst gelost werden.

Datenstrukturen und Algorithmen (Folie 465, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

0/1-Knapsack

Betrachte den folgenden Algorithmus:

Algorithmus

procedure Knapsack :for i = 1, ..., n do

for k = 0, ...,C dobest[0, k] := 0;best[i, k] := best[i− 1, k];if k ≥ c i and best[i, k] < v i + best[i− 1, k− c i]then best[i, k] := v i + best[i− 1, k− c i] fi

odod

best[i , k] ist der hochste Wert, den man mit Gegenstanden aus der Menge {1, . . . , i}erhalten kann, die zusammen Kapazitat k haben.

Datenstrukturen und Algorithmen (Folie 466, Seite 85 im Skript)

Paradigmen

Dynamisches Programmieren

Laufzeit

Die Laufzeit ist O(Cn).

Wir nennen einen solchen Algorythmus pseudo-polynomiell.

Die Laufzeit ist nicht polynomiell in der Eingabelange, aber polynomiell in derEingabelange und der Große der Zahlen in der Eingabe.

Falls C klein ist, dann ist dieser Ansatz viel schneller als alle Untermengendurchzuprobieren.

Datenstrukturen und Algorithmen

Paradigmen

Greedy-Algorithmen

Ubersicht

6 ParadigmenDivide-and-ConquerDynamisches ProgrammierenGreedy-AlgorithmenFlusseLineares ProgrammierenRandomisierungBacktrackingBranch-and-BoundA*-AlgorithmusHeuristiken

Datenstrukturen und Algorithmen (Folie 467, Seite 85 im Skript)

Paradigmen

Greedy-Algorithmen

10

2

4

46

= 240

60

100

80

Datenstrukturen und Algorithmen (Folie 468, Seite 85 im Skript)

Paradigmen

Greedy-Algorithmen

Greedy-Algorithmen

Wie bei Dynamic Programming beinhalten optimale Losungen optimaleTeillosungen

Anders als bei Dynamic Programming gilt die greedy choice property: eine lokaloptimale Losung ist stets Teil einer global optimalen Losung

Korrektheitsbeweise uber Theorie der Matroide, Greedoide, Matroideinbettungen,. . .

Datenstrukturen und Algorithmen

Paradigmen

Flusse

Ubersicht

6 ParadigmenDivide-and-ConquerDynamisches ProgrammierenGreedy-AlgorithmenFlusseLineares ProgrammierenRandomisierungBacktrackingBranch-and-BoundA*-AlgorithmusHeuristiken

Datenstrukturen und Algorithmen (Folie 469, Seite 85 im Skript)

Paradigmen

Flusse

Flußalgorithmen

Modelliere Optimierungsproblem als Flußproblem.

Varianten:

Maximaler Fluß

Fluß mit maximalen Gewinn

Matchings maximaler Kardinalitat

Matchings maximalem Gewichtes

Datenstrukturen und Algorithmen

Paradigmen

Lineares Programmieren

Ubersicht

6 ParadigmenDivide-and-ConquerDynamisches ProgrammierenGreedy-AlgorithmenFlusseLineares ProgrammierenRandomisierungBacktrackingBranch-and-BoundA*-AlgorithmusHeuristiken

Datenstrukturen und Algorithmen (Folie 470, Seite 85 im Skript)

Paradigmen

Lineares Programmieren

Lineares Programmieren

Viele Probleme konnen als Maximierung einer linearen Funktion mit linearenUngleichungen als Nebenbedingungen ausgedruckt werden.

Mehr dazu in der Vorlesung Effiziente Algorithmen

Datenstrukturen und Algorithmen

Paradigmen

Randomisierung

Ubersicht

6 ParadigmenDivide-and-ConquerDynamisches ProgrammierenGreedy-AlgorithmenFlusseLineares ProgrammierenRandomisierungBacktrackingBranch-and-BoundA*-AlgorithmusHeuristiken

Datenstrukturen und Algorithmen (Folie 471, Seite 85 im Skript)

Paradigmen

Randomisierung

Randomisierte Algorithmen

Beispiele in der Vorlesung nutzen Zufall, um den worst-case in Form einesadversary mit hoher Wahrscheinlichkeit zu vermeiden, sowie um den Algorithmusund/oder die Analyse zu vereinfachen

Eine Vielzahl von weiteren Techniken zum Entwurf in der Vorlesung RandomisierteAlgorithmen

Datenstrukturen und Algorithmen

Paradigmen

Backtracking

Ubersicht

6 ParadigmenDivide-and-ConquerDynamisches ProgrammierenGreedy-AlgorithmenFlusseLineares ProgrammierenRandomisierungBacktrackingBranch-and-BoundA*-AlgorithmusHeuristiken

Datenstrukturen und Algorithmen (Folie 472, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

Tiefensuche auf dem Raum der moglichen Losungen

ein naturlicher Weg, schwere Entscheidungsprobleme zu losen

Ausdruck “backtrack” von D.H. Lehmer in den 50er Jahren

Verfeinerung der brute force-Suche

In der Praxis gut bei Problemen wie 3-Farbbarkeit oder 0/1-Knapsack

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 473, Seite 85 im Skript)

Paradigmen

Backtracking

Backtracking

1

2 3

45

Datenstrukturen und Algorithmen (Folie 474, Seite 85 im Skript)

Paradigmen

Backtracking

Algorithmus

function backtrack(v1, ..., vi) :if(v1, ..., vi) is a solution then return(v1, ..., vi) fi;for each v do

if(v1, ..., vi, v) is acceptable vector thensol := backtrack(v1, ..., vi, v);if sol 6= () then return sol fi

fiod;return()

Datenstrukturen und Algorithmen

Paradigmen

Branch-and-Bound

Ubersicht

6 ParadigmenDivide-and-ConquerDynamisches ProgrammierenGreedy-AlgorithmenFlusseLineares ProgrammierenRandomisierungBacktrackingBranch-and-BoundA*-AlgorithmusHeuristiken

Datenstrukturen und Algorithmen (Folie 475, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch-and-Bound

1960 vorgeschlagen von A.H. Land und A.G. Doig fur Linear Programming,allgemein nutzlich fur Optimierungsprobleme

branching auf einem Suchbaum wie bei Backtracking

bounding und pruning fuhrt zum Auslassen von uninteressanten Zweigen

Geeignet fur Spiele wie Schach oder schwere Optimierungsprobleme

Datenstrukturen und Algorithmen (Folie 476, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Beispiel: 0/1-Knapsack

Verzweige, je nachdem, ob ein Gegenstand mitgenommen wird oder nicht, in einerfesten Reihenfolge

Eine Teillosung I ⊆ {1, . . . , k} ist zulassig, solange∑

i∈I ci ≤ C

Wenn I nicht zulassig ist, kann auch keine Losung, die I enthalt, zulassig sein

Außerdem ist∑

i∈I vi +∑

i∈{k+1,...,n} vi eine obere Schranke fur den Profit jederLosung, die I erweitert, wenn wir in I alle Gegenstande bis zum k . berucksichtigthaben

Also konnen wir alle Zweige abschneiden, die entweder nicht zulassig sind oderderen obere Schranke unter dem bis jetzt optimalen Profit liegt.

Datenstrukturen und Algorithmen (Folie 477, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Das Problem des Handlungsreisenden

Wir untersuchen das folgende Problem:

Definition (TSP)

Eingabe: Ein Graph G = (V ,E ) mit Kantengewichten length : E → QAusgabe: Eine geschlossene Rundreise uber alle Knoten mit minimaler Gesamtlange.

Wir denken zum Beispiel an n Stadte, die alle besucht werden mussen.

Was ist die minimale Lange einer Tour, die alle Stadte besucht und im gleichen Ortbeginnt und endet?

Datenstrukturen und Algorithmen (Folie 478, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Das Problem des Handlungsreisenden

Ein kleines Beispiel:

Datenstrukturen und Algorithmen (Folie 478, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Das Problem des Handlungsreisenden

Ein kleines Beispiel:

Datenstrukturen und Algorithmen (Folie 479, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Das Problem des Handlungsreisenden

Ein mittelgroßes Beispiel:

Datenstrukturen und Algorithmen (Folie 479, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Das Problem des Handlungsreisenden

Ein mittelgroßes Beispiel:

Datenstrukturen und Algorithmen (Folie 480, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Der naive Ansatz

Der einfachste Ansatz dieses Problem zu losen besteht darin, alle Moglichkeitendurchzuprobieren.

Wieviele Moglichkeiten gibt es?

Es gibt (n − 1)! mogliche Rundreisen, da es n! Permutationen gibt.Wir konnten alle Rundreisen durchprobieren, ihre Kosten berechenen und die billigsteauswahlen.

Es eine schnellere Losung mit Hilfe von dynamischer Programmierung. Wir versuchenes mit Branch-and-Bound.

Datenstrukturen und Algorithmen (Folie 480, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Der naive Ansatz

Der einfachste Ansatz dieses Problem zu losen besteht darin, alle Moglichkeitendurchzuprobieren.

Wieviele Moglichkeiten gibt es?

Es gibt (n − 1)! mogliche Rundreisen, da es n! Permutationen gibt.Wir konnten alle Rundreisen durchprobieren, ihre Kosten berechenen und die billigsteauswahlen.

Es eine schnellere Losung mit Hilfe von dynamischer Programmierung. Wir versuchenes mit Branch-and-Bound.

Datenstrukturen und Algorithmen (Folie 480, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Der naive Ansatz

Der einfachste Ansatz dieses Problem zu losen besteht darin, alle Moglichkeitendurchzuprobieren.

Wieviele Moglichkeiten gibt es?

Es gibt (n − 1)! mogliche Rundreisen, da es n! Permutationen gibt.Wir konnten alle Rundreisen durchprobieren, ihre Kosten berechenen und die billigsteauswahlen.

Es eine schnellere Losung mit Hilfe von dynamischer Programmierung. Wir versuchenes mit Branch-and-Bound.

Datenstrukturen und Algorithmen (Folie 481, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch and Bound - Beispiel TSP

x0

x1

x2 x3

x4

1

8 1

1

2 7

2

1

6 3

Datenstrukturen und Algorithmen (Folie 481, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch and Bound - Beispiel TSP

1

x0

2

x1

1

8

x3

x2

Datenstrukturen und Algorithmen (Folie 481, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch and Bound - Beispiel TSP

1

x0

2

x1

1

8

x3

6

> 8

x4

x2

Datenstrukturen und Algorithmen (Folie 481, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch and Bound - Beispiel TSP

1

x0

2 7

x1

1

8

x3

6

> 8

x4

x2 x3> 8

Datenstrukturen und Algorithmen (Folie 481, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch and Bound - Beispiel TSP

1

x0

2 7 2

x1

1

8

x3

6

> 8

x4

6

> 8

x2

3

15

x3

x2 x3> 8

x4

Datenstrukturen und Algorithmen (Folie 481, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch and Bound - Beispiel TSP

1 8

x0

2 7 2

x1 x2> 8

1

8

x3

6

> 8

x4

6

> 8

x2

3

15

x3

x2 x3> 8

x4

Datenstrukturen und Algorithmen (Folie 481, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch and Bound - Beispiel TSP

1 8 1

x0

2 7 2 7 1 3

x1 x2> 8

x3

1

8

x3

6

> 8

x4

6

> 8

x2

3

15

x3

2

7

x1

6

> 7

x4

2

16

x1

6

> 7

x2

x2 x3> 8

x4 x1> 8

x2 x4

Datenstrukturen und Algorithmen (Folie 481, Seite 85 im Skript)

Paradigmen

Branch-and-Bound

Branch and Bound - Beispiel TSP

1 8 1 1

x0

2 7 2 7 1 3 2 6 3

x1 x2> 8

x3 x4

1

8

x3

6

> 8

x4

6

> 8

x2

3

15

x3

2

7

x1

6

> 7

x4

2

16

x1

6

> 7

x2

2

7

x2

7

> 7

x3

7

> 7

x1

1

8

x2

x2 x3> 8

x4 x1 x2> 7

x3x1> 8

x2 x4

Datenstrukturen und Algorithmen

Paradigmen

A*-Algorithmus

Ubersicht

6 ParadigmenDivide-and-ConquerDynamisches ProgrammierenGreedy-AlgorithmenFlusseLineares ProgrammierenRandomisierungBacktrackingBranch-and-BoundA*-AlgorithmusHeuristiken

Datenstrukturen und Algorithmen (Folie 482, Seite 85 im Skript)

Paradigmen

A*-Algorithmus

A*-Suche

1968 von Peter Hart, Nils Nilsson, and Bertram Raphael als A-search (A*-searchmit optimaler Heuristik)

Graphsuchverfahren mit Anwendungen in KI (Planung) und Suche in großenSuchraumen

Generalisierung von Dijkstras Algorithmus und best-first search

Knotenexpansion in Reihenfolge von f (x) = g(x) + h(x) mit tatsachlichen Kosteng und Heuristik h

Datenstrukturen und Algorithmen (Folie 483, Seite 85 im Skript)

Paradigmen

A*-Algorithmus

Eigenschaften der A*-Suche

Theorem

Der A*-Algorithmus findet einen optimalen Pfad, wenn h optimistisch ist.

Beweis.

Wenn der Algorithmus terminiert, ist die Losung billiger als die optimistischenSchatzungen fur alle offenen Knoten.

Datenstrukturen und Algorithmen (Folie 484, Seite 85 im Skript)

Paradigmen

A*-Algorithmus

Eigenschaften der A*-Suche

Theorem

Fur jede Heuristik h betrachtet die A*-Suche die optimale Anzahl von Knoten unterallen zulassigen Algorithmen.

Beweis.

Nimm an, Algorithmus B mit Heuristik h betrachtet einen Knoten x nicht, der in A*einmal offen war. Dann betragt h(x) hochstens Kosten des Losungspfades von B undkann B nicht ausschließen, daß es einen Pfad uber x gibt, der billiger ist. Also ist Bnicht zulassig.

Datenstrukturen und Algorithmen (Folie 485, Seite 85 im Skript)

Paradigmen

A*-Algorithmus

A* - Kosten

Laufzeit: Im allgemeinen Anzahl der betrachteten Knoten exponentiell in derLange des optimalen Pfades

stark abhangig von der Gute der Heuristik: polynoniell wenn|h(x)− h∗(x)| ∈ O(log h∗(x))

Problem: Speicherplatz ebenfalls exponentiell

Varianten/Verbesserungen: IDA*,MA*,SMA*,AO*, Lifelong Learning A*, . . .

Datenstrukturen und Algorithmen

Paradigmen

Heuristiken

Ubersicht

6 ParadigmenDivide-and-ConquerDynamisches ProgrammierenGreedy-AlgorithmenFlusseLineares ProgrammierenRandomisierungBacktrackingBranch-and-BoundA*-AlgorithmusHeuristiken

Datenstrukturen und Algorithmen (Folie 486, Seite 86 im Skript)

Paradigmen

Heuristiken

Heuristiken

Hier: Verfahren, die in der Praxis oft funktionieren, aber fur die man keineworst-case-Schranken zeigen kann

Beispiele: Lokale Suche, Simulated Annealing, Genetische Algorithmen

Datenstrukturen und Algorithmen (Folie 487, Seite 86 im Skript)

Paradigmen

Heuristiken

Lokale Suche

Heuristik fur Optimierungsprobleme

Definiere Nachbarschaft im Suchraum

Gehe jeweils zum lokal optimalen Nachbarn

Problem: lokale Minima

Datenstrukturen und Algorithmen (Folie 488, Seite 86 im Skript)

Paradigmen

Heuristiken

Lokale Suche fur TSP