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


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!


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*


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 ...


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 .



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".


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.


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.


+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 *?


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.