Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf ·...

45
Inteligência Artificial Prof. Fabrício Olivetti de França Prof. Denis Fantinato 3º Quadrimestre de 2019 1

Transcript of Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf ·...

Page 1: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Inteligência Artificial

Prof. Fabrício Olivetti de França Prof. Denis Fantinato

3º Quadrimestre de 2019

1

Page 2: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Busca Competitiva

2

Page 3: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Busca Competitiva

Quando falamos sobre agentes mencionamos alguns cenários em queo ambiente era competitivo, ou seja, múltiplos agentes competindopela melhor solução.

Esse tipo de ambiente é denominado jogo, e uma solução para talcenário é a busca competitiva.

3

Page 4: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Jogos

A teoria dos jogos (um ramo da economia) estuda ambientesmultiagentes como um jogo sempre que a ação de um agente afetaoutro agente significativamente.

Tais cenários podem ser tanto cooperativos como competitivos.

4

Page 5: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Soma Zero

Na área de Inteligência Artificial, os tipos de jogos mais estudados sãodeterminísticos, de jogadas alternadas, com dois jogadores e de somazero ou informação perfeita.

5

Page 6: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Soma Zero

Um jogo de soma zero é aquele que o valor utilidade ao final do jogopara os dois jogadores é igual e de sinal oposto.

Valor utilidade é a pontuação final do agente.

6

Page 7: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Soma Zero

No jogo pedra-papel-tesoura com dois agentes temos os possíveisresultados finais:

Jogador 1 Jogador 2

-1 10 01 -1

7

Page 8: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Jogos em IA

O estudo de jogos em IA despertou interesse dos pesquisadores pois:

• São facilmente modelados como um problema de busca• Apresentam um conjunto de estados intratável para busca exata• Busca-se por um tempo de resposta rápido• Devemos tomar decisões até mesmo quando não temos uma

decisão ótima a ser feita

8

Page 9: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Jogos em IA

• Damas: em 1950 temos o primeiro computador jogando damas,somente em 1994 o computador foi campeão mundial. Em 2007já temos o agente perfeito.

9

Page 10: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Jogos em IA

• Xadrez: em 1997 o Deep Blue derrotou Kasparov analisando 200milhões de posições por segundo.

10

Page 11: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Jogos em IA

• Go: em 2017 o AlphaGo venceu o atual campeão mundialutilizando Árvore de Busca de Monte Carlo e Deep Learning(redes neurais artificiais).

11

Page 12: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Formalização de Jogos

12

Page 13: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Jogos

Podemos formalizar um jogo como:

• 𝑆0: o estado inicial do jogo (arranjo do tabuleiro de xadrez).• 𝐽𝑜𝑔𝑎𝑑𝑜𝑟(𝑠): indica qual jogador é o próximo a jogar no estado 𝑠.• 𝐴𝑐𝑜𝑒𝑠(𝑠): retorna as ações disponíveis no estado 𝑠 para o

𝐽𝑜𝑔𝑎𝑑𝑜𝑟(𝑠).• 𝑅𝑒𝑠𝑢𝑙𝑡(𝑠, 𝑎): a transição de estados ao aplicar a ação 𝑎 no

estado 𝑠.• 𝑇 𝑒𝑟𝑚𝑖𝑛𝑎𝑙(𝑠): retorna se o jogo atingiu um estado terminal.• 𝑈𝑡𝑖𝑙𝑖𝑑𝑎𝑑𝑒(𝑠, 𝑝): retorna o valor de utilidade para o jogador 𝑝 no

estado final 𝑠.

13

Page 14: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Exercício

Formalize o jogo Pedra-Papel-Tesoura na sua linguagem deprogramação favorita.

14

Page 15: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Exercício

Formalize o jogo da velha na sua linguagem de programação favorita.

15

Page 16: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Agente inteligente em Jogos

Um agente inteligente em jogos é aquele que define uma política 𝜋(𝑠)que dado um estado 𝑠 retorna a melhor ação 𝑎.

Você consegue imaginar uma função 𝜋(𝑠) para os jogos dos exercíciosanteriores?

16

Page 17: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Árvore de Jogos

17

Page 18: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Árvore de Jogos

Uma vez formalizado, podemos encontrar a solução de um jogoutilizando árvores de busca.

18

Page 19: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Árvore de Jogos

Em um jogo com um único agente, temos a árvore de buscatradicional:

A

C

F G

M N O

A

C

F G

L M N O

A

C

F G

L M N O

C

F G

L M N O

A

B C

E F G

K L M N O

A

C

E F G

J K L M N O

A

C

E F G

J K L M N O

A

B C

D E F G

I J K L M N O

A

B C

D E F G

H I J K L M N O

A

B C

D E F G

H I J K L M N O

A

B C

D E F G

H I J K L M N O

A

B C

D E F G

H I J K L M N O

Os nós terminais são complementados pela utilidade do estado.

19

Page 20: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Árvore de Jogos

Em jogos competitivos temos a árvore Minimax, em que cada ramo daárvore é intercalado entre um ramo MAX e um ramo MIN.

20

Page 21: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Árvore de Jogos

O ramo MAX representa o Jogador 1, ele tem o objetivo de executar asações que maximizam sua utilidade.

21

Page 22: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Árvore de Jogos

O ramo MIN representa o Jogador 2, ele tem o objetivo de executar asações que minimizam a utilidade do jogador 1.

22

Page 23: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Árvore de Jogos

A ideia geral é que em um jogo competitivo, dada uma ação ótima doJogador 1, o Jogador 2 irá executar uma ação que minimize a utilidadedele, pois sendo um jogo de soma zero, maximizará sua própriautilidade.

23

Page 24: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Árvore de Jogos

XX

XX

X

X

X

XX

X X

O

OX O

O

X OX O

X

. . . . . . . . . . . .

. . .

. . .

. . .

XX

–1 0 +1

XX

X XO

X XOX XO

O

O

X

X XO

OO

O O X X

MAX (X)

MIN (O)

MAX (X)

MIN (O)

TERMINAL

Utility

24

Page 25: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Busca Minimax

25

Page 26: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Busca Minimax

Assume um jogo determinístico!

O Jogador 1 maximiza a utilidade enquanto o jogador 2 minimiza autilidade.

26

Page 27: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Busca Minimax

Ideia: construir a árvore Minimax e a política 𝜋(𝑠) será seguir pelocaminho de 𝑠 que leva a maior utilidade assumindo que seuadversário também é ótimo.

E se o adversário não for ótimo?

27

Page 28: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Valor Minimax

O valor Minimax de um nó é a maior (menor) utilidade que pode serobtida partindo do estado 𝑠 se você for o jogador MAX (MIN).

28

Page 29: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Valor Minimax

def MiniMaxUtil(s, p):if Terminal(s): return Utilidade(s, p)if p == MAX: return maxVal(s)if p == MIN: return minVal(s)

29

Page 30: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Valor Minimax

def maxVal(s):v = -Inffor a in Acoes(s):

v = max(v, MiniMaxUtil(Result(s,a), MIN))return v

30

Page 31: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Valor Minimax

def minVal(s):v = Inffor a in Acoes(s):

v = min(v, MiniMaxUtil(Result(s,a), MAX))return v

31

Page 32: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Algoritmo Minimax

Com isso, o algoritmo Minimax é definido para o Jogador 1 como:

def Minimax(s):return argmax([(a, MiniMaxUtil(Result(s,a), MIN))

for a in Acoes(s)])

Note que 𝑠 deve ser um estado em que 𝐽𝑜𝑔𝑎𝑑𝑜𝑟(𝑠) = 𝑀𝐴𝑋.

32

Page 33: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Eficiência do Minimax

A complexidade de tempo e espaço da Busca Minimax é proporcionalao fator de ramificação 𝑏 e a profundidade da árvore de busca 𝑚:

• Tempo: 𝑂(𝑏𝑚)• Espaço: 𝑂(𝑏𝑚)

33

Page 34: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Eficiência do Minimax

O xadrez possui 𝑏 ≈ 35, 𝑚 ≈ 100.

Então o custo de tempo é ≈ 35100 ≈ 2.5 ⋅ 10154

34

Page 35: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Eficiência do Minimax

Solução: limitar a profundidade da busca ao invés de chegar até o nófolha.

Porém, precisamos de uma heurística para estimar o valor utilidade deum nó intermediário.

35

Page 36: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Exercício

Imagine a seguinte função de avaliação para um nó intermediário dojogo da velha:

𝑓(𝑛) = quantidade de possíveis jogadas vencedoras.

Aplique o algoritmo Minimax expandindo apenas os 2 nós com maioravaliação por essa heurística.

36

Page 37: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Poda Alfa-Beta

37

Page 38: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Poda Alfa-Beta

Uma outra alternativa é utilizar a informação obtida em uma busca emprofundidade para deixar de explorar caminhos que sabemos que nãoserão utilizados.

38

Page 39: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Poda Alfa-Beta

Considere a seguinte árvore de Jogo:(a) (b)

(c) (d)

(e) (f)

3 3 12

3 12 8 3 12 8 2

3 12 8 2 14 3 12 8 2 14 5 2

A

B

A

B

A

B C D

A

B C D

A

B

A

B C

[−∞, +∞] [−∞, +∞]

[3, +∞][3, +∞]

[3, 3][3, 14]

[−∞, 2]

[−∞, 2] [2, 2]

[3, 3]

[3, 3][3, 3]

[3, 3]

[−∞, 3] [−∞, 3]

[−∞, 2] [−∞, 14]

39

Page 40: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Poda Alfa-Beta

Note que após expandir o primeiro ramo, o jogador 1 sabe queconsegue pelo menos 3 pontos seguindo por ele.

Durante a expansão do segundo ramo, é encontrado uma solução de 2pontos, que o jogador 2 irá preferir, logo esse segundo ramo deixa deser interessante.

40

Page 41: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Poda Alfa-Beta

O algoritmo agora fica:

def MinimaxUtil(s, p, Alfa, beta):if Terminal(s): return Utilidade(s, p)if p == MAX: return maxVal(s, Alfa, beta)if p == MIN: return minVal(s, Alfa, beta)

41

Page 42: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Poda Alfa-Beta

def maxVal(s, Alfa, beta):v = -Inffor a in Acoes(s):

v = max(v, MiniMaxUtil(Result(s,a), MIN, Alfa, beta))if v >= beta: return vAlfa = max(Alfa, v)

return v

42

Page 43: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Poda Alfa-Beta

def minVal(s, Alfa, beta):v = Inffor a in Acoes(s):

v = min(v, MiniMaxUtil(Result(s,a), MAX, Alfa, beta))if v <= Alfa: return vbeta = min(beta, v)

return v

43

Page 44: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Poda Alfa-Beta

A poda não modifica o valor de Minimax do nó raiz!

Ordenando os nós de tal forma a reduzir a necessidade de exploraçãoaumenta o desempenho.

Mas ainda é complexo demais para ser a solução de jogos como oxadrez…

44

Page 45: Inteligência Artificialprofessor.ufabc.edu.br › ~denis.fantinato › teaching › Aula05.pdf · Poda Alfa-Beta def maxVal(s, Alfa, beta): v = -Inf for a in Acoes(s): v = max(v,

Exercício

Construa a árvore Minimax com poda Alfa-Beta para o jogo da velhapartindo da solução:

X OX XO

Sendo a próxima jogada do O.

45