Vorlesung 04: Dualität & Zweiphasen

Grundlagen Operations Research

Zweiphasenmethode

Kein einfacher Start

Kein zulässiger Startpunkt

Bisher lieferte X1=X2=0X_1 = X_2 = 0 stets eine zulässige Startlösung. Bei \ge-Restriktionen gilt das nicht mehr:

maxF=2X1+X2X1+X282X1+X210X1+X210X1,X20 \begin{aligned} \max \; & F = 2 X_1 + X_2 \\ & X_1 + X_2 \ge 8 \\ & 2 X_1 + X_2 \ge 10 \\ & X_1 + X_2 \le 10 \\ & X_1, X_2 \ge 0 \end{aligned}

Mit Schlupfvariablen:

X1+X2Y1=82X1+X2Y2=10X1+X2+Y3=10 \begin{aligned} X_1 + X_2 - Y_1 &= 8 \\ 2 X_1 + X_2 - Y_2 &= 10 \\ X_1 + X_2 + Y_3 &= 10 \end{aligned}

Für X1=X2=0X_1 = X_2 = 0 folgt Y1=8Y_1 = -8, Y2=10Y_2 = -10: 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 \ge-Zeilen künstliche Variablen Z1,Z20Z_1, Z_2 \ge 0 ein:

X1+X2Y1+Z1=82X1+X2Y2+Z2=10X1+X2+Y3=10 \begin{aligned} X_1 + X_2 - Y_1 + Z_1 &= 8 \\ 2 X_1 + X_2 - Y_2 + Z_2 &= 10 \\ X_1 + X_2 + Y_3 &= 10 \end{aligned}

Jetzt ist Z1=8Z_1 = 8, Z2=10Z_2 = 10, Y3=10Y_3 = 10 eine formal zulässige Startlösung.

Inhaltlich zulässig erst, wenn Z1=Z2=0Z_1 = Z_2 = 0: die künstlichen Variablen müssen wieder aus der Basis.

Grundsätzliches Vorgehen

TippIdee der Zweiphasenmethode
  1. Phase 1: künstliche Variablen eliminieren \Rightarrow zulässige Lösung.
  2. Phase 2: primaler Simplex \Rightarrow optimale Lösung.

In Phase 1 minimieren wir die Summe der künstlichen Variablen:

Minimiere Z=iZiMaximiere Z=iZi \text{Minimiere } Z = \sum_i Z_i \quad\Longleftrightarrow\quad \text{Maximiere } Z = -\sum_i Z_i

Zielfunktion der ersten Phase

Wir drücken ZZ durch die Nichtbasisvariablen aus:

Z=(8X1X2+Y1)Z1(102X1X2+Y2)Z2 Z = -\underbrace{(8 - X_1 - X_2 + Y_1)}_{Z_1} - \underbrace{(10 - 2X_1 - X_2 + Y_2)}_{Z_2}

Z=18+3X1+2X2Y1Y2 Z = -18 + 3 X_1 + 2 X_2 - Y_1 - Y_2

Diese Hilfszielfunktion steuert Phase 1, bis Z=0Z = 0 erreicht ist.

Alternative: M-Methode

HinweisM-Methode

Statt einer eigenen Phase 1 bestraft die M-Methode die künstlichen Variablen direkt in der Originalzielfunktion: maxF=2X1+X2MZ1MZ2\max F = 2X_1 + X_2 - M Z_1 - M Z_2 mit sehr großem MM.

Eine Phase statt zwei, aber numerisch heikler. Wir rechnen mit der Zweiphasenmethode.

Ablauf im Tableau

Phase 1 startet mit Z1,Z2,Y3Z_1, Z_2, Y_3 in der Basis; die FF-Zeile wird nur mitgeführt, die Pivotwahl trifft die ZZ-Zeile:

BV X1X_1 X2X_2 Y1Y_1 Y2Y_2 Y3Y_3 Z1Z_1 Z2Z_2 bb
Z1Z_1 1 1 −1 0 0 1 0 8
Z2Z_2 2 1 0 −1 0 0 1 10
Y3Y_3 1 1 0 0 1 0 0 10
FF −2 −1 0 0 0 0 0 0
ZZ −3 −2 1 1 0 0 0 −18

ZZ-Zeile: 3-3 unter X1X_1 \Rightarrow X1X_1 aufnehmen; minimaler Quotient min{8/1,10/2,10/1}=5\min\{8/1,\, 10/2,\, 10/1\} = 5 \Rightarrow Z2Z_2 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 X1X_1 X2X_2 Y1Y_1 Y2Y_2 Y3Y_3 Z1Z_1 Z2Z_2 bb
Z1Z_1 1 1 −1 0 0 1 0 8
Z2Z_2 2 1 0 −1 0 0 1 10
Y3Y_3 1 1 0 0 1 0 0 10
FF −2 −1 0 0 0 0 0 0
ZZ −3 −2 1 1 0 0 0 −18
BV X1X_1 X2X_2 Y1Y_1 Y2Y_2 Y3Y_3 Z1Z_1 Z2Z_2 bb
Z1Z_1 0 1/2 −1 1/2 0 1 3
X1X_1 1 1/2 0 −1/2 0 0 5
Y3Y_3 0 1/2 0 1/2 1 0 5
FF 0 0 0 −1 0 0 10
ZZ 0 −1/2 1 −1/2 0 0 −3
BV X1X_1 X2X_2 Y1Y_1 Y2Y_2 Y3Y_3 Z1Z_1 Z2Z_2 bb
Y2Y_2 0 1 −2 1 0 6
X1X_1 1 1 −1 0 0 8
Y3Y_3 0 0 1 0 1 2
FF 0 1 −2 0 0 16
ZZ 0 0 0 0 0 0
BV X1X_1 X2X_2 Y1Y_1 Y2Y_2 Y3Y_3 Z1Z_1 Z2Z_2 bb
Y2Y_2 0 1 0 1 2 10
X1X_1 1 1 0 0 1 10
Y1Y_1 0 0 1 0 1 2
FF 0 1 0 0 2 20

Start mit Pivot [2]: X1X_1 hinein, Z2Z_2 hinaus.

ZZ-Zeile: 1/2-1/2 unter X2X_2 und Y2Y_2; Quotienten für Y2Y_2: min{3/12,5/12}=6\min\{3/\tfrac12,\, 5/\tfrac12\} = 6 \Rightarrow Pivot [1/2], Z1Z_1 hinaus.

Z=0Z = 0: Phase 1 beendet! Jetzt wählt die FF-Zeile: 2-2 unter Y1Y_1, einziger positiver Quotient 2/12/1 \Rightarrow Pivot [1], Y3Y_3 hinaus.

Alle FF-Zeilen-Einträge sind 0\ge 0, also optimal: X1*=10X_1^* = 10, X2*=0X_2^* = 0, F*=20F^* = 20.

Grafische Kontrolle

Das Optimum liegt im Eckpunkt (10,0)(10, 0), auf der Restriktion X1+X210X_1 + X_2 \le 10.

WichtigOptimale Lösung

X1*=10,X2*=0,F*=20 X_1^* = 10, \quad X_2^* = 0, \quad F^* = 20

Dualität

Zwei Sichten, ein Problem

Zu jedem primalen Problem gehört ein duales Problem.

HinweisGrundregel

Ein primales Minimierungsproblem mit ausschließlich \ge-Relationen wird zu einem dualen Maximierungsproblem mit ausschließlich \le-Relationen.

Herleitung über die beste untere Schranke für den optimalen Zielwert des Minimierungsproblems.

Eine untere Schranke für F*F^*

Primales Problem

minF=5X1+9X2X1+X220X1+3X230X1,X20 \begin{aligned} \min \; & F = 5 X_1 + 9 X_2 \\ & X_1 + X_2 \ge 20 \\ & X_1 + 3 X_2 \ge 30 \\ & X_1, X_2 \ge 0 \end{aligned}

Aus der zweiten Restriktion (×3\times 3):

3X1+9X290 3 X_1 + 9 X_2 \ge 90

Da X10X_1 \ge 0:

F=5X1+9X23X1+9X290 F = 5 X_1 + 9 X_2 \ge 3 X_1 + 9 X_2 \ge 90

F_=90 \Rightarrow \underline{F} = 90

Frage: Geht es noch besser als 90?

Bessere Schranken

Primales Problem

minF=5X1+9X2X1+X220X1+3X230X1,X20 \begin{aligned} \min \; & F = 5 X_1 + 9 X_2 \\ & X_1 + X_2 \ge 20 \\ & X_1 + 3 X_2 \ge 30 \\ & X_1, X_2 \ge 0 \end{aligned}

Erste Restriktion ×5\times 5:

5X1+5X2100F_=100 5 X_1 + 5 X_2 \ge 100 \;\Rightarrow\; \underline{F} = 100

4×4 \times erste +1×+\; 1 \times zweite Restriktion:

5X1+7X2110F_=110 5 X_1 + 7 X_2 \ge 110 \;\Rightarrow\; \underline{F} = 110

Frage: Welche Linearkombination liefert die schärfste Schranke?

Die beste Linearkombination

Faktoren W1,W20W_1, W_2 \ge 0 für die beiden Restriktionen:

(W1+W2)X1+(W1+3W2)X220W1+30W2 (W_1 + W_2) X_1 + (W_1 + 3 W_2) X_2 \ge 20 W_1 + 30 W_2

  • Damit die rechte Seite eine untere Schranke für F=5X1+9X2F = 5X_1 + 9X_2 bleibt, dürfen die Koeffizienten FF nicht überschreiten: W1+W25,W1+3W29 W_1 + W_2 \le 5, \qquad W_1 + 3 W_2 \le 9
  • Ein negatives WiW_i würde die \ge-Relation umkehren, die Schranke ginge verloren W1,W20\Rightarrow W_1, W_2 \ge 0.
  • Die beste Schranke maximiert 20W1+30W220 W_1 + 30 W_2.

Primales und duales Problem

HinweisPrimal

min5X1+9X2X1+X220X1+3X230X1,X20 \begin{aligned} \min \; & 5 X_1 + 9 X_2 \\ & X_1 + X_2 \ge 20 \\ & X_1 + 3 X_2 \ge 30 \\ & X_1, X_2 \ge 0 \end{aligned}

TippDual

max20W1+30W2W1+W25W1+3W29W1,W20 \begin{aligned} \max \; & 20 W_1 + 30 W_2 \\ & W_1 + W_2 \le 5 \\ & W_1 + 3 W_2 \le 9 \\ & W_1, W_2 \ge 0 \end{aligned}

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:

max20X1+30X2,X1+X25,X1+3X29 \max\; 20 X_1 + 30 X_2, \quad X_1 + X_2 \le 5, \quad X_1 + 3 X_2 \le 9

Dessen Optimum kennen Sie bereits aus Vorlesung 2: F*=120F^* = 120 bei (3,2)(3, 2).

WichtigStarke Dualität

minFprimal=maxFdual=120 \min F_{\text{primal}} = \max F_{\text{dual}} = 120 Die WiW_i sind die Schattenpreise der primalen Restriktionen. Beide Sichten treffen sich im selben Optimum.

Dualisierungsregeln

Restriktionen unterschiedlichen Typs werden zunächst auf \ge gebracht:

  • \le-Restriktion \Rightarrow mit 1-1 multiplizieren (\ge).
  • ==-Restriktion \Rightarrow in zwei Ungleichungen (\ge und \le) aufspalten.
  • Die Dualvariable einer ==-Restriktion wird dadurch unbeschränkt (W3=W3+W3W_3 = W_3^{+} - W_3^{-}).

So lässt sich jedes LOP dualisieren.

Gemischte Relationen

Ein Beispiel mit allen drei Relationstypen:

minF=5X1+2X2X32X1+3X2+X3202X1+3X2X330X1+5X2+2X3=40X1,X2,X30 \begin{aligned} \min \; F = 5 X_1 &+ 2 X_2 - X_3 \\ 2 X_1 + 3 X_2 + X_3 &\ge 20 \\ 2 X_1 + 3 X_2 - X_3 &\le 30 \\ X_1 + 5 X_2 + 2 X_3 &= 40 \\ X_1, X_2, X_3 &\ge 0 \end{aligned}

Frage: Wie bringen wir alles auf \ge?

Transformation auf ≥

Die Regeln von eben, angewandt:

Restriktion wird zu Dualvariable
2X1+3X2+X3202X_1 + 3X_2 + X_3 \ge 20 (bleibt) W1W_1
2X1+3X2X3302X_1 + 3X_2 - X_3 \le 30 2X13X2+X330-2X_1 - 3X_2 + X_3 \ge -30 W2W_2
X1+5X2+2X3=40X_1 + 5X_2 + 2X_3 = 40 X1+5X2+2X340X_1 + 5X_2 + 2X_3 \ge 40 W3+W_3^{+}
X15X22X340-X_1 - 5X_2 - 2X_3 \ge -40 W3W_3^{-}

Die ==-Restriktion liefert zwei Dualvariablen, zusammengefasst W3=W3+W3W_3 = W_3^{+} - W_3^{-}, im Vorzeichen unbeschränkt.

Das duale Problem

HinweisPrimal

min5X1+2X2X32X1+3X2+X3202X1+3X2X330X1+5X2+2X3=40 \begin{aligned} \min \; 5 X_1 &+ 2 X_2 - X_3 \\ 2 X_1 + 3 X_2 + X_3 &\ge 20 \\ 2 X_1 + 3 X_2 - X_3 &\le 30 \\ X_1 + 5 X_2 + 2 X_3 &= 40 \end{aligned}

TippDual

max20W130W2+40W32W12W2+W353W13W2+5W32W1+W2+2W31 \begin{aligned} \max \; 20 W_1 - 30 W_2 &+ 40 W_3 \\ 2 W_1 - 2 W_2 + W_3 &\le 5 \\ 3 W_1 - 3 W_2 + 5 W_3 &\le 2 \\ W_1 + W_2 + 2 W_3 &\le -1 \end{aligned}

W1,W20W_1, W_2 \ge 0; W3W_3 unbeschränkt. Für die Rechnung nutzen wir W3=W3+W3W_3 = W_3^{+} - W_3^{-} mit W3+,W30W_3^{+}, W_3^{-} \ge 0.

Startaufstellung

Mit Schlupfvariablen Y1,Y2,Y3Y_1, Y_2, Y_3 wird die dritte Zeile zu W1+W2+2W3+2W3+Y3=1W_1 + W_2 + 2 W_3^{+} - 2 W_3^{-} + Y_3 = -1.

Die Startlösung Y3=1Y_3 = -1 ist unzulässig.

Frage: Welches Verfahren kennt genau diese Situation?

Der duale Simplex aus Vorlesung 3: Pivotzeile ist die unzulässige Zeile Y3Y_3.

Ein Pivot genügt

BV W1W_1 W2W_2 W3+W_3^{+} W3W_3^{-} Y1Y_1 Y2Y_2 Y3Y_3 bb
Y1Y_1 2 −2 1 −1 1 0 0 5
Y2Y_2 3 −3 5 −5 0 1 0 2
Y3Y_3 1 1 2 −2 0 0 1 −1
FF −20 30 −40 40 0 0 0 0
BV W1W_1 W2W_2 W3+W_3^{+} W3W_3^{-} Y1Y_1 Y2Y_2 Y3Y_3 bb
Y1Y_1 3/2 −5/2 0 0 1 0 −1/2 11/2
Y2Y_2 1/2 −11/2 0 0 0 1 −5/2 9/2
W3W_3^{-} −1/2 −1/2 −1 1 0 0 −1/2 1/2
FF 0 50 0 0 0 0 20 −20

Einziger negativer Koeffizient der Zeile Y3Y_3: 2-2 unter W3W_3^{-} \Rightarrow Pivot [−2].

Alle bi0b_i \ge 0 und alle FF-Zeilen-Einträge 0\ge 0, also ist das Tableau bereits optimal: F*=20F^* = -20.

Primallösung ablesen

Die FF-Zeile unter den Schlupfvariablen liefert die primale Lösung:

cY1=X1*=0,cY2=X2*=0,cY3=X3*=20 -\bar c_{Y_1} = X_1^* = 0, \qquad -\bar c_{Y_2} = X_2^* = 0, \qquad -\bar c_{Y_3} = X_3^* = 20

Kontrolle im primalen Problem: F=50+2020=20F = 5 \cdot 0 + 2 \cdot 0 - 20 = -20 ✓ und X1+5X2+2X3=40X_1 + 5 X_2 + 2 X_3 = 40 ✓.

WichtigZwei Probleme, eine Rechnung

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 WiW_i:

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.

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.
Vlćek, Tobias, Knut Haase, Matthes Koch, Lena Dolz, Anneke Weygandt, und Jan Pape. 2023. „Controlling Passenger Flows into Metro Systems to Mitigate Overcrowding during large-scale Events. Working Paper.