Vorlesung 02: Primaler Simplex

Grundlagen Operations Research

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

maxF=20X1+30X2X1+X25X1+3X29X1,X20 \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}

HinweisGrafisch 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,Y20Y_1, Y_2 \ge 0:

X1+X2+Y1=5X1+3X2+Y2=920X130X2+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.

Iteratives Lösen

Vom Ausprobieren zum System

TippIdee

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=5X2,Y2=93X2 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=0X2=5Y_1 = 0 \Rightarrow X_2 = 5), wird Y2=915=6<0Y_2 = 9 - 15 = -6 < 0: unzulässig.

Verlässt Y2Y_2 die Basis (Y2=0X2=3Y_2 = 0 \Rightarrow X_2 = 3), bleibt Y1=53=20Y_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𝐗𝟏+𝟑𝐗𝟐+𝐘𝟐=𝟗20X130X2+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}

X1+X2+Y1=5𝟏𝟑𝐗𝟏+𝐗𝟐+𝟏𝟑𝐘𝟐=𝟑20X130X2+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}

𝟐𝟑𝐗𝟏+𝐘𝟏𝟏𝟑𝐘𝟐=𝟐13X1+X2+13Y2=320X130X2+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}

23X1+Y113Y2=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}

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

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

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

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+10X110Y2 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; der minimale Quotient min{2/23,3/13}=3\min\{2/\tfrac{2}{3},\, 3/\tfrac{1}{3}\} = 3 zeigt: Y1Y_1 verlässt die Basis (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=310X1+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}

𝐗𝟏+𝟑𝟐𝐘𝟏𝟏𝟐𝐘𝟐=𝟑13X1+X2+13Y2=310X1+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}

X1+32Y112Y2=3𝐗𝟐𝟏𝟐𝐘𝟏+𝟏𝟐𝐘𝟐=𝟐𝟏𝟓𝐘𝟏+𝟓𝐘𝟐+𝐅=𝟏𝟐𝟎 \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} \\ \mathbf{15 Y_1 + 5 Y_2 + F} &\;\mathbf{= 120} \end{aligned}

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

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

Subtraktion des 13\tfrac{1}{3}-fachen der ersten von der zweiten Gleichung, Addition des 10-fachen zur Zielfunktionszeile.

Optimale Basislösung

Nach dem zweiten Basistausch (X1Y1X_1 \leftrightarrow Y_1):

X1+32Y112Y2=3X212Y1+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=12015Y15Y2F = 120 - 15 Y_1 - 5 Y_2 verschlechtert jede Erhöhung von Y1,Y2Y_1, Y_2 den Wert.

WichtigOptimale Lösung

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

Basislösung ↔︎ Eckpunkt

Jeder Basistausch führt zu einem benachbarten Eckpunkt des Lösungsraums.

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=155+59=120F=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).

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:

325129=15292=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
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
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

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

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

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 Y34X3=8Y_3 - 4 X_3 = 8, also Y3=8+4X3Y_3 = 8 + 4 X_3.

Eine Erhöhung von X3X_3 hält Y30Y_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 aij\bar a_{ij} bi\bar b_i
FF cj-\bar c_j ff
  • aij\bar a_{ij}: aktueller Koeffizient in Zeile ii, Spalte jj
  • bi\bar b_i: aktueller Wert der bb-Spalte
  • cj-\bar c_j: aktueller Wert der FF-Zeile
  • Ausgangstableau: aij=aij\bar a_{ij} = a_{ij}, bi=bi\bar b_i = b_i, cj=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, mincj<0{cj}\min_{-\bar c_j < 0}\{-\bar c_j\}. Keiner negativ \Rightarrow optimal.
  2. Pivotzeile ss: kleinster Quotient minait>0{bi/ait}\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.