Inteligência Artificial Algoritmo i com cortes Alfa-Beta Ana Saraiva 050509087 Ana Barbosa 050509089 Marco Cunha 050509048 Tiago Fernandes 050509081 FEUP - MIEIC 3ºAno/ºSemestre 1 Introdução O algoritmo imax é um método da Teoria da Decisão utilizado para minimizar a maior perda possível. Alternativamente pode ser pensado como uma forma de maximizar o minimo ganho possível. 1
Introdução Von Neumann era um brilhante matemático nascido em Budapeste em 1903. Devido à demonstração do teorema minimax, Von Neumann foi considerado o pai da teoria de jogos em 196. 3 Introdução Este algoritmo surgiu a partir da Zero-Sum Game Theory. O teorema imax: Para qualquer jogo para dois jogadores que respeite a teoria zero-sum, existe uma estratégia mista para cada jogador tal que o resultado esperado para os dois é o mesmo valor V quando os jogadores usam esta estratégia. V é o melhor valor que cada um pode esperar de uma jogada. Isto é, estas estratégias mistas são as estratégias óptimas para os dois jogadores. 4
Mas o que é o Zero-Sum? (Para além de um episódio dos X-Files e de uma série Anime) Na teoria dos jogos, Zero-Sum é uma situação onde o ganho de um jogador é exactamente igual à perda de outro. Jogos perfeitamente equilibrados como o Xadrez ou o Go. Apenas um jogador pode ganhar (ou existe um empate). 5 Porquê apenas em jogos lógicos? 6 3
7 8 4
imax Qual o exemplo mais simples para ilustrar o minimax? 9 imax Xadrez? 10 5
imax Damas? 11 imax Go? 1 6
imax Jogo do Galo? 13 imax 14 7
Procedimento básico Determinar SE profundidade limite atingida OU Nivel é imizador OU Nivel é imizador ENTÃO SE profundidade limite Calcular valor do estado corrente Retornar resultado SE Nivel imizador Aplicar minimax aos sucessores Retornar Mínimo SE Nivel imizador Aplicar minimax aos sucessores Retornar Máximo 15 Representação do imax findcompmove findhumanmove findhumanmove... Tabuleiro preenchido 16 8
int TicTacToe: :findcompmove(int & bestmove) { int i, responsevalue; int dc; int value; if (fullboard()) value = DRAW; else if (immediatecompwin(bestmove)) return COMP_WIN; else { value = COMP_LOSS; bestmove = 1; for (i = 1; i <= 9; i++) { if (isempty(i)) { place(i, COMP); responsevalue = findhumanmove(dc); unplace(i); } } } if (responsevalue > value) { value = responsevalue; bestmove = i; } } return value; 17 int TicTacToe: :findhumanmove(int & bestmove) { int i, responsevalue; int dc; int value; if (fullboard()) value = DRAW; else if (immediatecompwin(bestmove)) return COMP_WIN; else { value = COMP_LOSS; bestmove = 1; for (i = 1; i <= 9; i++) { if (isempty(i)) { place(i, COMP); responsevalue = findcompmove(dc); unplace(i); } } } if (responsevalue < value) { value = responsevalue; bestmove = i; } } return value; 18 9
Árvore de pesquisa Jogo do Galo 19 1 3 4 5 6 7 8 9 1 3 4 6 7 8 9 1 4 6 7 8 9 4 6 7 8 9 4 6 7 8 4 7 8 X O O 7 8 O X X 7 X X O 7 0 10
imax Jogo do Galo 46 nós considerando só uma alternativa de ramificação em cada momento. Uma pesquisa completa visitaria 9716 posições. Para um jogo tão simples quanto o jogo do galo! 1 imax E para jogos mais complexos como o Xadrez ou o Go? Estima-se que no Xadrez só para a primeira jogada, 10 100 posições seriam avaliadas. Para jogos mais complexos são necessárias optimizações. 11
Optimizações ao imax Optimizar o algoritmo parece uma boa solução mas é preciso ter cuidado Uma má optimização pode gerar uma má IA O que poderia tornar preferível usar jogadas aleatórias 3 Optimizações ao imax Optimização em profundidade Cortes Alfa-Beta 4 1
Optimização em Profundidade Em vez de analisar toda a árvore de pesquisa, estuda-se apenas até um determinado nível. Ideal para jogos longos com um factor de ramificação muito grande. Ex: Xadrez 5 Optimização em Profundidade Esta redução obviamente compromete a selecção da melhor jogada possível mas em muitos casos é tolerável tendo em conta o tempo de espera. 6 13
Optimizações ao imax Será que o minimax em alguma altura realiza trabalho inútil? 7 Optimizações ao imax 3 3 10?? Será importante saber o valor destes dois nós? 8 14
Optimizações ao imax 3 3 10?? O primeiro nível irá escolher o valor máximo dos sucessores. O segundo nível irá escolher o valor mínimo dos sucessores. 9 Optimizações ao imax 3 3 10?? O valor do ramo do meio nunca será maior que Logo quaisquer que seja o valor dos filhos, ele nunca será escolhido 30 15
Cortes Alfa-Beta São estabelecidos dois valores: Alfa e Beta Alfa é o valor mais alto do jogador Beta é o valor mais baixo do jogador O processamento dos filhos de um nó termina quando a condição Alfa < Beta não se verificar. 31 Cortes Alfa-Beta - Algoritmo int minimaxab(state, player, depth, alpha, beta) if (depth == limit or state is terminal) return the static evaluation of state if (player is min) until all successors, s, are examined or alpha >= beta val=minimaxab(s, max, depth+1, alpha, beta) if (val < beta) beta = val return beta if (player is max) until all successors, s, are examined or alpha >= beta val=minimaxab(s, min, depth+1, alpha, beta) if (val > alpha) alpha = val return alpha 3 16
Cortes Alfa-Beta - Exemplo A B C D E F G H I J K L 7 M 6 N 8 O 5 P Q 3 R 0 S - T 6 U V 5 W 8 X 9 Y 33 Cortes Alfa-Beta trace First call (assume depth limit is 3): minimaxab(a,max,0,-inf,+inf) successors B,C,D B minimaxab(b,min,1,-inf,+inf) successors E,F,G A B C D E minimaxab(e,max,,-inf,+inf) successors L,M minimaxab(l,min,3,-inf,+inf) returns 7 alpha = 7 minimaxab(m,min,3,7,+inf) returns 6 returns 7 beta = 7 L 7 E F G M 6 34 17
Cortes Alfa-Beta trace F minimaxab(f,max,,-inf,7) successors N,O minimaxab(n,min,3,-inf,7) returns 8 alpha = 8 *** CUTOFF alpha>beta *** returns 8 G minimaxab(g,max,,-inf,7) successors P,Q minimaxab(p,min,3,-inf,7) returns alpha = minimaxab(q,min,3,,7) returns 3 alpha = 3 returns 3 beta = 3 returns 3 alpha = 3 N 8 B C D E F G O 5 P Q 3 A 35 Cortes Alfa-Beta trace C minimaxab(c,min,1,3,+inf) successors H,I A H minimaxab(h,max,,3,+inf) successors R,S minimaxab(r,min,3,+inf) returns 0 minimaxab(s,min,3,3,+inf) returns - returns 3 beta = 3 *** CUTOFF alpha>=beta *** B C D H I returns 3 D... R 0 S - 36 18
Cortes Alfa-Beta Apesar de tudo o que foi referido, os cortes Alfa-Beta podem não trazer melhorias. Na prática, se as opções surgirem de uma determinada ordem (crescente no maximizador e decrescente no minimizador), os cortes Alfa-Beta não trazem melhorias. 37 Cortes Alfa-Beta 3 3 10 4 7 3 3 10 7 4 No entanto se a ordem for a oposta a diferença na eficiência é enorme 38 19
Ordem de complexidade Se a profundidade máxima da árvore for m e em cada ponto houver b lances possíveis (factor de ramificação): Complexidade imax Cortes Alfa-Beta Temporal O(b m ) O(b m/ ) (*) Espacial O(bm) O(bm) (*) com uma ordenação perfeita 39 Resumo - imax Baseia-se na suposição de que o adversário escolherá sempre o movimento ideal, e nunca incorrerá ao erro; Gera toda a árvore de busca, dentro do limite permitido; O Algoritmo é completo apenas no caso de a árvore for finita (ex.: Jogo do Galo); 40 0
Resumo - imax O tempo gasto para determinar a decisão óptima é totalmente impraticável para qualquer jogo minimamente complexo, pois gera caminhos cuja possibilidade de serem seguidos é praticamente nula. Serve de base a outros métodos mais realistas, bem como de suporte à análise matemática de jogos. 41 Resumo - Corte Alfa-Beta Eficiente para determinar quais os ramos que não devem ser explorados; Uma boa ordenação dos nós aumenta ainda mais a sua eficiência, no entanto se isso não acontecer este algoritmo pode não trazer qualquer vantagem; Não afecta o resultado final. 4 1
Conclusões Segundo o teorema do imax há sempre uma solução racional para um conflito bem definido entre dois indivíduos. 43 QUESTÕES?? 44