Antecedentes
El problema del vendedor ambulante (TSP) solicita el circuito más corto que visita una determinada colección de ciudades. A los fines de esta pregunta, las ciudades serán puntos en el plano y las distancias entre ellas serán las distancias euclidianas habituales (redondeadas al número entero más cercano). El circuito debe ser de "ida y vuelta", lo que significa que debe regresar a la ciudad inicial.
El solucionador Concorde TSP puede resolver casos del problema del vendedor ambulante euclidiano, exactamente y mucho más rápido de lo que cabría esperar. Por ejemplo, Concorde pudo resolver una instancia de 85,900 puntos exactamente, partes de las cuales se ven así:
Sin embargo, algunas instancias de TSP tardan demasiado, incluso para Concorde. Por ejemplo, nadie ha podido resolver esta instancia de 100,000 puntos basada en la Mona Lisa . (¡Se puede ofrecer un premio de $ 1,000 si puede resolverlo!)
Concorde está disponible para descargar como código fuente o como ejecutable. Por defecto, utiliza el solucionador de programas lineal (LP) incorporado QSopt , pero también puede utilizar mejores solucionadores de LP como CPLEX.
El reto
¿Cuál es la instancia de TSP más pequeña que puede generar que le tome a Concorde más de cinco minutos para resolver?
Puede escribir un programa para generar la instancia o utilizar cualquier otro método que desee.
Puntuación
Cuantos menos puntos en la instancia, mejor. Los empates se romperán por el tamaño del archivo de la instancia (ver más abajo).
Estandarización
Las diferentes computadoras funcionan más rápido o más lento, por lo que utilizaremos el servidor NEOS para Concorde como el estándar de medición para el tiempo de ejecución. Puede enviar una lista de puntos en el siguiente formulario de coordenadas 2D simple:
#cities
x_0 y_0
x_1 y_1
.
.
.
x_n-1 y_n-1
Las configuraciones que se deben usar en NEOS son "Datos de Concorde (archivo de lista xy, norma L2)", "Algoritmo: Concorde (QSopt)" y "Semilla aleatoria: fija".
Base
La instancia rl1889.tsp
de 1,889 puntos de TSPLIB toma "Tiempo total de ejecución: 871.18 (segundos)", que es más de cinco minutos. Se parece a esto: