Que algoritmos de localização de caminhos existem? [fechadas]

49

Eu gostaria de ler sobre os algoritmos de localização de caminhos. Existe uma cartilha disponível ou algum material ou tutorial na Internet que seria um bom começo para mim?

Spoike
fonte
Veja também: cstheory.stackexchange.com/questions/11855
BlueRaja - Danny Pflughoeft

Respostas:

34

Se você deseja pesquisar e aprender sobre a busca de caminhos em geral, eu definitivamente sugeriria aprender mais do que apenas um algoritmo. Você desejará entender os conceitos gerais, mas poderá aplicá-los ao que quer que esteja trabalhando. A maioria dos desenvolvedores de jogos que precisam realizar qualquer busca de caminhos séria acaba escrevendo seus próprios algoritmos personalizados, embora altamente baseados em soluções conhecidas, cada jogo seja diferente e terá requisitos diferentes.

Eu começaria lendo alguns dos métodos mais conhecidos, como o A *, o algoritmo de Dijkstra, a profundidade e a largura da primeira pesquisa. Há muitas informações boas na internet em cada uma delas. ( http://en.wikipedia.org/wiki/Pathfinding )

Ao lê-los, anote quais são as vantagens e desvantagens de cada abordagem, bem como o tipo de dados em que o algoritmo pode operar. Pode ser aplicado a caminhos tridimensionais? Ele pode ser modificado para dar conta de nossa IA humana que deseja evitar as minas terrestres no mapa?

Quando se trata de busca de caminhos, A * é praticamente o bilhete de ouro que todo mundo usa. Você definitivamente deve saber como isso funciona. ( http://en.wikipedia.org/wiki/A*_search_algorithm )

Aqui está um bom exemplo de A *, como se aplica a um jogo RTS, que precisa levar em consideração entidades de tamanhos diferentes: http://aigamedev.com/open/tutorials/clearance-based-pathfinding/

Boa sorte!

dcarrigg
fonte
2
+1 para os programadores que precisam aprender a adaptar soluções conhecidas. Isso é algo que muitos futuros desenvolvedores de jogos não entendem.
Engenheiro
22

Os algoritmos de busca de caminhos são basicamente algoritmos de resolução de problemas de pesquisa de gráficos.

http://en.wikipedia.org/wiki/Pathfinding#Algorithms

O mais conhecido é o algoritmo de Djikstra: http://en.wikipedia.org/wiki/Dijkstra's_algorithm

e seu algoritmo de pesquisa variante A *: http://en.wikipedia.org/wiki/A*

Keyframe
fonte
2
O último link está quebrado porque o * não é visto como parte dele: en.wikipedia.org/wiki/A%2A
Hendrik Brummermann
fixx0r3d ambos os links
tenpn
Algoritmos simples de pesquisa de gráficos são apenas o básico para a busca de caminhos.
Martinkunev
13

Este é um excelente recurso inicial que analisa todos os aspectos da localização de caminhos em uma abordagem muito fácil de digerir.

Notas de Amit sobre localização de caminhos

... O Pathfinding aborda o problema de encontrar um bom caminho desde o ponto de partida até a meta - evitando obstáculos, evitando inimigos e minimizando custos (combustível, tempo, distância, equipamento, dinheiro, etc.). O movimento aborda o problema de seguir um caminho e segui-lo. É possível gastar seus esforços em apenas um deles. Em um extremo, um pathfinder sofisticado acoplado a um algoritmo de movimento trivial ...

David Young
fonte
11
+1 para Amit. Aprendi A * em seu site há mais de 10 anos.
Dezpn
Ótimas ilustrações também. Alta qualidade.
macaco
5

A busca de caminhos é um problema bastante resolvido ... como mencionado em quase todas as respostas aqui, algumas variações do A * serão o que você usar.

O maior desafio para mim é como você deseja representar seu caminho . Usando uma grade, códigos de caminho, navmeshes, grades hierárquicas ou outras estruturas complexas, etc.

Não tenho nenhuma referência específica em mente, mas explorar o AIGameDev fornecerá todo tipo de idéias sobre o que há por aí.

Lembre-se de que cada representação tem seus prós e contras; não se trata de encontrar o 'melhor', é de encontrar o que melhor se adequa à sua jogabilidade .

Ipsquiggle
fonte
5

Há uma boa lista na Wikipedia: Pathfinding

Tanto quanto eu sei, A * e D * são ambos bastante populares.

Craig Martek
fonte
1 para mencionar dinâmica A * mais conhecido como D *
David Young
4

Existem vários algoritmos de localização de caminhos por aí.

Um dos mais populares é provavelmente o A * ( A-Star ). É um algoritmo muito útil se você tiver uma função heurística que possa fornecer custos estimados para atingir uma meta (por exemplo, a distância da linha de visão até o destino). A * é muito útil para encontrar o caminho mais curto do início ao fim.

Fora isso, também há o algoritmo de Dijkstra, que é muito útil para encontrar o item mais próximo dentre vários itens. Por exemplo. se você quiser descobrir qual power-up (ou similar) é o mais próximo ao seu personagem de jogo.

Existem vários outros algoritmos por aí, mas acho que A * é de longe o mais popular. Mat Buckland tem um excelente capítulo sobre Localização de caminhos em seu Game Programming Game AI by Example . Convido você a obter uma cópia. Caso contrário, você encontrará muitas informações on-line pesquisando "Uma pesquisa por estrelas".

bummzack
fonte
Oh meu. Enquanto escrevia isso, a mesma resposta foi dada cerca de um bilhão de vezes. Desculpe :)
bummzack
Só notei que o livro mencionado também está no Google-Livros (embora não esteja completo). Leia aqui: books.google.com/books?id=gDLpyWtFacYC
bummzack
2

Isso não é muito primer, mas discutimos extensivamente os algoritmos de gráficos em nossa classe de algoritmos no outono passado de 2009. Usamos este livro,

Introdução aos algoritmos, terceira edição de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein

http://mitpress.mit.edu/algorithms/

e também acompanha palestras do YouTube de uma aula do MIT.

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/

Os capítulos 17, 18 e 19 tratam dos caminhos mais curtos.

bluedes
fonte
2

Consulte [Algoritmos de pesquisa de gráfico e árvore] na Wikipedia 1 . Eles são basicamente apenas uma variação da Pesquisa no Espaço de Estado. Você apenas precisa examinar todas elas e descobrir onde elas diferem.

Há também Difusão Colaborativa , que é um dos algoritmos mencionados anteriormente, de maneira interessante.

user712092
fonte
+1 Esse documento sobre difusão colaborativa é bastante interessante.
Engenheiro
11
Eu acho que o link está quebrado. Talvez esta seja a correta: scalablegamedesign.cs.colorado.edu/gamewiki/index.php/...
pek
-2

Este parece interessante:

http://www.codeproject.com/Articles/455 Gostaria de saber se é melhor que A *?

Tom
fonte
Bem vindo ao site. O que você deu é conhecido como uma resposta somente de link, o que é desencorajado. Seria melhor resumir as qualidades do método em sua resposta. Você poderia então argumentar se é melhor que o simples A *, em vez de ponderar ociosamente no texto.
Seth Battin
Vejo que sua resposta está mais ou menos igual a esta pergunta (o que é lamentável). Não pretendo destacar você, apenas passei sua entrada na primeira fila de revisão de postagens . Independentemente disso, melhorar sua resposta é sempre bem-vindo.
Seth Battin
Só vou repetir o que Seth disse. Resumir.
cinzento