27-03-2008 Inteligência Artificial Algoritmo MiniMax com cortes Alfa-Beta Ana Saraiva – 050509087 Ana Barbosa – 050509089 Marco Cunha – 050509048 Tiago Fernandes – 050509081 FEUP - MIEIC 3ºAno/2ºSemestre 1 Introdução O algoritmo Minimax é 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. 2 1 27-03-2008 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 1926. 3 Introdução Este algoritmo surgiu a partir da Zero-Sum Game Theory. O teorema Minimax: “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 2 27-03-2008 Mas o que é o ZeroZero-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 27-03-2008 7 8 4 27-03-2008 Minimax Qual o exemplo mais simples para ilustrar o minimax? 9 Minimax Xadrez? 10 5 27-03-2008 Minimax Damas? 11 Minimax Go? 12 6 27-03-2008 Minimax Jogo do Galo? 13 Minimax 14 7 27-03-2008 Procedimento básico Determinar SE profundidade limite atingida OU Nivel é Minimizador OU Nivel é Maximizador ENTÃO SE profundidade limite Calcular valor do estado corrente Retornar resultado SE Nivel Minimizador Aplicar minimax aos sucessores Retornar Mínimo SE Nivel Maximizador Aplicar minimax aos sucessores Retornar Máximo 15 Representação do Minimax findCompMove findHumanMove findHumanMove ... Tabuleiro preenchido 16 8 27-03-2008 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 27-03-2008 Árvore de pesquisa – Jogo do Galo 19 X O O O X X X X O 1 2 3 4 1 2 3 1 5 6 7 8 9 4 6 7 8 9 2 4 6 7 8 9 2 4 6 7 8 9 2 4 6 7 8 2 4 7 8 2 7 8 2 7 7 20 10 27-03-2008 Minimax – Jogo do Galo 46 nós considerando só uma alternativa de ramificação em cada momento. Uma pesquisa completa visitaria 97162 posições. Para um jogo tão simples quanto o jogo do galo! 21 Minimax E para jogos mais complexos como o Xadrez ou o Go? Estima-se que no Xadrez só para a primeira jogada, 100 10 posições seriam avaliadas. Para jogos mais complexos são necessárias optimizações. 22 11 27-03-2008 Optimizações ao Minimax 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… 23 Optimizações ao Minimax Optimização em profundidade Cortes Alfa-Beta 24 12 27-03-2008 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 25 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. 26 13 27-03-2008 Optimizações ao Minimax Será que o minimax em alguma altura realiza trabalho “inútil”? 27 Optimizações ao Minimax Max 3 Min 2 3 10 2 ? ? Será importante saber o valor destes dois nós? 28 14 27-03-2008 Optimizações ao Minimax Max 3 Min 2 3 10 2 ? ? O primeiro nível irá escolher o valor máximo dos sucessores. O segundo nível irá escolher o valor mínimo dos sucessores. 29 Optimizações ao Minimax Max 3 Min 2 3 10 2 ? ? O valor do ramo do meio nunca será maior que 2… Logo quaisquer que seja o valor dos filhos, ele nunca será escolhido… 30 15 27-03-2008 Cortes AlfaAlfa-Beta São estabelecidos dois valores: Alfa e Beta Alfa é o valor mais alto do jogador Max Beta é o valor mais baixo do jogador Min O processamento dos filhos de um nó termina quando a condição Alfa < Beta não se verificar. 31 Cortes AlfaAlfa-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 32 16 27-03-2008 Cortes AlfaAlfa-Beta - Exemplo Max A Min B C D Max E F G H I J K Min L 7 M 6 N 8 O 5 P 2 Q 3 R 0 S -2 T 6 U 2 V 5 X 9 W 8 Y 2 33 Cortes AlfaAlfa-Beta – trace Max First call (assume depth limit is 3): minimaxAB(A,max,0,-inf,+inf) successors B,C,D A Min B minimaxAB(B,min,1,-inf,+inf) successors E,F,G E minimaxAB(E,max,2,-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 C B D Max E F G … … Min L 7 M 6 … … 34 17 27-03-2008 Cortes AlfaAlfa-Beta – trace F minimaxAB(F,max,2,-inf,7) successors N,O minimaxAB(N,min,3,-inf,7) returns 8 alpha = 8 *** CUTOFF alpha>beta *** returns 8 G minimaxAB(G,max,2,-inf,7) successors P,Q minimaxAB(P,min,3,-inf,7) returns 2 alpha = 2 minimaxAB(Q,min,3,2,7) returns 3 alpha = 3 returns 3 beta = 3 returns 3 alpha = 3 Max A Min B C D Max E F G … … Min … N 8 O 5 P 2 Q 3 35 Cortes AlfaAlfa-Beta – trace Max C minimaxAB(C,min,1,3,+inf) successors H,I H minimaxAB(H,max,2,3,+inf) successors R,S minimaxAB(R,min,3,+inf) returns 0 minimaxAB(S,min,3,3,+inf) returns -2 returns 3 beta = 3 *** CUTOFF alpha>=beta *** A Min B C Max … H I returns 3 D ... D … Min R 0 S -2 36 18 27-03-2008 Cortes AlfaAlfa-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 AlfaAlfa-Beta Max 3 Min 2 3 10 2 4 7 Max … 3 Min 2 3 10 7 4 … 2 No entanto se a ordem for a oposta a diferença na eficiência é enorme… 38 19 27-03-2008 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 Minimax Temporal Espacial O(bm) O(bm) Cortes Alfa-Beta O(bm/2) O(bm) (*) (*) com uma ordenação perfeita 39 Resumo - Minimax • 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 20 27-03-2008 Resumo - Minimax • 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 AlfaAlfa-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. 42 21 27-03-2008 Conclusões Segundo o teorema do Minimax há sempre uma solução racional para um conflito bem definido entre dois indivíduos. 43 QUESTÕES ?? 44 22