Tourenplanung

Kapitel 14 · Supply Chain Management & Distribution

Prof. Dr. Thomas Kirschstein

operative Distributionsplanung - Tourenplanung

Operative Distributionsplanung

  • Kürzeste Wege
  • Tourenplanung

Lernziele

Nach dieser Einheit können Sie …

  • das Traveling Salesman Problem (TSP) als Grundproblem der Tourenplanung beschreiben und formulieren,
  • die Komplexität des TSP einschätzen und den Einsatz von Heuristiken begründen,
  • Touren mit dem Nearest-Neighbor-Verfahren konstruieren und mit 2-opt verbessern,
  • heuristische Lösungen im Vergleich zur Optimallösung bewerten und Erweiterungen zum Vehicle Routing Problem einordnen.

Literatur zur Vertiefung

Fallstudie – SushiFresh GmbH

Pendelverkehr oder Rundtour?

Ausgangslage

Im Normalbetrieb liefert ein Kühltransporter (Kapazität 900 Boxen) jeden Morgen 845 Boxen aus Raunheim an die sechs Filialen. Der Fahrer fährt bisher jede Filiale einzeln an und kehrt danach zur Küche zurück (Pendelverkehr).

Täglich gefahrene Strecke: \(2 \cdot \sum_j d_{Rj} =\) 296 km (Straßennetz; Schätzung aus der Standortplanung II: 204 km)

Idee

Da alle Boxen auf einmal in den Transporter passen, kann er die Filialen in einer Rundtour nacheinander anfahren.

Frage: In welcher Reihenfolge ist die Tour am kürzesten?

Die Distanzen \(d_{ij}\) stammen aus der Distanzmatrix von Einheit Kürzeste Wege (kürzeste Wege im Straßennetz).

Traveling Salesman Problem

Problembeschreibung

Problemstellung

Gegeben sind \(n\) Orte (ein Depot und \(n-1\) Kunden) und die Entfernungen \(d_{ij}\) zwischen allen Paaren. Gesucht ist eine Rundreise, die jeden Ort genau einmal besucht, zum Ausgangspunkt zurückkehrt und minimale Gesamtlänge hat.

Begriffe

  • Tour (Hamiltonkreis): Reihenfolge \((v_1, v_2, \ldots, v_n, v_1)\)
  • symmetrisches TSP: \(d_{ij} = d_{ji}\) (SushiFresh)
  • asymmetrisches TSP: \(d_{ij} \neq d_{ji}\) (Einbahnstraßen, Stadtverkehr)
  • metrisches TSP: Dreiecksungleichung gilt, z. B. bei Distanzen aus kürzesten Wegen

Abgrenzung

  • Kürzeste Wege: Wie komme ich von \(i\) nach \(j\)?
  • TSP: In welcher Reihenfolge besuche ich alle Orte?

Distanzmatrix \(d_{ij}\) (km) aus Einheit Kürzeste Wege

von R C1 C2 C3 C4 C5 C6
R 0 26 22 28 6 39 27
C1 26 0 14 44 30 60 43
C2 22 14 0 49 16 49 48
C3 28 44 49 0 33 34 10
C4 6 30 16 33 0 33 32
C5 39 60 49 34 33 0 24
C6 27 43 48 10 32 24 0

Traveling Salesman Problem

Mathematisches Modell

Binäres Optimierungsmodell (Dantzig et al. 1954)

\(x_{ij} = 1\), falls direkt von \(i\) nach \(j\) gefahren wird

\[\min \rightarrow \sum_{i} \sum_{j \neq i} d_{ij} \cdot x_{ij}\]

Nebenbedingungen \[ \begin{align} \sum_{j \neq i} x_{ij} &= 1 && \forall i \\ \sum_{i \neq j} x_{ij} &= 1 && \forall j \\ \sum_{i \in S} \sum_{j \in S} x_{ij} &\leq |S| - 1 && \forall S \subset V,\ 2 \leq |S| < n \\ x_{ij} &\in \{0,1\} && \forall i \neq j \end{align} \]

Zeilen 1–2: jeden Ort genau einmal verlassen und erreichen. Zeile 3: keine Kurzzyklen.

Ohne die dritte Bedingung wären zwei getrennte Kreise zulässig: Jeder Ort hat genau einen Vorgänger und Nachfolger, aber die Filialen C3, C5, C6 sind nicht mit der Küche verbunden.

Traveling Salesman Problem

Warum nicht einfach alle Touren ausprobieren?

Orte n Touren (n−1)!/2 Rechenzeit bei 10⁹ Touren/s
5 12 < 1 Sekunde
7 360 < 1 Sekunde
10 181.440 < 1 Sekunde
15 4,4 · 1010 44 Sekunden
20 6,1 · 1016 1,9 Jahre
30 4,4 · 1030 1,4 · 1014 Jahre
50 3,0 · 1062 9,6 · 1045 Jahre

Kombinatorische Explosion

Das TSP ist NP-schwer: Es ist kein Verfahren bekannt, das jede Instanz in polynomieller Zeit optimal löst. Für SushiFresh (\(n = 7\)) gibt es nur 360 verschiedene Touren, ein Paketdienst mit 150 Stopps pro Fahrzeug hat dagegen unvorstellbar viele.

Lösungsansätze

  • Eröffnungsverfahren konstruieren eine Tour: Nearest Neighbor, Einfügeverfahren, Savings
  • Verbesserungsverfahren verändern eine Tour lokal: 2-opt, Or-opt, 3-opt
  • Metaheuristiken (z. B. Simulated Annealing) und exakte Verfahren (Branch-and-Cut) für anspruchsvolle Fälle

Nearest-Neighbor-Verfahren

Idee und Algorithmus

Idee: Fahre vom aktuellen Ort immer zum nächstgelegenen noch nicht besuchten Ort. Sind alle besucht, kehre zum Depot zurück.

Algorithmus

Initialisierung: Tour \(T = (v_1)\) mit Startort (Depot) \(v_1\)

Wiederhole, bis alle Orte in \(T\) enthalten sind:

  1. Sei \(v\) der letzte Ort in \(T\).
  2. Wähle \(w^* = \arg\min_{w \notin T} d_{vw}\).
  3. Hänge \(w^*\) an \(T\) an.

Abschluss: Kante vom letzten Ort zurück zu \(v_1\)

Eigenschaften

  • sehr einfach und schnell: \(\mathcal{O}(n^2)\)
  • entspricht der Intuition vieler Fahrer
  • greedy: Jede Entscheidung ist lokal gut, aber sie berücksichtigt nicht, was danach kommt

Typische Schwäche

Die letzten Orte liegen oft verstreut. Am Ende werden lange Wege und der Rückweg zum Depot „erzwungen“.

Nearest-Neighbor-Verfahren

Fallbeispiel – Start in Raunheim

# von offene Orte: d (km) nach km Σ km
1 R C4: 6, C2: 22, C1: 26, C6: 27, C3: 28, C5: 39 C4 6 6
2 C4 C2: 16, C1: 30, C6: 32, C3: 33, C5: 33 C2 16 22
3 C2 C1: 14, C6: 48, C3: 49, C5: 49 C1 14 36
4 C1 C6: 43, C3: 44, C5: 60 C6 43 79
5 C6 C3: 10, C5: 24 C3 10 89
6 C3 C5: 34 C5 34 123
7 C5 Rückkehr zum Depot R 39 162

NN-Tour: R → C4 → C2 → C1 → C6 → C3 → C5 → R mit 162 km, gegenüber 296 km im Pendelverkehr.

Nearest-Neighbor-Verfahren

Kritische Würdigung

Was ist schiefgelaufen?

  • In Schritt 4 springt die Tour von Wiesbaden quer durch das Gebiet nach Offenbach (43 km), weil Offenbach 1 km näher liegt als Frankfurt.
  • Danach geht es zurück nach Frankfurt und wieder nach Süden nach Darmstadt.
  • Die Tour kreuzt sich selbst, und der Rückweg von Darmstadt (39 km) ist lang.

Merkregel

In einer optimalen Tour eines euklidischen TSP gibt es keine Kreuzungen. Kreuzungen sind ein deutliches Zeichen für Verbesserungspotenzial.

NN-Tourlänge je nach Startort

Start Tour (ab Depot gelesen) km
R R → C4 → C2 → C1 → C6 → C3 → C5 → R 162
C1 R → C6 → C3 → C5 → C1 → C2 → C4 → R 167
C2 R → C4 → C6 → C3 → C5 → C2 → C1 → R 171
C3 R → C2 → C1 → C3 → C6 → C5 → C4 → R 153
C4 R → C2 → C1 → C6 → C3 → C5 → C4 → R 162
C5 R → C4 → C2 → C1 → C5 → C6 → C3 → R 158
C6 R → C4 → C2 → C1 → C5 → C6 → C3 → R 158

Eine einfache Verbesserung: NN von jedem Startort aus rechnen und die beste Tour wählen.

2-opt-Verfahren

Idee: zwei Kanten austauschen (Croes 1958)

Idee: Entferne zwei nicht benachbarte Kanten \((a,b)\) und \((c,d)\) aus der Tour und verbinde die Teilstücke neu über \((a,c)\) und \((b,d)\). Das Teilstück zwischen \(b\) und \(c\) wird dabei in umgekehrter Richtung durchlaufen.

Ersparnis eines 2-opt-Zugs

\[\Delta = \underbrace{d_{ab} + d_{cd}}_{\text{entfernt}} - \underbrace{d_{ac} + d_{bd}}_{\text{hinzugefügt}}\] Der Zug lohnt sich, wenn \(\Delta > 0\).

Bei \(n\) Orten gibt es \(n(n-3)/2\) mögliche 2-opt-Züge, bei SushiFresh also 14.

2-opt-Verfahren

Algorithmus

Initialisierung: Starttour \(T = (v_1, \ldots, v_n)\), z. B. aus Nearest Neighbor

Wiederhole:

  1. Berechne für alle Paare nicht benachbarter Kanten \((v_i, v_{i+1})\) und \((v_k, v_{k+1})\) die Ersparnis \[\Delta_{ik} = d_{v_i v_{i+1}} + d_{v_k v_{k+1}} - d_{v_i v_k} - d_{v_{i+1} v_{k+1}}\]
  2. Wähle das Paar mit dem größten \(\Delta_{ik}\) (best improvement).
  3. Falls \(\Delta_{ik} > 0\): kehre die Reihenfolge \(v_{i+1}, \ldots, v_k\) um.
  4. Sonst: Abbruch, \(T\) ist 2-optimal.

Varianten

  • first improvement: den ersten verbessernden Zug sofort ausführen (schneller pro Iteration)
  • Or-opt: verschiebt Teilstücke aus 1–3 Orten an eine andere Stelle
  • 3-opt: tauscht drei Kanten (mächtiger, aber \(\mathcal{O}(n^3)\) je Durchlauf)

Lokales Optimum

Eine 2-optimale Tour lässt sich durch keinen einzelnen 2-opt-Zug verbessern. Sie muss aber nicht global optimal sein.

2-opt-Verfahren

Fallbeispiel – alle Züge für die NN-Tour

entfernte Kanten neue Kanten alt neu Δ
(C1,C6) (C3,C5) (C1,C3) (C6,C5) 77 68 9
(C4,C2) (C5,R) (C4,C5) (C2,R) 55 55 0
(C6,C3) (C5,R) (C6,C5) (C3,R) 49 52 -3
(C1,C6) (C5,R) (C1,C5) (C6,R) 82 87 -5
(R,C4) (C1,C6) (R,C1) (C4,C6) 49 58 -9
(C4,C2) (C1,C6) (C4,C1) (C2,C6) 59 78 -19
(R,C4) (C3,C5) (R,C3) (C4,C5) 40 61 -21
(C2,C1) (C5,R) (C2,C5) (C1,R) 53 75 -22
(R,C4) (C2,C1) (R,C2) (C4,C1) 20 52 -32
(C4,C2) (C3,C5) (C4,C3) (C2,C5) 50 82 -32
(R,C4) (C6,C3) (R,C6) (C4,C3) 16 60 -44
(C4,C2) (C6,C3) (C4,C6) (C2,C3) 26 81 -55
(C2,C1) (C3,C5) (C2,C3) (C1,C5) 48 109 -61
(C2,C1) (C6,C3) (C2,C6) (C1,C3) 24 92 -68

Einziger verbessernder Zug

Entferne (C1, C6) und (C3, C5), füge (C1, C3) und (C6, C5) ein:

\[\Delta = (43 + 34) - (44 + 24) = 9\ \text{km}\]

Das Teilstück C6 → C3 wird umgedreht zu C3 → C6.

Neue Tour: R → C4 → C2 → C1 → C3 → C6 → C5 → R mit 153 km

2-opt-Verfahren

Fallbeispiel – vorher und nachher

Nearest Neighbor: 162 km

nach 2-opt: 153 km

Die Kreuzung ist aufgelöst. Danach findet 2-opt keinen weiteren verbessernden Zug: Die Tour ist 2-optimal.

Wie gut ist die Lösung?

Vergleich mit der Optimallösung

Ergebnis

  • Optimale Tour (Enumeration aller 360 Touren): R → C1 → C2 → C4 → C5 → C6 → C3 → R mit 151 km
  • NN + 2-opt liegt 1,3 % über dem Optimum, NN allein 7,3 %.

Grenze von 2-opt

Die optimale Tour unterscheidet sich von der 2-opt-Lösung in drei Kanten. Dafür ist ein 3-opt-Zug nötig, jeder einzelne 2-opt-Zug verlängert die Tour. 2-opt bleibt im lokalen Optimum stecken.

Gegenüber dem Pendelverkehr spart die Tour täglich 143 km. Was das in Euro und für den E-Kühl-Lkw bedeutet, zeigen die nächsten beiden Folien.

Was bringt die Rundtour?

Bewertung mit den Kostensätzen aus der Einheit Verkehrsmittel und Antriebe

Variante km/Tag Stunden/Tag Kosten/Tag € je Box
Pendelverkehr 296 9,6 550,8 € 0,652 €
Nearest Neighbor 162 5,3 345,7 € 0,409 €
NN + 2-opt 153 5,2 334,6 € 0,396 €

Fahrzeugfixkosten 90,3 €/Tag, 0,536 €/km, Fahrer 31,5 €/h; Ø 45 km/h, 15 min je Filiale, 15 min je Beladung in Raunheim.

Ergebnis

Die optimierte Rundtour senkt die Kosten je Box um 39 %, das sind rund 64.863 € pro Jahr. Gespart werden Kilometer und Fahrerstunden, weil nur einmal beladen wird.

Der lineare Satz von 0,02 €/(Box·km) aus der Standortplanung unterstellt Pendelverkehr. Bündelungseffekte der Tour kann er nicht abbilden.

Reichweite als Nebenbedingung

Klappt die Tour mit dem E-Kühl-Lkw?

Tour km Sommer (0,62 kWh/km) Winter (0,70 kWh/km)
Pendelverkehr 296 184 kWh ✗ 207 kWh ✗
Nearest Neighbor 162 100 kWh ✓ 113 kWh ✗
NN + 2-opt 153 95 kWh ✓ 107 kWh ✓
Optimum 151 94 kWh ✓ 106 kWh ✓

Nutzbare Energie je Tour: \(Q =\) 110 kWh (vgl. Einheit Verkehrsmittel und Antriebe).

Ergebnis

  • Pendelverkehr: unmöglich
  • Nearest Neighbor: im Sommer ja, im Winter nicht
  • 2-opt und Optimum: ganzjährig fahrbar, mit knappem Puffer

Lehre

Beim E-Lkw entscheidet die Qualität der Tourenplanung über die Machbarkeit, nicht nur über die Kosten. Modelle mit Energie-Nebenbedingung heißen E-VRP (Schneider et al. 2014).

TSP-Heuristiken in R

Implementierung

nearest_neighbor <- function(D, start = 1) {
  tour <- start
  while (length(tour) < nrow(D)) {
    offen  <- setdiff(seq_len(nrow(D)), tour)
    letzte <- tail(tour, 1)
    naechster <- offen[which.min(D[letzte, offen])]
    tour <- c(tour, naechster)
  }
  rownames(D)[tour]
}

tour_length <- function(tour, D)
  sum(D[cbind(tour, c(tour[-1], tour[1]))])
two_opt <- function(tour, D) {
  n <- length(tour)
  repeat {
    best <- 0
    for (i in 1:(n - 1)) for (k in (i + 1):n) {
      a <- tour[i]; b <- tour[i + 1]
      c <- tour[k]; d <- tour[k %% n + 1]
      if (b == c || a == d) next
      delta <- D[a, b] + D[c, d] - D[a, c] - D[b, d]
      if (delta > best) {
        best <- delta; bi <- i; bk <- k
      }
    }
    if (best <= 0) break   # 2-optimal
    tour <- c(tour[1:bi], rev(tour[(bi + 1):bk]),
              if (bk < n) tour[(bk + 1):n])
  }
  tour
}

TSP exakt lösen

MTZ-Formulierung mit ompr

library(ompr); library(ompr.roi)
library(ROI.plugin.glpk)
n <- nrow(D)

tsp_model <- MIPModel() |>
  add_variable(x[i, j], i = 1:n, j = 1:n,
               type = "binary") |>
  add_variable(u[i], i = 1:n, lb = 1, ub = n) |>
  set_objective(sum_expr(D[i, j] * x[i, j],
                i = 1:n, j = 1:n), "min") |>
  add_constraint(x[i, i] == 0, i = 1:n) |>
  add_constraint(sum_expr(x[i, j], j = 1:n) == 1,
                 i = 1:n) |>
  add_constraint(sum_expr(x[i, j], i = 1:n) == 1,
                 j = 1:n) |>
  # MTZ: Reihenfolgevariablen verhindern Kurzzyklen
  add_constraint(u[i] - u[j] + 1 <= (n - 1) * (1 - x[i, j]),
                 i = 2:n, j = 2:n, i != j)

tsp_sol <- solve_model(tsp_model,
                       with_ROI(solver = "glpk"))

MTZ-Bedingungen (Miller et al. 1960)

Statt exponentiell vieler Kurzzyklus-Bedingungen erhält jeder Kunde eine Position \(u_i\) in der Tour. Fährt man von \(i\) nach \(j\), muss \(u_j \geq u_i + 1\) gelten. Ein Kreis ohne Depot ist damit unmöglich.

Ergebnis: R → C1 → C2 → C4 → C5 → C6 → C3 → R mit 151 km, identisch zur Enumeration.

Die MTZ-Formulierung ist einfach, aber schwach. Für große Instanzen werden Spezialverfahren eingesetzt (z. B. der Concorde-Solver).

Ausblick: Tourenplanung

Vom TSP zum Vehicle Routing Problem

Neue Flotte

Der 900-Boxen-Transporter wird durch zwei Kühlvans à 500 Boxen ersetzt (Führerscheinklasse B, leichter zu besetzen). Die Tagesmenge von 845 Boxen passt nicht mehr in ein Fahrzeug.

Capacitated VRP (CVRP): Teile die Kunden so auf mehrere Touren auf, dass die Kapazität eingehalten wird und die Gesamtstrecke minimal ist. Das TSP ist der Spezialfall mit einem Fahrzeug ohne Kapazitätsgrenze.

Savings-Verfahren (Clarke and Wright 1964)

Start: jede Filiale in einer eigenen Pendeltour. Verbinde schrittweise Touren mit der größten Ersparnis \(s_{ij} = d_{Ri} + d_{Rj} - d_{ij}\), solange die Kapazität reicht und \(i\), \(j\) Tourenden sind.

  • Tour West: R → C1 → C2 → C4 → R: 62 km, 360 Boxen
  • Tour Ost: R → C3 → C6 → C5 → R: 101 km, 485 Boxen
  • Gesamt 163 km statt 151 km mit einem Fahrzeug

Weitere Erweiterungen: Zeitfenster (Anlieferung vor 8 Uhr), maximale Tourdauer (Kühlkette, Lenkzeiten), heterogene Flotte, mehrere Depots

Kernaussagen

Das Wichtigste in Kürze

  • Das TSP sucht die kürzeste Rundreise durch alle Orte. Es ist NP-schwer: Die Zahl der Touren wächst mit \((n-1)!/2\).
  • Nearest Neighbor konstruiert schnell eine Tour, neigt aber zu langen Sprüngen am Ende und zu Kreuzungen (SushiFresh: 162 km).
  • 2-opt tauscht Kantenpaare, solange sich die Tour verkürzt, und entfernt dabei Kreuzungen (SushiFresh: 153 km).
  • Das Ergebnis ist ein lokales Optimum. Das globale Optimum (151 km) erfordert hier einen 3-opt-Zug oder ein exaktes Verfahren.
  • Gegenüber dem Pendelverkehr (296 km) halbiert die Rundtour die Fahrstrecke nahezu.

Übung

Übungsaufgaben zu dieser Einheit

Aufgaben zur Klausurvorbereitung (Teil 1) und eine vertiefende Fallstudie (Teil 2) finden Sie in Fallstudie 10: Tourenplanung.

Applegate, David L., Robert E. Bixby, Vašek Chvátal, and William J. Cook. 2006. The Traveling Salesman Problem: A Computational Study. Princeton University Press.
Clarke, G., and J. W. Wright. 1964. “Scheduling of Vehicles from a Central Depot to a Number of Delivery Points.” Operations Research 12 (4): 568–81.
Croes, G. A. 1958. “A Method for Solving Traveling-Salesman Problems.” Operations Research 6 (6): 791–812.
Dantzig, George, Ray Fulkerson, and Selmer Johnson. 1954. “Solution of a Large-Scale Traveling-Salesman Problem.” Journal of the Operations Research Society of America 2 (4): 393–410.
Domschke, Wolfgang, and Armin Scholl. 2010. Logistik: Rundreisen Und Touren. 5th ed. Oldenbourg.
Miller, C. E., A. W. Tucker, and R. A. Zemlin. 1960. “Integer Programming Formulation of Traveling Salesman Problems.” Journal of the ACM 7 (4): 326–29.
Schneider, Michael, Andreas Stenger, and Dominik Goeke. 2014. “The Electric Vehicle-Routing Problem with Time Windows and Recharging Stations.” Transportation Science 48 (4): 500–520.
Toth, Paolo, and Daniele Vigo, eds. 2014. Vehicle Routing: Problems, Methods, and Applications. 2nd ed. SIAM.