460 likes | 599 Views
Geber Ramalho. Pathfinding. Motivação Técnicas clássicas e otimizações Transformação do espaço de busca. Pathfinding. Definição Obtenção de um melhor caminho de um ponto inicial para um objetivo de acordo com um ou mais critérios
E N D
Geber Ramalho Pathfinding Motivação Técnicas clássicas e otimizações Transformação do espaço de busca
Pathfinding • Definição • Obtenção de um melhor caminho de um ponto inicial para um objetivo de acordo com um ou mais critérios • Ex.: tempo, distância, periculosidade dos inimigos, velocidade, ocupação do mapa, etc. • diferente steering behaviors... • É um dos poucos consensos em termos de AI Engine
Pathfinding: motivações • Aplicável para o cálculo de rotas • Cidadão comum: GPS, Google maps, etc. • Meio empresarial: Problemas de logística • Meio militar: Problemas táticos • Jogos digitais • Deslocamento dos NPCs • Análise de terreno e situação • Um dos poucos consensos em termos de AI Engine
Pathfinding: jogos • Ainda não é um problema resolvido • Dave Pottinger: “AOE2 gasta 60-70% do tempo de simulação fazendo pathfinding” • Dificuldades • Evitar obstáculos, sobretudo os largos e côncavos • Levar em conta os pesos (tipos de terreno) • Diferentes critérios (mais curto, mais seguro, etc.) • Memória e tempo de processamento em função de • tamanho do terreno • número de unidades • número de jogadores
Pathfinding: Exemplo • Napoléon en Russie - V. Corruble (LIP6) • Caminho mais curto início objetivo
Pathfinding: Exemplo • Napoléon en Russie - V. Corruble (LIP6) • caminho menos visível
Pathfinding: Exemplo • Napoléon en Russie - V. Corruble (LIP6) • caminho mais seguro
Path-Finding - Estratégias • Reativas (online: executa enquanto procura) • Campos potenciais • Aleatórias • Traçado simples e robusto • Busca/planejamento (offline: busca e depois excuta) • Não Informadas (busca cega) • Informadas (busca heurística)
Campos potenciais • Usa o princípio de campo gravitacional para determinar a direção do movimento • Alvo tem campo gravitacional atrativo • Obstáculos têm campo gravitacional repulsivo • Duas abordagens para • Soma vetorial (Attractor-repulsor) • online • Potential fields ou método gradiente • Pré-calculado e marcado no terreno
Attractor-repulsor • Soma vetorial • Vetor do alvo: linha do alvo até o ponto em questão • Vetores dos campos dos obstáculos: a partir dos centros geométricos • Cálculo da direção e movimento • Intensidades dos campos são inversamente proporcionais às distâncias entre as entidades e o ponto em questão • Direção resultante em um ponto é a soma vetorial dos campos atrativo e repulsivo • Esta direção resultante é calculada a cada ciclo de tempo T segundos • A entidade se move na direção calculada por T segundos
Attractor-repulsor • Obs • Caro, pois calcula tudo na hora, mas adaptativo • Pode ficar preso em mínimos locais t5=5T t4=4T Alvo Obstáculo t3=3T Cálculo da resultante t0=0 t2=2T t1=T
Potential Fields • Método discreto • Cada tile do terreno tem um valor de potencial determinado pela influencia de • destino = potencial baixo • obstáculo e ponto de partida = potencial alto • O elemento “escorrega” para o potencial mais baixo • Obs • Barato, pois pré-calcula tudo, mas ruim se obstáculos se movimentam (recalcular) • Pode ficar preso em mínimos locais • Combinar informação local e global via propagação
Path-Finding reativo (online) • Idéia • se movimentar em direção ao objetivo e pegar outra direção quando esbarrar nos obstáculos • Tecnicas • Aleatória • Tracing • Robust tracing
Path-Finding reativo (online) • Direção aleatória • ao esbarrar, move em direção aleatoriamente e tenta de novo • problema: obstáculos grandes e côncavos
Path-Finding reativo (online) • Simple Tracing • ao esbarrar, segue, em uma direção fixa, “tateando” o obstáculo até contorná-lo • Problema: quando parar de tatear? • Quando mudar de direção, testa se pode andar na direção do alvo sem voltar por onde já passou • Nem sempre funciona... Tateando sempre à direita
Path-Finding reativo (online) • Robust tracing • Uma vez começado a tatear, se o ponto inicial de bloqueio está entre o objetivo e o agente, ao cruzar com a semi-reta traçada entre a posição original e o objetivo, não para de tatear • Caso volte à posição original, aborta • problema: pode tomar muito tempo fazendo tracing
Path-Findingonline • Solução • Usar simple trace de cara • Quando um loop é detectado, mudar para Robust tracing • Infelizmente, • há situações onde é preciso uma busca inteligente • em particular para tratar “pesos de regiões” (estradas, rios, florestas, campos,...)
Path-FindingBuscas Não-Informadas (offline) • Estratégias: • Busca em largura (Breadth-first search) • Busca em profundidade (Depth-first search) • Busca em profundidade limitada • Busca de custo uniforme (Dijkstra’s search) • Busca em profundidade iterativa • Direção • Início para meta • Meta para início • Bidirecional
Path-FindingBuscas Informadas (offline) • Estratégias: A* • Combina a busca de custo uniforme (Dijkstra) com best-first f(x) = g(x) + h(x), onde • g = o que custou até agora • h = função heurística (o que provavelmente ainda vai custar) • Heurística determina eficiência: quanto mais próximo do real, embora sempre otimista, melhor • Completo, ótimo e correto • Listas Closed (já visitados) e Open (a visitar - fronteira)
Adaptações de A* • Mesmo sendo a melhor técnica, A* ainda tem limitações devido aos • Requisitos de tempo real • Limitações de memória disponível • Ineficiência dos algoritmos de manipulação das listas Open e Close • Qualidade da função h(n)
Adaptações de A* • Alternativas para melhorias • Ajustes para melhorar desempenho/memória (visto em SI) • Iterative Deepening A* • Beam Search – Simplified Memory A* • Alterações na função h(x) • Algoritmo de Floyd-Warshall • Estruturas de dados • Representação do campo do jogo • Dados do estado da busca • Melhorias na manipulação das listas • Transformação do espaço de busca
Estrutura de dadosRepresentação do mapa do jogo • Representação das áreas acessíveis de cada ponto e dos esforços para a movimentação • Diretamente no mapa, • em uma estrutura separada, ou • calculadas quando necessário • Representação das características na área • Diretamente no mapa, • ou em uma estrutura separada
Estrutura de dados Dados do Estado da Busca • Pode-se incluir no nós, além da estrutura de busca básica,... • Coordenadas da posição do mapa • Atributos relevantes da entidade, como orientação e velocidade • Custo estimado até o objetivo (ou até o objetivo mais próximo) • Referências adicionais para outros nós • próximo elemento, elemento anterior ,“esquerda”, “direita”, ...
Melhorias Estéticas • Obter trajetórias mais macias... • Ver demo de Marco Pinter
Transformação do espaço de busca • Idéia básica: • Busca realizada com “menos estados” para reduzir a complexidade da busca inicial • Técnicas • Hierarquização e agregação de células (ambiente discreto) • Discretização de ambientes contínuos
Hierarquização e Agregação • Idéia • decompor busca inicial em sub-buscas mais simples => agrupar células (quadradinhos) em áreas maiores e fazer a busca hierarquicamente do maior para os menores • Divisão do mapa • Mapa deve ser dividido em grandes áreas contíguas cujas conectividades são conhecidas • Um ou dois “quadradinhos” (células) da borda entre cada par de áreas adjacentes são escolhidos
Hierarquização e Agregação • Uma sucessão de buscas irá ser realizada • A primeira busca irá ser realizada em cima deste novo “espaço com menos quadradinhos” • As buscas sucessivas, em espaços transformados com mais “quadradinhos”, evitam iterações desnecessárias determinadas pelas buscas anteriores
Hierarquização e Agregação • Exemplo: determinar a melhor rota terrestre entre Madri e Atenas utilizando o mapa da Europa • Cada país pode ser considerado uma área • Pontos nas bordas (fronteiras) dos países são definidos para a primeira busca • Melhor rota na primeira iteração: Espanha - França - Itália - Iugoslávia - Grécia • A primeira iteração evita que a bota correspondente à Itália seja incluída nos próximos passos da sequência hierárquica de buscas
Discretização de Espaço Contínuo • E se o jogo for em um espaço contínuo (não baseado em tiles)? • 2 abordagens vindas do planejamento de movimento de robôs • Cell decomposition • Skeletomization
Discretização de Espaço Contínuo • Cell decomposition • discretização em células menores (idênticas ou não) e fixação de spots (pontos no “centro” das células) que serão ligados formando um grafo de caminhamento • exemplos: tiles, tiras, células cilíndricas, quadtrees,...
Discretização de Espaço Contínuo • Tiles • Dividir o espaço em “ladrilhos” de resolução pré-definida • Ladrilhos inseridos total ou parcialmente em obstáculos são marcados como bloqueados • Permite movimento sem risco de colisão • Problema: difícil ajustar a granularidade
Discretização de Espaço Contínuo Tiles (ladrilhos)
Discretização de Espaço Contínuo • Quadtrees • O espaço é dividido em quadrados (tiles) • Cada quadrado que não é suficientemente homogêneo é recursivamente dividido em quatro quadrados • Os centros dos quadrados homogêneos que não estão em obstáculos são usados pela busca (spots) • Regiões das bordas dos obstáculos são consideradas bloqueadas
Discretização de Espaço Contínuo Quadtrees Subdivisão do espaço Grafo (azul)
Discretização de Espaço Contínuo • Tiras verticais ou horizontais • a dimensão em um dos eixos (x ou y) se expande até “esbarrar” em um obstáculo • problema: sobram espaços que, no entanto, não podem ser usados para manobras
Discretização de Espaço Contínuo • Skeletomization • superposição de um grafo de caminhamento diretamente em função dos obstáculos • As buscas consideram apenas os caminhos do grafo • exemplos: manual (waypoints), grafo de visibilidade, polígonos convexos, diagrama de Voronoi, ...
Discretização de Espaço Contínuo • Pontos de visibilidade • São os pontos críticos (quinas dos obstáculos) mas com uma folga para evitar colisões • Os caminhos possíveis (conexões) definidos entre os pontos críticos visíveis entre si • ou seja... não deve existir obstáculos entre estes pontos
Discretização de Espaço Contínuo Pontos de Visibilidade Grafo (azul)
Discretização de Espaço Contínuo • Polígonos convexos • Passo inicial • Quebrar o espaço (sem obstáculos) em polígonos convexos • A partir daí define os spots segundo 2 técnicas • C-Cells: cada vértice é conectado ao ao vértice mais próximo subdividindo o espaço em polígonos cujos centroides serão os spots • Maximum-area decomposition: similar mas os spots estão no meio das arestas que ligam os vértices
Discretização de Espaço Contínuo Polígonos Convexos Subdivisão do espaço Grafo (azul) segundo “Maximum-area decomposition”
Colaboração • Eduardo Calabria (egc@cin.ufpe.br) • Eduardo Laureano (eagcl@cin.ufpe.br) • Charles Madeira (Charles.MADEIRA@poleia.lip6.fr)
Bibliografia & Links • Russel & Norvig: AIMA (cap 4, 5 e 25) • Bryan Stout, Smart Moves: Intelligent Path-Finding • http://www.gamasutra.com/features/programming/080197/pathfinding.htm • demo: ftp://ftp.gdmag.com/pub/src/oct96.zip • Game AI: The State of Industry • http://www.gamasutra.com/features/20001101/woodcock_pfv.htm • Stefan Baert, Motion Planning Using Potential Fields • http://www.gamedev.net/reference/articles/article1125.asp • Amit Patel, Amit´s Thoughts on Pathfinding • http://theory.stanford.edu/~amit/GameProgramming/index.html • Marco Pinter, Toward More Realistic Pathfinding • http://www.gamasutra.com/features/200103014/pinter_01.htm • Paul Tozour, Influence Mapping, in (ed) Mark Deloura, Game Programming Gems II.