Jogos Capítulo 6
Jogos vs. Problemas de Procura Adversário imprevisível" necessidade de tomar em consideração todas os movimentos que podem ser tomados pelo adversário Pontuação com sinais opostos O que é bom para um jogador (vitória=+1) é mau para o outro (derrota=-1) Limitação temporal tipicamente não é encontrado um objectivo mas antes uma aproximação
Sumário Decisões óptimas em jogos Conceitos básicos Estratégias óptimas e o Minimax Estratégias óptimas com múltiplos jogadores Cortes α-β Decisões imperfeitas em tempo real Jogos que incluem o factor sorte Estado da arte em jogos
Ingredientes Vamos considerar que: existem dois jogadores, o MAX e o MIN o MAX joga primeiro no fim do jogo o vencedor ganha pontos e o adversário é penalizado
Caracterização de um Jogo Estado inicial Configuração inicial + ordem de jogada Função sucessores Para cada estado devolve uma lista de pares <acção,estado>, indicando uma jogada possível (legal) e o estado resultante Teste terminal Identifica os estados de fim de jogo (ditos terminais) Função de utilidade (ou função objectivo) Atribui um valor numérico aos estados terminais
Árvore do jogo O estado inicial e as jogadas legais para cada jogador definem a árvore do jogo.
Árvore para o jogo do galo (2 jogadores, determinístico, alternado)
Sumário Decisões óptimas em jogos Conceitos básicos Estratégias óptimas e o Minimax Estratégias óptimas com múltiplos jogadores Cortes α-β Decisões imperfeitas em tempo real Jogos que incluem o factor sorte Estado da arte em jogos
Minimax Estratégia mais adequada para jogos determinísticos Ideia: escolher jogada para o estado com o maior valor minimax melhor valor para a função de utilidade contra as melhores jogadas do adversário Valor-minimax(n) = {Função-utilidade(n) se n é terminal max s sucessores(n) Valor-minimax(s) se n é nó MAX min s sucessores(n) Valor-minimax(s) se n é nó MIN
Minimax: 2 jogadores Observações: Formato dos nós em função do tipo de nó (MIN/MAX) Valores dos estados terminais correspondem à função de utilidade para MAX (quanto vale cada um dos estados terminais) Valores para os restantes estados obtidos a partir dos valores para os nós terminais através do cálculo do valor-minimax Resultado do algoritmo: próxima jogada!
Algoritmo Minimax Função Minimax (estado) devolve acção v ValorMax(estado) devolve acção em sucessores(estado) com valor v Função ValorMax(estado) devolve valor de utilidade se TesteTerminal(estado) então devolve Utilidade(estado) v - para a,e em sucessores(estado) v MAX(v,ValorMin(e)) devolve v Função ValorMin(estado) devolve valor de utilidade se TesteTerminal(estado) então devolve Utilidade(estado) v + para a,e em sucessores(estado) v MIN(v,ValorMax(e)) devolve v
Minimax: 2 jogadores Portanto: Começa na raiz e a recursão conduz os cálculos até às folhas. Os valores minimax são depois usados quando termina a fase de expansão da recursão; Quando é o Min a jogar, escolhe a jogada que dá menos pontos ao MAX; Quando é o Max a jogar, escolhe a jogada que lhe dá mais pontos; A seta indica a escolha de MAX no fim da aplicação do algoritmo.
Propriedades do algoritmo minimax O algoritmo faz uma procura em profundidade, explorando toda a árvore de jogo. É completo? Sim (se a árvore de procura é finita) É óptimo? Sim (contra um adversário óptimo) Considerando: m = profundidade máxima da árvore r = nº de movimentos legais em cada ponto Complexidade temporal? O(r m ) Complexidade espacial? O(rm) para um algoritmo que gera todos os sucessores de uma vez O(m) para um algoritmo que gera os sucessores um a um Para xadrez, r 35, m 100 para um jogo padrão impossível determinar a solução exacta
Sumário Decisões óptimas em jogos Conceitos básicos Estratégias óptimas e o Minimax Estratégias óptimas com múltiplos jogadores Cortes α-β Decisões imperfeitas em tempo real Jogos que incluem o factor sorte Estado da arte em jogos
Minimax: mais de 2 jogadores Função de utilidade devolve vector de valores com utilidade do estado do ponto de vista de cada jogador Cada jogador procura maximizar a sua utilidade (ex: C em X, escolhe a jogada que lhe dá mais pontos - 6)
Minimax: mais de 2 jogadores Tipicamente levam a alianças, formais ou informais, entre os jogadores (também podem existir alianças em jogos com 2 jogadores). Estas alianças podem ser uma consequência natural de estratégias óptimas para cada jogador num jogo multijogadores.
Sumário Decisões óptimas em jogos Conceitos básicos Estratégias óptimas e o Minimax Estratégias óptimas com múltiplos jogadores Cortes α-β Decisões imperfeitas em tempo real Jogos que incluem o factor sorte Estado da arte em jogos
Procura com Cortes Jogos são muito mais difíceis do que os problemas de procura Factor de ramificação muito elevado - e.g. xadrez factor de ramificação 35 50 jogadas/jogador 35 100 nós (destes apenas 10 40 são nós distintos) Cortes permitem eliminar partes da árvore de procura que são irrelevantes para o resultado final. De seguida vamos falar de um tipo de corte, os cortes α-β.
Cortes α-β Motivação: Minimax: número de estados examinados é exponencial em função do número de jogadas Não é possível eliminar o factor exponencial, mas podemos reduzir o número de estados analisados para metade! É possível calcular exactamente a mesma decisão resultante do algoritmo Minimax sem ter de analisar todos os estados
Cortes α-β Considere-se um nó n algures na árvore, tal que um jogador tem a hipótese de se mover para esse nó. Se o jogador tem uma hipótese melhor num nó qualquer acima do nó n, então esse n nunca vai ser atingido. Assim que soubermos alguma coisa sobre este n através dos seus descendentes, podemos cortá-lo (podá-lo).
Cortes α-β: exemplo
Cortes α-β: exemplo
Cortes α-β: exemplo
Cortes α-β: exemplo
Cortes α-β: exemplo Os nós sucessores do primeiro nó a ser expandido em cada nível de profundidade nunca podem ser cortados
Porquê o nome α-β? α é o valor da melhor escolha (i.e., valor mais elevado) encontrada até ao momento em qualquer ponto de procura ao longo do caminho para max Se v é pior do que α, max irá evitar escolher v ramo com v é cortado β define-se para min de forma análoga
Algoritmo α-β Função AlfaBeta (estado) devolve acção v ValorMax(estado, -, + ) devolve acção em sucessores(estado) com valor v Função ValorMax(estado,α,β) devolve valor de utilidade se TesteTerminal(estado) então devolve Utilidade(estado) v - para a,e em sucessores(estado) v MAX(v,ValorMin(s,α,β)) se v β então devolve v α MAX(α,v) devolve v
Algoritmo α-β Função ValorMin(estado,α,β) devolve valor de utilidade se TesteTerminal(estado) então devolve Utilidade(estado) v + para a,e em sucessores(estado) v MIN(v,ValorMax(s,α,β)) se v α então devolve v β MIN(β,v) devolve v
Propriedades de α-β Cortes não afectam resultado final (= MINIMAX) Eficiência dos cortes depende da ordenação dos sucessores Por exemplo, no caso anterior, se em vez do nó com valor 14 tivesse aparecido o nó com valor 2, não havia necessidade de gerar os outros nós Com uma ordenação perfeita" a complexidade temporal fica reduzida a O(r m/2 ) Ver applet em http://wolfey.110mb.com/gamevisual/ launch.php?agent=2
Exercício Qual a melhor ordenação de modo a optimizar os cortes α-β?
Estados repetidos Em jogos, ocorrem muitas vezes estados repetidos (devido a permutações) Pode valer a pena guardar estados numa hash table (chamada transposition table) na primeira vez que ocorrem Pode duplicar a profundidade alcançada no mesmo período de tempo! Se são avaliados milhões de nós por segundo não é viável guardar tantos nós numa tabela Assim, existem muitas estratégias para determinar quais os estados a guardar
Sumário Decisões óptimas em jogos Conceitos básicos Estratégias óptimas e o Minimax Estratégias óptimas com múltiplos jogadores Cortes α-β Decisões imperfeitas em tempo real Jogos que incluem o factor sorte Estado da arte em jogos
Decisões imperfeitas em tempo real Decisões têm que ser tomadas em tempo real não é possível analisar toda a árvore de procura Função de avaliação (Eval) devolve uma estimativa da utilidade do estado Idealmente a ordenação resultante da função de avaliação é igual à da função de utilidade Teste terminal é substituído por um teste de limite (cutoff) Devolve também verdadeiro para estados terminais
Funções de Avaliação O desempenho de um jogo depende da qualidade da função de avaliação! E como escolher uma boa função de avaliação? Esta deve ser capaz de ordenar os estados terminais do mesmo modo que a função de utilidade A função de avaliação deve estar fortemente correlacionada com as hipóteses reais de ganhar O seu cálculo não pode ser demorado
Funções de Avaliação Tipicamente são uma soma linear de características do jogo (f), associadas a diferentes pesos (w) Eval(s) = w 1 f 1 (s) + w 2 f 2 (s) + + w n f n (s) Ex: Xadrez rainha vale 9, bispo e cavaleiro 3, etc.. w 1 = 9 e f 1 (s) = nº de rainhas brancas w 2 =3 e f 2 (s) = nº de bispos...
Teste Limite Problema da aquiescência Função de avaliação deve aplicar-se apenas a estados cujo valor não possa ser radicalmente alterado num futuro próximo (por exemplo, se estamos só a contar peças no Xadrez, não estamos a ter em conta jogadas em que se façam capturas de peças favoráveis) Estados não aquiescentes devem ser expandidos até que sejam gerados estados sem este problema (por exemplo, passando a ter em conta movimentos de captura)
Teste Limite Problema do efeito de horizonte Procura com limite coloca eventuais problemas futuros para além do horizonte (ex: um movimento qualquer do adversário que vai ter consequências desastrosas, mas que não foi previsto dado o limite de procura imposto). Com as melhorias actuais, conseguem-se limites cada vez maiores Extensões singulares são outra solução: num caso de uma jogada ser muito boa, aumenta-se o limite de pesquisa para os seus sucessores.
Sumário Decisões óptimas em jogos Conceitos básicos Estratégias óptimas e o Minimax Estratégias óptimas com múltiplos jogadores Cortes α-β Decisões imperfeitas em tempo real Jogos que incluem o factor sorte Estado da arte em jogos
Elemento Sorte Árvore com nós sorte MIN e MAX para além dos nós A cada ramo da árvore está associada uma probabilidade Se for possível estabelecer limites para a função de avaliação então podem aplicar-se cortes Expectiminimax(n) = {Função-utilidade(n) se n é terminal max s sucessores(n) Expectiminimax(s) se n é nó MAX min s sucessores(n) Expectiminimax(s) se n é nó MIN Σ s sucessores(n) P(s) Expectiminimax(s) se n é nó SORTE
Elemento Sorte: exemplo 2.1 = 0.9*2 + 0.1*3 1.3 = 0.9*1 + 0.1*4
Elemento Sorte: exemplo Atenção: alteração de valores das folhas mantendo a mesma ordem relativa de valores resulta em decisões diferentes. Pelo que há que ter cuidados adicionais na escolha da função de avaliação.
Sumário Decisões óptimas em jogos Conceitos básicos Estratégias óptimas e o Minimax Estratégias óptimas com múltiplos jogadores Cortes α-β Decisões imperfeitas em tempo real Jogos que incluem o factor sorte Estado da arte em jogos
Estado da Arte Damas: Chinook derrotou o campeão do mundo (durante 40 anos) Marion Tinsley in 1994. Uso de uma base de dados pré-processada que define uma jogada perfeita para todas as posições envolvendo no máximo 8 peças, num total de 444 biliões de posições. Xadrez: Deep Blue derrotou campeão do mundo Garry Kasparov em 1997. O Deep Blue procura 200 milhões de nós por segundo, usa uma função de avaliação muito sofisticada. Othello: campeões humanos recusam-se a competir com computadores, que são muito bons. Go: campeões humanos recusam-se a competir com computadores, que são muito fracos. Neste jogo, r > 300. Logo, a maioria dos programas existentes usa padrões de conhecimento para sugerir jogadas hipotéticas.