Kap. 7.3 Enumerationsverfahren Kap. 7.4 Branch-and-Bound Kap. 7.5 Dynamische Programmierung

Ähnliche Dokumente
Überblick. TSP Vergleich der Lösungen. Das Travelling Salesman Problem. Nearest-Neighbor Heuristik für TSP

16. All Pairs Shortest Path (ASPS)

5.4 Das Rucksackproblem

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Das Linear Ordering Problem Exakte Lösungsverfahren. für NP-schwierige. VO Algorithm Engineering

SS11 Effiziente Algorithmen 5. Kapitel: Dynamische Programmierung

Datenstrukturen & Algorithmen

Approximationsalgorithmen: Klassiker I. Kombinatorische Optimierung Absolute Gütegarantie Graph-Coloring Clique Relative Gütegarantie Scheduling

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Dynamisches Programmieren - Problemstruktur

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Dynamische Optimierung. Kapitel 4. Dynamische Optimierung. Peter Becker (H-BRS) Operations Research II Wintersemester 2014/ / 206

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Kapitel 4. Optimierungsalgorithmen. Technische Universität Wien. Gunnar Klau Technische Universität Wien. Institut für Computergraphik und Algorithmen

Approximation im Sinne der Analysis:

4. Kreis- und Wegeprobleme Abstände in Graphen

Algorithmen und Datenstrukturen 1 Kapitel 3

Ein Dieb raubt einen Laden aus; um möglichst flexibel zu sein, hat er für die Beute nur einen Rucksack dabei

Kap. 4.2: Binäre Suchbäume

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester

Einführung in Algorithmen und Komplexität

Das Dilemma des Einbrechers Wer die Wahl hat, hat die Qual!

Rechnerische Komplexität

NP-vollständig - Was nun?

Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist.

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 3: Minimal aufspannende Bäume und Matroide

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Algorithmische Methoden zur Netzwerkanalyse

Einstieg in die Informatik mit Java

Algorithmen II Vorlesung am

Algorithmen zum Lösen von Vertex und Set Cover Instanzen zur Planung von Angriffen auf Netzwerke

6. Übung zur Linearen Optimierung SS08

ADS: Algorithmen und Datenstrukturen 2

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems

WS 2009/10. Diskrete Strukturen

15. Algorithmus der Woche Das Rucksackproblem Die Qual der Wahl bei zu vielen Möglichkeiten

Klausur Informatik-Propädeutikum (Niedermeier/Hartung/Nichterlein, Wintersemester 2012/13)

Datenbankanwendung. Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern. Wintersemester 2014/15.

Die Verbindung von Linearer Programmierung und Graphentheorie

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

Single Source Sortest Path Negative Kreise All-Pair Shortest Path Problem Minimum Mean Cycle Zusammenfassung. Shortest Paths

Übung zur Vorlesung Berechenbarkeit und Komplexität

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Optimierungsprobleme. B. Langfeld, M. Ritter, B. Wilhelm Diskrete Optimierung: Fallstudien aus der Praxis

Programmieren, Algorithmen und Datenstrukturen II 8. Allgemeine Lösungsverfahren

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Universität Karlsruhe Institut für Theoretische Informatik. Klausur: Informatik III

Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Algorithmen II Vorlesung am

Effiziente Algorithmen I

Kostenmaße. F3 03/04 p.188/395

Toleranzbasierte Algorithmen für das Travelling Salesman Problem. Gerold Jäger

Aufgabe 4.2 Sei G = (V, E, l) ein ungerichteter, gewichteter und zusammenhängender Graph.

Randomisierte Algorithmen 2. Erste Beispiele

Gliederung. Kapitel 4. Lokale Suchverfahren. Meta-Heuristiken. Simulated Annealing. Lokale Suchverfahren. Optimierungsalgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Diskrete Optimierung (Einführung zur Vorlesung)

2. Optimierungsprobleme 6

Vorlesung Bioinformatik Protein Threading

Minimal spannende Bäume

Approximations-Algorithmen

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

Das Multi Traveling Salesman Problem

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

ADS: Algorithmen und Datenstrukturen 2

Einführung in Heuristische Suche

Approximationsalgorithmen

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Das Briefträgerproblem

Kapitel 3. Kombinatorische Optimierung. 3.1 Begriffe aus der Graphentheorie

abgeschlossen unter,,,, R,

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Ranking by Reordering Tobias Joppen

Inhaltsverzeichnis. - Kurzer Überblick Seite ) Einleitung Seite ) Vorbereitungen Seite 2. - ungewichtete und ungerichtete Graphen Seite 2

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Algorithmen und Datenstrukturen in der Bioinformatik Viertes Übungsblatt WS 05/06 Musterlösung

JAVA - Suchen - Sortieren

Algorithmen und Datenstrukturen 1-1. Seminar -

Klausur Informatik B April Teil I: Informatik 3

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

Wiederholung zu Flüssen

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

Optimierung. Algorithmik III Algorithmen und Modelle für kontinuierliche Datenstrukturen. Vorgehen: Dynamische Programmierung

Algorithmische Graphentheorie

Informatik II Greedy-Algorithmen

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Durchschnitt von Matroiden

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Datenstrukturen und Algorithmen

Kapitel 4: Minimal spannende Bäume Gliederung der Vorlesung

11.1 Grundlagen - Denitionen

Kapitel 4: Minimale spannende Bäume Gliederung der Vorlesung

Datenstrukturen & Algorithmen

Komplexitätstheorie Einführung und Überblick (Wiederholung)

Nichtdeterministische Platzklassen

11. Rekursion, Komplexität von Algorithmen

2. Übungsblatt zu Algorithmen II im WS 2016/2017

Algorithmische Bioinformatik 1

Transkript:

Kap. 7.3 Enumerationsverfahren Kap. 7.4 Branch-and-Bound Kap. 7.5 Dynamische Programmierung Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund ACHTUNG: Die VO am Dienstag, dem 21.7. entfällt 24. VO (vorletzte) DAP2 SS 2009 16. Juli 2009 1

DAP2-Klausur Stoff der Klausur: Stoff der Vorlesung und der Übungen (nicht: Kap. 3.3: Externe Sortierverfahren), für die Klausur am 31. Juli 2009 gilt: nicht Kapitel 7: Optimierung Zeit: 10:15 Uhr 11:45 Uhr (90 Minuten) bitte ab 10:00 Uhr vor Ort sein Wo? Für die Hörsaaleinteilung beachten Sie bitte die Information auf den Web-Seiten 2

Anmeldung für IKT, ET/IT bei Problemen mit BOSS bitte mit Anmeldeformular bis spätestens 24.7. anmelden dabei: Studienrichtung auswählen (aber nur aus systemischen Gründen) 3

Überblick Enumerationsverfahren Beispiel: 0/1-Rucksackproblem Branch-and-Bound Beispiel: 0/1-Rucksackproblem Beispiel: ATSP Dynamische Programmierung Beispiel: 0/1-Rucksackproblem 4

Kap. 7.3: Enumerationsverfahren 5

Enumerationsverfahren Exakte Verfahren, die auf einer vollständigen Enumeration beruhen Eignen sich für kombinatorische Optimierungsprobleme: hier ist die Anzahl der zulässigen Lösungen endlich. 6

Definition: Kombinatorisches Optimierungsproblem Gegeben sind: endliche Menge E (Grundmenge) Teilmenge I der Potenzmenge 2 E von E (zulässige Mengen) Kostenfunktion c: E K

Enumerationsverfahren Exhaustive Search Idee: Enumeriere über die Menge aller zulässigen Lösungen und bewerte diese mit der Kostenfunktion Die am besten bewertete Lösung ist die optimale Lösung. Problem: Bei NP-schwierigen OP ist die Laufzeit dieses Verfahrens nicht durch ein Polynom in der Eingabegröße beschränkt (sondern exponentiell). 8

Enumerationsverfahren für 0/1-Rucksackproblem Idee: Enumeriere über alle Teilmengen einer N-elementigen Menge. Für alle Gegenstände i=1 N: Fixiere zusätzlich zu den bisherigen auch noch Gegenstand i: Löse das kleinere Problem, das nur noch aus N-i Gegenständen besteht. Divide & Conquer-Prinzip 9

Worst Bsp: Enumeration Case Analyse durch von Backtracking: BinarySearch Suchbaum für N=3 x 1 =1 0 x 1 =0 (1,.,.) 1 (0,.,.) x 2 =1 x 2 =0 8 x 2 =1 x 2 =0 (1,1,.) 2 5 (1,0,.) (0,1,.) 9 12 (0,0,.) 3 (1,1,1) 4 6 7 (1,1,0)(1,0,1)(1,0,0) 10 (0,1,1) 11 13 14 (0,1,0)(0,0,1)(0,0,0) Backtracking-Verfahren 10

Realisierung der Enumeration für 0/1-Rucksackproblem x: Lösungsvektor mit x i =1 genau dann wenn Gegenstand i eingepackt wird, und x i =0 sonst z: Anzahl der bereits fixierten Variablen in x xcost: Gesamtkosten (Wert) der Lösung x xweight: Gesamtgewicht der Lösung x Enum(z,xcost,xweight,x) Aufruf: Enum(0,0,0,x) 11

Algorithmus: Enum(z,xcost, xweight,x) (1) if xweight K then { (2) if xcost > maxcost then { (3) maxcost:=xcost; bestx:=x (4) } (5) for i:=z+1,,n do { (6) x[i]:=1 (7) Enum(i, xcost+c[i], xweight+w[i], x) (8) x[i]:=0 (9) } } 12

Enumerationsverfahren: Beispiel Reihenfolge der ausgewerteten Rucksäcke für n=3: 0 0 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 1 13

Diskussion Enumerationsverfahren Laufzeit: O(2 N ) Wegen der exponentiellen Laufzeit sind Enumerationsverfahren i.a. nur für kleine Instanzen geeignet. Bereits für N 50 ist das Verfahren nicht mehr praktikabel. 14

Diskussion Enumerationsverfahren Zusatzidee: k-elementige Mengen, die nicht in den Rucksack passen, müssen nicht aufgezählt werden In vielen Fällen kann die Anzahl der ausprobierten Möglichkeiten deutlich verringert werden. Systematische Verkleinerung des Suchraumes bieten Branch-and-Bound Algorithmen 15

Kap. 7.4: Branch-and-Bound 16

Branch-and-Bound Idee: Eine spezielle Form der beschränkten Enumeration, die auf dem Divide&Conquer Prinzip basiert. Frühes Ausschließen ganzer Lösungsgruppen in der Enumeration durch Bounding. Man sagt: L ist eine untere Schranke für eine Instanz P eines OPs, wenn für den optimalen Lösungswert gilt: c opt (P) L ist. U ist eine obere Schranke, wenn gilt c opt (P) U. 17

Branch-and-Bound Idee: An den entstehenden Knoten des Suchbaums wird geprüft, ob die dazugehörige Teillösung x weiterverfolgt werden muss. Hierzu wird an jedem Knoten eine untere Schranke L der Teillösung (lower bound) und eine obere Schranke U (upper bound) berechnet. L (für Max.probleme) kann mit einer beliebigen Heuristik (z.b. Greedy) berechnet werden U (für Max.probleme) gibt eine Schranke für den besten Wert an, der von x erreicht werden kann.

Gerüst für Branch-and-Bound Algorithmen für Maximierungsprobleme Berechne eine zulässige Startlösung mit Wert L und eine obere Schranke U für alle möglichen Lösungen. Falls L = U STOP: gefundene Lösung ist optimal. Branching: Partitioniere die Lösungsmenge (in zwei oder mehr Teilprobleme). Search: Wähle eines der bisher erzeugten Teilprobleme. Bounding: Berechne für eine dieser Teilmengen T i je eine untere und obere Schranke L i und U i. Sei L:=max(L,L i ) der Wert der besten bisher gefundenen Lösung. Falls U i L, braucht man die Teillösungen in der Teilmenge T i nicht weiter betrachten.

Worst Bsp: Enumeration Case Analyse durch von Backtracking: BinarySearch Suchbaum für N=3 x 1 =1 0 x 1 =0 (1,.,.) 1 (0,.,.) x 2 =1 x 2 =0 8 x 2 =1 x 2 =0 (1,1,.) 2 5 (1,0,.) (0,1,.) 9 12 (0,0,.) 3 (1,1,1) 4 6 7 (1,1,0)(1,0,1)(1,0,0) 10 (0,1,1) 11 13 14 (0,1,0)(0,0,1)(0,0,0) Mittels Branch-and-Bound versucht man ganze Teilbäume im Suchbaum abzuschneiden ohne diese auswerten zu müssen 20

Beispiel: Branch-and-Bound für 0/1- Rucksackproblem Berechnung einer zulässigen Startlösung: z.b. Greedy-Heuristik L Berechnung einer oberen Schranke U: später! 21

Beispiel: Branch-and-Bound für 0/1- Rucksackproblem Branching: Wir zerlegen das Problem in zwei Teilprobleme: Wir wählen Gegenstand i und wählen es für Teilproblem T 1i aus (d.h. x i =1) und für T 2i explizit nicht aus (d.h. x i =0). Für T 1i muss das Gewicht von Gegenstand i von der Rucksackgröße abgezogen werden und der Wert zum Gesamtwert hinzuaddiert werden. Danach streichen wir Gegenstand i aus unserer Liste. 22

Branch-and-Bound für 0/1- Rucksackproblem Search: Wähle eines der bisher erzeugten Teilprobleme, z.b. dasjenige mit der besten (größten) oberen Schranke (wir hoffen, dass wir hier die beste Lösung finden werden). Bounding: Berechne für eine dieser Teilmengen T i je eine untere und obere Schranke L i und U i. Sei L:=max(L,L i ) der Wert der besten bisher gefundenen Lösung. Falls U i L, braucht man die Teillösungen in der Teilmenge T i nicht weiter betrachten. 23

Berechnung einer oberen Schranke für 0/1-Rucksackproblem Sortierung nach Nutzen f i := Wert c i, / Gewicht w i Seien i 1,...,i n die in dieser Reihenfolge sortierten Gegenstände Berechne das maximale r mit w 1 + +w r K Gegenstände 1,,r werden eingepackt (also x i =1 für i=1,,r) Danach ist noch Platz für K-(w 1 + +w r ) Einheiten an Gegenständen. Diesen freien Platz füllen wir mit (K-(w 1 + +w r )) / w r+1 Einheiten von Gegenstand r+1 auf. Behauptung: Es existiert keine bessere Lösung!

Berechnung einer oberen Schranke für 0/1-Rucksackproblem Begründung: Die ersten r Gegenstände mit dem höchsten Nutzen pro Einheit sind im Rucksack enthalten. Und zwar jeweils so viel davon, wie möglich ist. Achtung: vom letzten Gegenstand r+1 wird eventuell ein nicht-ganzzahliger Teil eingepackt deswegen ist die generierte Lösung i.a. nicht zulässig (sie erfüllt die Ganzzahligkeitsbedingung i.a. nicht) Aber es gilt: der berechnete Lösungswert der Gegenstände im Rucksack ist mindestens so groß wie die beste Lösung.

K=17 Berechnung einer oberen Schranke für unser Beispiel Gegenstand a b c d e f g h Gewicht 3 4 4 6 6 8 8 9 Wert 3 5 5 10 10 11 11 13 Nutzen 1 1,25 1,25 1,66 1,66 1,37 1,37 1,44 Sortierung nach Nutzen:= Wert c i, / Gewicht w i: d,e,h,f,g,b,c,a Wir packen also in den Rucksack: x d =x e =1 Platz frei für 5 Einheiten: x h = Wert: 10+10+5/9(13)<20+7,3=27,3 Obere Schranke für beste Lösung: 27 5/9 Einheiten dazu

Berechnung einer oberen Schranke für 0/1-Rucksackproblem FALL: Es besteht bereits eine Teillösung, denn wir befinden uns mitten im Branch-and-Bound Baum. Betrachte jeweils die aktuellen Teilprobleme, d.h. sobald ein Gegenstand als eingepackt fixiert wird, wird K um dessen Gewicht reduziert. Falls x i =0 fixiert wird, dann wird der Gegenstand aus der Liste der Gegenstände gestrichen. Berechnung der oberen Schranke auf den noch nicht fixierten Gegenständen: wie vorher 27

Branch-and-Bound für ATSP ATSP: wie TSP, jedoch auf gerichtetem Graphen: die Kantenkosten sind hier nicht symmetrisch: c(u,v) ist i.a. nicht gleich c(v,u). 28

Branch-and-Bound für ATSP Asymmetrisches Handlungsreisendenproblem, ATSP Gegeben: Vollständiger gerichteter Graph G=(V,E) mit Kantenkosten c e (geg. durch Distanzmatrix zwischen allen Knotenpaaren) Gesucht: Tour T (Kreis, der jeden Knoten genau einmal enthält) mit minimalen Kosten c(t)= c e I.A. gilt hier c(u,v) c(v,u) 29

Gerüst für Branch-and-Bound Algorithmen für Maximierungsprobleme Min Berechne eine zulässige Startlösung mit Wert L und eine obere Schranke U für alle möglichen Lösungen. untere L Falls L = U STOP: gefundene Lösung ist optimal. Branching: Partitioniere die Lösungsmenge (in zwei oder mehr Teilprobleme). Search: Wähle eines der bisher erzeugten Teilprobleme. U Bounding: Berechne für eine dieser Teilmengen T i je eine untere und obere Schranke L i und U i. Sei L U der Wert der besten bisher gefundenen Lösung. Falls UU L i L, i braucht man die Teillösungen in der Teilmenge T i nicht weiter betrachten.

Gerüst für Branch-and-Bound Algorithmen für ATSP Branching: Partitioniere die Lösungsmenge, indem jeweils für eine ausgewählte Kante e=(u,v) zwei neue Teilprobleme erzeugt werden: T 1e : (u,v) wird in Tour aufgenommen; in diesem Fall können auch alle anderen Kanten (u,w) und (w,v) für alle w V ausgeschlossen werden. T 2e : (u,v) wird nicht in Tour aufgenommen. 31

Gerüst für Branch-and-Bound Algorithmen für ATSP Bounding: Berechne untere Schranke, z.b. durch: Für alle Zeilen u der Distanzmatrix berechne jeweils das Zeilenminimum. Denn: Zeile u korrespondiert zu den von u ausgehenden Kanten. In jeder Tour muss u genau eine ausgehende Kante besitzen: d.h. ein Wert in Zeile u wird auf jeden Fall benötigt. 32

ATSP-Beispiel D= 5 1 2 1 6 6 6 3 7 2 1 4 1 2 5 4 3 3 5 4 2 5 1 2 5 6 2 6 4 5 Zeilenminimumsumme := 1+2+1+3+1+2 = 10 alternativ: Spaltenminimumsumme := 1+2+1+1+1+2 = 8 33

Gerüst für Branch-and-Bound Algorithmen für ATSP Bounding: Berechne untere Schranke, z.b. durch: Für alle Zeilen u der Distanzmatrix berechne jeweils das Zeilenminimum. Denn: Zeile u korrespondiert zu den von u ausgehenden Kanten. In jeder Tour muss u genau eine ausgehende Kante besitzen: d.h. ein Wert in Zeile u wird auf jeden Fall benötigt. Dasselbe kann man für alle Spalten machen: In jeder Tour muss u genau eine eingehende Kante besitzen. L := max (Zeilenminsumme, Spaltenminsumme)

Kap. 7.4 Dynamische Programmierung 35

Dynamische Programmierung Dynamic Programming, DP Idee: Zerlege das Problem in kleinere Teilprobleme P i ähnlich wie bei Divide & Conquer. Allerdings: die P i sind hier abhängig voneinander (im Gegensatz zu Divide & Conquer) Dazu: Löse jedes Teilproblem und speichere das Ergebnis E i so ab dass E i zur Lösung größerer Probleme verwendet werden kann. 36

Dynamische Programmierung Allgemeines Vorgehen: Wie ist das Problem sinnvoll einschränkbar bzw. zerlegbar? Definiere den Wert einer optimalen Lösung rekursiv. Bestimme den Wert der optimalen Lösung bottom-up. 37

Beispiel: All Pairs Shortest Paths All-Pairs Shortest Paths (APSP) Gegeben: gerichteter Graph G = (V,A) Gesucht: Gewichtsfunktion w : A!R 0 + ein kürzester Weg von u nach v für jedes Paar u, v V 38

Algorithmus von Floyd-Warshall Idee: Löse eingeschränkte Teilprobleme: Sei V k :={v 1,,v k } die Menge der ersten k Knoten Finde kürzeste Wege, die nur Knoten aus V k als Zwischenknoten benutzen dürfen Zwischenknoten sind alle Knoten eines Weges außer die beiden Endknoten Sei d ij (k) die Länge eines kürzesten Weges von v i nach v j, der nur Knoten aus V k als Zwischenknoten benutzt 39

Berechnung von d ij (k) : d ij (0) = w(v i,v j } Berechnung von d ij (k) Bereits berechnet: d ij (k-1) für alle 1 i,j n Für einen kürzesten Weg von v i nach v j gibt es zwei Möglichkeiten: v k v i V k-1 v j

Berechnung von d ij (k) Zwei Möglichkeiten für kürzesten Weg von v i nach v j : Der Weg p benutzt v k nicht als Zwischenknoten: dann ist d ij (k) = d ij (k-1) Der Weg p benutzt v k als Zwischenknoten: dann setzt sich p aus zwei kürzesten Wegen über v k zusammen, die jeweils nur Zwischenknoten aus V k-1 benutzen: d ij (k) = d ik (k-1) + d kj (k-1) d (k) ij := min (d (k-1) ij, d (k-1) ik + d (k-1) kj ) Bellmansche Optimalitätsgleichung: v k der Wert einer optimalen Lösung eines Problems wird als einfache Funktion der Werte optimaler Lösungen von kleineren Problemen v i ausgedrückt. v j V k-1

Algorithmus von Floyd-Warshall (1) for i:=1 to n do (2) for j:=1 to n do (3) d (0) ij := w(v i,v j } (4) } } ist dynamische Programmierung: (5) for k:=1 to n do (6) for i:=1 to n do (7) for j:=1 to n do (8) d (k) ij := min (d (k-1) ij, d (k-1) ik + d (k-1) kj ) (9) } } }

DP für 0/1-Rucksackprobleme Rucksackproblem HIER: Geg.: n Gegenstände mit Größe (Gewicht) w i und Wert c i, und ein Rucksack der Größe (Gewichtslimit) K, wobei w i, c i, K Z. Gesucht: Menge der in den Rucksack gepackten Gegenstände mit maximalem Gesamtwert; dabei darf das Gesamtgewicht den Wert K nicht überschreiten. ACHTUNG HIER: Alle Eingabewerte sind ganzzahlig! 43 43

DP für 0/1-Rucksackproblem Wie können wir ein Rucksackproblem sinnvoll einschränken? Betrachte nur die ersten k der Objekte Frage: Was nützt uns die optimale Lösung des eingeschränkten Problems für die Lösung des Problems mit k+1 Objekten? Lösung: Variiere die Anzahl der betrachteten Objekte und die Gewichtsschranke 44

Dynamische Programmierung für das 0/1-Rucksackproblem Def.: Für ein festes i {1,,n} und ein festes W {0,,K} sei R(i,W) das eingeschränkte Rucksackproblem mit den ersten i Objekten mit Gewichten w j, Werten c j (j=1,...,i) und Gewichtslimit W. Wir legen eine Tabelle T(i,W) an für die Werte i=0,...,n und W=0,...,K, wobei an Position T(i,W) folgende Werte gespeichert werden: F(i,W): optimaler Lösungswert für Problem R(i,W) D(i,W): die dazugehörige optimale Entscheidung über das i-te Objekt

Dynamische Programmierung für das 0/1-Rucksackproblem Def.: D(i,W)=1: Für ein wenn festes in i {1,,n} und R(i,W) optimal ein ist, festes das i-te W {0,,K} sei R(i,W) Element einzupacken das eingeschränkte Rucksackproblem D(i,W)=0: sonst mit den ersten i Objekten mit Gewichten w j, Werten c j (j=1,...,i) und Gewichtslimit W. F(n,K) ist dann der Wert einer optimalen Wir legen eine Tabelle T(i,W) an für die Werte Rucksackbepackung für unser Originalproblem i=0,...,n und W=0,...,K, wobei an Position T(i,W) folgende Werte gespeichert werden: F(i,W): optimaler Lösungswert für Problem R(i,W) D(i,W): die dazugehörige optimale Entscheidung über das i-te Objekt

Dynamische Programmierung für das 0/1-Rucksackproblem Wie können wir den Wert F(i,W) aus bereits bekannten Lösungen der Probleme F(i-1,W ) berechnen? F(i,W) := max { F(i-1,W-w i )+c i ), F(i-1,W) } entweder i-tes Element wird eingepackt: dann muss ich die optimale Lösung betrachten, die in R(i-1,W-w i ) gefunden wurde. oder i-tes Element wird nicht eingepackt: dann erhält man den gleichen Lösungswert wie bei R(i-1,W).

Dynamische Programmierung für das 0/1-Rucksackproblem Wie können wir den Wert F(i,W) aus bereits bekannten Lösungen der Probleme F(i-1,W ) berechnen? F(i,W) := max { F(i-1,W-w i )+c i ), F(i-1,W) } Bellmansche Optimalitätsgleichung 48

Dynamische Programmierung für Wie können wir den Wert F(i,W) aus bereits bekannten Lösungen der Probleme F(i-1,W ) berechnen? F(i,W) := max { F(i-1,W-w i )+c i ), F(i-1,W) } Randwerte: das 0/1-Rucksackproblem F(0,W) := 0 für alle W:=0,.,K Falls W<w i, dann passt Gegenstand i nicht mehr in den Rucksack für das eingeschränkte Problem mit Gewicht W K. 49

Algorithmus DP für Rucksackproblem (1) for W:=0 to K do F(0,W) := 0 // Initialisierung (2) for i:=1 to n do { (3) for W:=0 to w i -1 do // Gegenstand i zu groß (4) F(i,W) := F(i-1,W); D(i,W) := 0 (5) for W:=w i to K do { (6) if F(i-1,W-w i )+c i > F(i-1,W) then { (7) F(i,W):= F(i-1,W-w i )+c i ); D(i,W) := 1 } (8) else { F(i,W):= F(i-1,W); D(i,W) := 0 } (9) } } 50

Beispiel: K=9 n=7 i 1 2 3 4 5 6 7 c i 6 5 8 9 6 7 3 w i 2 3 6 7 5 9 4 i \ W 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 6 6 6 6 6 6 6 6 2 0 0 6 6 6 11 11 11 11 11 3 0 0 6 6 6 11 11 11 14 14 4 0 0 6 6 6 11 11 11 14 15 5 0 0 6 6 6 11 11 12 14 15 6 0 0 6 6 6 11 11 12 14 15 7 0 0 6 6 6 11 11 12 14 15 52

Frage: Wie können wir aus dem optimalen Lösungswert die Lösung berechnen? Wir haben in T[i,W] gespeichert: F(i,W) und D(i,W) Wir wissen: F(n,K) enthält den optimalen Lösungswert für unser Originalproblem Für Problem R(n,K): Starte bei F(n,K): Falls D(n,K)=0, dann packen wir Gegenstand n nicht ein. Gehe weiter zu Problem R(n-1,K). Falls D(n,K)=1, dann packen wir Gegenstand n ein. Damit ist das für die ersten n-1 Gegenstände erlaubte Gewichtslimit K-w n. Gehe weiter zu Problem R(n-1,K-w n )

Beispiel: K=9 n=7 i 1 2 3 4 5 6 7 c i 6 5 8 9 6 7 3 w i 2 3 6 7 5 9 4 i \ W 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 6 6 6 6 6 6 6 6 2 0 0 6 6 6 11 11 11 11 11 3 0 0 6 6 6 11 11 11 14 14 4 0 0 6 6 6 11 11 11 14 15 5 0 0 6 6 6 11 11 12 14 15 6 0 0 6 6 6 11 11 12 14 15 7 0 0 6 6 6 11 11 12 14 15 Die optimale Lösung besteht aus den Objekten 1 und 4

Analyse DP für Rucksackproblem Laufzeit der Berechnung der Werte F(i,W) und D(i,W): O(nK) Laufzeit der Berechnung der Lösung aus der Tabelle: O(n) Frage: Ist diese Laufzeit polynomiell? Antwort: NEIN, denn die Rechenzeit muss auf die Länge (genauer die Bitlänge) der Eingabe bezogen werden. 56

Analyse DP für Rucksackproblem Antwort: NEIN, denn die Rechenzeit muss auf die Länge (genauer die Bitlänge) der Eingabe bezogen werden. Wenn alle Zahlen der Eingabe nicht größer als 2 n sind und K=2 n, dann ist die Länge der Eingabe Θ(n 2 ), denn: (2n+1 Eingabezahlen)*(Kodierungslänge) Aber die Laufzeit ist von der Größenordnung n2 n und damit exponentiell in der Inputlänge. Wenn aber alle Zahlen der Eingabe in O(n 2 ) sind, liegt die Eingabelänge im Bereich zwischen Ω(n) und O(n log n). Dann ist die Laufzeit in O(n 3 ) und damit polynomiell.

Analyse DP für Rucksackproblem Rechenzeiten, die exponentiell sein können, aber bei polynomiell kleinen Zahlen in der Eingabe polynomiell sind, heißen pseudopolynomiell. Theorem: Das 0/1-Rucksackproblem kann mit Hilfe von Dynamischer Programmierung in pseudopolynomieller Zeit gelöst werden. In der Praxis kann man Rucksackprobleme meist mit Hilfe von DP effizient lösen, obwohl das Problem NP-schwierig ist (da die auftauchenden Zahlen relativ klein sind). 58

Analyse DP für Rucksackproblem Das besprochene DP-Verfahren heißt Dynamische Programmierung durch Gewichte. Denn wir betrachten die Lösungswerte als Funktion der Restkapazitäten im Rucksack. Durch Vertauschung der Rollen von Gewicht und Wert kann auch Dynamische Programmierung durch Werte durchgeführt werden. Dort betrachtet man alle möglichen Lösungswerte und überlegt, wie man diese mit möglichst wenig Gewicht erreichen kann. 59

Analyse DP für Rucksackproblem In der Praxis kann man Rucksackprobleme meist mit Hilfe von DP effizient lösen, obwohl das Problem NP-schwierig ist (da die auftauchenden Zahlen i.a. polynomiell in n sind). 60