Hintergrund
Das Travelling Salesman Problem (TSP) fragt nach dem kürzesten Rundgang, der eine bestimmte Sammlung von Städten besucht. Für die Zwecke dieser Frage sind die Städte Punkte in der Ebene und die Abstände zwischen ihnen sind die üblichen euklidischen Abstände (auf die nächste ganze Zahl gerundet). Die Strecke muss "Hin- und Rückfahrt" sein, dh sie muss in die Ausgangsstadt zurückkehren.
Der Concorde TSP-Solver kann Instanzen des euklidischen Problems der reisenden Verkäufer genau und viel schneller lösen, als man es erwarten würde. Zum Beispiel konnte Concorde eine Instanz mit 85.900 Punkten genau lösen. Teile davon sehen so aus:
Einige TSP-Instanzen dauern jedoch zu lange, selbst für Concorde. Zum Beispiel war niemand in der Lage, diese Instanz mit 100.000 Punkten basierend auf der Mona Lisa zu lösen . (Es wird ein Preisgeld von 1.000 USD angeboten, wenn Sie es lösen können!)
Concorde steht als Quellcode oder ausführbare Datei zum Download zur Verfügung . Standardmäßig wird der integrierte LP-Löser QSopt verwendet , es können jedoch auch bessere LP-Löser wie CPLEX verwendet werden.
Die Herausforderung
Was ist die kleinste TSP-Instanz, die Sie generieren können und für deren Lösung Concorde mehr als fünf Minuten benötigt ?
Sie können ein Programm schreiben, um die Instanz auszugeben, oder eine andere Methode verwenden, die Sie möchten.
Wertung
Je weniger Punkte in der Instanz, desto besser. Die Bindungen werden durch die Dateigröße der Instanz getrennt (siehe unten).
Standardisierung
Verschiedene Computer laufen schneller oder langsamer, daher verwenden wir den NEOS-Server für Concorde als Messstandard für die Laufzeit. Sie können eine Liste von Punkten in der folgenden einfachen 2D-Koordinatenform einreichen:
#cities
x_0 y_0
x_1 y_1
.
.
.
x_n-1 y_n-1
Die Einstellungen, die unter NEOS verwendet werden sollten, sind "Concorde-Daten (xy-Listendatei, L2-Norm)", "Algorithmus: Concorde (QSopt)" und "Random Seed: Fixed".
Grundlinie
Die 1889-Punkte-Instanz rl1889.tsp
von TSPLIB benötigt "Gesamtlaufzeit: 871,18 (Sekunden)", was mehr als fünf Minuten entspricht. Es sieht aus wie das: