fundo
O problema do vendedor ambulante (TSP) solicita o menor circuito que visita uma determinada coleção de cidades. Para os fins desta pergunta, as cidades serão pontos no plano e as distâncias entre elas serão as distâncias euclidianas usuais (arredondadas para o número inteiro mais próximo). O circuito deve ser "ida e volta", o que significa que deve retornar à cidade inicial.
O solucionador Concorde TSP pode resolver instâncias do problema do vendedor ambulante euclidiano, exatamente e muito mais rapidamente do que se poderia esperar. Por exemplo, o Concorde conseguiu resolver exatamente uma instância de 85.900 pontos , partes das quais se parecem com isso:
No entanto, algumas instâncias de TSP levam muito tempo, mesmo para o Concorde. Por exemplo, ninguém foi capaz de resolver essa instância de 100.000 pontos com base na Mona Lisa . (Há um prêmio de US $ 1.000 oferecido, se você puder resolvê-lo!)
O Concorde está disponível para download como código-fonte ou executável. Por padrão, ele usa o solucionador de programa linear (LP) embutido QSopt , mas também pode usar melhores solucionadores de LP, como o CPLEX.
O desafio
Qual é a menor instância de TSP que você pode gerar que leva o Concorde a mais de cinco minutos para ser resolvido?
Você pode escrever um programa para gerar a instância ou usar qualquer outro método que desejar.
Pontuação
Quanto menos pontos na instância, melhor. Os laços serão quebrados pelo tamanho do arquivo da instância (veja abaixo).
estandardização
Computadores diferentes rodam mais rápido ou mais devagar, portanto, usaremos o NEOS Server for Concorde como o padrão de medição para o tempo de execução. Você pode enviar uma lista de pontos no seguinte formulário simples de coordenadas 2D:
#cities
x_0 y_0
x_1 y_1
.
.
.
x_n-1 y_n-1
As configurações que devem ser usadas no NEOS são "dados do Concorde (arquivo da lista xy, norma L2)", "Algoritmo: Concorde (QSopt)" e "Semente aleatória: fixa".
Linha de base
A instância rl1889.tsp
de 1.889 pontos do TSPLIB leva "Tempo total de execução: 871,18 (segundos)", que é mais de cinco minutos. Se parece com isso: