Standortplanung II: Diskrete Netzwerkplanungsmodelle

Kapitel 6 · Supply Chain Management & Distribution

Prof. Dr. Thomas Kirschstein

Strategische Gestaltung von Supply Chains - Warehouse Location Planning

Strategische Gestaltung von Supply Chains

  • Multikriterielle Standortplanung
  • Kontinuierliche Standortplanung
  • Diskrete Standortplanung
  • Transportplanung

Lernziele

Nach dieser Einheit können Sie …

  • diskrete Standort- und Netzwerkplanungsprobleme formulieren,
  • Transport-, Umschlags- und Standortentscheidungen in einem Netzwerk modellieren,
  • zentrale Entscheidungsvariablen, Zielfunktionen und Nebenbedingungen interpretieren,
  • Ergebnisse diskreter Netzwerkmodelle für strategische Standortentscheidungen bewerten.

Literatur zur Vertiefung

Planung von Distributionsnetzen

Einordnung

\(\rightarrow\) Wähle konkrete Standorte im Netzwerk aus \(\rightarrow\) in der Regel begrenzte Betrachtung der SC

Fallstudie – SushiFresh GmbH

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

  • AHP-Bewertung: Raunheim knapp vorn
  • Center of Gravity / Weiszfeld: Optimalpunkt mitten im Rhein-Main-Gebiet, nahe Raunheim
  • Offene Frage: Bestätigt eine Kostenoptimierung (Fixkosten + Transport) dieses Bild?

Fallstudie – SushiFresh GmbH

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

Warehouse Location Problem

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

  • Menge der Lagerhäuser \(i \in I\)
  • Menge der Kundenstandorte \(j \in J\)
  • Transportverbindungen \(E \subseteq I \times J\)
  • Eröffnungskosten an Lagerstandort \(i\): \(f_i\)
  • Transportkosten (z.B. in €/Monat) Standort \(i\) zu Kunde \(j\): \(c_{ij}\)
  • Nachfrage von Kunde \(j\): \(a_j\)

Warehouse Location Problem

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} \]

Warehouse Location Problem

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

Warehouse Location Problem

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

  1. MIPModel() → leeres Modell
  2. add_variable() → Entscheidungsvariablen
  3. set_objective() → Zielfunktion
  4. add_constraint() → Nebenbedingungen
  5. solve_model() → Solver aufrufen
  6. get_solution() → Lösung extrahieren
# Optimale Lösung extrahieren
y_sol <- get_solution(result, y[i])
x_sol <- get_solution(result, x[i,j])

# Geöffnete Lager
offene_lager <- y_sol$i[y_sol$value > 0.5]

# Optimaler Zielfunktionswert
obj_val <- objective_value(result)

Warehouse Location Problem

Fallbeispiel – 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

Warehouse Location Problem

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

  • start mit einer zulässigen Lösung und versuche diese schrittweise zu verbessern
  • Jeder Schritt: greedy – wähle die Änderung mit der größten Kostenreduktion
  • Abbruch, wenn keine weitere Verbesserung möglich
  • Kunden werden stets dem günstigsten offenen Lager zugeordnet

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

Warehouse Location Problem

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:

  1. Berechne für jedes noch nicht geöffnete Lager \(i \notin S\) den Kostenbeitrag: \[\Delta_i = Z(S) - Z(S \cup \{i\})\]

  2. Wähle \(i^* = \arg\max_{i \notin S} \Delta_i\)

  3. Falls \(\Delta_{i^*} > 0\): öffne \(i^*\), setze \(S \leftarrow S \cup \{i^*\}\)

  4. 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}}\]

  • Eigenschaft:
    • Greedy, nicht garantiert optimal
    • Transportkosten sinken von Schritt zu Schritt
    • neues Lager wird eröffnet, wenn Eröffnungskosten < Transportkosteneinsparungen

Abbruchbedingung

Die Heuristik stoppt, sobald kein weiteres Lager die Gesamtkosten senkt.

Warehouse Location Problem

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:

  1. Berechne für jedes noch geöffnete Lager \(i \in S\) den Kostenbeitrag: \[\Delta_i = Z(S) - Z(S \setminus \{i\})\]

  2. Wähle \(i^* = \arg\max_{i \in S} \Delta_i\)

  3. Falls \(\Delta_{i^*} > 0\): schließe \(i^*\), setze \(S \leftarrow S \setminus \{i^*\}\)

  4. 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.

Warehouse Location Problem

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

Warehouse Location Problem

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!

Warehouse Location Problem

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

Qualitative vs. quantitative Standortbewertung

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

  • AHP (Kapitel 4): gut für erste Vorauswahl unter schwer quantifizierbaren, weichen Kriterien
  • WLP (Kapitel 5): liefert die belastbare Kostenentscheidung, sobald harte Zahlen vorliegen
  • Beide Verfahren ergänzen sich – keines ersetzt das andere
Daskin, Mark S. 2013. Network and Discrete Location: Models, Algorithms, and Applications. 2nd ed. Wiley.
Drezner, Zvi, and Horst W. Hamacher, eds. 2002. Facility Location: Applications and Theory. Springer.
Günther, Hans-Otto, and Horst Tempelmeier. 2012. Produktion Und Logistik. 9th ed. Springer-Lehrbuch. Springer.