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

Post on 17-Apr-2015

216 views 19 download

Transcript of 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

Introdução

• Definição do Problema

• Análise dos Algoritmos

• Implementação

• Resultados

• Discussão

Definição do Problema

• Jogo com adversário

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

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

Á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

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)

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

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

Exemplo da Implementação

Resultados

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

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

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

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

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  

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

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

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

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

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

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 

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

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.