Técnicas de GameAI: Uma visão geral -...
-
Upload
hoangkhanh -
Category
Documents
-
view
217 -
download
0
Transcript of Técnicas de GameAI: Uma visão geral -...
Prof. Marcelo Henrique dos Santos
Técnicas de GameAI:
Uma visão geral - continuação
Técnicas de GameAI
Movimentação
“Estacionando”
”Vagando”
Desvio de Obstáculos
Pathfinding
Simples
Desvio de Obstáculos
A*
Waypoints
Movimentação
“Estacionando”
d = distância calculada
dmin = distância mínima desejada do alvo
fdes = fator de desaceleração (< 1 e depende da dinâmica do jogo) Ex: 0.3
Vaprox = velocidade de aproximação
Vorig = velocidade sem levar em conta a aproximação
Movimentação
”Vagando”
• passar a impressão de movimento aleatório
• 1ª idéia – variar direção do NPC aleatoriamente
problema ...
–não natural - movimentos bruscos
solução ...
Movimentação
”Vagando”
a dinâmica do movimento é controlada por rv, dv e max_dram
Movimentação
Desvio de Obstáculos
• retângulo de detecção ou outras formas. ex:
• largura igual ao raio de “batida”
• quanto mais rápido o veículo mais longo o retângulo fica
Movimentação
Desvio de Obstáculos
• 1º passo – achar o ponto de intersecção mais próximo
...
A. desconsiderar obstáculos fora do alcance do retângulo de detecção
B. desconsiderar obstáculos atrás, converter coordenadas de obstáculos
com possível colisão para coordenadas locais e verificar coordenada y
C. verificar se obstáculos se sobrepõe ao retângulo, expandir raio do
obstáculo por metade da largura do retângulo e verificar coordenada
Movimentação
Desvio de Obstáculos
D. achar o ponto de intersecção mais próximo
Movimentação
Desvio de Obstáculos
• 2º passo – calcular força de frenagem e força lateral
Movimentação
Desvio de Obstáculos
• caso 3D ...
– obstáculos = esferas
– retângulo = cilindro
Pathfinding
• Pathfinding, ou busca de caminhos é um dos problemas mais
comuns no desenvolvimento de jogos, e está presente na maioria dos
gêneros.
• patrulhamento
• desvio de obstáculos
• perseguição
• planejamento de trajetória
• mirar (se tem obstáculo deve ser previsto) mover-se e atirar
Pathfinding
Caso Simples
• pode-se utilizar algoritmos de perseguição e fuga
abstração:
ponto inicial = predador
ponto final = presa
problema ...
obstáculos
Pathfinding
Desvio de Obstáculos
Estratégias
Contornar Obstáculos
– obstáculos maiores
– critério de saída do modo “contorno”...
pseudo-código pathfinding simples + desvio
Início
ENQUANTO
não chegou ao destino
ESCOLHA um próximo passo rumo ao destino
SE o local está vazio, mova-se até ele
SENÃO escolha outra direção segundo estratégia de
desvio de obstáculos
FIM ENQUANTO
Fim
Verificar textos deste slide que estão “Atrás” do código e
eu não consegui decifrar...)
Pathfinding
Waypoints
• utilização de rotas interligando os pontos principais
em um mapa é uma técnica usada em jogos.
• cada nó do grafo representa um waypoint que
contém informações sobre como chegar até os nós vizinhos.
exemplo: jogos de corrida.
Na pista pode ser definidas diversas
rotas com características diferentes.
Cada carro começa seguindo uma rota
e muda quando necessário
(ex: carros na sua frente)
Pathfinding
A*
• cálculo de caminho ótimo + desvio de obstáculos
• modelagem:
(quadrado, retângulos, hexágonos, outros)
– utilização de grafo (vizinhança)
– cada ladrilho = um nó no grafo
Pathfinding
A*
A* mantém duas listas:
– nós abertos: armazena todos os nós que precisam ser
verificados,
– nós fechados: armazena os nós que não precisam
mais ser verificados no momento.
Pathfinding
A*
• o ponto crucial aqui é escolher qual dos nós fará
parte do caminho a ser percorrido.
• função de avaliação F(n) que é o resultado da soma
F(n) = G(n) + H(n)
• onde G(n) custo do nó inicial ao nó candidato ex: 10 quadrado horizontal ou vertical e de 14 diagonal(~10*√2)
• e H(n) é a função heurística, indica o custo estimado do nó
candidato até o destino final
ex: método Manhattan, número de quadrados horizontal e
vertical até o alvo, ignorando movimento diagonal, e ignorando
qualquer obstáculo que pode estar no caminho
Pathfinding
A*
1. coloca-se o nó inicial na lista de abertos;
2. nós adjacentes (filhos) também na lista de abertos,
se não estiverem, menos obstáculos ou nós da lista de
fechados;
3. coloca-se o nó inicial na lista de nós fechados;
Pathfinding
A*
4. se nó adjacente está na lista aberta, verificar se o
G agora é mais baixo do que o já na lista se não for,
não fazer nada;
se for, trocar o pai do nó adjacente para o nó selecionado e
recalcular o F;
5. repetir até nó-destino ser adicionado à lista de abertos
(algoritmo termina em “sucesso”), ou a lista de abertos fique
vazia (falha na busca de um caminho).
Pathfinding
A*
Exemplo
legenda:
verde = lista aberta
azul = lista fechada
Algoritmos de busca em grafo:
B*
• Bellman-Ford algorithm
• Best-first search
• Bidirectional search
• Breadth-first search
D*
• Depth-first search
• Depth-limited search
• Dijkstra's algorithm
• Floyd–Warshall algorithm
• Hill climbing
• Iterative deepening depth-first search
• Johnson's algorithm
• Uniform-cost search
Algoritmo MiniMax
• Faz uma caminhamento em profundidade completo da árvore!
• Se a profundidade é m e em cada estado existem b jogadas
possíveis, a ordem de complexidade é O(bm)
• Ou seja esse algoritmo não é prático para jogos reais
• Mas serve para análise matemática e como base para
algoritmos mais eficientes
Multiplayer games
O MiniMax pode ser estendido para jogos com múltiplos jogadores
Uso de um vetor de utilidades
Alianças
Podem ocorrer naturalmente no processo de maximizar a função de
utilidade
Qual o problema com o MiniMax?
Alpha-Beta Pruning
Problema com o MiniMax
# de estados é exponencial
Pruning = Poda
Não examinar grandes partes da árvore,
diminuindo assim o custo
Alpha-Beta Prunning
Retorna a mesma ação do MiniMax, mas elimina
caminhos que não influenciam a decisão
α-β pruning example
α-β pruning example
α-β pruning example
α-β pruning example
α-β pruning example
Alpha-Beta Pruning
a = o maior valor já
encontrado no caminho
(melhor alternativa p/ MAX)
ß = o menor valor já
encontrado no caminho
(melhor alternativa p/ MIN)
Se v é pior que alpha,
MAX vai evitá-lo
Alpha-Beta Pruning
• A eficiência do algoritmo depende da ordem
em que os nodos são examinados
Decisões Imperfeitas, em Tempo Real
Minimax mesmo c/ Alpha Beta Prunning não
é factível para jogos complexos
Solução:
Parar a busca antes de chegar ao final
É necessário:
Função de Avaliação (Evaluation Function):
fornece uma estimativa da utilidade daquele
estado (Heurística)
Teste de Parada (Cutoff Test): decide em quando
parar a busca
Funções de Avaliação
• Devem tentar manter a mesma ordenação da função de utilidade final
• Não podem demorar muito
• Devem estar relacionadas com as “chances de ganhar o jogo”
• Chances? Jogo é determinístico!?
• Incerteza computacional ao invés de incerteza da informação
Funções de Avaliação
• Análise de características (features) do estado corrente
• Divisão em classes de equivalência • Conjuntos de estados com características similares
• Para cada classe, determina-se por experiência: •%Vitórias, %Empates, %Derrotas
• Função de avaliação é calculada como uma média ponderada. •Ex. 72% Vitória, 20% Derrota, 8% empate
Eval(S) = (0.72 x 1) + (0.2 x -1) + (0.08 x 0) = 0.52
•Requer muitas classes e experiência...
Funções de Avaliação
• Uma forma mais fácil é dar valor diretamente as
features •Xadrez: Peão = 1, Cavalo / Bispo = 3, etc...
•“Estrutura de peões”, “Proteção do rei”, etc...
• A função de avaliação é computada através de uma
combinação linear ponderada •Eval(S) = w1.f1 (s) + w2.f2 (s) + ... + wn.fn (s)
•Funções não lineares também podem ser usadas •Um par de bispos tem mais valor que o dobro de um só
•Leva em consideração as outras peças
•De novo, experiência / aprendizado é necessário
Teste de Parada
• If Cutoff-Test(State, Depth) return Eval(state)
• Forma mais comum: profundidade fixa
• Problemas: e se na próxima jogada...
Teste de Parada
• A função de avaliação somente deve ser aplicada
a estados que não vão sofrer mudanças bruscas
de valor •Quiescence Search
• Efeito Horizonte: jogada
catastrófica que vai
acontecer inevitavelmente
em um futuro próximo,
fora do horizonte de busca
Poda
• Singular Extensions • Ultrapassar a profundidade limite para ações que
são “claramente melhores”
Na prática, diminui o branching factor (poda)
• Forward Prunning • Ignorar certos movimentos possíveis
• Humanos fazem isso inconscientemente
• Não há garantias...
• Interessante para movimentos simétricos
Xadrez na Prática
• Suponha uma função de avaliação e um PC que
• consiga investigar 10^6 nodos/s
• 200 x 10^6 nodos por jogada (3 minutos)
• Branching Factor: 35: 35^5 = 50 x 10^6
• Minimax = 5 jogadas (jogador mediano)
• Alpha-Beta = 10 Jogadas (expert)
• Para virar um Grande-Mestre: • Função de avaliação bem ajustada
• Banco de jogadas (abertura e término)
• Supercomputador...
Jogos Não-Determinísticos (sorte)
• Exemplo: Gamão
• As jogadas possíveis são determinadas
depois que se jogam os dados
• Não é possível construir uma árvore como no
caso do xadrez e aplicar o minimax
• Solução: • Incluir nodos intermediários com as chances
• Algoritmo: ExpectiMinimax