Algoritmo de Dijsktra aplicado ao problema do vendedor ambulante

13

Sou iniciante (novato em teoria da complexidade computacional) e tenho uma pergunta.

Digamos que tenhamos 'Problema do Vendedor Viajante', a seguinte aplicação dos Algoritmos de Dijkstra o resolverá?

A partir de um ponto inicial, calculamos a menor distância entre dois pontos. Nós vamos direto ao ponto. Nós excluímos o ponto de origem. Em seguida, calculamos o próximo ponto de menor distância a partir do ponto atual e assim por diante ...

A cada passo, reduzimos o gráfico enquanto movemos o próximo ponto de menor distância disponível. Até visitarmos todos os pontos.

Isso resolverá o problema do vendedor ambulante.

Gilles 'SO- parar de ser mau'
fonte
3
Observe que o TSP é NP completo e o algoritmo de Dijkstra possui tempo de execução polinomial. O que você propõe seria uma solução quase trivial do P = NP? pergunta, por isso é improvável que sua abordagem funcione. Esse tipo de raciocínio é apenas uma mente heurística!
Raphael

Respostas:

24

O algoritmo de Dijkstra retorna uma árvore de caminho mais curto, contendo o caminho mais curto de um vértice inicial para o outro, mas não necessariamente os caminhos mais curtos entre os outros vértices, ou uma rota mais curta que visita todos os vértices.

Aqui está um exemplo de contador em que o algoritmo ganancioso que você descreve não funciona:

contra-exemplo

uma[uma,b,c,d,uma]uma[uma,b,d,c,uma]uma,b,c,dd,uma para retornar à cidade inicial.

Joe
fonte
8

Como já ocorreu nas outras respostas, sua sugestão não resolve efetivamente o Problema do Vendedor Viajante, deixe-me indicar a melhor maneira conhecida no campo da pesquisa heurística (desde que eu veja o algoritmo de Dijkstra um pouco relacionado a esse campo da Inteligência Artificial) .

(você,v)(v,você)

A melhor abordagem (que eu conheço) consiste em executar um algoritmo de pesquisa heurística de profundidade e primeiro ramo e limite , onde a heurística é o custo da Árvore de abrangência mínima (MST). Como o MST pode ser calculado em tempo polinomial com o algoritmo de Prim ou com o algoritmo de Kruskal , pode-se esperar que retorne soluções em um período de tempo razoável. Para uma maravilhosa discussão desses dois algoritmos, sugiro fortemente que você dê uma olhada no The Algorithm Design Manual

De fato, permitam-me destacar que, uma vez que essa abordagem foi sugerida, pouco progresso foi observado no campo para derivar limites ótimos desse problema, de modo que considero que é uma questão importante no campo da pesquisa combinatória.

Espero que isto ajude,

Carlos Linares López
fonte
2

Não tenho idéia de como alguém aqui não percebeu que a aplicação do algoritmo de Dijkstra seria totalmente desnecessária nesse caso. Você pode implementar esse algoritmo ganancioso simplesmente selecionando o nó mais próximo, que é conhecido a priori. O algoritmo de Dijkstra é usado para descobrir caminhos, mas você está apenas dando um passo a cada vez. Obviamente, isso não encontra a solução ideal para o TSP, mas muitas abordagens muito boas também não a encontram. Todos os localizadores de soluções ideais para TSP são muito exigentes em termos computacionais.

Luke Schwartzkopff
fonte
1

A resposta é não, essa não é uma boa maneira de resolver o problema do TSP. Um bom exemplo de contador é onde todos os pontos estão em uma linha, como o seguinte:

--5 ------------------ 3 ----- 1--0 --- 2 ---------- 4

usando o algoritmo de Dijsktra, o vendedor ruim começaria no ponto 0, primeiro passaria para 1, depois para 2 e depois para 3 ect. o que não é o ideal.

Espero que ajude. Dê uma olhada no primeiro capítulo do excelente livro de Steven S. Skiena chamado "The Algorithm Design", que explica este exemplo com mais detalhes.

O problema do TSP não é encontrar o caminho mais curto entre dois pontos, mas fazer uma rota entre todos os pontos ideais. Quando você tem a rota ideal, pode usar o Dijsktra para encontrar o caminho mais curto entre cada ponto da rota.

Kim.Net
fonte
2
Dijkstra é um algoritmo de caminho mais curto de fonte única, mas não "faz" o vendedor iniciar em 0, nem retorna uma rota. Ele apenas retorna a árvore do caminho mais curto, contendo o caminho mais curto para cada vértice do vértice de origem fornecido.
Joe
Tradicionalmente, o problema do TSP [ en.wikipedia.org/wiki/… ] é "Dada uma lista de cidades e suas distâncias aos pares, a tarefa é encontrar o caminho mais curto possível que visite cada cidade exatamente uma vez e retorne à cidade de origem. " Tecnicamente, não é possível atender a esses requisitos em um caminho - você não deve retornar à cidade inicial ou repetir cidades.
Joe
No entanto, em um caminho, se relaxarmos uma dessas restrições, o problema será trivial.
Joe
É claro que Dijkstra não faria o vendedor começar em 0. Mas o algoritmo proposto na pergunta original não especificou um vértice inicial; portanto, o algoritmo proposto pode forçar o mau vendedor a começar em 0. Portanto, esta resposta está correta.
11119 JeffE