Platzhalter für Bild, Bild auf Titelfolie hinter das Logo einsetzen

Konzepte der Informatik Vorkurs Informatik zum WS 2013/2014 16.09. - 27.09.2013 Dr. Werner Struckmann / Hendrik Freytag 1. April 2010 | Referent | Kurztitel der Präsentation (bitte im Master einfügen) | Seite 1

Das Rucksackproblem

Wiederholung ●

Grundsätzliche Problematik:  Wie nutze ich vorhandenen Platz am effektivsten aus?  Problemgröße hängt von folgenden Faktoren ab  Anzahl und Beschaffenheit (Größe und Wert) der Schätze  Größe der Schatzkiste  Mannigfaltige Variation der Problemgrößen  Dimensionalität der Gegenstände: ein-, zwei- oder dreidimensional  Teilbarkeit der Gegenstände  Beschaffenheit der Größe und des Werts der Gegenstände − Nur ganzzahlige bzw. diskrete Größen bzw. Werte − Meist werden die Gegenstände abstrahiert: Rechtecke und Quader anstatt der eigentlichen Form  Verfügbarkeit der Gegenstände: einmal, n-mal oder unbegrenzter Vorrat

19.09.2012 | Konzepte der Informatik | Seite 2

Das Rucksackproblem

Die Problematik ●



Bereits an diesem einfachen Beispiel sieht man, dass es gar nicht so leicht ist, eine optimale Lösung aus allen Gegenständen zu finden. Man könnte sechs Goldbarren in eine Kiste der Länge 12 packen:

6 ●

6

6

6

6

Damit bekommen die Gegenstände in der Kiste einen Gegenwert von 36 Goldtalern, aber 44 Goldtaler in Form von 4 Geldbündeln sind doch besser!

11



6

11

11

11

Man sieht: Eine Lösung bekommt man sicher durch herum probieren. Aber ist die gefundene Lösung auch das Optimum?

19.09.2012 | Konzepte der Informatik | Seite 3

Das Rucksackproblem

Brute-Force  Das Optimum bekommt man immer durch das systematische Probieren aller Möglichkeiten (Brute-Force), wobei jeweils die bessere Lösung beibehalten wird. Das aber nur bei relativ kleinen Problemgrößen machbar.  Da aber alle Gegenstände miteinander kombiniert werden können, steigt die Anzahl der Möglichkeiten mit der Vergrößerung der Kiste exponentiell. Das Problem wird sehr schnell unüberschaubar und nicht mehr lösbar.  Für das 0/1-Rucksackproblem, bei dem jeder Schatz genau einmal existiert und entweder eingepackt werden kann oder nicht, kann man den Aufwand für eine Brute-Force-Vorgehensweise mit 2^n angeben.

19.09.2012 | Konzepte der Informatik | Seite 4

Das Rucksackproblem

Brute-Force (0/1 Rucksackproblem)

A

Rein

Raus

B

B

C

C

D E

D E

E

C

D E

Inhalt: A, B, C, D, E

E

D E

E

C

D E

E

Inhalt: A, C, D 19.09.2012 | Konzepte der Informatik | Seite 5

D E

E

D E

E

D E

E

Inhalt: C, D, E

E

Das Rucksackproblem

Algorithmische Betrachtung ●





Teile und Herrsche  Das Problem wird in kleinere Teilprobleme, die separat gelöst werden, aufgeteilt Bedingung:  Annäherung an die Gesamtlösung, wenn man eine Teillösung gefunden hat Anwendung auf das Rucksackproblem:  Bin ich der Lösung des Problems mit 6 Schätzen und einer Kiste, die 11 Einheiten fasst, näher, wenn ich die Lösung für das Problem mit 5 Schätzen und einer Kiste, die 11 Einheiten fasst, bereits gefunden habe?

19.09.2012 | Konzepte der Informatik | Seite 6

Das Rucksackproblem

6

6

6

11

11

15

6

6

6

11

11

15

23

19.09.2012 | Konzepte der Informatik | Seite 7

15

23

?

?

36 44 45 46

Das Rucksackproblem

Auf “schlechtere” Schätze zugreifen:

23

19.09.2012 | Konzepte der Informatik | Seite 8

23

6

52

Das Rucksackproblem

Dynamische Programmierung ● ●

Ein weiterer Ansatz zur Lösung komplexer Probleme ist die "Dynamische Programmierung"  Keine Aufteilung des Problems in disjunkte Teilprobleme  Z.B. Sortiere die linke und die rechte Hälfte einer Liste und füge sie sortiert zusammen  Betrachtung "aller" Teilprobleme  Für das Rucksackproblem mit k Schätzen und einer Kiste der Größe n: − Löse das Problem für alle Größen 1-n und jede Anzahl von Schätzen 1-k, beginnend mit den kleinsten Schätzen  "Weniger Arbeit durch das Lösen von mehr Problemen" oder  "Mehr ist weniger"

19.09.2012 | Konzepte der Informatik | Seite 9

Das Rucksackproblem

Dynamische Programmierung - Voraussetzungen ●



Voraussetzungen  Problemgrößen müssen abzählbar (diskret) sein  Einzelner Lösungsschritt muss linear sein Auswirkung auf das Rucksackproblem  Keine Fließkommawerte für Größe oder Wert  Eindimensionale Kiste  Es gibt nur die Alternativen "Schatz enthalten ja oder nein". Es gibt keine unterschiedlichen Möglichkeiten einen Schatz in die Kiste zu packen.  Die einzelnen Schätze müssen beliebig oft verfügbar sein

19.09.2012 | Konzepte der Informatik | Seite 10

Das Rucksackproblem

Dynamische Programmierung - Voraussetzungen  Einteilung der zu füllenden Schatzkiste in Flächenquadrate

 Betrachtung der Größe aller Schätze als ein Vielfaches eines Flächenquadrates

6



Hier abgebildet ist der kleinste Schatz, ein Goldbarren mit einem Wert von 6 Goldtalern.

19.09.2012 | Konzepte der Informatik | Seite 11

Das Rucksackproblem

Die Schätze ●

Übersicht der verschiedenen Schätze:

6

45

11

40

35

15

23

27

25

19.09.2012 | Konzepte der Informatik | Seite 12

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Lösung "aller" Probleme gleichzeitig:  Nutzung einer Maxikiste  Eine Kiste, die gleichzeitig auch alle kleineren beinhaltet  Sukzessives Lösen des Problems für alle Kistengrößen mit dem jeweils nächstgrößeren Schatz  Grundlegendes Vorgehen:  Teste für jede Größe, ob das Einfügen eines neuen Schatzes einen Zugewinn bringt

0 0 0 0 0 0 0 0 0 0 0 0 0

19.09.2012 | Konzepte der Informatik | Seite 13

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 14

6 0 0 0 0 0 0 0 0 0 0 0 0

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 15

6

6

0 6 0 0 0 0 0 0 0 0 0 0

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 16

0 6 6 0 0 0 0 0 0 0 0 0 0

6 6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 17

0 6

6

6

6

6

6

0 0 0 0 0 0 0 0 0

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 18

0 6 12

6

6

6

0 0 0 0 0 0 0 0 0

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

0 6 12

6

6

6

12

6

0 0 0 0 0 0 0 0

19.09.2012 | Konzepte der Informatik | Seite 19

6

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung  Bei nur einen Schatz: relativ komplizierter Algorithmus um alle Schatzkisten optimal mit einem Schatz zu füllen.  Problem für alle Größen und nur einen Schatz gelöst  Lösung auf der für die weiteren Schätze aufgebaut werden kann

19.09.2012 | Konzepte der Informatik | Seite 20

0 0 6

6

6

6

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 21

11

11

0 6

6

6

6

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 22

11

11

0 6

6

11 6

11

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 23

0 11 6

11 6

11 6

11

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 24

0 0 17

11

6

11 6

11

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 25

0 0 17

11

6

11 6

11

12

6

17 12

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

11

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 26

0 0 6

6

22 6

11

11

12

6

17 12

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

11

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere. 19.09.2012 | Konzepte der Informatik | Seite 27

0 0 6

6

22 6

11

11

12

6

17 12

6

22 18

6

11 11

11

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Bis zum Ende durchgeführt ergibt sich das folgende Bild.

0 0

 Problem für alle Größen und zwei Schätzen gelöst  Lösung auf der für die weiteren Schätze aufgebaut werden kann

6

6

11 6

11

12

6

17 12

6

22 18 6

28 24

6

33 24

19.09.2012 | Konzepte der Informatik | Seite 28

11 11

11

23 18

11

6

11 11

34 30

6

39 30

6

44 36

6

11 11 11

6

11 11

11 11 11

11

11 11

11

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Und auch beim Schatz mit der Länge vier muss man nicht umdenken…

15

15

0 6

6

11 6

11

12

6

17 12

6

22 18 6

28 24

6

33 24

19.09.2012 | Konzepte der Informatik | Seite 29

11 11

11

23 18

11

6

11 11

34 30

6

39 30

6

44 36

6

11 11 11

6

11 11

11 11 11

11

11 11

11

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●

Und auch beim Schatz mit der Länge vier muss man nicht umdenken…

15

15

0 6

6

11 6

11

15 12 17 12

15

22 18 6

28 24

6

33 24

19.09.2012 | Konzepte der Informatik | Seite 30

11

11

23 18

11

6

11 11

34 30

6

39 30

6

44 36

11

6

11 11 11

6

11 11

11 11 11

11

11 11

11

Das Rucksackproblem

Anwendung von Dynamischer Programmierung ●



Nachdem wir nun den Algorithmus auch mit dem dritten Schatz durchexerziert haben, sollte das Prinzip klar sein.

0 0 6

6

11 6

11

15 12

Zeit sich die Frage zu stellen, ob das, was wir machen auch funktioniert…

17 12

15 11

6

22 18

11

26 23 18

11

30 28 24

11 15 15

15

33 24

11

11

37 34 30

11

11

41 39 30

11

45 44 36 19.09.2012 | Konzepte der Informatik | Seite 31

11 15 15

15

15 15

15

Das Rucksackproblem

Dynamische Programmierung - Korrektheitsbeweis ●



Die Korrektheit lässt sich per Induktion beweisen, d.h. wir zeigen die Korrektheit für den trivialen Fall (nur ein Schatz) und beweisen, dass die Behauptung – sofern sie für n Schätze gilt – auch für n+1 Schätze gilt. Vorgehen allgemein: Wir kombinieren immer den Inhalt einer bereits optimal gepackten Kiste A mit einem Schatz S, wofür wir eine Kiste B benötigen, deren Größe der Größe der Kiste A plus des Schatzes S entspricht.  Für den Trivialfall (n = 1) ist die Korrektheit sofort zu sehen.  Für n = n + 1 gibt es folgende Alternativen  Man benötigt den neu hinzugekommenen Schatz S nicht, dann bleibt die Kiste, so wie sie ist, erhalten und damit weiterhin optimal.  Benötigt man den neu hinzugekommenen Schatz, so ist in der neuen optimalen Kiste neben dem hinzugekommenen Schatz noch Platz für soviele Elemente, wie es sie auch in Kiste A gibt. Da Kiste A bereits optimal gefüllt war, muss also auch Kiste B optimal gefüllt sein. 19.09.2012 | Konzepte der Informatik | Seite 32

Das Rucksackproblem

Dynamische Programmierung - Ergebnis ●

Nachdem die Korrektheit des Verfahrens bewiesen ist, können wir es auf die weiteren Schätze anwenden und erhalten das nebenstehende Ergebnis.

0 0 6

6

11 6

11

15 12 ●



Damit sind die optimalen Lösungen für alle Kisten gefunden. Erstaunlich, dass in der Siegerkiste der Größe 12 ein Goldbarren eingepackt wurde, der auf den ersten Blick als kein vielversprechender Kandidat galt.

15

23 17 12

23

25 23 22 18 29 26 23 18

25 23

6

35 34 30 28 24

35

40 38 33 24

40

46 37 34 30

23

48 41 39 30

23

52 45 44 36

19.09.2012 | Konzepte der Informatik | Seite 33

6

23 25 23

23

Das Rucksackproblem

Das Rucksackproblem - der Algorithmus ●



Für den folgenden Algorithmus werden wie die eingangs vorgestellten Struktogramme verwenden. Dafür werden wir zwei Pfeile als Zeiger auf die aktuell betrachteten Kisten verwenden. Kiste A

Kiste B

19.09.2012 | Konzepte der Informatik | Seite 34

Das Rucksackproblem

Das Rucksackproblem – Struktogramm Nehme den kleinsten Schatz zur Hand Solange man noch einen Schatz in der Hand hält Setze Kiste A Solange

neben die Kiste mit Größe 0

Kiste A

auf eine Kiste zeigt

Lege den Schatz rechts an die Kiste, auf die Lege

Kiste B

Wenn JA: Fülle Kiste B Kiste A

zeigt

neben die Kiste, die so groß ist wie die neben

Überprüfe, ob der Inhalt von

Schiebe

Kiste A

Kiste A

Kiste A

und dem Schatz zusammen

plus dem Schatz wertvoller ist als der Inhalt von

so, dass sie dem Inhalt von

Kiste A

Kiste B

plus dem Schatz entspricht

um eine Position nach unten

Lege den Schatz aus der Hand und nimm den nächst größeren Schatz in die Hand, falls es noch einen größeren gibt

19.09.2012 | Konzepte der Informatik | Seite 35

Das Rucksackproblem

Algorithmus – Ja oder Nein? ●

Ist das beschriebene Verfahren ein Algorithmus?  Das Verfahren ist in einem endlichen Text durch ein Struktogramm beschrieben.  Die Objekte der Berechnung sind die Kisten und Schätze.  Die Operationen sind das Vergleichen und Füllen von Kisten.  Die Reihenfolge der Operationen ist ebenfalls durch das Struktogramm festgelegt. ➜ Das Verfahren ist ein Algorithmus.

19.09.2012 | Konzepte der Informatik | Seite 36

Vielen Dank für Ihre Aufmerksamkeit!

19.09.2012 | Konzepte der Informatik | Seite 37