Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

22
Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato

Transcript of Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Page 1: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Implementação dos Algoritmos Minimax e AlfaBeta aplicados

ao Jogo da Velha

Autores: Rafael

Renato

Page 2: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Introdução

• Definição do Problema

• Análise dos Algoritmos

• Implementação

• Resultados

• Discussão

Page 3: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Definição do Problema

• Jogo com adversário

• Definir– Estado Inicial– Grupo de Operadores– Teste de terminação– Função Utilidade

Page 4: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

O Jogo• Estado Inicial

– posição atual e uma indicação do próximo estado • 06 casas vazias a serem preenchidas intercaladamente

• Grupo de Operadores– movimentos aceitos pelas regras, que o jogador pode fazer

• Marcar um ´X´ (jogador A) ou um ´0´ (jogador B) em qualquer casa vazia

• Teste de Terminação – define quando o jogo terminou e se houve um ganhador

• Termina quando uma linha, coluna ou diagonal está totalmente preenchida por ´X` ou ´0´

• Função Utilidade – analisa quantitativamente uma jogada através de pesos

• +1 , 0, -1 respectivamente, ganhar, empatar e perder

Page 5: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Árvore de Decisão

X X X

X X X

X X X

Nível 1

Nível 2

000

000

Nível 10

Nível Nó (n0 de Jogadas) Resultado1 1 12 9 93 9x8 724 9x8x7 5045 9x8x7x6 3.0246 9x8x7x6x5 15.1207 9x8x7x6x5x4 60.4808 9x8x7x6x5x4x3 181.4409 9x8x7x6x5x4x3x2 362.880

10 9x8x7x6x5x4x3x2x1 362.880     

    986.410

Page 6: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

MINIMAX

2 7 1 8

MAX

MIN

MAX

1

2 3

4 5 6 7

2 7 1 8

MAX

MIN

MAX

1

2 3

4 5 6 7

2 7 1 8

MAX

MIN

MAX

1

2 3

4 5 6 7

2 1

2

2 1

C.T. = O(b**d)onde b é o Fator de Ramificação e d é a profundidade da árvore

C.E. = O(b*d)

Page 7: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

AlfaBeta

2 7 1 8

A

B

A

1

2 3

4 5 6 7

2 7 1 8

A

B

A

1

2 3

4 5 67

<=12

2

2

Page 8: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Implementação• seleciona_algoritmo – permite que se escolha qual o algoritmo a ser

executado• jogada_humana – a inserção dos valores escolhidos pelo humano no

programa• jogada_maquina – o valor que a máquina escolheu• inicializa – a inicialização do algoritmo• teste_terminacao – a verificação se a última jogada levou a um ganhador ou a

um empate• imprime – impressão de cada uma das matrizes para orientação gráfica do

humano• imprime_vencedor – impressão das mensagens de quem foi o ganhador ou se

deu empate (velha)• gerar_filhos – a cada jogada é necessário calcular os filhos a paritr daquele nó

para fazer a execução dos algoritmos MINIMAX ou ALFABETA• avaliacao – verifica se nas folhas o resultado foi 1(´0´ – a máquina ganhou)

‑1(´X´ – o humano ganhou) ou 0 (empate – deu velha)• apagar_filhos – a cada jogada temos que apagar os filhos e recomeçar• copia - Está função copia a matriz de jogo de um nó para outro com o intuito de

propagar uma jogada

Page 9: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Exemplo da Implementação

Page 10: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Resultados

• Foram realizados 09 testes com o algoritmo MINIMAX e 02 com o algoritmo AlfaBeta

Page 11: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 1 MMTeste 1  Jogadas 1a – Humano 0/02a – Máquina 1/13a – Humano 2/24a – Máquina 0/15a – Humano 2/16a – Máquina 2/07a – Humano 0/28a – Máquina 1/29a – Humano 1/010a – Final - Velha 

X X

0

X

0

X

X 0

0

X

X 0

0

X X

X 0

0

X X

X 0 X

0

0 X X

X 0 X

0 0

0 X X

X 0 X

X 0 0

0 X X

1 2 3 4

5 6 7 8

9

59.704 1.052

46 4

Page 12: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 2 MM

0    

     

     

0    

  X  

     

0 0  

  X  

     

0 0 X

  X  

     

0 0 X

  X  

0    

0 0 X

X X  

0    

0 0 X

X X 0

0    

0 0 X

X X 0

0 X  

0 0 X

X X 0

0 X 0

1 2 3 4

5 6 7 8

9

549.945 7.331

197 13

1

 Jogadas 1a – Máquina 0/02a – Humano 1/13a – Máquina 0/14a – Humano 0/25a – Máquina 2/06a – Humano 1/07a – Máquina 1/28a – Humano 2/19a – Máquina 2/210a – Final - Velha 

Teste 2

Page 13: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 3 MMTeste 3  Jogadas 1a – Humano 1/12a – Máquina 0/03a – Humano 1/24a – Máquina 1/05a – Humano 2/06a – Máquina 0/27a – Humano 0/18a – Máquina 2/19a – Humano 2/210a – Final - Velha 

     

  X  

     

0    

  X  

     

0    

  X X

     

0    

0 X X

     

0    

0 X X

X    

0   0

0 X X

X    

0 X 0

0 X X

X    

0 X 0

0 X X

X 0  

0 X 0

0 X X

X 0 X

1 2 3 4

5 6 7 8

9

 

55.504 830

48 4

Page 14: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 4 MM

0    

     

     

0    

     

    X

0   0

     

    X

0 X 0

     

    X

0 X 0

     

0   X

0 X 0

X    

0   X

0 0 0

X 0  

0   X

1 2 3 4

5 6 7

549.945 7979

257 11

Teste 4 Jogadas 1a – Máquina 0/02a – Humano 2/23a – Máquina 0/2

4a – Humano 0/15a – Máquina 2/06a – Humano 1/0 E 1/17a – Máquina 1/18a – Final –Máquina Ganhou  

Page 15: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 5 MMTeste 5  Jogadas 1a – Humano 0/12a – Máquina 0/03a – Humano 2/24a – Máquina 1/15a – Humano 1/06a – Máquina 0/27a – Humano 2/08a – Máquina 2/19a – Humano 1/210a – Final - Velha  

  X  

     

     

0 X  

     

     

0 X  

     

    X

0 X  

  0  

    X

0 X  

X 0  

    X

0 X 0

X 0  

    X

0 X 0

X 0  

X   X

0 X 0

X 0  

X 0 X

0 X 0

X 0 X

X 0 X

1 2 3 4

5 6 7 8

9

 

63.904 1.456

60 4

Page 16: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 6 MM

0 0

X

0 0

X

0 0

X

X

0 0 0

X

X

1 2 3 4

5

549.945 7.979

173

Teste 6 Jogadas 1a – Máquina 0/02a – Humano 2/23a – Máquina 0/24a – Humano 1/15a – Máquina 0/16a – Final –Máquina Ganhou

8

Page 17: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 7 MMTeste 7  Jogadas 1a – Humano 1/02a – Máquina 0/03a – Humano 2/24a – Máquina 0/25a – Humano 0/16a – Máquina 1/17a – Humano 2/08a – Máquina 2/19a – Humano 1/210a – Final - Velha 

X

0

X

0

X

X

0 0

X

X

0 X 0

X

X

0 X 0

X 0

X

0 X 0

X 0

X X

0 X 0

X 0

X 0 X

0 X 0

X 0 X

X 0 X

1 2 3 4

5 6 7 8

9

63.904 1.456

60 4

Page 18: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 8 MM

0 0

X

0 0

X

0 X 0

X

0 X 0

0 X

0 X 0

X

0 X

0 0 0

0 X

0 X

1 2 3 4

5 6 7

549.945 7.979

257 10

Teste 8 Jogadas 1a – Máquina 0/02a – Humano 2/23a – Máquina 0/24a – Humano 0/15a – Máquina 2/06a – Humano 1/0 E 1/17a – Máquina 1/08a – Final –Máquina Ganhou

8

Page 19: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 9 MM Jogadas 1a – Humano 2/22a – Máquina 1/13a – Humano 0/04a – Máquina 0/15a – Humano 2/16a – Máquina 2/07a – Humano 0/28a – Máquina 1/29a – Humano 1/010a – Final - Velha

     

     

    X

     

  0  

    X

X    

  0  

    X

X 0  

  0  

    X

X 0  

  0  

  X X

X 0  

  0  

  X X

X 0 X

  0  

0 X X

X 0 X

  0 0

0 X X

X 0 X

X 0 0

0 X X

1 2 3 4

5 6 7 8

9

Teste 9 59.704 1.052

46 4

Page 20: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 1 AB

X X

0

X

0

X

X 0

0

X

X 0

0

X X

X 0

0

X X

X 0 X

0

0 X X

X 0 X

0 0

0 X X

X 0 X

X 0 0

0 X X

1 2 3 4

5 6 7 8

9

3.463 432

44 4

Teste 1  Jogadas 1a – Humano 0/02a – Máquina 1/13a – Humano 2/24a – Máquina 0/15a – Humano 2/16a – Máquina 2/07a – Humano 0/28a – Máquina 1/29a – Humano 1/010a – Final - Velha 

Page 21: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Teste 2 AB

0    

     

     

0    

  X  

     

0 0  

  X  

     

0 0 X

  X  

     

0 0 X

  X  

0    

0 0 X

X X  

0    

0 0 X

X X 0

0    

0 0 X

X X 0

0 X  

0 0 X

X X 0

0 X 0

1 2 3 4

5 6 7 8

9

25.226 1.193

93 11

1

 Teste 2Jogadas 1a – Máquina 0/02a – Humano 1/13a – Máquina 0/14a – Humano 0/25a – Máquina 2/06a – Humano 1/07a – Máquina 1/28a – Humano 2/19a – Máquina 2/210a – Final - Velha

Page 22: Implementação dos Algoritmos Minimax e AlfaBeta aplicados ao Jogo da Velha Autores: Rafael Renato.

Discussão• Baseados no resultado dos testes realizados podemos ver que o algoritmo

ALFABETA tem expansões muito menores do que o algoritmo MINIMAX (ALFABETA = 25.256, quando a máquina inicia, contra MINIMAX = 549.945 o que nos dá uma ordem de grandeza 20 vezes maior, e ALFABETA = 3.463, quando o humano inicia, contra MINIMAX = 59.704 o que nos dá uma ordem de grandeza 17 vezes maior.)

 • Um valor que resultou diferente da análise teórica foi, quando a máquina inicia

(MINIMAX = 549.945), pois este valor deveria ter dado 986.410. A explicação para esta discrepância vem do fato do algoritmo MINIMAX estar cortando a continuação da geração dos filhos quando algum jogador ganha, não chegando ao nível 10, mas parando no nível 7 ou 5 como visto nos resultados “teste 6” e “teste 8”.

 • Outra análise que podemos fazer é que o jogo da velha tem simetria em torno

de algumas posições, portanto não haveria necessidade de se expandir todos os ramos pois estes são simétricos e, utilizando técnicas de álgebra linear tais como rotação e translação, poderíamos chegar ao resultado sem ocupar tanta memória. Este fato pode ser visto comparando os testes 7 e 5 (MINIMAX) e 1 e 10 (MINIMAX), neles podemos ver que no teste 7 a jogada 4/5/6 é invertida do teste 5, jogada 4/5/6, e o resto das posições é igual. O mesmo ocorre para o teste 1 e 10 nas jogadas 1/2/3.