Vorlesung 07: Transportproblem

Grundlagen Operations Research

Spannender Baum

Ein Netz für sechs Städte

Aufgabe und Definition

Gesucht ist ein gesamtkostenminimales Streckennetz, das nn Orte direkt oder indirekt verbindet.

HinweisMinimaler spannender Baum

In einem zusammenhängenden, bewerteten, ungerichteten Graphen GG ist T*T^* ein minimaler spannender Baum, wenn kein anderer spannender Baum eine geringere Gesamtbewertung besitzt.

Der Kruskal-Algorithmus

TippIdee

Kanten aufsteigend nach Bewertung durchgehen und jede Kante aufnehmen, die keinen Kreis erzeugt, bis n−1n-1 Kanten gewählt sind.

  • Start: Kanten sortieren, λ(k1)≤λ(k2)≤…\lambda(k_1) \le \lambda(k_2) \le \dots
  • Iteration: kμk_\mu aufnehmen, falls kein Kreis entsteht.
  • Abbruch: sobald ℰ‾\bar{\mathcal{E}} genau n−1n-1 Kanten enthält.

Beispiel: Flugstreckennetz

Flugstreckennetz als ungerichteter Graph mit sechs Knoten und zehn bewerteten Kanten: [1,2] 42, [1,3] 20, [1,4] 55, [2,3] 41, [2,5] 34, [3,4] 40, [3,5] 30, [3,6] 50, [4,6] 60 und [5,6] 46.

Sechs Städte, zehn mögliche Verbindungen mit Baukosten.

Frage: Welche fünf Kanten würden Sie wählen?

Kruskal Schritt für Schritt

Das Flugstreckennetz; hervorgehoben ist die erste gewählte Kante [1,3] mit der kleinsten Bewertung 20.

Günstigste Kante zuerst: [1,3][1,3] mit 2020.

Dasselbe Netz; neu hervorgehoben ist die Kante [3,5] mit 30, die an die bereits gewählte Kante [1,3] anschließt.

[3,5][3,5] mit 3030: kein Kreis, aufnehmen.

Dasselbe Netz; neu hervorgehoben ist die Kante [2,5] mit 34. Gewählt sind damit [1,3], [3,5] und [2,5].

[2,5][2,5] mit 3434: kein Kreis, aufnehmen.

Dasselbe Netz; neu hervorgehoben ist die Kante [3,4] mit 40. Gewählt sind damit [1,3], [3,5], [2,5] und [3,4].

[3,4][3,4] mit 4040: kein Kreis, aufnehmen.

Dasselbe Netz mit den vier gewählten Kanten; die Kante [2,3] mit 41 ist gestrichelt: Sie würde mit [2,5] und [3,5] den Kreis 2–3–5–2 schließen.

[2,3][2,3] mit 4141: würde den Kreis 2−3−5−22{-}3{-}5{-}2 schließen, verwerfen.

Dasselbe Netz; zusätzlich gestrichelt ist die Kante [1,2] mit 42: Sie würde mit [2,5], [3,5] und [1,3] den Kreis 1–2–5–3–1 schließen.

[1,2][1,2] mit 4242: würde den Kreis 1−2−5−3−11{-}2{-}5{-}3{-}1 schließen, verwerfen.

Dasselbe Netz; neu hervorgehoben ist die Kante [5,6] mit 46. Damit sind fünf Kanten gewählt, die alle sechs Knoten verbinden; die verworfenen Kanten [2,3] und [1,2] sind gestrichelt.

[5,6][5,6] mit 4646, die fünfte Kante: n−1=5n - 1 = 5, fertig.

Der minimale spannende Baum

Minimaler spannender Baum im Flugstreckennetz: hervorgehoben sind die Kanten [1,3], [3,5], [2,5], [3,4] und [5,6]. Sie verbinden alle sechs Knoten, ohne einen Kreis zu bilden.

WichtigErgebnis

Kanten [1,3],[3,5],[2,5],[3,4],[5,6][1,3], [3,5], [2,5], [3,4], [5,6] mit Gesamtbewertung 20+30+34+40+46=170 20 + 30 + 34 + 40 + 46 = 170

Minimaler 1-Baum

Ein 1-Baum ist zusammenhängend mit genau einem Kreis.

Voraussetzung: ein vollständiger Graph ohne parallele Kanten und Schlingen.

  1. Entferne einen vorgegebenen Knoten i0i_0 (kein Artikulationsknoten) samt seiner Kanten.
  2. Bestimme für den Rest mit Kruskal einen minimalen spannenden Baum.
  3. Füge i0i_0 mit seinen zwei günstigsten Kanten wieder hinzu.

Der 1-Baum liefert eine untere Schranke für Rundreiseprobleme (Travelling Salesman).

1-Baum am Beispiel

Vollständiger Graph mit fünf Knoten und zehn bewerteten Kanten: [1,2] 13, [1,3] 25, [1,4] 15, [1,5] 29, [2,3] 18, [2,4] 17, [2,5] 19, [3,4] 11, [3,5] 14 und [4,5] 21.

Das Flugstreckennetz ist nicht vollständig. Neues Beispiel: fünf Knoten, jeder mit jedem verbunden.

Der Graph ohne Knoten 1 und ohne dessen Kanten [1,2], [1,3], [1,4] und [1,5]; übrig sind die Knoten 2 bis 5 mit sechs Kanten.

Für i0=1i_0 = 1: Knoten 1 samt seiner vier Kanten entfernen.

Der Graph ohne Knoten 1; hervorgehoben ist die günstigste verbliebene Kante [3,4] mit 11.

Kruskal auf dem Rest: zuerst [3,4][3,4] mit 1111, aufnehmen.

Der Graph ohne Knoten 1; neu hervorgehoben ist die Kante [3,5] mit 14. Gewählt sind [3,4] und [3,5].

[3,5][3,5] mit 1414: kein Kreis, aufnehmen.

Der Graph ohne Knoten 1; neu hervorgehoben ist die Kante [2,4] mit 17. Die drei Kanten [3,4], [3,5] und [2,4] verbinden die Knoten 2 bis 5.

[2,4][2,4] mit 1717: drei Kanten für vier Knoten, fertig. Kosten 11+14+17=4211 + 14 + 17 = 42.

Der vollständige Graph; Knoten 1 ist zurück. Zu den drei Kanten kommt die Kante [1,2] mit 13 hinzu, die günstigste Kante an Knoten 1.

Knoten 1 kehrt zurück: günstigste Kante [1,2][1,2] mit 1313.

Minimaler 1-Baum für Knoten 1: hervorgehoben sind die Kanten [3,4], [3,5] und [2,4] sowie [1,2] und [1,4]. Die fünf Kanten enthalten genau einen Kreis, 1–2–4–1.

Zweitgünstigste Kante [1,4][1,4] mit 1515. Ein Kreis: 1−2−4−11{-}2{-}4{-}1, gesamt 42+13+15=7042 + 13 + 15 = 70.

Vom 1-Baum zur Rundreise

Minimaler 1-Baum für Knoten 1 mit den Kanten [1,2], [1,4], [2,4], [3,4] und [3,5]. Knoten 5 hat nur eine gewählte Kante, Knoten 4 drei.

Der 1-Baum mit 7070 ist noch keine Rundreise: Knoten 5 hat nur eine Kante, Knoten 4 drei.

Derselbe Graph; zum 1-Baum kommt die Kante [2,5] mit 19 hinzu. Damit sind sechs Kanten hervorgehoben; die Knoten 2 und 4 haben je drei.

Kante [2,5][2,5] mit 1919 hinzufügen: Knoten 5 hat nun zwei Kanten, Knoten 2 und 4 je drei.

Rundreise 1–2–5–3–4–1: hervorgehoben sind die Kanten [1,2], [2,5], [3,5], [3,4] und [1,4]; die entfernte Kante [2,4] ist gestrichelt.

Kante [2,4][2,4] mit 1717 entfernen: Rundreise 1−2−5−3−4−11{-}2{-}5{-}3{-}4{-}1 mit 70+19−17=7270 + 19 - 17 = 72.

Die Rundreise 1–2–5–3–4–1 mit der Länge 72; hervorgehoben sind die Kanten [1,2], [2,5], [3,5], [3,4] und [1,4].

Untere Schranke: Keine Rundreise ist kürzer als der 1-Baum mit 7070; die beste hat hier 7272.

Transportproblem

Beispiel: Reifentransport

Ein Unternehmen produziert in Hannover und Regensburg und beliefert Stuttgart, Wolfsburg und Dresden.

von / nach S W D Angebot
Hannover 150 30 110 15
Regensburg 80 140 100 15
Nachfrage 13 11 6 30

Summe Angebot == Summe Nachfrage =30= 30.

Als Netz

Transportnetz mit den Anbietern H und R links und den Nachfragern S, W und D rechts. Von jedem Anbieter führt ein Pfeil zu jedem Nachfrager, beschriftet mit den Kosten: von H aus 150, 30 und 110, von R aus 80, 140 und 100.

Anbieter H, R (Angebot aia_i) links, Nachfrager S, W, D (Bedarf bjb_j) rechts.

Jeder Pfeil trägt die Transportkosten cijc_{ij} pro Ladung.

TippGleich ausprobieren

Auf der nächsten Folie verteilen Sie die Reifen selbst. Reicht es, wenn jede Stadt die billigste Route nimmt?

Sie sind dran

Lineares Optimierungsproblem

Was Sie im Spiel von Hand verteilt haben, als Modell:

Minimiere F=∑i∑jcijXij \text{Minimiere } F = \sum_i \sum_j c_{ij}\, X_{ij}

∑jXij=aifür alle i(ui)∑iXij=bjfür alle j(vj)Xij≥0 \begin{aligned} \sum_j X_{ij} &= a_i && \text{für alle } i \quad (u_i) \\ \sum_i X_{ij} &= b_j && \text{für alle } j \quad (v_j) \\ X_{ij} &\ge 0 \end{aligned}

XijX_{ij}: Transportmenge von Standort ii zu Abnehmer jj.

Eine Gleichung ist redundant

Die Angebots- und Nachfragegleichungen sind nicht unabhängig:

G1=G3+G4+G5−G2 G_1 = G_3 + G_4 + G_5 - G_2

Im Beispiel: G1,G2G_1, G_2 Angebot (Hannover, Regensburg), G3,G4,G5G_3, G_4, G_5 Nachfrage (Stuttgart, Wolfsburg, Dresden).

Eine Gleichung darf entfallen. Bei |I|+|J||I| + |J| Restriktionen bleiben |I|+|J|−1|I| + |J| - 1 unabhängige. Die Dualvariablen sind deshalb nur bis auf eine Normierung bestimmt (gleich: u1:=0u_1 := 0).

Angebot ungleich Nachfrage

HinweisAusgleich

Ist ∑iai>∑jbj\sum_i a_i > \sum_j b_j, führt man einen fiktiven Nachfrager ein mit b|J|+1=∑iai−∑jbj,ci,|J|+1=0 b_{|J|+1} = \sum_i a_i - \sum_j b_j, \qquad c_{i,|J|+1} = 0

Ist umgekehrt ∑jbj>∑iai\sum_j b_j > \sum_i a_i, kommt ein fiktiver Anbieter hinzu: a|I|+1=∑jbj−∑iai,c|I|+1,j=0 a_{|I|+1} = \sum_j b_j - \sum_i a_i, \qquad c_{|I|+1,j} = 0

So wird jedes Transportproblem auf den ausgeglichenen Fall zurückgeführt.

Vogel-Methode

Idee der Methode

Heuristik für eine gute Startlösung:

TippIdee

Betrachte je Zeile und Spalte die Strafkosten Δ\Delta: die Differenz aus günstigster und zweitgünstigster Verbindung. Zuerst wird dort belegt, wo Δ\Delta am größten ist (dort wäre Ausweichen am teuersten). Bei Gleichstand entscheidet der kleinere Index (zuerst Zeilen, dann Spalten).

1. Iteration

von / nach S W D aia_i Δi\Delta_i
Hannover 150 30 110 15 80
Regensburg 80 140 100 15 20
bjb_j 13 11 6
Δj\Delta_j 70 110 10

max⁡Δ=110\max \Delta = 110 (Spalte W) ⇒X1,2=min⁡{15,11}=11\Rightarrow X_{1,2} = \min\{15, 11\} = 11.

2. Iteration

von / nach S W D aia_i Δi\Delta_i
Hannover 150 – 110 4 40
Regensburg 80 – 100 15 20
bjb_j 13 – 6
Δj\Delta_j 70 – 10

Spalte W ist gedeckt, Hannover hat noch 15−11=415 - 11 = 4. Neu: Δ1=150−110=40\Delta_1 = 150 - 110 = 40.

max⁡Δ=70\max \Delta = 70 (Spalte S) ⇒X2,1=min⁡{15,13}=13\Rightarrow X_{2,1} = \min\{15, 13\} = 13.

3. Iteration

von / nach S W D aia_i Δi\Delta_i
Hannover – – 110 4 –
Regensburg – – 100 2 –
bjb_j – – 6
Δj\Delta_j – – 10

Spalte S ist gedeckt, Regensburg hat noch 15−13=215 - 13 = 2. Je Zeile bleibt nur eine Zelle, also kein Δi\Delta_i.

max⁡Δ=10\max \Delta = 10 (Spalte D) ⇒X2,3=min⁡{2,6}=2\Rightarrow X_{2,3} = \min\{2, 6\} = 2.

4. Iteration

von / nach S W D aia_i Δi\Delta_i
Hannover – – 110 4 –
Regensburg – – – – –
bjb_j – – 4
Δj\Delta_j – – –

Regensburg ist ausgeschöpft, es bleibt nur eine Zelle: X1,3=min⁡{4,4}=4X_{1,3} = \min\{4, 4\} = 4.

WichtigStartlösung

F=30⋅11+80⋅13+110⋅4+100⋅2=2010 F = 30 \cdot 11 + 80 \cdot 13 + 110 \cdot 4 + 100 \cdot 2 = 2010

Lösung als Baum

Die Startlösung im Transportnetz: Nur vier Pfeile sind belegt, beschriftet mit den Mengen H→W 11, H→D 4, R→S 13 und R→D 2. Sie verbinden alle fünf Knoten ohne Kreis, bilden also einen Baum.

  • Je Basisvariable eine Kante.
  • Anzahl Kanten == Knoten −1-1 (hier 4=5−14 = 5 - 1).
  • Eine zusätzliche Kante erzeugt einen Umverteilungskreis.

MODI-Methode

Reduzierte Kosten

Spezialisiertes LP-Verfahren auf einer zulässigen Startlösung. Die reduzierten Kosten einer Transportvariablen:

c‾ij=cij−ui−vj \bar c_{ij} = c_{ij} - u_i - v_j

Für Basisvariablen gilt stets c‾ij=0\bar c_{ij} = 0, also cij=ui+vjc_{ij} = u_i + v_j. Daraus bestimmt man die Dualvariablen ui,vju_i, v_j.

Vorgehensweise

  1. Dualvariablen aus cij=ui+vjc_{ij} = u_i + v_j der Basisvariablen bestimmen; da eine Gleichung redundant ist, z. B. u1:=0u_1 := 0.
  2. Reduzierte Kosten c‾ij\bar c_{ij} aller Nichtbasisvariablen berechnen.
  3. Alle c‾ij≥0\bar c_{ij} \ge 0: Lösung optimal, Abbruch. Sonst die Nichtbasisvariable mit minimalem c‾ij<0\bar c_{ij} < 0 aufnehmen.
  4. Im Umverteilungskreis verlässt die Basisvariable die Basis, die bei Erhöhung der neuen als erste null wird (bei mehreren nur eine).
  5. Mit der neuen Lösung weiter bei Schritt 1.

Dualvariablen bestimmen

Aus den vier Basisvariablen und u1:=0u_1 := 0:

30=u1+v2⇒v2=30−0=30110=u1+v3⇒v3=110−0=11080=u2+v1⇒v1=80−(−10)=90100=u2+v3⇒u2=100−110=−10 \begin{aligned} 30 &= u_1 + v_2 &&\phantom{\Rightarrow\; v_2 = 30 - 0 = 30} \\ 110 &= u_1 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - 0 = 110} \\ 80 &= u_2 + v_1 &&\phantom{\Rightarrow\; v_1 = 80 - (-10) = 90} \\ 100 &= u_2 + v_3 &&\phantom{\Rightarrow\; u_2 = 100 - 110 = -10} \end{aligned}

Gesucht: jeweils eine Gleichung mit nur einer Unbekannten.

30=u1+v2⇒𝒗𝟐=𝟑𝟎−𝟎=𝟑𝟎110=u1+v3⇒v3=110−0=11080=u2+v1⇒v1=80−(−10)=90100=u2+v3⇒u2=100−110=−10 \begin{aligned} 30 &= u_1 + v_2 &&\mathbf{\Rightarrow\; v_2 = 30 - 0 = 30} \\ 110 &= u_1 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - 0 = 110} \\ 80 &= u_2 + v_1 &&\phantom{\Rightarrow\; v_1 = 80 - (-10) = 90} \\ 100 &= u_2 + v_3 &&\phantom{\Rightarrow\; u_2 = 100 - 110 = -10} \end{aligned}

u1=0u_1 = 0 ist bekannt: Zelle (1,2)(1,2) liefert v2v_2.

30=u1+v2⇒v2=30−0=30110=u1+v3⇒𝒗𝟑=𝟏𝟏𝟎−𝟎=𝟏𝟏𝟎80=u2+v1⇒v1=80−(−10)=90100=u2+v3⇒u2=100−110=−10 \begin{aligned} 30 &= u_1 + v_2 &&\Rightarrow\; v_2 = 30 - 0 = 30 \\ 110 &= u_1 + v_3 &&\mathbf{\Rightarrow\; v_3 = 110 - 0 = 110} \\ 80 &= u_2 + v_1 &&\phantom{\Rightarrow\; v_1 = 80 - (-10) = 90} \\ 100 &= u_2 + v_3 &&\phantom{\Rightarrow\; u_2 = 100 - 110 = -10} \end{aligned}

Ebenso liefert Zelle (1,3)(1,3) den Wert v3v_3.

30=u1+v2⇒v2=30−0=30110=u1+v3⇒v3=110−0=11080=u2+v1⇒v1=80−(−10)=90100=u2+v3⇒𝒖𝟐=𝟏𝟎𝟎−𝟏𝟏𝟎=−𝟏𝟎 \begin{aligned} 30 &= u_1 + v_2 &&\Rightarrow\; v_2 = 30 - 0 = 30 \\ 110 &= u_1 + v_3 &&\Rightarrow\; v_3 = 110 - 0 = 110 \\ 80 &= u_2 + v_1 &&\phantom{\Rightarrow\; v_1 = 80 - (-10) = 90} \\ 100 &= u_2 + v_3 &&\mathbf{\Rightarrow\; u_2 = 100 - 110 = -10} \end{aligned}

Mit v3v_3 liefert Zelle (2,3)(2,3) den Wert u2u_2.

30=u1+v2⇒v2=30−0=30110=u1+v3⇒v3=110−0=11080=u2+v1⇒𝒗𝟏=𝟖𝟎−(−𝟏𝟎)=𝟗𝟎100=u2+v3⇒u2=100−110=−10 \begin{aligned} 30 &= u_1 + v_2 &&\Rightarrow\; v_2 = 30 - 0 = 30 \\ 110 &= u_1 + v_3 &&\Rightarrow\; v_3 = 110 - 0 = 110 \\ 80 &= u_2 + v_1 &&\mathbf{\Rightarrow\; v_1 = 80 - (-10) = 90} \\ 100 &= u_2 + v_3 &&\Rightarrow\; u_2 = 100 - 110 = -10 \end{aligned}

Mit u2u_2 liefert Zelle (2,1)(2,1) zuletzt v1v_1. Ergebnis: u=(0,−10)u = (0, -10), v=(90,30,110)v = (90, 30, 110).

Optimalitätsprüfung

Reduzierte Kosten der Nichtbasisvariablen:

c‾1,1=150−0−90=60>0 \bar c_{1,1} = 150 - 0 - 90 = 60 > 0 c‾2,2=140+10−30=120>0 \bar c_{2,2} = 140 + 10 - 30 = 120 > 0

Grafisch ist c‾1,1\bar c_{1,1} der Umweg über den Kreis (H,S)→(H,D)→(R,D)→(R,S)(H{,}S) \to (H{,}D) \to (R{,}D) \to (R{,}S): 150−110+100−80=60150 - 110 + 100 - 80 = 60.

Alle c‾ij≥0⇒\bar c_{ij} \ge 0 \Rightarrow die Startlösung ist bereits optimal. Wäre ein c‾ij<0\bar c_{ij} < 0, würde man XijX_{ij} entlang des Kreises in die Basis bringen, wie im nächsten Beispiel.

Umverteilung

Angebot ≠ Nachfrage

Drei Standorte, vier Zentren. Das Angebot übersteigt die Nachfrage:

∑ai=160>∑bj=140 \textstyle\sum a_i = 160 \;>\; \sum b_j = 140

Ausgleich durch einen fiktiven Nachfrager j=5j = 5 mit b5=20b_5 = 20 und Kosten ci5=0c_{i5} = 0:

cijc_{ij} 1 2 3 4 5 aia_i
1 110 150 160 130 0 50
2 130 140 180 120 0 60
3 140 100 110 160 0 50
bjb_j 30 40 20 50 20

Die Startlösung

Der Distributionsleiter plant bisher so (Basiszellen mit Mengen, 3+5−1=73 + 5 - 1 = 7 Stück):

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 10 – 10 50
2 – – – 50 10 60
3 – 40 10 – – 50
bjb_j 30 40 20 50 20

Kosten dieses Plans: 30⋅110+10⋅160+50⋅120+40⋅100+10⋅110=1600030 \cdot 110 + 10 \cdot 160 + 50 \cdot 120 + 40 \cdot 100 + 10 \cdot 110 = 16\,000.

Frage: Geht es günstiger?

Dualvariablen der Startlösung

Sieben Basiszellen, je cij=ui+vjc_{ij} = u_i + v_j, Normierung u1:=0u_1 := 0:

110=u1+v1⇒v1=110−0=110160=u1+v3⇒v3=160−0=1600=u1+v5⇒v5=0−0=0120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒v2=100−(−50)=150110=u3+v3⇒u3=110−160=−50 \begin{aligned} 110 &= u_1 + v_1 &&\phantom{\Rightarrow\; v_1 = 110 - 0 = 110} \\ 160 &= u_1 + v_3 &&\phantom{\Rightarrow\; v_3 = 160 - 0 = 160} \\ 0 &= u_1 + v_5 &&\phantom{\Rightarrow\; v_5 = 0 - 0 = 0} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\phantom{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; v_2 = 100 - (-50) = 150} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; u_3 = 110 - 160 = -50} \end{aligned}

Gesucht: jeweils eine Gleichung mit nur einer Unbekannten.

110=u1+v1⇒𝒗𝟏=𝟏𝟏𝟎−𝟎=𝟏𝟏𝟎160=u1+v3⇒v3=160−0=1600=u1+v5⇒v5=0−0=0120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒v2=100−(−50)=150110=u3+v3⇒u3=110−160=−50 \begin{aligned} 110 &= u_1 + v_1 &&\mathbf{\Rightarrow\; v_1 = 110 - 0 = 110} \\ 160 &= u_1 + v_3 &&\phantom{\Rightarrow\; v_3 = 160 - 0 = 160} \\ 0 &= u_1 + v_5 &&\phantom{\Rightarrow\; v_5 = 0 - 0 = 0} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\phantom{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; v_2 = 100 - (-50) = 150} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; u_3 = 110 - 160 = -50} \end{aligned}

u1=0u_1 = 0 ist bekannt: Zelle (1,1)(1,1) liefert v1v_1.

110=u1+v1⇒v1=110−0=110160=u1+v3⇒𝒗𝟑=𝟏𝟔𝟎−𝟎=𝟏𝟔𝟎0=u1+v5⇒v5=0−0=0120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒v2=100−(−50)=150110=u3+v3⇒u3=110−160=−50 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 160 &= u_1 + v_3 &&\mathbf{\Rightarrow\; v_3 = 160 - 0 = 160} \\ 0 &= u_1 + v_5 &&\phantom{\Rightarrow\; v_5 = 0 - 0 = 0} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\phantom{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; v_2 = 100 - (-50) = 150} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; u_3 = 110 - 160 = -50} \end{aligned}

Ebenso liefert Zelle (1,3)(1,3) den Wert v3v_3.

110=u1+v1⇒v1=110−0=110160=u1+v3⇒v3=160−0=1600=u1+v5⇒𝒗𝟓=𝟎−𝟎=𝟎120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒v2=100−(−50)=150110=u3+v3⇒u3=110−160=−50 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 160 &= u_1 + v_3 &&\Rightarrow\; v_3 = 160 - 0 = 160 \\ 0 &= u_1 + v_5 &&\mathbf{\Rightarrow\; v_5 = 0 - 0 = 0} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\phantom{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; v_2 = 100 - (-50) = 150} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; u_3 = 110 - 160 = -50} \end{aligned}

Ebenso liefert Zelle (1,5)(1,5) den Wert v5v_5.

110=u1+v1⇒v1=110−0=110160=u1+v3⇒v3=160−0=1600=u1+v5⇒v5=0−0=0120=u2+v4⇒v4=120−0=1200=u2+v5⇒𝒖𝟐=𝟎−𝟎=𝟎100=u3+v2⇒v2=100−(−50)=150110=u3+v3⇒u3=110−160=−50 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 160 &= u_1 + v_3 &&\Rightarrow\; v_3 = 160 - 0 = 160 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\mathbf{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; v_2 = 100 - (-50) = 150} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; u_3 = 110 - 160 = -50} \end{aligned}

Mit v5v_5 liefert Zelle (2,5)(2,5) den Wert u2u_2.

110=u1+v1⇒v1=110−0=110160=u1+v3⇒v3=160−0=1600=u1+v5⇒v5=0−0=0120=u2+v4⇒𝒗𝟒=𝟏𝟐𝟎−𝟎=𝟏𝟐𝟎0=u2+v5⇒u2=0−0=0100=u3+v2⇒v2=100−(−50)=150110=u3+v3⇒u3=110−160=−50 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 160 &= u_1 + v_3 &&\Rightarrow\; v_3 = 160 - 0 = 160 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 120 &= u_2 + v_4 &&\mathbf{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\Rightarrow\; u_2 = 0 - 0 = 0 \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; v_2 = 100 - (-50) = 150} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; u_3 = 110 - 160 = -50} \end{aligned}

Mit u2u_2 liefert Zelle (2,4)(2,4) den Wert v4v_4.

110=u1+v1⇒v1=110−0=110160=u1+v3⇒v3=160−0=1600=u1+v5⇒v5=0−0=0120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒v2=100−(−50)=150110=u3+v3⇒𝒖𝟑=𝟏𝟏𝟎−𝟏𝟔𝟎=−𝟓𝟎 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 160 &= u_1 + v_3 &&\Rightarrow\; v_3 = 160 - 0 = 160 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 120 &= u_2 + v_4 &&\Rightarrow\; v_4 = 120 - 0 = 120 \\ 0 &= u_2 + v_5 &&\Rightarrow\; u_2 = 0 - 0 = 0 \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; v_2 = 100 - (-50) = 150} \\ 110 &= u_3 + v_3 &&\mathbf{\Rightarrow\; u_3 = 110 - 160 = -50} \end{aligned}

Mit v3v_3 liefert Zelle (3,3)(3,3) den Wert u3u_3.

110=u1+v1⇒v1=110−0=110160=u1+v3⇒v3=160−0=1600=u1+v5⇒v5=0−0=0120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒𝒗𝟐=𝟏𝟎𝟎−(−𝟓𝟎)=𝟏𝟓𝟎110=u3+v3⇒u3=110−160=−50 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 160 &= u_1 + v_3 &&\Rightarrow\; v_3 = 160 - 0 = 160 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 120 &= u_2 + v_4 &&\Rightarrow\; v_4 = 120 - 0 = 120 \\ 0 &= u_2 + v_5 &&\Rightarrow\; u_2 = 0 - 0 = 0 \\ 100 &= u_3 + v_2 &&\mathbf{\Rightarrow\; v_2 = 100 - (-50) = 150} \\ 110 &= u_3 + v_3 &&\Rightarrow\; u_3 = 110 - 160 = -50 \end{aligned}

Mit u3u_3 liefert Zelle (3,2)(3,2) zuletzt v2v_2. Ergebnis: u=(0,0,−50)u = (0, 0, -50), v=(110,150,160,120,0)v = (110, 150, 160, 120, 0).

Startlösung nicht optimal

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] [10] [10] 0
2 [50] [10] 0
3 [40] [10] −50
vjv_j 110 150 160 120 0

[⋅][\,\cdot\,]: Basiszelle mit Menge. Für jede Nichtbasiszelle gilt c‾ij=cij−ui−vj\bar c_{ij} = c_{ij} - u_i - v_j.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] [10] 0
2 [50] [10] 0
3 [40] [10] −50
vjv_j 110 150 160 120 0

c‾1,2=150−0−150=0\bar c_{1,2} = 150 - 0 - 150 = 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] (10) [10] 0
2 [50] [10] 0
3 [40] [10] −50
vjv_j 110 150 160 120 0

c‾1,4=130−0−120=10>0\bar c_{1,4} = 130 - 0 - 120 = 10 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] (10) [10] 0
2 (20) [50] [10] 0
3 [40] [10] −50
vjv_j 110 150 160 120 0

c‾2,1=130−0−110=20>0\bar c_{2,1} = 130 - 0 - 110 = 20 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] (10) [10] 0
2 (20) (−10) [50] [10] 0
3 [40] [10] −50
vjv_j 110 150 160 120 0

c‾2,2=140−0−150=−10<0\bar c_{2,2} = 140 - 0 - 150 = -10 < 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] (10) [10] 0
2 (20) (−10) (20) [50] [10] 0
3 [40] [10] −50
vjv_j 110 150 160 120 0

c‾2,3=180−0−160=20>0\bar c_{2,3} = 180 - 0 - 160 = 20 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] (10) [10] 0
2 (20) (−10) (20) [50] [10] 0
3 (80) [40] [10] −50
vjv_j 110 150 160 120 0

c‾3,1=140+50−110=80>0\bar c_{3,1} = 140 + 50 - 110 = 80 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] (10) [10] 0
2 (20) (−10) (20) [50] [10] 0
3 (80) [40] [10] (90) −50
vjv_j 110 150 160 120 0

c‾3,4=160+50−120=90>0\bar c_{3,4} = 160 + 50 - 120 = 90 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] (10) [10] 0
2 (20) (−10) (20) [50] [10] 0
3 (80) [40] [10] (90) (50) −50
vjv_j 110 150 160 120 0

c‾3,5=0+50−0=50>0\bar c_{3,5} = 0 + 50 - 0 = 50 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (0) [10] (10) [10] 0
2 (20) (−10) (20) [50] [10] 0
3 (80) [40] [10] (90) (50) −50
vjv_j 110 150 160 120 0

Nur c‾2,2=−10<0\bar c_{2,2} = -10 < 0: X2,2X_{2,2} in die Basis aufnehmen, entlang eines Umverteilungskreises durch die Basiszellen.

Der Umverteilungskreis

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 10 – 10 50
2 – +Δ – 50 10 60
3 – 40 10 – – 50
bjb_j 30 40 20 50 20

X2,2X_{2,2} aufnehmen und um Δ\Delta erhöhen: Spalte 2 hat nun Δ\Delta zu viel.

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 10 – 10 50
2 – +Δ – 50 10 60
3 – 40 −Δ 10 – – 50
bjb_j 30 40 20 50 20

Spalte 2 ausgleichen: Dort ist X3,2X_{3,2} die einzige Basiszelle, also 40−Δ40 - \Delta.

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 10 – 10 50
2 – +Δ – 50 10 60
3 – 40 −Δ 10 +Δ – – 50
bjb_j 30 40 20 50 20

Zeile 3 ausgleichen: X3,3=10+ΔX_{3,3} = 10 + \Delta.

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 10 −Δ – 10 50
2 – +Δ – 50 10 60
3 – 40 −Δ 10 +Δ – – 50
bjb_j 30 40 20 50 20

Spalte 3 ausgleichen: X1,3=10−ΔX_{1,3} = 10 - \Delta.

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 10 −Δ – 10 +Δ 50
2 – +Δ – 50 10 60
3 – 40 −Δ 10 +Δ – – 50
bjb_j 30 40 20 50 20

Zeile 1 ausgleichen über X1,5=10+ΔX_{1,5} = 10 + \Delta. X1,1X_{1,1} scheidet aus: Spalte 1 hat keine zweite Basiszelle.

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 10 −Δ – 10 +Δ 50
2 – +Δ – 50 10 −Δ 60
3 – 40 −Δ 10 +Δ – – 50
bjb_j 30 40 20 50 20

Spalte 5 ausgleichen: X2,5=10−ΔX_{2,5} = 10 - \Delta. Damit stimmt auch Zeile 2, der Kreis ist geschlossen. Alle Summen bleiben erhalten.

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 10 −Δ – 10 +Δ 50
2 – +Δ – 50 10 −Δ 60
3 – 40 −Δ 10 +Δ – – 50
bjb_j 30 40 20 50 20

Die −Δ-\Delta-Zellen dürfen nicht negativ werden: Δ=min⁡{10,10,40}=10\Delta = \min\{10,\, 10,\, 40\} = 10.

XijX_{ij} 1 2 3 4 5 aia_i
1 30 – 0 – 20 50
2 – 10 – 50 0 60
3 – 30 20 – – 50
bjb_j 30 40 20 50 20

Mit Δ=10\Delta = 10 werden X1,3X_{1,3} und X2,5X_{2,5} null. Ersparnis: Δ⋅|c‾2,2|=10⋅10=100\Delta \cdot |\bar c_{2,2}| = 10 \cdot 10 = 100.

Neue Basis

Nach der Umverteilung, wieder sieben Basiszellen:

Zelle X1,1X_{1,1} X2,2X_{2,2} X2,4X_{2,4} X3,2X_{3,2} X3,3X_{3,3} X1,5X_{1,5} X2,5X_{2,5}
Menge 30 10 50 30 20 20 0

Zwei −Δ-\Delta-Zellen wurden gleichzeitig null, nur eine verlässt die Basis, hier X1,3X_{1,3}. X2,5=0X_{2,5} = 0 bleibt als degenerierte Basisvariable (primale Degeneration, Vorlesung 5!).

Neue Dualvariablen

Neue Basiszellen, wieder u1:=0u_1 := 0:

110=u1+v1⇒v1=110−0=1100=u1+v5⇒v5=0−0=0140=u2+v2⇒v2=140−0=140120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒u3=100−140=−40110=u3+v3⇒v3=110−(−40)=150 \begin{aligned} 110 &= u_1 + v_1 &&\phantom{\Rightarrow\; v_1 = 110 - 0 = 110} \\ 0 &= u_1 + v_5 &&\phantom{\Rightarrow\; v_5 = 0 - 0 = 0} \\ 140 &= u_2 + v_2 &&\phantom{\Rightarrow\; v_2 = 140 - 0 = 140} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\phantom{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; u_3 = 100 - 140 = -40} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - (-40) = 150} \end{aligned}

Gesucht: jeweils eine Gleichung mit nur einer Unbekannten.

110=u1+v1⇒𝒗𝟏=𝟏𝟏𝟎−𝟎=𝟏𝟏𝟎0=u1+v5⇒v5=0−0=0140=u2+v2⇒v2=140−0=140120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒u3=100−140=−40110=u3+v3⇒v3=110−(−40)=150 \begin{aligned} 110 &= u_1 + v_1 &&\mathbf{\Rightarrow\; v_1 = 110 - 0 = 110} \\ 0 &= u_1 + v_5 &&\phantom{\Rightarrow\; v_5 = 0 - 0 = 0} \\ 140 &= u_2 + v_2 &&\phantom{\Rightarrow\; v_2 = 140 - 0 = 140} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\phantom{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; u_3 = 100 - 140 = -40} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - (-40) = 150} \end{aligned}

u1=0u_1 = 0 ist bekannt: Zelle (1,1)(1,1) liefert v1v_1.

110=u1+v1⇒v1=110−0=1100=u1+v5⇒𝒗𝟓=𝟎−𝟎=𝟎140=u2+v2⇒v2=140−0=140120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒u3=100−140=−40110=u3+v3⇒v3=110−(−40)=150 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 0 &= u_1 + v_5 &&\mathbf{\Rightarrow\; v_5 = 0 - 0 = 0} \\ 140 &= u_2 + v_2 &&\phantom{\Rightarrow\; v_2 = 140 - 0 = 140} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\phantom{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; u_3 = 100 - 140 = -40} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - (-40) = 150} \end{aligned}

Ebenso liefert Zelle (1,5)(1,5) den Wert v5v_5.

110=u1+v1⇒v1=110−0=1100=u1+v5⇒v5=0−0=0140=u2+v2⇒v2=140−0=140120=u2+v4⇒v4=120−0=1200=u2+v5⇒𝒖𝟐=𝟎−𝟎=𝟎100=u3+v2⇒u3=100−140=−40110=u3+v3⇒v3=110−(−40)=150 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 140 &= u_2 + v_2 &&\phantom{\Rightarrow\; v_2 = 140 - 0 = 140} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\mathbf{\Rightarrow\; u_2 = 0 - 0 = 0} \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; u_3 = 100 - 140 = -40} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - (-40) = 150} \end{aligned}

Mit v5v_5 liefert die degenerierte Zelle (2,5)(2,5) den Wert u2u_2. Ohne sie bliebe u2u_2 offen.

110=u1+v1⇒v1=110−0=1100=u1+v5⇒v5=0−0=0140=u2+v2⇒𝒗𝟐=𝟏𝟒𝟎−𝟎=𝟏𝟒𝟎120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒u3=100−140=−40110=u3+v3⇒v3=110−(−40)=150 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 140 &= u_2 + v_2 &&\mathbf{\Rightarrow\; v_2 = 140 - 0 = 140} \\ 120 &= u_2 + v_4 &&\phantom{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\Rightarrow\; u_2 = 0 - 0 = 0 \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; u_3 = 100 - 140 = -40} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - (-40) = 150} \end{aligned}

Mit u2u_2 liefert Zelle (2,2)(2,2) den Wert v2v_2.

110=u1+v1⇒v1=110−0=1100=u1+v5⇒v5=0−0=0140=u2+v2⇒v2=140−0=140120=u2+v4⇒𝒗𝟒=𝟏𝟐𝟎−𝟎=𝟏𝟐𝟎0=u2+v5⇒u2=0−0=0100=u3+v2⇒u3=100−140=−40110=u3+v3⇒v3=110−(−40)=150 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 140 &= u_2 + v_2 &&\Rightarrow\; v_2 = 140 - 0 = 140 \\ 120 &= u_2 + v_4 &&\mathbf{\Rightarrow\; v_4 = 120 - 0 = 120} \\ 0 &= u_2 + v_5 &&\Rightarrow\; u_2 = 0 - 0 = 0 \\ 100 &= u_3 + v_2 &&\phantom{\Rightarrow\; u_3 = 100 - 140 = -40} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - (-40) = 150} \end{aligned}

Ebenso liefert Zelle (2,4)(2,4) den Wert v4v_4.

110=u1+v1⇒v1=110−0=1100=u1+v5⇒v5=0−0=0140=u2+v2⇒v2=140−0=140120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒𝒖𝟑=𝟏𝟎𝟎−𝟏𝟒𝟎=−𝟒𝟎110=u3+v3⇒v3=110−(−40)=150 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 140 &= u_2 + v_2 &&\Rightarrow\; v_2 = 140 - 0 = 140 \\ 120 &= u_2 + v_4 &&\Rightarrow\; v_4 = 120 - 0 = 120 \\ 0 &= u_2 + v_5 &&\Rightarrow\; u_2 = 0 - 0 = 0 \\ 100 &= u_3 + v_2 &&\mathbf{\Rightarrow\; u_3 = 100 - 140 = -40} \\ 110 &= u_3 + v_3 &&\phantom{\Rightarrow\; v_3 = 110 - (-40) = 150} \end{aligned}

Mit v2v_2 liefert Zelle (3,2)(3,2) den Wert u3u_3.

110=u1+v1⇒v1=110−0=1100=u1+v5⇒v5=0−0=0140=u2+v2⇒v2=140−0=140120=u2+v4⇒v4=120−0=1200=u2+v5⇒u2=0−0=0100=u3+v2⇒u3=100−140=−40110=u3+v3⇒𝒗𝟑=𝟏𝟏𝟎−(−𝟒𝟎)=𝟏𝟓𝟎 \begin{aligned} 110 &= u_1 + v_1 &&\Rightarrow\; v_1 = 110 - 0 = 110 \\ 0 &= u_1 + v_5 &&\Rightarrow\; v_5 = 0 - 0 = 0 \\ 140 &= u_2 + v_2 &&\Rightarrow\; v_2 = 140 - 0 = 140 \\ 120 &= u_2 + v_4 &&\Rightarrow\; v_4 = 120 - 0 = 120 \\ 0 &= u_2 + v_5 &&\Rightarrow\; u_2 = 0 - 0 = 0 \\ 100 &= u_3 + v_2 &&\Rightarrow\; u_3 = 100 - 140 = -40 \\ 110 &= u_3 + v_3 &&\mathbf{\Rightarrow\; v_3 = 110 - (-40) = 150} \end{aligned}

Mit u3u_3 liefert Zelle (3,3)(3,3) zuletzt v3v_3. Ergebnis: u=(0,0,−40)u = (0, 0, -40), v=(110,140,150,120,0)v = (110, 140, 150, 120, 0).

Optimale Lösung

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] [20] 0
2 [10] [50] [0] 0
3 [30] [20] −40
vjv_j 110 140 150 120 0

[⋅][\,\cdot\,]: Basiszelle mit Menge, auch die degenerierte [0][0]. Für jede Nichtbasiszelle gilt c‾ij=cij−ui−vj\bar c_{ij} = c_{ij} - u_i - v_j.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) [20] 0
2 [10] [50] [0] 0
3 [30] [20] −40
vjv_j 110 140 150 120 0

c‾1,2=150−0−140=10>0\bar c_{1,2} = 150 - 0 - 140 = 10 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) (10) [20] 0
2 [10] [50] [0] 0
3 [30] [20] −40
vjv_j 110 140 150 120 0

c‾1,3=160−0−150=10>0\bar c_{1,3} = 160 - 0 - 150 = 10 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) (10) (10) [20] 0
2 [10] [50] [0] 0
3 [30] [20] −40
vjv_j 110 140 150 120 0

c‾1,4=130−0−120=10>0\bar c_{1,4} = 130 - 0 - 120 = 10 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) (10) (10) [20] 0
2 (20) [10] [50] [0] 0
3 [30] [20] −40
vjv_j 110 140 150 120 0

c‾2,1=130−0−110=20>0\bar c_{2,1} = 130 - 0 - 110 = 20 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) (10) (10) [20] 0
2 (20) [10] (30) [50] [0] 0
3 [30] [20] −40
vjv_j 110 140 150 120 0

c‾2,3=180−0−150=30>0\bar c_{2,3} = 180 - 0 - 150 = 30 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) (10) (10) [20] 0
2 (20) [10] (30) [50] [0] 0
3 (70) [30] [20] −40
vjv_j 110 140 150 120 0

c‾3,1=140+40−110=70>0\bar c_{3,1} = 140 + 40 - 110 = 70 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) (10) (10) [20] 0
2 (20) [10] (30) [50] [0] 0
3 (70) [30] [20] (80) −40
vjv_j 110 140 150 120 0

c‾3,4=160+40−120=80>0\bar c_{3,4} = 160 + 40 - 120 = 80 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) (10) (10) [20] 0
2 (20) [10] (30) [50] [0] 0
3 (70) [30] [20] (80) (40) −40
vjv_j 110 140 150 120 0

c‾3,5=0+40−0=40>0\bar c_{3,5} = 0 + 40 - 0 = 40 > 0.

c‾ij\bar c_{ij} 1 2 3 4 5 uiu_i
1 [30] (10) (10) (10) [20] 0
2 (20) [10] (30) [50] [0] 0
3 (70) [30] [20] (80) (40) −40
vjv_j 110 140 150 120 0

Alle c‾ij≥0\bar c_{ij} \ge 0: optimal, F*=16000−100=15900F^* = 16\,000 - 100 = 15\,900. X1,5+X2,5=20X_{1,5} + X_{2,5} = 20 bleibt beim fiktiven Nachfrager.

Kontrolle mit Julia

Reifentransport mit JuMP

using JuMP, HiGHS

a = [15, 15]                   # Angebot: Hannover, Regensburg
b = [13, 11, 6]                # Nachfrage: Stuttgart, Wolfsburg, Dresden
c = [150 30 110; 80 140 100]   # Transportkosten c[i,j]

modell = Model(HiGHS.Optimizer); set_silent(modell)
@variable(modell, X[1:2, 1:3] >= 0)
@objective(modell, Min, sum(c[i,j] * X[i,j] for i in 1:2, j in 1:3))
@constraint(modell, [i in 1:2],                    # Angebot
    sum(X[i,j] for j in 1:3) == a[i])
@constraint(modell, [j in 1:3],                    # Nachfrage
    sum(X[i,j] for i in 1:2) == b[j])

optimize!(modell)
println("F* = ", objective_value(modell))
F* = 2010.0

Distribution mit JuMP

Angebot als ≤\le (Überschuss bleibt liegen), Nachfrage als ==:

a = [50, 60, 50]; b = [30, 40, 20, 50]
c = [110 150 160 130; 130 140 180 120; 140 100 110 160]

modell = Model(HiGHS.Optimizer); set_silent(modell)
@variable(modell, X[1:3, 1:4] >= 0)
@objective(modell, Min, sum(c[i,j]*X[i,j] for i in 1:3, j in 1:4))
@constraint(modell, [i in 1:3],                    # Angebot
    sum(X[i,j] for j in 1:4) <= a[i])
@constraint(modell, [j in 1:4],                    # Nachfrage
    sum(X[i,j] for i in 1:3) == b[j])

optimize!(modell)
println("F* = ", round(Int, objective_value(modell)))
F* = 15900

Zusammenfassung

Das Wichtigste auf einen Blick

  • Der Kruskal-Algorithmus liefert den minimalen spannenden Baum (kreisfreies, kostenminimales Netz).
  • Das Transportproblem verteilt Angebot auf Nachfrage bei minimalen Kosten: eine Restriktion ist redundant.
  • Die Vogelsche Approximationsmethode erzeugt schnell eine gute Startlösung.
  • Die MODI-Methode prüft und verbessert sie über reduzierte Kosten c‾ij=cij−ui−vj\bar c_{ij} = c_{ij} - u_i - v_j.

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.