Vorlesung 02: Primaler Simplex

Grundlagen Operations Research

Prof. Dr. Knut Haase

Motivation

Wenn Zeichnen nicht reicht

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.

Wiederholung

Das Einführungsbeispiel

max⁡F=20X1+30X2X1+X2≤5X1+3X2≤9X1,X2≥0 \begin{aligned} \max \; & F = 20 X_1 + 30 X_2 \\ & X_1 + X_2 \le 5 \\ & X_1 + 3 X_2 \le 9 \\ & X_1, X_2 \ge 0 \end{aligned}

Grafisch bestimmtes Optimum

X1*=3,X2*=2,F*=120 X_1^* = 3, \; X_2^* = 2, \; F^* = 120

Heute: rechnerisch statt grafisch.

Das Gleichungssystem

Mit Schlupfvariablen Y1,Y2≥0Y_1, Y_2 \ge 0:

X1+X2+Y1=5X1+3X2+Y2=9−20X1−30X2+F=0 \begin{aligned} X_1 + X_2 + Y_1 &= 5 \\ X_1 + 3 X_2 + Y_2 &= 9 \\ -20 X_1 - 30 X_2 + F &= 0 \end{aligned}

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 X1X_1, X2X_2, Y1Y_1 und Y2Y_2. Welche Werte sind am besten Punkt null?

Sie sind dran

Iteratives Lösen

Vom Ausprobieren zum System

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.

Erste Basislösung

Setze X1=X2=0X_1 = X_2 = 0 (Nichtbasisvariablen). Dann folgt unmittelbar:

Y1=5,Y2=9,F=0 Y_1 = 5, \quad Y_2 = 9, \quad F = 0

  • Basisvariablen (BV ≥0\ge 0): Y1,Y2,FY_1, Y_2, F
  • Nichtbasisvariablen (NBV =0= 0): X1,X2X_1, X_2

Eine zulässige, aber noch nicht optimale Basislösung.

Eine bessere Basislösung?

Frage: Welche Variable soll in die Basis aufgenommen werden?

Aus der Zielfunktion F=20X1+30X2F = 20 X_1 + 30 X_2:

ΔX1=1⇒ΔF=20,ΔX2=1⇒ΔF=30 \Delta X_1 = 1 \Rightarrow \Delta F = 20, \qquad \Delta X_2 = 1 \Rightarrow \Delta F = 30

X2X_2 steigert den Zielwert pro Einheit am stärksten.

⇒\Rightarrow X2X_2 in die Basis aufnehmen

Wie groß darf X2X_2 werden?

Bei X1=0X_1 = 0 gilt:

Y1=5−X2,Y2=9−3X2 Y_1 = 5 - X_2, \qquad Y_2 = 9 - 3 X_2

Frage: Wie weit dürfen wir X2X_2 erhöhen, und wer verlässt dafür die Basis?

Verlässt Y1Y_1 die Basis (Y1=0⇒X2=5Y_1 = 0 \Rightarrow X_2 = 5), wird Y2=9−15=−6<0Y_2 = 9 - 15 = -6 < 0: unzulässig.

Verlässt Y2Y_2 die Basis (Y2=0⇒X2=3Y_2 = 0 \Rightarrow X_2 = 3), bleibt Y1=5−3=2≥0Y_1 = 5 - 3 = 2 \ge 0: zulässig.

Elementaroperationen

Um die neue Basislösung abzulesen, isolieren wir die Basisvariablen (jede nur noch in einer Gleichung):

  • Multiplikation einer Gleichung mit einem Wert ≠0\neq 0
  • Addition/Subtraktion einer Gleichung zu einer anderen

⇒\Rightarrow Der Informationsgehalt des Gleichungssystems bleibt erhalten.

Der Basistausch im Detail

Ziel: X2X_2 isolieren, nur noch in der zweiten Gleichung.

X1+X2+Y1=5𝑿𝟏+𝟑𝑿𝟐+𝒀𝟐=𝟗−20X1−30X2+F=0 \begin{aligned} X_1 + X_2 + Y_1 &= 5 \\ \mathbf{X_1 + 3 X_2 + Y_2} &\;\mathbf{= 9} \\ -20 X_1 - 30 X_2 + F &= 0 \end{aligned}

Die zweite Gleichung enthält Y2Y_2. Hier wird X2X_2 isoliert.

X1+X2+Y1=5𝟏𝟑𝑿𝟏+𝑿𝟐+𝟏𝟑𝒀𝟐=𝟑−20X1−30X2+F=0 \begin{aligned} X_1 + X_2 + Y_1 &= 5 \\ \mathbf{\tfrac{1}{3} X_1 + X_2 + \tfrac{1}{3} Y_2} &\;\mathbf{= 3} \\ -20 X_1 - 30 X_2 + F &= 0 \end{aligned}

Multiplikation der zweiten Gleichung mit 13\tfrac{1}{3}: der Koeffizient von X2X_2 wird 11.

𝟐𝟑𝑿𝟏+𝒀𝟏−𝟏𝟑𝒀𝟐=𝟐13X1+X2+13Y2=3−20X1−30X2+F=0 \begin{aligned} \mathbf{\tfrac{2}{3} X_1 + Y_1 - \tfrac{1}{3} Y_2} &\;\mathbf{= 2} \\ \tfrac{1}{3} X_1 + X_2 + \tfrac{1}{3} Y_2 &= 3 \\ -20 X_1 - 30 X_2 + F &= 0 \end{aligned}

Subtraktion der zweiten von der ersten Gleichung: X2X_2 verschwindet aus Gleichung 1.

23X1+Y1−13Y2=213X1+X2+13Y2=3−𝟏𝟎𝑿𝟏+𝟏𝟎𝒀𝟐+𝑭=𝟗𝟎 \begin{aligned} \tfrac{2}{3} X_1 + Y_1 - \tfrac{1}{3} Y_2 &= 2 \\ \tfrac{1}{3} X_1 + X_2 + \tfrac{1}{3} Y_2 &= 3 \\ \mathbf{-10 X_1 + 10 Y_2 + F} &\;\mathbf{= 90} \end{aligned}

Addition des 30-fachen der zweiten Gleichung zur Zielfunktionszeile. Ablesbar: Y1=2Y_1 = 2, X2=3X_2 = 3, F=90F = 90.

Geht es noch besser?

Die Zielfunktionszeile lautet umgestellt:

F=90+10X1−10Y2 F = 90 + 10 X_1 - 10 Y_2

Frage: Sehen Sie noch Verbesserungspotenzial?

Eine Erhöhung von X1X_1 steigert FF weiter.

⇒\Rightarrow X1X_1 in die Basis aufnehmen

Wie groß darf X1X_1 werden?

Y2=0Y_2 = 0 bleibt Nichtbasisvariable. Die ersten beiden Gleichungen ergeben:

Y1=2−23X1,X2=3−13X1 Y_1 = 2 - \tfrac{2}{3} X_1, \qquad X_2 = 3 - \tfrac{1}{3} X_1

Y1≥0Y_1 \ge 0 verlangt 23X1≤2\tfrac{2}{3} X_1 \le 2, also X1≤3X_1 \le 3.

X2≥0X_2 \ge 0 verlangt 13X1≤3\tfrac{1}{3} X_1 \le 3, also X1≤9X_1 \le 9.

⇒\Rightarrow X1X_1 darf höchstens den Wert 33 annehmen, Y1Y_1 verlässt die Basis. Das ist der minimale Quotient min⁡{2/23,3/13}=3\min\{2/\tfrac{2}{3},\, 3/\tfrac{1}{3}\} = 3 (diese Minimalquotientenregel führen wir gleich im Tableau formal ein).

Der zweite Basistausch

Gleiches Vorgehen, jetzt für X1X_1 statt Y1Y_1:

𝟐𝟑𝑿𝟏+𝒀𝟏−𝟏𝟑𝒀𝟐=𝟐13X1+X2+13Y2=3−10X1+10Y2+F=90 \begin{aligned} \mathbf{\tfrac{2}{3} X_1 + Y_1 - \tfrac{1}{3} Y_2} &\;\mathbf{= 2} \\ \tfrac{1}{3} X_1 + X_2 + \tfrac{1}{3} Y_2 &= 3 \\ -10 X_1 + 10 Y_2 + F &= 90 \end{aligned}

X1X_1 wird in der ersten Gleichung isoliert (Y1Y_1 verlässt die Basis).

𝑿𝟏+𝟑𝟐𝒀𝟏−𝟏𝟐𝒀𝟐=𝟑13X1+X2+13Y2=3−10X1+10Y2+F=90 \begin{aligned} \mathbf{X_1 + \tfrac{3}{2} Y_1 - \tfrac{1}{2} Y_2} &\;\mathbf{= 3} \\ \tfrac{1}{3} X_1 + X_2 + \tfrac{1}{3} Y_2 &= 3 \\ -10 X_1 + 10 Y_2 + F &= 90 \end{aligned}

Multiplikation der ersten Gleichung mit 32\tfrac{3}{2}.

X1+32Y1−12Y2=3𝑿𝟐−𝟏𝟐𝒀𝟏+𝟏𝟐𝒀𝟐=𝟐−10X1+10Y2+F=90 \begin{aligned} X_1 + \tfrac{3}{2} Y_1 - \tfrac{1}{2} Y_2 &= 3 \\ \mathbf{X_2 - \tfrac{1}{2} Y_1 + \tfrac{1}{2} Y_2} &\;\mathbf{= 2} \\ -10 X_1 + 10 Y_2 + F &= 90 \end{aligned}

Subtraktion des 13\tfrac{1}{3}-fachen der ersten von der zweiten Gleichung: X1X_1 verschwindet aus Gleichung 2.

X1+32Y1−12Y2=3X2−12Y1+12Y2=2𝟏𝟓𝒀𝟏+𝟓𝒀𝟐+𝑭=𝟏𝟐𝟎 \begin{aligned} X_1 + \tfrac{3}{2} Y_1 - \tfrac{1}{2} Y_2 &= 3 \\ X_2 - \tfrac{1}{2} Y_1 + \tfrac{1}{2} Y_2 &= 2 \\ \mathbf{15 Y_1 + 5 Y_2 + F} &\;\mathbf{= 120} \end{aligned}

Addition des 10-fachen der ersten Gleichung zur Zielfunktionszeile. Ablesbar: X1=3X_1 = 3, X2=2X_2 = 2, F=120F = 120.

Optimale Basislösung

Nach dem zweiten Basistausch (X1↔Y1X_1 \leftrightarrow Y_1):

X1+32Y1−12Y2=3X2−12Y1+12Y2=215Y1+5Y2+F=120 \begin{aligned} X_1 + \tfrac{3}{2} Y_1 - \tfrac{1}{2} Y_2 &= 3 \\ X_2 - \tfrac{1}{2} Y_1 + \tfrac{1}{2} Y_2 &= 2 \\ 15 Y_1 + 5 Y_2 + F &= 120 \end{aligned}

Wegen F=120−15Y1−5Y2F = 120 - 15 Y_1 - 5 Y_2 verschlechtert jede Erhöhung von Y1,Y2Y_1, Y_2 den Wert.

Optimale Lösung

X1*=3,X2*=2,F*=120 X_1^* = 3, \quad X_2^* = 2, \quad F^* = 120

Basislösung ↔︎ Eckpunkt

Zulässiger Bereich des Einführungsbeispiels; markiert ist nur die 1. Basislösung im Ursprung (0, 0), der Startpunkt des Simplex.

Start in der 1. Basislösung: Ursprung (0,0)(0, 0) mit F=0F = 0.

Derselbe Bereich mit dem ersten Schritt des Simplex: vom Ursprung (0, 0) entlang der X₂-Achse zur 2. Basislösung in (0, 3).

  1. Basistausch: benachbarter Eckpunkt (0,3)(0, 3) mit F=90F = 90.

Zulässiger Bereich des Einführungsbeispiels mit dem Weg des Simplex von Ecke zu Ecke: 1. Basislösung im Ursprung (0, 0), 2. Basislösung in (0, 3), 3. Basislösung im Optimum (3, 2).

  1. Basistausch: wieder benachbart, Optimum (3,2)(3, 2) mit F=120F = 120.

Erste Analysen

Simplex-Multiplikatoren

Vergleich der Zielfunktionszeile (Ausgangssystem → Optimalsystem 15Y1+5Y2+F=12015 Y_1 + 5 Y_2 + F = 120):

  • 15-faches der 1. Gleichung zur Zielfunktion addiert,
  • 5-faches der 2. Gleichung zur Zielfunktion addiert.

F=15⋅5+5⋅9=120⇒F=∑iπibi F = 15 \cdot 5 + 5 \cdot 9 = 120 \quad\Rightarrow\quad F = \sum_i \pi_i\, b_i

Die πi\pi_i heißen Simplex-Multiplikatoren (Dualwerte).

Im Tableau steht πi\pi_i in der FF-Zeile unter der Schlupfvariablen YiY_i.

Weitere Zusammenhänge

Nicht nur die Zielfunktionszeile: jede Gleichung des Optimalsystems ist eine Linearkombination der Ausgangsgleichungen.

Die erste Optimalgleichung: 32×\tfrac{3}{2} \times 1. Gleichung −12×-\; \tfrac{1}{2} \times 2. Gleichung. Probe auf der rechten Seite:

32⋅5−12⋅9=152−92=3✓ \tfrac{3}{2} \cdot 5 - \tfrac{1}{2} \cdot 9 = \tfrac{15}{2} - \tfrac{9}{2} = 3 \;✓

Solche Rekonstruktionen nutzen wir ab Vorlesung 3 zur Interpretation optimaler Lösungen und zur Bewertung neuer Alternativen.

Das Simplextableau

Der Algorithmus im Tableau

BV X1X_1 X2X_2 Y1Y_1 Y2Y_2 bb
Y1Y_1 1 1 1 0 5
Y2Y_2 1 3 0 1 9
FF −20 −30 0 0 0

Pivotspalte X2X_2 (−30-30), Pivotzeile Y2Y_2 (min⁡{5/1,9/3}=3\min\{5/1, 9/3\}=3), Pivotelement [3][3].

BV X1X_1 X2X_2 Y1Y_1 Y2Y_2 bb
Y1Y_1 2/3 0 1 −1/3 2
X2X_2 1/3 1 0 1/3 3
FF −10 0 0 10 90

Neue Pivotspalte X1X_1 (−10-10), Pivotzeile Y1Y_1, Pivotelement [2/3][2/3]. F=90F = 90.

BV X1X_1 X2X_2 Y1Y_1 Y2Y_2 bb
X1X_1 1 0 3/2 −1/2 3
X2X_2 0 1 −1/2 1/2 2
FF 0 0 15 5 120

Alle Werte der FF-Zeile ≥0\ge 0 ⇒\Rightarrow optimal, F*=120F^* = 120.

Unbeschränkte Lösung

Angenommen, in einem anderen Problem gilt für die aufzunehmende Variable X3X_3 nur die Beziehung Y3−4X3=8Y_3 - 4 X_3 = 8, also Y3=8+4X3Y_3 = 8 + 4 X_3.

Eine Erhöhung von X3X_3 hält Y3≥0Y_3 \ge 0 stets ein: kein Quotient begrenzt sie.

⇒\Rightarrow Sind alle Koeffizienten der Pivotspalte ≤0\le 0, ist die Lösung unbeschränkt.

Verallgemeinertes Tableau

BV X1X_1 …\dots bb
⋮\vdots a‾ij\bar a_{ij} b‾i\bar b_i
FF −c‾j-\bar c_j ff
  • a‾ij\bar a_{ij}: aktueller Koeffizient in Zeile ii, Spalte jj
  • b‾i\bar b_i: aktueller Wert der bb-Spalte
  • −c‾j-\bar c_j: aktueller Wert der FF-Zeile
  • Ausgangstableau: a‾ij=aij\bar a_{ij} = a_{ij}, b‾i=bi\bar b_i = b_i, c‾j=cj\bar c_j = c_j

Der Simplex-Algorithmus

Ziel: optimale Basislösung eines Maximierungs-LOP.

  1. Pivotspalte tt: kleinster negativer Wert der FF-Zeile, min⁡−c‾j<0{−c‾j}\min_{-\bar c_j < 0}\{-\bar c_j\}; bei mehreren gleich kleinen Werten eine davon beliebig wählen. Keiner negativ ⇒\Rightarrow optimal.
  2. Pivotzeile ss: kleinster Quotient min⁡a‾it>0{b‾i/a‾it}\min_{\bar a_{it} > 0}\{\bar b_i / \bar a_{it}\}.
  3. Elementaroperationen: Einheitsvektor in der Pivotspalte erzeugen. Weiter mit 1.

Kontrolle mit Julia

Dasselbe Optimum mit JuMP

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

Zusammenfassung

Das Wichtigste auf einen Blick

  • Der Simplex wandert von Ecke zu Ecke (Basistausch) zu besseren Werten.
  • Pivotspalte = beste neue BV, Pivotzeile = kleinster Quotient.
  • Abbruch, wenn die FF-Zeile keine negativen Werte mehr enthält.
  • Die Simplex-Multiplikatoren liefern F=∑iπibiF = \sum_i \pi_i b_i.

Literatur

Literaturverzeichnis

Domschke, Wolfgang, Andreas Drexl, Robert Klein, und Armin Scholl. 2015. Einführung in Operations Research. 9. Aufl. Springer Gabler. https://doi.org/10.1007/978-3-662-48216-2.