Interaktives Graphentheorie-Lernen
Interaktives Graphentheorie-Lernen
Guest User
Using app without sign in
Online-Löser für das Handlungsreisenden-Problem
Findet kürzeste Tour, die alle Knoten genau einmal besucht
Wählen Sie einen Algorithmus und generieren Sie Schritte, um die Visualisierung zu beginnen
Das Problem des Handlungsreisenden (TSP) fragt nach der kürzesten Rundreise, die jede Stadt genau einmal besucht und zum Start zurückkehrt. Es ist das berühmteste NP-schwere Problem der kombinatorischen Optimierung, einfach zu formulieren und doch exponentiell schwer exakt zu lösen.
Die dynamische Programmierung nach Held-Karp speichert für jede Teilmenge von Städten und jede Endstadt den günstigsten Weg, diese Teilmenge zu besuchen. Jeder Zustand wird um jeweils eine unbesuchte Stadt erweitert, was O(n hoch 2 mal 2 hoch n) Zeit ergibt, exakt, aber nur für etwa 20 Städte machbar. Größere Instanzen setzen auf Heuristiken wie Nächster Nachbar und 2-opt oder auf Metaheuristiken und Branch-and-Bound-Löser, die für tausende Städte nahezu optimale Touren erreichen.
TSP modelliert Lieferrouten-Planung, Kommissionierung im Lager, das Bohren von Leiterplatten, die DNA-Sequenzmontage und die Terminplanung von Teleskopbeobachtungen. Es ist der Ankerpunkt für das Studium von NP-Vollständigkeit und Approximationsalgorithmen, und Interviewer prüfen damit das Verständnis von Komplexitätsklassen und dynamischer Programmierung über Bitmasken.
Für das Problem des Handlungsreisenden gibt es keinen schnellen exakten Algorithmus, daher ist die praktische Antwort zweistufig: schnell eine brauchbare Rundreise bauen und sie dann lokal verbessern, bis nichts mehr besser wird.
// Stufe 1: nächster Nachbar, baut eine Tour in O(n^2)
tour = [start]
solange eine Stadt unbesucht ist:
nächste = unbesuchte Stadt am nächsten zu tour.letzte
tour.anhängen(nächste)
tour.anhängen(start) // Kreis schließen
// Stufe 2: 2-opt, entfernt Überkreuzungen
wiederhole bis keine Verbesserung mehr:
für jedes Kantenpaar (a,b) und (c,d) der Tour:
wenn dist(a,c) + dist(b,d) < dist(a,b) + dist(c,d):
kehre das Tourstück zwischen b und c um
// Exakt, für kleines n: Held-Karp dynamische Programmierung
dp[S][j] = min über k in S\{j} von dp[S\{j}][k] + dist(k, j)Der 2-opt-Zug lohnt sich geometrisch zu verstehen. Kreuzen sich zwei Kanten einer Tour, so verkürzt das Vertauschen ihrer Endpunkte samt Umkehren des Zwischenstücks die Tour stets, wegen der Dreiecksungleichung. 2-opt ist also buchstäblich das Herausziehen der Knoten aus einer Schnurschlaufe.
Wende nächsten Nachbarn und danach 2-opt auf vier Städte an den Ecken eines Rechtecks an, wo die gierige Wahl nachweislich danebengehen kann.
Beispielgraph: Städte A(0,0), B(0,3), C(4,3), D(4,0). Distanzen: A-B 3, B-C 4, C-D 3, A-D 4, und beide Diagonalen A-C und B-D betragen 5.
Die optimale Tour ist der Rechteckumfang mit 14, nicht eine der Touren mit gekreuzten Diagonalen mit 18. Das ist die ganze Geschichte der TSP-Heuristiken im Kleinen: ein schneller konstruktiver Durchgang kommt nahe heran, und die lokale Suche entfernt die Überkreuzungen, die die gierige Wahl eingebracht hat.
Zeit: O(n^2) heuristisch, O(n^2 · 2^n) exakt · Speicher: O(n^2) heuristisch, O(n · 2^n) exakt
Nächster Nachbar durchsucht in jedem der n Schritte alle verbleibenden Städte, was O(n hoch 2) ergibt. Jeder 2-opt-Durchgang prüft alle O(n hoch 2) Kantenpaare und wiederholt sich, bis nichts mehr besser wird, was in der Praxis schnell ist, aber keine brauchbare Schranke im schlechtesten Fall hat. Held-Karp ist exakt und füllt eine Tabelle, indiziert nach Teilmenge und Endpunkt: es gibt 2 hoch n Teilmengen mal n Endpunkte, und jeder Eintrag kostet O(n), daher O(n hoch 2 mal 2 hoch n) Zeit und O(n mal 2 hoch n) Speicher. Das ist eine harte Grenze um n = 20 bis 25, denn 2 hoch 25 mal 25 übersteigt bereits eine Milliarde Tabelleneinträge. Rohe Gewalt über alle Permutationen ist mit O(n Fakultät) weit schlechter.
Die richtige Methode hängt fast vollständig davon ab, wie viele Städte du hast und ob du ein beweisbares Optimum brauchst.
| Alternative | Vorzuziehen, wenn | Kosten |
|---|---|---|
| Held-Karp exakte DP | Weniger als etwa 20 Städte und du brauchst eine garantiert optimale Tour. | O(n^2 · 2^n) |
| Christofides | Die Distanzen erfüllen die Dreiecksungleichung und du willst eine bewiesene Schranke: nie schlechter als das 1,5-fache des Optimums. | O(n^3) |
| Nächster Nachbar plus 2-opt | Hunderte bis Tausende Städte, und eine Tour innerhalb weniger Prozent des Optimums genügt. | O(n^2) je Durchgang |
| Lin-Kernighan | Große Instanzen, bei denen Qualität mehr zählt als Implementierungsaufwand. Der praktische Stand der Technik. | etwa O(n^2.2) |
| Tourenplanungslöser | Das echte Problem hat mehrere Fahrzeuge, Kapazitäten oder Zeitfenster. Dann ist es gar kein TSP. | unterschiedlich |
Den ganzen Artikel lesen: The Traveling Salesperson Problem Explained
Verwandte Algorithmen: Hamiltonscher Pfad, Flottendisposition (mTSP), Kapazitätsbeschränkte Tourenplanung (CVRP)