Kapitel 6 · Supply Chain Management & Distribution
Nach dieser Einheit können Sie …
Literatur zur Vertiefung
Einordnung
\(\rightarrow\) Wähle konkrete Standorte im Netzwerk aus \(\rightarrow\) in der Regel begrenzte Betrachtung der SC
Ausgangslage
Problemstellung
Die SushiFresh GmbH beliefert täglich sechs Supermarkt-Filialen im Rhein-Main-Gebiet mit frisch produzierten Sushi-Boxen. In Kapitel 4 wurde bereits eine qualitative Standortvorauswahl per AHP durchgeführt (Ergebnis: Mainz-Hechtsheim knapp vorn) sowie eine kontinuierliche Standortoptimierung (Center of Gravity/Weiszfeld). Nun stellt sich die Frage: Hält dieses Ergebnis auch einer kostenbasierten Prüfung stand?
Rückblick Kapitel 4
Entscheidungssituation
Entscheidungssituation
SushiFresh muss entscheiden, welcher der drei Kandidatenstandorte für Produktion und Distribution ausgebaut wird und welche Filiale von welchem Standort versorgt werden soll. Das Unternehmen möchte die Entscheidung so treffen, dass die jährlichen Gesamtkosten aus Fixkosten und Transport minimiert werden. Folgende Informationen sind bekannt:
Kandidatenstandorte und jährliche Fixkosten
| ID | Standort | Längengrad | Breitengrad | Fixkosten/Jahr (1000 €) |
|---|---|---|---|---|
| S1 | Wiesbaden-Erbenheim | 8.29990 | 50.06320 | 36 |
| S2 | Mainz-Hechtsheim | 8.28310 | 49.96980 | 42 |
| S3 | Raunheim | 8.46500 | 50.00000 | 52 |
| S4 | Höchst | 8.54218 | 50.11146 | 48 |
| S5 | Isenburg | 8.70720 | 50.05430 | 40 |
Transportdistanzen in km
| C1 | C2 | C3 | C4 | C5 | C6 | |
|---|---|---|---|---|---|---|
| S1 | 6.174 | 20.739 | 23.737 | 27.576 | 42.998 | 9.110 |
| S2 | 4.603 | 25.745 | 29.584 | 44.289 | 36.928 | 39.002 |
| S3 | 24.084 | 13.601 | 8.518 | 27.325 | 22.386 | 6.296 |
| S4 | 30.588 | 33.354 | 44.696 | 16.751 | 34.263 | 37.121 |
| S5 | 25.113 | 43.756 | 45.288 | 30.370 | 16.021 | 5.700 |
Filialen und tägliche Nachfrage
| ID | Filiale | Längengrad | Breitengrad | Nachfrage $\mu$ (Boxen/Tag) |
|---|---|---|---|---|
| C1 | Wiesbaden | 8.2398 | 50.0782 | 120 |
| C2 | Mainz | 8.2711 | 50.0000 | 150 |
| C3 | Frankfurt | 8.6821 | 50.1109 | 280 |
| C4 | Rüsselsheim | 8.4116 | 49.9904 | 90 |
| C5 | Darmstadt | 8.6512 | 49.8728 | 110 |
| C6 | Offenbach | 8.7761 | 50.0956 | 95 |
Problembeschreibung
Problemstellung
Gegeben sei eine Menge an Kundenstandorten und eine Menge (potentieller) Lagerhausstandorte. Jeder Kundenstandort hat eine Warennachfrage (z.B. in Stück pro Monat/Jahr), die von den Lagerhäusern beliefert warden muss. Der Transport der Waren verursacht entfernungsabhängige Transportkosten. Die Eröffnung eines Lagerhauses verursacht Einrichtungskosten.
Es ist zu entscheiden, an welchen Standorten Lagerhäuser eingerichtet werden sollen und welche Kunden diese versorgen sollen.
Notation
Mathematisches Modell
Gemischt-ganzzahliges lineares Optimierungsmodell
Minimiere die Gesamtkosten aus Transport und Standorteröffnung
\[\min \rightarrow \sum_{i \in I} y_i \cdot f_i + \sum_{(i,j) \in E} x_{ij} \cdot c_{ij}\]
Nebenbedingungen \[ \begin{align} \sum_{(i,j) \in E} x_{ij} &= a_j & \forall j \in J &\quad\rightarrow \text{Nachfrage befriedigen} \\ x_{ij} &\leq y_i \cdot a_j & \forall (i,j) \in E &\quad\rightarrow \text{nur Transporte von eröffneten Standorten} \\ x_{ij} &\geq 0 & \forall (i,j) \in E &\quad\rightarrow \text{Transportmengen nicht negativ} \\ y_i &\in \{0,1\} & \forall i \in I &\quad\rightarrow \text{Standort wird eröffnet oder nicht} \end{align} \]
Fallbeispiel
Standorte – Fixkosten \(f_i\) (€/Jahr)
| Standort i | f_i (€) |
|---|---|
| S1 | 36 000 |
| S2 | 42 000 |
| S3 | 52 000 |
| S4 | 48 000 |
| S5 | 40 000 |
Filialen – Nachfrage \(a_j\) (Boxen/Jahr)
| Filiale j | a_j |
|---|---|
| C1 | 120 000 |
| C2 | 150 000 |
| C3 | 280 000 |
| C4 | 90 000 |
| C5 | 110 000 |
| C6 | 95 000 |
Transportkosten \(c_{ij}\) (€/Box)
| C1 | C2 | C3 | C4 | C5 | C6 | |
|---|---|---|---|---|---|---|
| S1 | 0.123 | 0.415 | 0.475 | 0.552 | 0.860 | 0.182 |
| S2 | 0.092 | 0.515 | 0.592 | 0.886 | 0.739 | 0.780 |
| S3 | 0.482 | 0.272 | 0.170 | 0.546 | 0.448 | 0.126 |
| S4 | 0.612 | 0.667 | 0.894 | 0.335 | 0.685 | 0.742 |
| S5 | 0.502 | 0.875 | 0.906 | 0.607 | 0.320 | 0.114 |
Implementierung mit R/OMPR
library(ompr)
library(ompr.roi)
library(ROI.plugin.glpk)
# Problemdaten
n_I <- 5; n_J <- 6
f <- c(36000, 42000, 52000, 48000, 40000)
a <- c(120000, 150000, 280000, 90000, 110000, 95000)
c_ij <- matrix(
c(
0.12348, 0.41478, 0.47474, 0.55152, 0.85996, 0.18220,
0.09206, 0.51490, 0.59168, 0.88578, 0.73856, 0.78004,
0.48168, 0.27202, 0.17036, 0.54650, 0.44772, 0.12592,
0.61176, 0.66708, 0.89392, 0.33502, 0.68526, 0.74242,
0.50226, 0.87512, 0.90576, 0.60740, 0.32042, 0.11400),
nrow = n_I, byrow = TRUE)
# MILP-Modell
model <- MIPModel() |>
# Variablen
add_variable(y[i], i = 1:n_I, type = "binary") |>
add_variable(x[i,j], i = 1:n_I, j = 1:n_J,
type = "continuous", lb = 0) |>
# Zielfunktion
set_objective(
sum_expr(f[i] * y[i], i = 1:n_I) +
sum_expr(c_ij[i,j] * x[i,j],
i = 1:n_I, j = 1:n_J),
sense = "min") |>
# NB1: Nachfrage vollständig befriedigen
add_constraint(
sum_expr(x[i,j], i = 1:n_I) == a[j],
j = 1:n_J) |>
# NB2: Transport nur von eröffneten Lagern
add_constraint(
x[i,j] <= y[i] * a[j],
i = 1:n_I, j = 1:n_J)
result <- solve_model(model,
with_ROI(solver = "glpk", verbose = FALSE))OMPR – Workflow
MIPModel() → leeres Modelladd_variable() → Entscheidungsvariablenset_objective() → Zielfunktionadd_constraint() → Nebenbedingungensolve_model() → Solver aufrufenget_solution() → Lösung extrahierenFallbeispiel – Optimale Lösung
| Standort $i$ | Filiale $j$ | Menge $x_{ij}$ (Boxen) | Transportkosten (€) |
|---|---|---|---|
| S1 | C1 | 120 000 | 14 817.6 |
| S3 | C2 | 150 000 | 40 803.0 |
| S3 | C3 | 280 000 | 47 700.8 |
| S3 | C4 | 90 000 | 49 185.0 |
| S3 | C5 | 110 000 | 49 249.2 |
| S3 | C6 | 95 000 | 11 962.4 |
| Kostenart | €/Jahr |
|---|---|
| Fixkosten | 88 000 |
| Transportkosten | 213 718 |
| Gesamtkosten Z* | 301 718 |
Heuristische Lösungsverfahren - Grundideen
Warum Heuristiken?
Das WLP ist NP-schwer: exakte Solver (MILP) finden zwar optimale Lösungen, aber die Rechenzeit wächst exponentiell mit \(|I|\) und \(|J|\). Für große Praxisinstanzen sind konstruktive Heuristiken oft der einzig praktikable Ansatz.
Grundidee
Zwei klassische Ansätze
| Methode | Ausgangspunkt | Richtung |
|---|---|---|
| Add-Heuristik | Keine Lager offen | Schrittweise hinzufügen |
| Drop-Heuristik | Alle Lager offen | Schrittweise schließen |
Grundideen Add/Drop - graphisch
Add-Heuristik
Idee: Starte ohne geöffnetes Lager. Füge in jedem Schritt dasjenige Lager \(i^*\) hinzu, das die Gesamtkosten am stärksten reduziert.
Algorithmus
Initialisierung: \(S \leftarrow \emptyset\)
Wiederhole:
Berechne für jedes noch nicht geöffnete Lager \(i \notin S\) den Kostenbeitrag: \[\Delta_i = Z(S) - Z(S \cup \{i\})\]
Wähle \(i^* = \arg\max_{i \notin S} \Delta_i\)
Falls \(\Delta_{i^*} > 0\): öffne \(i^*\), setze \(S \leftarrow S \cup \{i^*\}\)
Sonst: Abbruch
Zuordnungsregel: Jeder Kunde \(j\) wird dem günstigsten offenen Lager zugeordnet: \(\sigma(j) = \arg\min_{i \in S} c_{ij}\)
Kostenberechnung
\[Z(S) = \underbrace{\sum_{i \in S} f_i}_{\text{Eröffnung}} + \underbrace{\sum_{j \in J} \min_{i \in S} c_{ij} \cdot a_j}_{\text{Transport}}\]
Abbruchbedingung
Die Heuristik stoppt, sobald kein weiteres Lager die Gesamtkosten senkt.
Drop-Heuristik
Idee: Starte mit allen Lagern geöffnet. Schließe in jedem Schritt dasjenige Lager \(i^*\), dessen Schließung die Gesamtkosten am stärksten reduziert.
Algorithmus
Initialisierung: \(S \leftarrow I\)
Wiederhole:
Berechne für jedes noch geöffnete Lager \(i \in S\) den Kostenbeitrag: \[\Delta_i = Z(S) - Z(S \setminus \{i\})\]
Wähle \(i^* = \arg\max_{i \in S} \Delta_i\)
Falls \(\Delta_{i^*} > 0\): schließe \(i^*\), setze \(S \leftarrow S \setminus \{i^*\}\)
Sonst: Abbruch
Zuordnungsregel: \(\sigma(j) = \arg\min_{i \in S} c_{ij}\)
Vergleich mit Add-Heuristik
| Merkmal | Add | Drop |
|---|---|---|
| Start | \(S = \emptyset\) | \(S = I\) |
| Richtung | aufbauend | abbauend |
| Startkosten | \(\infty\) (kein Lager) | \(\sum_i f_i + \ldots\) |
| Laufzeit | \(\mathcal{O}(|I|^2 \cdot |J|)\) | \(\mathcal{O}(|I|^2 \cdot |J|)\) |
| Tendenz | wenige Lager | mehr Lager |
Wichtig
Beide Heuristiken sind nicht garantiert optimal. Sie liefern zulässige Lösungen, die Lösungsqualität hängt stark von der Kostenstruktur der Instanz ab.
Add-Heuristik – Fallbeispiel
| Schritt | Aktion | Offene Standorte | Fixkosten (€) | Transport (€) | Gesamt (€) |
|---|---|---|---|---|---|
| 1 | +S3 | {S3} | 52 000 | 256 702 | 308 702 |
| 2 | +S1 | {S1, S3} | 88 000 | 213 718 | 301 718 |
Filialzuordnung je Schritt:
| Schritt | C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|---|
| 1 | S3 | S3 | S3 | S3 | S3 | S3 |
| 2 | S1 | S3 | S3 | S3 | S3 | S3 |
Ergebnis Add-Heuristik: Standort \(\{S1, S3\}\) geöffnet, \(Z_\text{Add} = 301 718\) €/Jahr
Drop-Heuristik – Fallbeispiel
| Schritt | Aktion | Offene Standorte | Fixkosten (€) | Transport (€) | Gesamt (€) |
|---|---|---|---|---|---|
| 0 | Start | {S1, S2, S3, S4, S5} | 218 000 | 175 779.0 | 393 779.0 |
| 1 | -S2 | {S1, S3, S4, S5} | 176 000 | 179 549.4 | 355 549.4 |
| 2 | -S4 | {S1, S3, S5} | 128 000 | 198 582.6 | 326 582.6 |
| 3 | -S5 | {S1, S3} | 88 000 | 213 718.0 | 301 718.0 |
Filialzuordnung je Schritt:
| Schritt | C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|---|
| 0 | S2 | S3 | S3 | S4 | S5 | S5 |
| 1 | S1 | S3 | S3 | S4 | S5 | S5 |
| 2 | S1 | S3 | S3 | S3 | S5 | S5 |
| 3 | S1 | S3 | S3 | S3 | S3 | S3 |
Ergebnis Drop-Heuristik: Standort \(\{S1, S3\}\) geöffnet, \(Z_\text{Drop} = 301 718\) €/Jahr — identisch zum Ergebnis der Add-Heuristik!
Lösungsvergleich
| Kennzahl | Optimum (MILP) | Add-Heuristik | Drop-Heuristik |
|---|---|---|---|
| Geöffnete Standorte | S1, S3 | S1, S3 | S1, S3 |
| Anzahl Standorte | 2 | 2 | 2 |
| Fixkosten (€) | 36000 | 88000 | 88000 |
| Transportkosten (€) | 265718 | 213718 | 213718 |
| Gesamtkosten Z (€) | 301718 | 301718 | 301718 |
| Gap zum Optimum (%) | – | 0 % | 0 % |
In diesem Fallbeispiel finden Add-Heuristik und Drop-Heuristik unabhängig voneinander dieselbe, nachweislich optimale Lösung (\(Z = 301 718\) €/Jahr, nur Standort S1 = Wiesbaden-Erbenheim). Das ist keine Selbstverständlichkeit, zeigt hier aber den eindeutigen Kostenvorteil dieses Standorts.
Kostenvergleich
Diskussion
Widerspruch zu Kapitel 4?
Die AHP-Analyse aus Kapitel 4 favorisierte knapp Mainz-Hechtsheim. Die quantitative WLP-Analyse dieses Kapitels favorisiert Wiesbaden-Erbenheim und Raunheim. Wie passt das zusammen?
| Standort (Einzelbetrieb) | Fixkosten (€) | Transport (€/Jahr) | Gesamt (€/Jahr) |
|---|---|---|---|
| Wiesbaden-Erbenheim | 36 000 | 14 818 | 50 818 |
| Raunheim | 52 000 | 198 900 | 250 900 |
Raunheim und Wiesbaden-Erbenheim sind transportkostengünstiger, die Einsparungen kompensieren die höheren Fixkosten.
Fazit

Supply Chain Management