Vorlesung 04: Dualität & Zweiphasen
Grundlagen Operations Research
Zweiphasen
Kein einfacher Start
Kein zulässiger Startpunkt
Bisher lieferte stets eine zulässige Startlösung. Bei -Restriktionen gilt das nicht mehr:
Mit Schlupfvariablen:
Für folgt , : unzulässig.
Der zulässige Bereich
Der Ursprung (×) liegt außerhalb des zulässigen Bereichs.
Frage: Wo darf der Simplex dann starten?
Er braucht erst eine zulässige Basislösung. Genau die liefert Phase 1.
Künstliche Variablen
Wir fügen in die -Zeilen künstliche Variablen ein:
Jetzt ist , , eine formal zulässige Startlösung.
Inhaltlich zulässig erst, wenn : die künstlichen Variablen müssen wieder aus der Basis.
Grundsätzliches Vorgehen
- Phase 1: künstliche Variablen eliminieren zulässige Lösung.
- Phase 2: primaler Simplex optimale Lösung.
In Phase 1 minimieren wir die Summe der künstlichen Variablen:
Zielfunktion der ersten Phase
Wir drücken durch die Nichtbasisvariablen aus:
Diese Hilfszielfunktion steuert Phase 1, bis erreicht ist.
Alternative: M-Methode
Statt einer eigenen Phase 1 bestraft die M-Methode die künstlichen Variablen direkt in der Originalzielfunktion: mit sehr großem .
Eine Phase statt zwei, aber numerisch heikler. Wir rechnen mit der Zweiphasenmethode.
Ablauf im Tableau
Phase 1 startet mit in der Basis; die -Zeile wird nur mitgeführt, die Pivotwahl trifft die -Zeile:
| BV | ||||||||
|---|---|---|---|---|---|---|---|---|
| 1 | 1 | −1 | 0 | 0 | 1 | 0 | 8 | |
| 2 | 1 | 0 | −1 | 0 | 0 | 1 | 10 | |
| 1 | 1 | 0 | 0 | 1 | 0 | 0 | 10 | |
| −2 | −1 | 0 | 0 | 0 | 0 | 0 | 0 | |
| −3 | −2 | 1 | 1 | 0 | 0 | 0 | −18 |
-Zeile: unter aufnehmen; minimaler Quotient verlässt die Basis.
Die Tableaufolge
Eine künstliche Variable, die die Basis verlässt, wird gesperrt und im Tableau mit einem Strich markiert:
| BV | ||||||||
|---|---|---|---|---|---|---|---|---|
| 1 | 1 | −1 | 0 | 0 | 1 | 0 | 8 | |
| 2 | 1 | 0 | −1 | 0 | 0 | 1 | 10 | |
| 1 | 1 | 0 | 0 | 1 | 0 | 0 | 10 | |
| −2 | −1 | 0 | 0 | 0 | 0 | 0 | 0 | |
| −3 | −2 | 1 | 1 | 0 | 0 | 0 | −18 |
Start mit Pivot [2]: hinein, hinaus.
| BV | ||||||||
|---|---|---|---|---|---|---|---|---|
| 0 | 1/2 | −1 | 1/2 | 0 | 1 | – | 3 | |
| 1 | 1/2 | 0 | −1/2 | 0 | 0 | – | 5 | |
| 0 | 1/2 | 0 | 1/2 | 1 | 0 | – | 5 | |
| 0 | 0 | 0 | −1 | 0 | 0 | – | 10 | |
| 0 | −1/2 | 1 | −1/2 | 0 | 0 | – | −3 |
-Zeile: unter und ; Quotienten für : Pivot [1/2], hinaus.
| BV | ||||||||
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | −2 | 1 | 0 | – | – | 6 | |
| 1 | 1 | −1 | 0 | 0 | – | – | 8 | |
| 0 | 0 | 1 | 0 | 1 | – | – | 2 | |
| 0 | 1 | −2 | 0 | 0 | – | – | 16 | |
| 0 | 0 | 0 | 0 | 0 | – | – | 0 |
: Phase 1 beendet! Jetzt wählt die -Zeile: unter , einziger positiver Quotient Pivot [1], hinaus.
| BV | ||||||||
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 1 | 2 | – | – | 10 | |
| 1 | 1 | 0 | 0 | 1 | – | – | 10 | |
| 0 | 0 | 1 | 0 | 1 | – | – | 2 | |
| 0 | 1 | 0 | 0 | 2 | – | – | 20 |
Alle -Zeilen-Einträge sind , also optimal: , , .
Grafische Kontrolle
Das Optimum liegt im Eckpunkt , auf der Restriktion .
Dualität
Zwei Sichten, ein Problem
Zu jedem primalen Problem gehört ein duales Problem.
Ein primales Minimierungsproblem mit ausschließlich -Relationen wird zu einem dualen Maximierungsproblem mit ausschließlich -Relationen.
Herleitung über die beste untere Schranke für den optimalen Zielwert des Minimierungsproblems.
Eine untere Schranke für
Primales Problem
Aus der zweiten Restriktion ():
Da :
Frage: Geht es noch besser als 90?
Auf der nächsten Folie suchen Sie beides selbst: links einen Plan, der von oben begrenzt, rechts Gewichte für die Restriktionen, die von unten begrenzen. Wie klein bekommen Sie die Lücke?
Sie sind dran
Bessere Schranken
Primales Problem
Erste Restriktion :
erste zweite Restriktion:
Frage: Welche Linearkombination liefert die schärfste Schranke?
Die beste Linearkombination
Faktoren für die beiden Restriktionen:
- Damit die rechte Seite eine untere Schranke für bleibt, dürfen die Koeffizienten nicht überschreiten:
- Ein negatives würde die -Relation umkehren, die Schranke ginge verloren .
- Die beste Schranke maximiert .
Primales und duales Problem
Frage: Kommt Ihnen das duale Problem bekannt vor?
Ein alter Bekannter
Das duale Problem ist (bis auf die Variablennamen) genau das Frachtführer-Problem aus Vorlesung 1:
Dessen Optimum kennen Sie bereits aus Vorlesung 2: bei .
Die sind die Schattenpreise der primalen Restriktionen. Beide Sichten treffen sich im selben Optimum.
Dualisierungsregeln
Restriktionen unterschiedlichen Typs werden zunächst auf gebracht:
- -Restriktion mit multiplizieren ().
- -Restriktion in zwei Ungleichungen ( und ) aufspalten.
- Die Dualvariable einer -Restriktion wird dadurch unbeschränkt ().
So lässt sich jedes LOP dualisieren.
Gemischte Relationen
Ein Beispiel mit allen drei Relationstypen:
Frage: Wie bringen wir alles auf ?
Transformation auf ≥
Die Regeln von eben, angewandt:
| Restriktion | wird zu | Dualvariable |
|---|---|---|
| (bleibt) | ||
Die -Restriktion liefert zwei Dualvariablen, zusammengefasst , im Vorzeichen unbeschränkt.
Das duale Problem
; unbeschränkt. Für die Rechnung nutzen wir mit .
Startaufstellung
Mit Schlupfvariablen wird die dritte Zeile zu .
Die Startlösung ist unzulässig.
Frage: Welches Verfahren kennt genau diese Situation?
Der duale Simplex aus Vorlesung 3: Pivotzeile ist die unzulässige Zeile .
Ein Pivot genügt
| BV | ||||||||
|---|---|---|---|---|---|---|---|---|
| 2 | −2 | 1 | −1 | 1 | 0 | 0 | 5 | |
| 3 | −3 | 5 | −5 | 0 | 1 | 0 | 2 | |
| 1 | 1 | 2 | −2 | 0 | 0 | 1 | −1 | |
| −20 | 30 | −40 | 40 | 0 | 0 | 0 | 0 |
Einziger negativer Koeffizient der Zeile : unter Pivot [−2].
| BV | ||||||||
|---|---|---|---|---|---|---|---|---|
| 3/2 | −5/2 | 0 | 0 | 1 | 0 | −1/2 | 11/2 | |
| 1/2 | −11/2 | 0 | 0 | 0 | 1 | −5/2 | 9/2 | |
| −1/2 | −1/2 | −1 | 1 | 0 | 0 | −1/2 | 1/2 | |
| 0 | 50 | 0 | 0 | 0 | 0 | 20 | −20 |
Alle und alle -Zeilen-Einträge , also ist das Tableau bereits optimal: .
Warum die -Zeile enthält
Für den Zielfunktionswert des dualen Problems gilt (Vorlesung 2):
Die primale Zielfunktion hat dieselben Koeffizienten:
Die rechten Seiten des dualen Problems sind die Zielfunktionskoeffizienten des primalen: , der Wert unter , steht an der Stelle von .
Primallösung ablesen
Die -Zeile unter den Schlupfvariablen liefert die primale Lösung:
Kontrolle im primalen Problem: ✓ und ✓.
Das duale Optimaltableau enthält die primale Lösung gleich mit. Sie lösen immer beide Probleme auf einmal.
Kontrolle mit Julia
Der Solver übernimmt Phase 1
HiGHS findet selbst eine zulässige Startlösung:
using JuMP, HiGHS
modell = Model(HiGHS.Optimizer)
set_silent(modell)
@variable(modell, X1 >= 0)
@variable(modell, X2 >= 0)
@objective(modell, Max, 2X1 + X2)
@constraint(modell, X1 + X2 >= 8)
@constraint(modell, 2X1 + X2 >= 10)
@constraint(modell, X1 + X2 <= 10)
optimize!(modell)
println("F* = ", objective_value(modell),
" mit X1 = ", value(X1), ", X2 = ", value(X2))F* = 20.0 mit X1 = 10.0, X2 = 0.0
Dualwerte direkt aus JuMP
Für das primale Minimierungsproblem liefert JuMP die Dualwerte der Restriktionen, genau die :
modell = Model(HiGHS.Optimizer)
set_silent(modell)
@variable(modell, X1 >= 0)
@variable(modell, X2 >= 0)
@objective(modell, Min, 5X1 + 9X2)
@constraint(modell, r1, X1 + X2 >= 20)
@constraint(modell, r2, X1 + 3X2 >= 30)
optimize!(modell)
println("F* = ", objective_value(modell))
println("W1 = ", round(dual(r1), digits = 2),
", W2 = ", round(dual(r2), digits = 2))F* = 120.0
W1 = 3.0, W2 = 2.0
Kontrolle des Beispiels
Auch das Beispiel mit gemischten Relationen bestätigt HiGHS:
modell = Model(HiGHS.Optimizer)
set_silent(modell)
@variable(modell, X[1:3] >= 0)
@objective(modell, Min, 5X[1] + 2X[2] - X[3])
@constraint(modell, 2X[1] + 3X[2] + X[3] >= 20)
@constraint(modell, 2X[1] + 3X[2] - X[3] <= 30)
@constraint(modell, X[1] + 5X[2] + 2X[3] == 40)
optimize!(modell)
println("F* = ", objective_value(modell),
" mit X = ", round.(value.(X), digits = 2))F* = -20.0 mit X = [0.0, 0.0, 20.0]
Zusammenfassung
Das Wichtigste auf einen Blick
- Fehlt eine zulässige Startlösung, schaffen künstliche Variablen eine. Die Zweiphasenmethode eliminiert sie in Phase 1.
- Zu jedem primalen Problem gehört ein duales; es entsteht aus der besten unteren Schranke.
- Starke Dualität: primales Minimum = duales Maximum.
- Das duale Optimaltableau liefert die primale Lösung gleich mit.