Julian Arz, Timo Bingmann, Sebastian Schlag INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS KIT Julian Universität Arz, des Timo LandesBingmann, Baden-Württemberg Sebastian und Schlag nationales 2. Übung Forschungszentrum Algorithmen in der Helmholtz-Gemeinschaft I Institut für Theoretische www.kit.edu Informatik
Inhalt Organisatorisches Klausur Dynamische Programmierung Faltungscodes und der Viterbi-Algorithmus Lineare Programmierung 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Organisatorisches Klausur am 28.7.24! Anmeldung bis einschließlich 22.7.24 Erlaubte Hilfsmittel für die Klausur: blauer oder schwarzer Stift ein handbeschriebenes DIN-A4 Blatt (beidseitig) maschinenerzeugte Blätter werden eingesammelt! für die Identifikation: Studentenausweis 3 Julian Arz, Timo Bingmann, Sebastian Schlag
Organisatorisches Bonuspunkte für die Klausur Insgesamt: 296 normale Übungspunkte erreichbar (Die 2 Zusatzpunkte sind nicht in % enthalten) x Übungspunkten werden linear skaliert auf [0, 3] Bonuspunkte (bis zu 5%) in der Klausur: x < 74 Punkte 0 Bonuspunkte, 74 x < 48 Punkte Bonuspunkt, 48 x < 222 Punkte 2 Bonuspunkte, 222 x Punkte 3 Bonuspunkte. 4 Julian Arz, Timo Bingmann, Sebastian Schlag
Dynamische Programmierung Greedy funktioniert nie (in Klausuren) Bei realen Problem ist Greedy aber oft gut genug. 5 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Subarray Problem Problem: Gegeben ein Array von Zahlen (positiv, negativ), finde das (zusammenhängende) Teilarray mit der größten Summe. 2,, 3, 4,, 2,, 5, 4 6 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Subarray Problem Problem: Gegeben ein Array von Zahlen (positiv, negativ), finde das (zusammenhängende) Teilarray mit der größten Summe. 2,, 3, 4,, 2,, 5, 4 6 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Subarray Problem Problem: Gegeben ein Array von Zahlen (positiv, negativ), finde das (zusammenhängende) Teilarray mit der größten Summe. Trivialer Algorithmus in O ( n 2) 2,, 3, 4,, 2,, 5, 4 berechne die Summe aller Teilarrays (zwei For-Schleifen) Besser: dynamische Programmierung verwenden O(n) 6 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Subarray Problem Problem: Gegeben ein Array von Zahlen (positiv, negativ), finde das (zusammenhängende) Teilarray mit der größten Summe. Algorithmus: scanne einmal über das Array: 2,, 3, 4,, 2,, 5, 4 Function largest_cont_subseq(a Array of N) : Z overall_max=a[0] : N; cur_max=a[0] : N; for i := to size(a) do cur_max = max(a[i], cur_max + A[i]); overall_max = max(overall_max, cur_max); return overall_max 6 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Subarray Problem Problem: Gegeben ein Array von Zahlen (positiv, negativ), finde das (zusammenhängende) Teilarray mit der größten Summe. Function largest_cont_subseq(a Array of N) : Z overall_max=a[0] : N; cur_max=a[0] : N; for i := to size(a) do cur_max = max(a[i], cur_max + A[i]); overall_max = max(overall_max, cur_max); return overall_max original: -2,, -3, 4, -, 2,, -5, 4 cur_max: -2,, -2, 4, 3, 5, 6,, 5 7 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Submatrix Problem Problem: Gegeben eine n n Matrix M über Z, finde die Teilmatrix, die die größte Summe hat. Summe=Max! Brute-Force: alle Teilmatrizen ausrechnen ( pro Teilmatrix O n 2) Zeit ( 2 O n 4) Teilmatrizen 3 insgesamt O (n 6) 8 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Submatrix Problem Problem: Gegeben eine n n Matrix M über Z, finde die Teilmatrix, die die größte Summe hat. Summe=Max! Summe S_i,j Besser: Dinge vorberechnen errechne Matrix S: S i,j = Elemente links-oberhalb von M i,j einschließlich der Zeile i und Spalte j 9 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Submatrix Problem Problem: Gegeben eine n n Matrix M über Z, finde die Teilmatrix, die die größte Summe hat. A B Summe=Max! C D E Besser: Dinge vorberechnen errechne Matrix S: S i,j = Elemente links-oberhalb von M i,j einschließlich der Zeile i und Spalte j 2 pro Teilmatrix O() Zeit, insgesamt O (n 4) 9 Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Submatrix Problem Summe=Max! Noch besser: Dinge vorberechen + Dynamische Programmierung Prefixsummen der Spalten von M in Matrix S speichern S i,j = il= M l,j Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Submatrix Problem i K Summe=Max! j A Summe Noch besser: Dinge vorberechen + Dynamische Programmierung Prefixsummen der Spalten von M in Matrix S speichern S i,j = il= M l,j 2 probiere alle Zeilenpaare i < j pro Zeilenpaar berechene Array A[,..., n] 2 A[K ] = j l=i M l,k = S j,k S i,k Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Submatrix Problem i K Summe=Max! j A Summe Noch besser: Dinge vorberechen + Dynamische Programmierung Prefixsummen der Spalten von M in Matrix S speichern S i,j = il= M l,j 2 probiere alle Zeilenpaare i < j pro Zeilenpaar berechene Array A[,..., n] 2 A[K ] = j l=i M l,k = S j,k S i,k 3 auf A Maximum Subarray Problem lösen Julian Arz, Timo Bingmann, Sebastian Schlag
Maximum Submatrix Problem i K Summe=Max! j A Summe Noch besser: Dinge vorberechen + Dynamische Programmierung Prefixsummen der Spalten von M in Matrix S speichern O ( n 2) Zeit 2 probiere alle Zeilenpaare i < j O ( n 2) viele Zeilenpaare 2 pro Zeilenpaar O(n) 3 insgesamt O (n 3) Julian Arz, Timo Bingmann, Sebastian Schlag
Faltungscodes und der Viterbi-Algorithmus 802. WLAN Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister I s 2 Output A Output B I s Input I s s 2 s I s 2 Output C 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister 0 = Output A = Output B 0 Input 0 0 0 0 = Output C Input: Output: 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister 0 0 0 = Output A 0 = Output B 0 Input 0 0 0 0 = Output C Input: Output: 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister = Output A 0 = Output B 0 Input 0 0 0 = Output C Input: Output: 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister 0 = Output A = Output B Input 0 0 0 = Output C Input: Output: 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister 0 0 = Output A = Output B 0 Input 0 0 0 = Output C Input: 0 Output: 0 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister 0 0 = Output A = Output B 0 0 Input 0 0 0 0 = Output C Input: Output: 0 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister 0 0 = Output A 0 = Output B 0 Input 0 0 0 0 Input: Output: 0 0 = Output C Redundanz in Übertragung ermöglicht Fehlerkorrektur! 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Schieberegister 0 0 = Output A 0 = Output B 0 Input 0 0 0 0 Das 802.a Schieberegister Input: Output: 0 0 = Output C Output A Redundanz Input s in Übertragung s 2 s ermöglicht 3 s 4 s Fehlerkorrektur! 5 s 6 2 Julian Arz, Timo Bingmann, Sebastian Schlag Output InstitutBfür Theoretische Informatik
Ein Faltungscode als Mealy-Automat 0/0 0/ / / 0/ 0/0 / / Legende: Kantenbeschriftung ist Input/Output. 3 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Trellis t 0 0 t 0 t 2 0 t 3 0 t 4 0 t 5 0 t 6 0 0 0 Input: Output: 0 4 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Trellis t 0 0 t 0 t 2 0 t 3 0 t 4 0 t 5 0 t 6 0 0 0 Input: Output: 0 4 Julian Arz, Timo Bingmann, Sebastian Schlag
Ein Faltungscode als Trellis t 0 0 t 0 t 2 0 t 3 0 t 4 0 t 5 0 t 6 0 0 0 Input: Output: 0 Aber, wie dekodiert man 0? 4 Julian Arz, Timo Bingmann, Sebastian Schlag
Faltungscode: Fehlerkorrektur? Dekodiere: 0? Ziel: Finde die Eingabe, deren Kodierung die geringste Hamming-Distanz (Einzelbit-Fehler) zum gelesenen Codewort hat. 5 Julian Arz, Timo Bingmann, Sebastian Schlag
Faltungscode: Fehlerkorrektur? Dekodiere: 0? Ziel: Finde die Eingabe, deren Kodierung die geringste Hamming-Distanz (Einzelbit-Fehler) zum gelesenen Codewort hat. Erster Algorithmus: Enumeriere alle gültige Codewörter, berechne Hamming-Distanz und finde so die wahrscheinlichste Eingabe (maximum likelyhood detection). 5 Julian Arz, Timo Bingmann, Sebastian Schlag
Dekodiere: 0 Eingabe = Codewort Distanz = 0 0 0 0 0 0 = 0 0 0 = 0 0 0 8 = 0 0 0 8 = 0 0 0 = 0 = 0 0 0 8 = 0 0 2 = 0 0 0 = = 0 8 = 0 8 = 0 0 0 = 0 = 0 0 4 = 0 8 6 Julian Arz, Timo Bingmann, Sebastian Schlag
Dekodiere: 0 Eingabe = Codewort Distanz = 0 0 0 0 0 0 = 0 0 0 = 0 0 0 8 = 0 0 0 8 = 0 0 0 = 0 = 0 0 0 8 = 0 0 2 = 0 0 0 = = 0 8 = 0 8 = 0 0 0 = 0 = 0 0 4 = 0 8 6 Julian Arz, Timo Bingmann, Sebastian Schlag
Dekodiere im Trellis Dekodiere: 0? t 0 0 t 0 t 2 0 t 3 0 t 4 0 t 5 0 t 6 0 0 0 2 7 Julian Arz, Timo Bingmann, Sebastian Schlag
Dekodiere im Trellis Dekodiere: 0? t 0 2 t t 2 2 2 t 3 t 4 3 t 5 t 6 2 2 2 2 2 2 3 0 2 2 0 3 8 Julian Arz, Timo Bingmann, Sebastian Schlag
Dekodiere im Trellis Dekodiere: 0? t 0 t 2 0 2 t 2 3 2 2 t 3 5 t 4 6 3 t 5 3 t 6 4 2 2 3 5 2 2 2 2 2 7 3 0 2 4 2 4 7 0 3 2 2 Verwende kürzeste Wege in einem DAG: 5 8 Julian Arz, Timo Bingmann, Sebastian Schlag
Dekodiere im Trellis Dekodiere: 0? t 0 t 2 0 2 t 2 3 2 2 t 3 5 t 4 6 3 t 5 3 t 6 4 2 2 3 5 2 2 2 2 2 7 3 0 2 4 2 4 7 0 3 2 2 5 Verwende kürzeste Wege in einem DAG: dieser entspricht. 8 Julian Arz, Timo Bingmann, Sebastian Schlag
Der Viterbi-Algorithmus (Pseudocode) t k w[k ][] w[k ][] w[k ][] w[k ][] w[k][z] = t k w[k][] w[k][] w[k][] w[k][] min v Vorgänger(z) Procedure Viterbi(A : Folge, G : Schichtengraph) w[0][z] := 0, pre[0][z] := nil z Zustände(G) foreach k =,..., #Schichten(G) foreach z Zustände(G) Wähle unter allen v Vorgängern(z) denjenigen mit besten Kosten unter w[k ][v], Kante(v, z) und A[k] aus. Setze w[k][z] und pre[k][z]. wobei im Beispiel Zustände(G) = {,,, }, Vorgänger(z) die Vorgängerzustände von z sind und w[k ][v] + Hamming(A[k], Kante(v, z)) 9 Julian Arz, Timo Bingmann, Sebastian Schlag
Der Viterbi-Algorithmus Schichten-Graph erlaubt effiziente Implementierung des kürzesten Pfad Algorithmus mit nur einer Variable pro Ebenen im Trellis oder Knoten im Automaten. Der Viterbi-Algorithmus funktioniert auch in allgemeineren Fällen: Wahrscheinlichkeiten statt Distanzen (Logarithmierungstrick) Beste Pfade in Hidden Markov Models (siehe Automaten). 20 Julian Arz, Timo Bingmann, Sebastian Schlag
Der Viterbi-Algorithmus Schichten-Graph erlaubt effiziente Implementierung des kürzesten Pfad Algorithmus mit nur einer Variable pro Ebenen im Trellis oder Knoten im Automaten. Der Viterbi-Algorithmus funktioniert auch in allgemeineren Fällen: Wahrscheinlichkeiten statt Distanzen (Logarithmierungstrick) Beste Pfade in Hidden Markov Models (siehe Automaten). Weitere wichtige Optimierung: Da der Faltungscode im Beispiel nur vier Zustände hat und jeder Knoten genau zwei Ausgangskanten hat, gibt von jedem Knoten in Schicht k zu jedem Knoten in Schicht k + 3 mehr als ein Pfad. Bei der Berechnung von Schicht k + 3 steht der kürzeste Teilpfad von Schicht 0 bis k bereits fest. Die entsprechenden Bits können schon ausgegeben werden. 20 Julian Arz, Timo Bingmann, Sebastian Schlag
Lineare Programmierung 2 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Eine Süßwarenfabrik produziert zwei Süßigkeiten A und B. Der Unternehmer möchte die Tagesproduktion unter folgenden Kriterien optimieren: Der erzielte Produktionswert der Fabrik soll maximiert werden: ein Stück A ist 50 Wert und ein B sogar 70. Die Maschinen der Fabrik produzieren höchstens kg von A und 70 kg von B an einem Tag. Es können höchstens kg Zucker und 5 kg Schokolade pro Tag angeliefert werden. Süßigkeit A besteht zu 80% aus Zucker und 6% Schokolade. Süßigkeit B besteht zu 70% aus Zucker und 20% Schokolade. Wie viele kg von A und B sollen pro Tag produziert werden? 22 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Eine Süßwarenfabrik produziert zwei Süßigkeiten A und B. Der Unternehmer möchte die Tagesproduktion x A und x B unter folgenden Kriterien optimieren: Der erzielte Produktionswert der Fabrik soll maximiert werden: ein Stück A ist 50 Wert und ein B sogar 70. Die Maschinen der Fabrik produzieren höchstens kg von A und 70 kg von B an einem Tag. Es können höchstens kg Zucker und 5 kg Schokolade pro Tag angeliefert werden. Süßigkeit A besteht zu 80% aus Zucker und 6% Schokolade. Süßigkeit B besteht zu 70% aus Zucker und 20% Schokolade. Wie viele kg von A und B sollen pro Tag produziert werden? 22 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Eine Süßwarenfabrik produziert zwei Süßigkeiten A und B. Der Unternehmer möchte die Tagesproduktion x A und x B unter folgenden Kriterien optimieren: Der erzielte Produktionswert f (x) der Fabrik soll maximiert werden: ein Stück A ist 50 Wert und ein B sogar 70. Die Maschinen der Fabrik produzieren höchstens kg von A und 70 kg von B an einem Tag. Es können höchstens kg Zucker und 5 kg Schokolade pro Tag angeliefert werden. Süßigkeit A besteht zu 80% aus Zucker und 6% Schokolade. Süßigkeit B besteht zu 70% aus Zucker und 20% Schokolade. Wie viele kg von A und B sollen pro Tag produziert werden? 22 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Eine Süßwarenfabrik produziert zwei Süßigkeiten A und B. Der Unternehmer möchte die Tagesproduktion x A und x B unter folgenden Kriterien optimieren: Der erzielte Produktionswert f (x) der Fabrik soll maximiert werden: ein Stück A ist 50 Wert und ein B sogar 70. f (x) = 50 x A + 70 x B für x = (x A, x B ) t R 2. Die Maschinen der Fabrik produzieren höchstens kg von A und 70 kg von B an einem Tag. Es können höchstens kg Zucker und 5 kg Schokolade pro Tag angeliefert werden. Süßigkeit A besteht zu 80% aus Zucker und 6% Schokolade. Süßigkeit B besteht zu 70% aus Zucker und 20% Schokolade. Wie viele kg von A und B sollen pro Tag produziert werden? 22 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Eine Süßwarenfabrik produziert zwei Süßigkeiten A und B. Der Unternehmer möchte die Tagesproduktion x A und x B unter folgenden Kriterien optimieren: Der erzielte Produktionswert f (x) der Fabrik soll maximiert werden: ein Stück A ist 50 Wert und ein B sogar 70. f (x) = 50 x A + 70 x B für x = (x A, x B ) t R 2. Die Maschinen der Fabrik produzieren höchstens kg von A und 70 kg von B an einem Tag. x A kg und x B 70 kg. Es können höchstens kg Zucker und 5 kg Schokolade pro Tag angeliefert werden. Süßigkeit A besteht zu 80% aus Zucker und 6% Schokolade. Süßigkeit B besteht zu 70% aus Zucker und 20% Schokolade. Wie viele kg von A und B sollen pro Tag produziert werden? 22 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Eine Süßwarenfabrik produziert zwei Süßigkeiten A und B. Der Unternehmer möchte die Tagesproduktion x A und x B unter folgenden Kriterien optimieren: Der erzielte Produktionswert f (x) der Fabrik soll maximiert werden: ein Stück A ist 50 Wert und ein B sogar 70. f (x) = 50 x A + 70 x B für x = (x A, x B ) t R 2. Die Maschinen der Fabrik produzieren höchstens kg von A und 70 kg von B an einem Tag. x A kg und x B 70 kg. Es können höchstens kg Zucker und 5 kg Schokolade pro Tag angeliefert werden. Süßigkeit A besteht zu 80% aus Zucker und 6% Schokolade. Süßigkeit B besteht zu 70% aus Zucker und 20% Schokolade. 0,8 x A + 0,7 x B kg und 0,06 x A + 0,2 x B 5 kg. Wie viele kg von A und B sollen pro Tag produziert werden? 22 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik abstrakt Maximiere die Zielfunktion f (x) für x = (x A, x B ) t R 2 : unter folgenden Bedingungen: x A kg x B 70 kg 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg x A 0 und x B 0 f (x) = 50 x A + 70 x B 23 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Matrixform maximiere unter 50 x A + 70 x B x A kg x B 70 kg 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg x 0 24 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Matrixform maximiere unter 50 x A + 70 x B x A kg x B 70 kg 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg x 0 oder: ( ) t 0 kg 50 max x 70 x R 2, x 0, 0 0,8 0,7 x 70 kg kg 0,06 0,2 5 kg 24 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik Matrixform maximiere unter 50 x A + 70 x B x A kg x B 70 kg 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg x 0 oder: ( ) t 0 kg 50 max x 70 x R 2, x 0, 0 0,8 0,7 x 70 kg kg 0,06 0,2 5 kg (Eine) allgemeine Matrixform: max{c t x x R n, x 0, Ax b} mit A R m n, b R m, c R n. 24 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 60 x B 70 kg 40 x A kg 20 20 40 60 80 x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 60 x B 70 kg 40 x A kg 20 20 40 60 80 x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg 40 x A kg 20 20 40 60 80 x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg 40 x A kg 20 zulässige Lösungen 20 40 60 80 x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg 40 20 c = ( ) 50 70 zulässige Lösungen 20 40 60 80 x A kg x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg 40 20 c = ( ) 50 70 zulässige Lösungen 20 40 60 80 x A kg x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg 40 20 c = ( ) 50 70 zulässige Lösungen 20 40 60 80 x A kg x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg 40 20 c = ( ) 50 70 zulässige Lösungen 20 40 60 80 x A kg x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg 40 20 c = ( ) 50 70 zulässige Lösungen 20 40 60 80 x A kg x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg x opt = (80.5, 50.85) 40 20 c = ( ) 50 70 zulässige Lösungen 20 40 60 80 x A kg x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Süßwarenfabrik graphisch 80 x B 0,8 x A + 0,7 x B kg 0,06 x A + 0,2 x B 5 kg 60 x B 70 kg x opt = (80.5, 50.85) 40 20 c = ( ) 50 70 zulässige Lösungen 20 40 60 80 Bester Wert: c t x opt = 7585 x A kg x A 25 Julian Arz, Timo Bingmann, Sebastian Schlag
Matrixformen linearer Programme Eine Matrixform: max{c t x x R n, x 0, Ax b}. Andere Formen: max{c t x x R n, Ax b} 2 max{c t x x R n, x 0, Ax = b} 3 max{c t x x R n, Ax b} 4 min{c t x x R n, Ax b} 5 min{c t x x R n, x 0, Ax = b} 6 min{c t x x R n, x 0, Ax b} Jede Form ist in jede andere Form transformierbar! 26 Julian Arz, Timo Bingmann, Sebastian Schlag
Lösen von linearen Programmen Textbook Methode: Simplex-Algorithmus 947 von George Dantzig erfunden. Kann exponentielle Laufzeit haben, generell aber sehr schnell. Polynomialer (!) Algorithmus von Narendra Karmarkar in 984. Heute praktischer Einsatz: CPLEX, Matlab, QSOpt, etc. Forschung: MILP Mixed-Integer-LPs (einige ganzzahlige Variablen) 27 Julian Arz, Timo Bingmann, Sebastian Schlag
Verbindung zu Graph-Problemen Graph (V, E) mit Gewichten c : E R +. max{f (x) x R V, x 0,...} oder max{f (x) x R E, x 0,...} 28 Julian Arz, Timo Bingmann, Sebastian Schlag
Verbindung zu Graph-Problemen Graph (V, E) mit Gewichten c : E R +. max{f (x) x R V, x 0,...} oder max{f (x) x R E, x 0,...} Kürzeste Wege: { } max d v d R V, d s = 0, d w d v + c(v, w) (v, w) E v V 28 Julian Arz, Timo Bingmann, Sebastian Schlag
Verbindung zu Graph-Problemen Graph (V, E) mit Gewichten c : E R +. 2 s 0 2 3 max{f (x) x R V, x 0,...} oder max{f (x) x R E, x 0,...} Kürzeste Wege: { } max d v d R V, d s = 0, d w d v + c(v, w) (v, w) E v V 28 Julian Arz, Timo Bingmann, Sebastian Schlag
Verbindung zu Graph-Problemen Graph (V, E) mit Gewichten c : E R +. 3 3 3 2 3 s 0 2 3 max{f (x) x R V, x 0,...} oder max{f (x) x R E, x 0,...} Kürzeste Wege: { } max d v d R V, d s = 0, d w d v + c(v, w) (v, w) E v V 28 Julian Arz, Timo Bingmann, Sebastian Schlag
Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c : E R +. { } min c(e)x e x R E, x 0,... e E 29 Julian Arz, Timo Bingmann, Sebastian Schlag
Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c (R + ) E. min ct x x R E, x 0, 30 Julian Arz, Timo Bingmann, Sebastian Schlag
Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c (R + ) E. min ct x x R E, x 0, x e = V, e E 30 Julian Arz, Timo Bingmann, Sebastian Schlag
Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c (R + ) E. min ct x x R E, x 0, x e = V, e E A V A : e E(G[A]) x e A wobei A über alle nicht-leere Knotenteilmengen läuft und E(G[A]) alle Kanten mit Endknoten in A sind. 30 Julian Arz, Timo Bingmann, Sebastian Schlag
Minimum Spanning Tree LP Zusammenhängender Graph (V, E) mit Gewichten c (R + ) E. min ct x x R E, x 0, x e = V, e E A V A : e E(G[A]) x e A wobei A über alle nicht-leere Knotenteilmengen läuft und E(G[A]) alle Kanten mit Endknoten in A sind. 30 Julian Arz, Timo Bingmann, Sebastian Schlag
Dualitätssatz der LP Ist ein lineares Programm in der Form max{c t x x R n, Ax b} gegeben, so lautete das dazu duale Programm min{y t b y R m, y 0, y t A = c t }. 3 Julian Arz, Timo Bingmann, Sebastian Schlag
Dualitätssatz der LP Ist ein lineares Programm in der Form max{c t x x R n, Ax b} gegeben, so lautete das dazu duale Programm min{y t b y R m, y 0, y t A = c t }. Existieren eine zulässige Lösung x 0 R n des ersten Programms und eine zulässige Lösung y 0 R m des dualen Programms, dann sind x 0 und y 0 genau dann optimale Lösungen, wenn also c t x 0 = y t 0 b, max{c t x x R n, Ax b} = min{y t b y R m, y 0, y t A = c t }. 3 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 3 2 0 0 0 0 2 0 0 0 3 x 4 2 2 0 0 2 x 5 2 0 0 2 x 6 c c n f T = a, a,n b v....... a m, a m,n b m v m 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 3 2 0 0 0 0 2 0 0 0 3 x 4 2 2 0 0 2 x 5 2 0 0 2 x 6 Die Blandsche Pivot-Regel wählt als Pivot-Spalte s =, da c = < 0. Die Quotienten sind b a, = 3 2, b 2 a 2, = 2 2 und a 3, 0. Hiervon wird der kleinste als Pivot-Zeile gewählt, also t = 2. 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 3 2 0 0 0 0 2 0 0 0 3 x 4 0,5 0 0,5 0 x 5 2 0 0 2 x 6 Nun wird die Pivot-Operation auf Spalte s = und Zeile t = 2 mit Wert a 2, = 2 angewandt. Zuerst normiert man die Zeile t = 2 durch Multiplikation mit 2. 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 0 2,5 3 0 0,5 0 0 2 2 0 x 4 0,5 0 0,5 0 x 0 2,5 0 0 0,5 3 x 6 Dann transformiert man die Spalte s = durch entsprechende Addition eines Vielfachen der Zeile t = 2 auf den t-ten Einheitsspaltenvektor. 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 0 2,5 3 0 0,5 0 0 2 2 0 x 4 0,5 0 0,5 0 x 0 2,5 0 0 0,5 3 x 6 Die Blandsche Pivot-Regel wählt als Pivot-Spalte s = 2, da c 2 = 2,5 < 0. Die positiven Quotienten sind b 2 a 2,2 = 0,5, b 3 a 3,2 = 3 2,5 und a,2 0. Hiervon wird der kleinste als Pivot-Zeile gewählt, also t = 3. 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 0 2,5 3 0 0,5 0 0 2 2 0 x 4 0,5 0 0,5 0 x 0 0 0 0,2 0,4,2 x 6 Wende die Pivot-Operation auf Spalte s = 2 und Zeile t = 3 mit Normierung 2,5 an. 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 0 0 3 0 4 0 0 2 0,6 0,8 3,4 x 4 0 0 0,4 0,2 0,4 x 0 0 0 0,2 0,4,2 x 2 Transformiere die Spalte s = 2 auf den t-ten Einheitsspaltenvektor. 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 0 0 3 0 4 0 0 2 0,6 0,8 3,4 x 4 0 0 0,4 0,2 0,4 x 0 0 0 0,2 0,4,2 x 2 Die Blandsche Pivot-Regel wählt als Pivot-Spalte s = 3, da c 3 = 3 < 0. Die positiven Quotienten sind b a,3 = 3,4 2, a 2,3 0 und a 3,3 0. Hiervon wird der kleinste als Pivot-Zeile gewählt, also t =. 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 0 0 3 0 4 0 0 0,5 0,3 0,4,7 x 4 0 0 0,4 0,2 0,4 x 0 0 0 0,2 0,4,2 x 2 Wende die Pivot-Operation auf Spalte s = 3 und Zeile t = mit Normierung 2 an. 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 0 0 0,5 0, 2,2 9, 0 0 0,5 0,3 0,4,7 x 3 0 0 0,5 0, 0,2 2, x 0 0 0 0,2 0,4,2 x 2 Transformiere die Spalte s = 3 auf den t-ten Einheitsspaltenvektor.: 32 Julian Arz, Timo Bingmann, Sebastian Schlag
Beispiel: Simplex-Algorithmus max t 3 x x R 3, x 0, 2 2 0 2 2 x 3 2 2 2 [x ] [x 2 ] [x 3 ] [x 4 ] [x 5 ] [x 6 ] 0 0 0,5 0, 2,2 9, 0 0 0,5 0,3 0,4,7 x 3 0 0 0,5 0, 0,2 2, x 0 0 0 0,2 0,4,2 x 2 Da alle Einträge von c nicht-negativ sind, ist das Simplex-Tableau nun final und der Algorithmus bricht ab. Aus dem Tableau kann man nun x opt und f (x) ablesen. 32 Julian Arz, Timo Bingmann, Sebastian Schlag