Grundlagen Operations Research
Grafisch lösen wir nur zwei Variablen.
Reale Optimierungsprobleme (Zuströme in U-Bahnhöfe, Pilgerströme, Losgrößen) haben Tausende Variablen und Nebenbedingungen. Dafür brauchen wir ein systematisches, rechnerisches Verfahren: den Simplex-Algorithmus.
Grafisch bestimmtes Optimum
Heute: rechnerisch statt grafisch.
Mit Schlupfvariablen :
Drei Gleichungen, fünf Variablen: zwei Variablen sind frei wählbar.
Gleich ausprobieren
Auf der nächsten Folie schieben Sie den Plan selbst und sehen dabei , , und . Welche Werte sind am besten Punkt null?
Im Spiel lag der beste Punkt an einer Ecke, und dort waren genau zwei der vier Werte null.
Idee
Wir starten in einer Ecke des Lösungsraums und wandern gezielt zu einer benachbarten Ecke mit besserem Zielfunktionswert, bis keine Verbesserung mehr möglich ist.
Jede Ecke entspricht einer Basislösung: wir lösen das Gleichungssystem nach drei Basisvariablen auf; die übrigen zwei sind null.
Setze (Nichtbasisvariablen). Dann folgt unmittelbar:
Eine zulässige, aber noch nicht optimale Basislösung.
Frage: Welche Variable soll in die Basis aufgenommen werden?
Aus der Zielfunktion :
steigert den Zielwert pro Einheit am stärksten.
in die Basis aufnehmen
Bei gilt:
Frage: Wie weit dürfen wir erhöhen, und wer verlässt dafür die Basis?
Verlässt die Basis (), wird : unzulässig.
Verlässt die Basis (), bleibt : zulässig.
Um die neue Basislösung abzulesen, isolieren wir die Basisvariablen (jede nur noch in einer Gleichung):
Der Informationsgehalt des Gleichungssystems bleibt erhalten.
Ziel: isolieren, nur noch in der zweiten Gleichung.
Die zweite Gleichung enthält . Hier wird isoliert.
Multiplikation der zweiten Gleichung mit : der Koeffizient von wird .
Subtraktion der zweiten von der ersten Gleichung: verschwindet aus Gleichung 1.
Addition des 30-fachen der zweiten Gleichung zur Zielfunktionszeile. Ablesbar: , , .
Die Zielfunktionszeile lautet umgestellt:
Frage: Sehen Sie noch Verbesserungspotenzial?
Eine Erhöhung von steigert weiter.
in die Basis aufnehmen
bleibt Nichtbasisvariable. Die ersten beiden Gleichungen ergeben:
verlangt , also .
verlangt , also .
darf höchstens den Wert annehmen, verlässt die Basis. Das ist der minimale Quotient (diese Minimalquotientenregel führen wir gleich im Tableau formal ein).
Gleiches Vorgehen, jetzt für statt :
wird in der ersten Gleichung isoliert ( verlässt die Basis).
Multiplikation der ersten Gleichung mit .
Subtraktion des -fachen der ersten von der zweiten Gleichung: verschwindet aus Gleichung 2.
Addition des 10-fachen der ersten Gleichung zur Zielfunktionszeile. Ablesbar: , , .
Nach dem zweiten Basistausch ():
Wegen verschlechtert jede Erhöhung von den Wert.
Optimale Lösung
Start in der 1. Basislösung: Ursprung mit .
Vergleich der Zielfunktionszeile (Ausgangssystem → Optimalsystem ):
Die heißen Simplex-Multiplikatoren (Dualwerte).
Im Tableau steht in der -Zeile unter der Schlupfvariablen .
Nicht nur die Zielfunktionszeile: jede Gleichung des Optimalsystems ist eine Linearkombination der Ausgangsgleichungen.
Die erste Optimalgleichung: 1. Gleichung 2. Gleichung. Probe auf der rechten Seite:
Solche Rekonstruktionen nutzen wir ab Vorlesung 3 zur Interpretation optimaler Lösungen und zur Bewertung neuer Alternativen.
| BV | |||||
|---|---|---|---|---|---|
| 1 | 1 | 1 | 0 | 5 | |
| 1 | 3 | 0 | 1 | 9 | |
| −20 | −30 | 0 | 0 | 0 |
Pivotspalte (), Pivotzeile (), Pivotelement .
| BV | |||||
|---|---|---|---|---|---|
| 2/3 | 0 | 1 | −1/3 | 2 | |
| 1/3 | 1 | 0 | 1/3 | 3 | |
| −10 | 0 | 0 | 10 | 90 |
Neue Pivotspalte (), Pivotzeile , Pivotelement . .
| BV | |||||
|---|---|---|---|---|---|
| 1 | 0 | 3/2 | −1/2 | 3 | |
| 0 | 1 | −1/2 | 1/2 | 2 | |
| 0 | 0 | 15 | 5 | 120 |
Alle Werte der -Zeile optimal, .
Angenommen, in einem anderen Problem gilt für die aufzunehmende Variable nur die Beziehung , also .
Eine Erhöhung von hält stets ein: kein Quotient begrenzt sie.
Sind alle Koeffizienten der Pivotspalte , ist die Lösung unbeschränkt.
| BV | |||
|---|---|---|---|
Ziel: optimale Basislösung eines Maximierungs-LOP.
using JuMP, HiGHS
modell = Model(HiGHS.Optimizer)
set_silent(modell)
@variable(modell, X1 >= 0) # Abnahmemenge Auftrag 1
@variable(modell, X2 >= 0) # Abnahmemenge Auftrag 2
@objective(modell, Max, 20X1 + 30X2) # Umsatzerlöse in EUR
@constraint(modell, Paletten, X1 + X2 <= 5) # max. 5 Paletten
@constraint(modell, Gewicht, X1 + 3X2 <= 9) # max. 9 Tonnen
optimize!(modell)
println("F* = ", objective_value(modell),
" mit X1 = ", value(X1), ", X2 = ", value(X2))F* = 120.0 mit X1 = 3.0, X2 = 2.0
Vorlesung 02: Primaler Simplex | Prof. Dr. Knut Haase | Zur Webseite