Das Problem des Handlungsreisenden ist ursprünglich ein Mathematik/Informatik-Optimierungsproblem, bei dem es darum geht, einen Weg zwischen einer Gruppe von Städten so zu bestimmen, dass man nach genau einem Besuch jeder Stadt zur Ausgangsstadt zurückkehrt und die Gesamtstrecke (Längengrad/ Breitengrad) wird minimiert. Für Städte gibt es einzigartige Wege - und das können wir so sehen zunimmt, wird die Anzahl der zu berücksichtigenden Pfade enorm groß. Selbst für eine kleine Anzahl von Städten (z. B. 15 Städte) können moderne Computer dieses Problem nicht mit "brute force" lösen (dh alle möglichen Routen berechnen und die kürzeste zurückgeben) - die Folge sind ausgefeilte Optimierungsalgorithmen und Näherungsverfahren verwendet, um dieses Problem im wirklichen Leben anzugehen.
Ich habe versucht, meinem Freund dieses Problem zu erklären, aber mir ist kein Beispiel eingefallen, das zeigt, warum das Problem des Handlungsreisenden schwierig ist! Aus dem Kopf heraus habe ich versucht, ein Beispiel zu geben, wo jemand den kürzesten Weg zwischen Boston, Chicago und Los Angeles finden muss - aber dann wurde mir klar, dass der kürzeste Weg in diesem Fall ziemlich offensichtlich ist! (dh Bewegung in der allgemeinen Ost-West-Richtung).
Reale Anwendungen des Problems des Handlungsreisenden neigen dazu, eine zusätzliche Komplexitätsebene aufzuweisen, da sie im Allgemeinen „Kosten“ haben, die zwischen Paaren von Städten verbunden sind – und diese Kosten müssen nicht symmetrisch sein. Beispielsweise könnten Busse häufiger von einer Kleinstadt in eine Großstadt fahren, aber seltener von der Großstadt in die Kleinstadt zurückkehren - daher können wir möglicherweise jeder Richtung "Kosten" zuordnen . Oder sogar ein einfacheres Beispiel: Sie müssen möglicherweise "bergauf" fahren, um von Stadt A nach Stadt B zu fahren, aber "bergab", um von Stadt B nach Stadt A zu fahren - daher entstehen wahrscheinlich höhere Kosten, um von Stadt A nach zu fahren Stadt B. Oft sind diese "Kosten" nicht vollständig bekannt und müssen mit einem statistischen Modell angenähert werden. Jedoch,
Aber ich suche immer noch nach einem Beispiel, um es meinem Freund zu erklären - kann mir bitte jemand helfen, ein offensichtliches und einfaches Beispiel für das Problem des Handlungsreisenden zu finden, bei dem offensichtlich klar wird, dass die Wahl des kürzesten Weges nicht offensichtlich ist? Jedes einfache Beispiel, an das ich zu denken versuche, ist tendenziell sehr offensichtlich (z. B. Manhattan, Newark, Nashville) - ich möchte meinen Freund nicht mit einem Beispiel von 1000 Städten in den USA überwältigen: nur etwas Einfaches mit 4-5 Städten darin denen nicht sofort klar ist (und vielleicht sogar kontraintuitiv ist), welcher Weg eingeschlagen werden sollte?
Ich habe versucht, ein Beispiel mit der Programmiersprache R zu zeigen, in dem es 10 (zufällige) Punkte auf einem Gitter gibt - ausgehend vom niedrigsten Punkt beinhaltet der eingeschlagene Weg die Auswahl des nächstgelegenen Punkts von jedem aktuellen Punkt:
library(ggplot2)
set.seed(123)
x_cor = rnorm(5,100,100)
y_cor = rnorm(5,100,100)
my_data = data.frame(x_cor,y_cor)
x_cor y_cor
1 43.95244 271.50650
2 76.98225 146.09162
3 255.87083 -26.50612
4 107.05084 31.31471
5 112.92877 55.43380
ggplot(my_data, aes(x=x_cor, y=y_cor)) + geom_point() + ggtitle("Travelling Salesperson Example")
Aber selbst in diesem Beispiel sieht der kürzeste Weg "offensichtlich" aus (stellen Sie sich vor, Sie müssten dieses Problem am unteren rechten Punkt beginnen):
Ich habe es mit mehr Punkten versucht:
set.seed(123)
x_cor = rnorm(20,100,100)
y_cor = rnorm(20,100,100)
my_data = data.frame(x_cor,y_cor)
ggplot(my_data, aes(x = x_cor, y = y_cor)) +
geom_path() +
geom_point(size = 2)
Aber mein Freund argumentiert immer noch, dass "den nächsten Punkt vom aktuellen Punkt finden und wiederholen" (stellen Sie sich vor, Sie müssten dieses Problem am untersten Punkt rechts beginnen):
Wie überzeuge ich meinen Freund, dass das, was er tut, einer "gierigen Suche" entspricht, die nur ein "lokales Minimum" zurückgibt und es sehr wahrscheinlich ist, dass ein kürzerer Pfad existiert? (nicht einmal der "kürzeste Weg" - nur ein "kürzerer Weg" als die "Greedy Search")
Ich habe versucht, dieses Beispiel zu veranschaulichen, indem ich ihn auf die Wikipedia-Seite zu Greedy Search verlinkt habe, die zeigt, warum Greedy Search oft das wahre Minimum verfehlen kann: https://en.wikipedia.org/wiki/Greedy_algorithm#/media/File:Greedy-search -path-example.gif
Könnte mir jemand helfen, ein Beispiel zu finden, um meinem Freund zu zeigen, dass die Wahl des unmittelbar nächstgelegenen Punkts von Ihrem Standort aus nicht zum insgesamt kürzesten Weg führt? (z. B. ein Beispiel, das nicht intuitiv erscheint, dh wenn Sie einen Pfad wählen, der immer auf dem nächstgelegenen Punkt von Ihrer aktuellen Position basiert, können Sie deutlich sehen, dass dies nicht der optimale Pfad ist.)
Gibt es einen mathematischen Beweis, der zeigt, dass der „Greedy Search“-Algorithmus in Traveling Salesperson die Möglichkeit hat, manchmal den wahren optimalen Pfad zu verfehlen?
Danke!
Hier ist ein einfaches explizites Beispiel, bei dem der Greedy-Algorithmus immer fehlschlägt, diese Anordnung von Städten (und euklidischen Entfernungen):
Wenn Sie den Greedy-Algorithmus auf dieses Diagramm anwenden, sieht es wie folgt aus (oder eine umgedrehte Version):
Dies gilt unabhängig vom Ausgangspunkt. Das heißt, der Greedy-Algorithmus gibt uns einen Pfad mit einer zurückgelegten Gesamtstrecke von
Das ist natürlich nicht die optimale Lösung. Wenn Sie es nur genau betrachten, können Sie sehen, dass dies der beste Weg ist:
Es hat eine Gesamtlänge von , was besser ist als der Greedy-Algorithmus.
Sie können Ihrem Freund erklären, dass der Greedy-Algorithmus fehlschlägt, weil er nicht vorausschaut. Es sieht den kürzesten Weg (in diesem Fall den vertikalen) und nimmt ihn. Dies kann es jedoch später zwingen, einen viel langen Weg einzuschlagen, wodurch es auf lange Sicht schlechter gestellt wird. Während es in diesem Beispiel einfach zu sehen ist, ist es viel schwieriger, jeden Fall zu erkennen, in dem dies passiert.
Mir scheint, Sie suchen nach einer intuitiven Einsicht und nicht nach einem Gegenbeispiel oder einem formalen Beweis. Das habe ich mich vor vielen Jahren auch gefragt und folgendes hat mir zu einer intuitiven Einsicht verholfen:
Ich habe mit einem TSP-Solver-Programm namens Concorde experimentiert. Mit diesem Programm können Sie Punkte platzieren und es kann auch zufällig Punkte fallen lassen. Es zeigt dann den Lösungsprozess, während er passiert.
Sie können dann live sehen, wie sich der derzeit bekannte beste Pfad entwickelt. Es werden ganz unterschiedliche Wege gezeigt, jeder ein bisschen besser als zuvor.
Das hat mir gezeigt, dass sehr unterschiedliche Wege zu inkrementellen kleinen Verbesserungen führen können. Und das hat mir gezeigt, wie "nicht-konvex" die Lösung ist. Sie können nicht einfach einen Hill-Climbing-Algorithmus verwenden, um sich auf die beste Lösung zu konzentrieren. Das Problem enthält Entscheidungspunkte, die zu sehr unterschiedlichen Teilen des Suchraums führen.
Das ist eine völlig unformelle Betrachtungsweise, aber es hat mir sehr geholfen.
Hier ist ein Beispiel mit 7 Städten aus Wikipedia . Der Nächster-Nachbar-Algorithmus gibt unterschiedliche Pfade an, je nachdem, in welcher Stadt Sie beginnen, sodass das Ergebnis für alle bis auf einen dieser Pfade suboptimal sein muss. Die Illustration verwendet Pfade anstelle von Zyklen, aber Sie können all diese Pfade mental mit Zyklen verbinden, und mein Punkt gilt immer noch.
Das Problem ist aufgrund der kombinatorischen Komplexität des Beweises , dass Sie die beste Antwort haben, schwierig
Es gibt einen subtilen Unterschied, wenn Leute bei Problemen wie diesem von optimalen Ergebnissen sprechen. Ein Mathematiker oder ein Operational-Research-Experte verwendet den Begriff „optimal“ anders als Laien. Viele Nicht-Experten interpretieren optimal als „gut genug“, aber Experten bestehen oft auf einem Beweis der Optimalität.
Bei der Lösung realer TSP-ähnlicher Probleme kann man argumentieren, dass die Laiendefinition ("gut genug") tatsächlich nützlicher ist (insbesondere wenn die Kosten für das Finden einer besseren Antwort hoch sind). Aber TSP-ähnliche Probleme haben ein ernsthaftes Problem damit, zu beweisen, dass eine Antwort im Expertensinn optimal ist. Wir kennen keinen effizienten Weg, um zu beweisen, dass eine gegebene Antwort die beste ist, die nicht das Testen jeder möglichen Route beinhaltet , was lächerlich ist, da die Anzahl der Möglichkeiten mit der Fakultät der Anzahl der Städte steigt (selbst kleine Probleme sind zu groß: 50! ist mehr als 10^64).
Seien Sie fair gegenüber einigen Kommentatoren, es gibt einige Methoden, die besser als Brute Force sind, aber keine entgeht der grundlegenden Schwierigkeit von NP-schweren Problemen, bei denen die Zeit zur Lösung eines Problems mit der Größe des Problems zu schnell wächst, als dass irgendein brauchbarer Algorithmus von Nutzen wäre allgemeiner Gebrauch. Goyal , der einige Ergebnisse zu effizienten Algorithmen zusammenfasst, fasst diese Erkenntnis mathematischer zusammen (mein Highlight):
Die kombinatorische Optimierungsversion, dh das Problem, den minimalen Hamilton-Zyklus in einem Diagramm von Städten zu finden, und die Entscheidungsversion, dh das Problem, das Vorhandensein eines Hamilton-Zyklus in einem Diagramm kleiner als ein gegebenes Gewicht zu überprüfen. In der Theorie der Rechenkomplexität gehört die kombinatorische Optimierungsversion zur NP-schweren Problemgruppe, was impliziert, dass es keinen polynomiellen Zeitalgorithmus gibt, nicht einmal um die Korrektheit einer gegebenen Lösung des Problems zu überprüfen, während die Entscheidungsversion zur Klasse von NP gehört vollständige Probleme, was impliziert, dass eine Lösung in polynomieller Zeit überprüft werden kann. Obwohl ohne einen Beweis, dass P≠NP ist, kann nur angenommen werden, dass es keinen effizienten Algorithmus gibt, um irgendeine Version des TSP zu lösen.
In der Praxis gibt es Heuristiken, die schnell sehr gute Ergebnisse liefern können, aber keine kann das absolut beste Ergebnis garantieren .
Wie Andrew P in seiner Antwort betonte, kann gezeigt werden, dass selbst in sehr einfachen Systemen ein gieriger Algorithmus manchmal beim Optimalitätskriterium des Experten falsch ist. Aber Ihr Freund fragt sich vielleicht, ob dieser Unterschied eine Rolle spielt, da er im Vergleich zur bekannten optimalen Antwort oft nicht sehr groß ist.
Hier ist es wichtig, sich darüber im Klaren zu sein, was optimal bedeutet. Experten könnten argumentieren, dass sie einen absoluten Beweis brauchen, dass die Antwort die bestmögliche ist. Nicht-Experten könnten argumentieren, dass "gut genug" in Ordnung ist. Oder sogar, dass die Idee der Optimalität erweitert werden muss, einschließlich der Kosten, um die Antwort zu erhalten (eine Kombination aus Computerleistung und Zeitaufwand).
Wenn Sie der Meinung sind, dass die Kosten zum Finden der Antwort relevant sind (wie es viele praktische Benutzer in der realen Welt sind), dann ist Ihre "optimale" Antwort gut genug, ohne im Expertensinn optimal zu sein. Die meisten TSP-ähnlichen Probleme haben viele leicht zu findende gute Antworten, die innerhalb weniger Prozent des bekannten Expertenoptimums liegen. Gierige Algorithmen finden diese oft in nicht-pathologischen Fällen, obwohl es komplexere Algorithmen gibt, die besser sind.
Seien Sie sich also klar über Ihre Definition von "optimal", und ein Großteil des Arguments könnte verschwinden.
Ein analoges Problem ist die Springertour (einen Springer dazu bringen, jedes Feld auf einem Schachbrett genau einmal zu besuchen). In meinem Buch XSLT Programmer's Reference habe ich eine (in XSLT geschriebene) "Lösung" dafür eingefügt, die den intuitiven Ansatz verwendet, immer zum verfügbaren Quadrat mit den wenigsten Ausgängen zu gehen: und ich appellierte an meine Leser, Feedback zu geben, ob der Algorithmus tatsächlich garantiert war erfolgreich sein. Zehn Jahre später antwortete ein Leser mit einem Gegenbeispiel: einem Startquadrat, bei dem der Springer stecken blieb und zurückgehen musste. Es stellte sich heraus, dass es nur ein solches Startquadrat gab (Symmetrien ignorieren).
Ich erwähne dies nur als Beispiel dafür, wie ein intuitiver Algorithmus meistens eine nützliche Lösung liefern kann, obwohl sie falsch ist.
Übrigens legt das Beispiel von @AndrewP nahe, dass die von einem naiven Algorithmus erzeugte Route nur etwas schlechter ist als die optimale Route. Das wird nicht immer der Fall sein. Betrachten Sie 1000 Punkte im Abstand von 1 km um den Umfang eines Kreises und einen Punkt 20 km außerhalb des Kreises. Es gibt eine gute "offensichtliche" Lösung, die darin besteht, den Ausreißer zu besuchen, wenn Sie sich an dem Punkt befinden, der ihm am nächsten ist. aber diese "offensichtliche" Lösung ist weitaus besser als der vereinfachende Greedy-Algorithmus.
Ein Gegenargument gegen die Vorstellung, dass der Greedy-Algorithmus optimal ist, ist zu beachten, dass die Greedy-Lösung je nach Ausgangspunkt unterschiedliche Lösungen erzeugen kann, es jedoch normalerweise nur eine optimale Schleife durch alle Städte gibt, unabhängig vom Ausgangspunkt. Der Greedy-Algorithmus kann mehr als eine Lösung erzeugen, und solange sie Lösungen unterschiedlicher Gesamtlänge darstellen, können nicht alle optimal sein.
Angenommen, Sie haben 4 Städte, A, B, C und X. A und B haben beide X als nächsten Nachbarn, während X C als nächsten Nachbarn hat. Wenn Sie bei A beginnen, enthält der gierige Pfad AXC, während der gierige Pfad BXC enthält, wenn Sie bei B beginnen. Es ist einfach, Pfadentfernungen so zu konstruieren, dass die Gesamtentfernungen dieser Lösungen ungleich sind und sie daher nicht beide optimal sein können. Die Länge des kürzesten Weges ist nur eine Funktion der Reisekostenmatrix, der Startpunkt ist unerheblich. Da die Greedy-Methode mehrere Lösungen mit unterschiedlicher Gesamtlänge erzeugen kann, können wir sicherlich nicht garantieren, dass eine bestimmte Lösung, die sie erzeugt, optimal ist (obwohl dies in einigen Fällen der Fall sein kann).
Hier ist ein Beispiel, das für mich nicht offensichtlich ist. Ihr Ziel ist es, die Hauptstädte aller 50 US-Bundesstaaten so günstig wie möglich zu besuchen. Sie können ein Auto mieten, solange Sie nicht nach Hawaii oder Alaska fahren, und die Kosten sind so hoch, wie Sie bezahlen müssen, um von einer Stadt in die nächste zu gelangen, unter Berücksichtigung von Fahrzeit, Verkehr, Benzinpreisen, Mietpreise, Hotelpreise usw. Sie können auch fliegen, und die Flugkosten hängen davon ab, wie beliebt die Strecke ist und wie weit Sie fliegen. Nehmen wir an, es gibt immer Direktflüge, aber die könnten für ungewöhnliche Strecken sehr teuer werden. Ich habe ehrlich gesagt keine Ahnung, wie Sie ohne Informatik auch nur eine halbwegs anständige Route herausfinden würden.
Warum der Greedy-Algorithmus nicht funktioniert: Nehmen wir an, Sie starten in Maine und die teuersten Ziele sind Hawaii und Alaska (nicht überraschend). Sie würden sich gierig auf dem US-amerikanischen Festland bewegen, bis Sie die unteren 48 erschöpft hätten, dann würden Sie wahrscheinlich nach Alaska fliegen, dann einen weiteren Flug nach Hawaii nehmen und direkt zurück nach Maine fliegen. Meine Vermutung ist, dass Direktflüge zwischen Alaska und Hawaii und zwischen Hawaii und Maine, falls es sie gäbe, verheerend teuer wären, und genau hier haben Sie einen strategischen Fehler gemacht. Es wäre viel besser gewesen, von einer gut angebundenen Westküstenstadt nach Hawaii zu fliegen und ebenso von Hawaii in eine gut angebundene Westküstenstadt zurückzukehren, als eine Alaska->Hawaii->Maine-Reise zu machen.
Ich werde ein wenig von der gestellten Frage abweichen, um zu versuchen, eine intuitivere Erklärung dafür zu liefern, warum TSP schwierig ist. Die Antwort von @matt_block ist ausgezeichnet, richtet sich jedoch an diejenigen mit mehr Erfahrung und / oder formaler Ausbildung in Mathematik, als ich hoffe.
Aber ich suche immer noch nach einem Beispiel, um es meinem Freund zu erklären - kann mir bitte jemand helfen, ein offensichtliches und einfaches Beispiel für das Problem des Handlungsreisenden zu finden, bei dem offensichtlich klar wird, dass die Wahl des kürzesten Weges nicht offensichtlich ist? Jedes einfache Beispiel, an das ich zu denken versuche, ist tendenziell sehr offensichtlich (z. B. Manhattan, Newark, Nashville) - ich möchte meinen Freund nicht mit einem Beispiel von 1000 Städten in den USA überwältigen: nur etwas Einfaches mit 4-5 Städten darin denen nicht sofort klar ist (und vielleicht sogar kontraintuitiv ist), welcher Weg eingeschlagen werden sollte?
Es sind diese Tausend-Städte-Szenarien, die wirklich nach Hause kommen, dass der TSP hart ist.
Menschen können Dinge tun, die Computer noch nicht können. Dazu gehört das heuristische Aussortieren offensichtlich schlechter TSP-Pfade; Wenn Sie beispielsweise versuchen, "den kürzesten Weg zwischen Boston, Chicago und Los Angeles zu finden", ist es einfach, auf eine Karte zu schauen und "zu erkennen, dass der kürzeste Weg in diesem Fall ziemlich offensichtlich ist". Computer können das nicht (zumindest noch nicht). Vielmehr muss der Computer sowohl B->C->LA als auch B->LA->C prüfen, um zu wissen, welches besser ist. Menschen müssen das (glauben, dass sie) das für einen so offensichtlichen Fall nicht tun müssen, daher ist es nicht intuitiv, wie schwer es für einen Computer ist.
Fügen Sie weitere Städte hinzu und es wird deutlicher, dass es schwierig ist, den richtigen Weg zu finden.
Natürlich verlangt TSP einen Rundweg; Es ist durchaus möglich, dass beide Routen die gleichen Kosten haben, wobei die Hin- und Rückfahrt berücksichtigt wird.
Es ist einfach, sich eine Karte mit 3, 5 oder 11 Punkten anzusehen und den offensichtlich besten Weg auszuwählen – oder zumindest 2 oder 3 Hauptkandidaten zum Vergleich auszuwählen. Es scheint intuitiv, dass das Hinzufügen eines weiteren Punktes es nicht viel schwieriger machen würde, den optimalen Pfad zu finden. Und das ist es nicht, bis es so ist. Es kommt ein Punkt (wo das von Person zu Person und Karte zu Karte unterschiedlich sein wird), an dem das Hinzufügen eines weiteren Punktes die Anzahl der Kandidaten drastisch erhöht - die Heuristik, die die Person verwendet, um schlechte Pfade auszusortieren (Boston nach LA nach Chicago). angesichts zu vieler Optionen zusammenbrechen.
Bis Sie diesen Zusammenbruch der Heuristik sehen, kann es schwierig sein, sich darüber klar zu werden, wie steil diese Klippe sein kann.
Computer sind nicht schlau, sie geben nur vor, schlau zu sein, indem sie schummeln. Sie schummeln, indem sie in der Lage sind, grundlegende Mathematik wirklich schnell zu machen , und dann so tun, als ob alles im Universum grundlegende Mathematik wäre (was, um fair zu sein, erstaunlich oft funktioniert).
Meistens ist dieses Schummeln gut genug, um uns Computer als intelligente (oder „magische“) Kästen vorzustellen – ein paar Daten werden rein, und als Ergebnis kommt eine Excel-Datei mit hübschen Diagrammen heraus; In gehen einige andere Daten, heraus kommt ein CGI Gollum.
Aber Computer – selbst die ausgefallenen neuen maschinell lernenden neuronalen Netze – haben keine Ahnung vom Kontext der Dinge, die sie tun sollen. Sie haben keine Ahnung, ob sie die Anzahl der Ticketverkäufe für den neuesten Blockbuster-Film zusammenzählen, die Leihvideos beim letzten Blockbuster zählen oder ein Flugzeug steuern. Sie können einfach addieren, subtrahieren, multiplizieren, dividieren und bitweise Logik ausführen (manchmal eins über das andere emulieren); alles andere baut darauf auf.
Computer können also nicht auf eine Karte schauen (sie haben weder Augen noch eine Vorstellung davon, was eine „Karte“ ist) und die kürzeste Schleife auf sie springen lassen (was ist eine Schleife? was ist „kurz“?). Sie müssen rechnen und jede mögliche Route prüfen, um zu sehen, ob es die kürzeste ist.
Wie @matt_block betonte, besteht ein Teil des Problems mit TSP (und verwandten Problemen) darin, zu 100% sicher zu sein, dass Sie einen kürzesten Weg gefunden haben (möglicherweise gibt es Verbindungen).
Wenn Sie sich nur um die Entfernung kümmern (oder eine andere gute Möglichkeit finden, die Punkte auf etwas Kartenähnliches zu setzen), können Menschen einige offensichtlich schlechte Pläne ausmerzen (wenn Sie versuchen, die Hauptstädte der Bundesstaaten zu treffen, macht es keinen Sinn direkt von Boston nach St. Paul zu fahren), wodurch der Suchraum für "optimal" reduziert wird. Aber: Um zu beweisen, dass es keine kürzeren Routen als "diese" gibt, muss man sich eine ganze Reihe von Varianten der Reihe nach ansehen (es ist sehr wahrscheinlich, dass Boston -> Concord -> Augusta -> Montpelier Teil der optimalen Route ist, aber es ist theoretisch möglich dass es zwischen Boston und Concord keine Straßen gibt, die nicht durch Augusta führen, um diese Metapher zu quälen).
Computer können nicht einmal die offensichtlich schlechten Reisen (Boston nach St. Paul) von der Hand streichen. Sie können aufhören, eine Route in Betracht zu ziehen, wenn ihre aktuelle Länge größer als die kürzeste bekannte Länge ist, aber sie können die Option von Boston nach St. Paul nicht vollständig verwerfen. Daher müssen Computer alle (n – 1)!/2 Routen zumindest teilweise untersuchen.
Wenn ich mich richtig an meine CS101-Klasse erinnere, ist das Rucksackproblem in TSP umwandelbar. Grundsätzlich: Wie effizient können Sie einen Rucksack packen (was ist die am wenigsten ungenutzte Kapazität des Rucksacks, die Sie bei einer Reihe von Gegenständen haben können).
Intuitiv ist TSP eine Variante des Rucksackproblems: Was ist der kleinste Rucksack, der bei einer gegebenen Menge von Städten einen Rundweg aufnehmen kann, der jede Stadt besucht? ... wobei die Kapazität des Rucksacks "Meilen" oder "Dollar" oder "Stunden" oder sogar "Dollar-Meilen pro Stunde" ist, je nachdem, wofür wir optimieren.
Gierige Algorithmen funktionieren eindeutig nicht. Stellen Sie sich einen Rucksack vor, der 12 Einheiten aufnehmen kann, und eine Reihe von Artikelkosten [ 10, 3, 3, 3, 3 ] - ein gieriger Algorithmus würde den 10-Kosten-Artikel hineinlegen und 2 Kapazität übrig haben, aber es ist klar, dass das Verlassen Wenn Sie den 10-Kosten-Artikel herausnehmen, würden die 4x3-Kosten-Artikel den Rucksack perfekt füllen.
"Anti-gierige" Algorithmen (d. h. zuerst mit den kleinsten Zahlen beginnen) funktionieren ebenfalls eindeutig nicht. Betrachten Sie den gleichen 12-Einheiten-Rucksack und die Artikelkosten von [ 1, 12 ]: Legen Sie den 1-Kosten-Artikel hinein und haben Sie 11 Kapazität übrig, obwohl es einen 12-Kosten-Artikel gibt, der den Rucksack perfekt füllen kann.
Nochmals: Viele Menschen (zu einem Rundungsfehler wahrscheinlich "alle, die diese Antwort wahrscheinlich sehen") können sich diese Artikelkostensätze ansehen und sofort sehen, was die optimale Wahl ist. Aber beginnen Sie, die Kapazität des Rucksacks und die Anzahl der Gegenstände im Set zu erhöhen, und diese Unmittelbarkeit fällt schnell auf „ziemlich schnell“ und dann auf „Ich habe noch 2 Kapazität übrig und sehe keinen offensichtlichen Weg um es zu füllen, aber ich bin mir nicht sicher, ob es keine gibt".
Um ausdrücklich auf TSP zurückzukommen, lautet dieser letzte Fall: "Ich habe die Schaltung auf Kosten von 302 reduziert, und ich sehe keinen offensichtlichen Weg, sie zu reduzieren, aber ich bin mir nicht sicher, ob es keinen gibt".
Wenn Sie eine reale Demonstration der Schwierigkeit bei der Auswahl eines guten Reisepfads wünschen, besorgen Sie sich einen 3D-Drucker und drucken Sie ein komplexes Modell mit vielen getrennten Komponenten in jeder Schicht. Die Software, die es zum Drucken aufteilt (Anmerkung: Sie können Dinge einfach ohne Drucker aufteilen, um die Ergebnisse zu sehen, aber das eigentliche Drucken "macht es real"), muss die Reihenfolge auswählen, um Komponenten zu besuchen und zwischen ihnen zu reisen, und wird es unweigerlich tun Dinge, die "falsch erscheinen" und oft falsch (suboptimal) sind, weil eine optimale Lösung des Problems nicht machbar ist.
Das Problem des Handlungsreisenden ist nicht „schwer“ zu realisieren. Das Problem ist, es ist sehr teuer in der Zählung der Suche.
Um den besten Weg zu finden, müssen Sie jede Stadt von jedem Startpunkt aus besuchen, und diese Anzahl der Besuche wächst sehr schnell auf eine Größe, die Sie nicht erkennen können.
In der Fakultät oder n!
In unserer heutigen Zeit sind 4 Milliarden Checks für Rechner mit 4GHz nicht wirklich viel. Vor einigen Jahrzehnten zu der Zeit, als ich zu studieren begann (1992), sind die Computer viel langsamer (~486DX40 40 MHz) als heute (Alder Lake 12900 5,2 GHz) haben wir heute 130-mal mehr MHz, aber die Anzahl der berechenbaren Städte ist um die Hälfte gewachsen. Von 8 auf 12 vielleicht 13 in der gleichen Rechenzeit.
Heute kann es hilfreicher sein, eine Lösung zu finden, die „vorerst gut genug“ ist.
Randall
JG
Augapfelfrosch
Augapfelfrosch
JG
stats_noob
stats_noob
Akkumulation
Kaya3
prosfilae
Strahl
RobPratt
Art.-Nr
Daniel R. Collins
Toby Mak
Ben
Benutzer11153
MJD
MaoWao
kandiert_orange