sfondo
Il problema del commesso viaggiatore (TSP) richiede il circuito più corto che visita una determinata collezione di città. Ai fini di questa domanda, le città saranno punti nel piano e le distanze tra loro saranno le solite distanze euclidee (arrotondate al numero intero più vicino). Il circuito deve essere "andata e ritorno", nel senso che deve tornare alla città di partenza.
Il risolutore Concorde TSP è in grado di risolvere casi del problema del commesso viaggiatore euclideo, esattamente e molto più velocemente di quanto ci si aspetterebbe. Ad esempio, Concorde è stato in grado di risolvere esattamente un'istanza di 85.900 punti , parti delle quali assomigliano a questa:
Tuttavia, alcune istanze di TSP impiegano troppo tempo, anche per Concorde. Ad esempio, nessuno è stato in grado di risolvere questa istanza di 100.000 punti basata sulla Gioconda . (C'è un premio di $ 1.000 offerto se puoi risolverlo!)
Concorde è disponibile per il download come codice sorgente o eseguibile. Per impostazione predefinita, utilizza il solutore QSopt del programma lineare (LP) incorporato , ma può anche utilizzare solutori LP migliori come CPLEX.
La sfida
Qual è l'istanza TSP più piccola che puoi generare che impiega Concorde a superare i cinque minuti ?
È possibile scrivere un programma per generare l'istanza o utilizzare qualsiasi altro metodo desiderato.
punteggio
Meno punti nell'istanza, meglio è. I legami verranno interrotti dalla dimensione del file dell'istanza (vedi sotto).
Standardizzazione
Computer diversi funzionano più velocemente o più lentamente, quindi utilizzeremo il server NEOS per Concorde come standard di misurazione per il runtime. Puoi inviare un elenco di punti nel seguente semplice modulo di coordinate 2D:
#cities
x_0 y_0
x_1 y_1
.
.
.
x_n-1 y_n-1
Le impostazioni che dovrebbero essere utilizzate su NEOS sono "Dati Concorde (file elenco xy, norma L2)", "Algoritmo: Concorde (QSopt)" e "Seme casuale: fisso".
Baseline
L'istanza di 1.889 punti rl1889.tsp
di TSPLIB richiede "Tempo di esecuzione totale: 871.18 (secondi)", che è più di cinque minuti. Sembra così: