El Juego TicTacToe (Gato) mediante Arboles de Decisiones

69,114 views 88 slides Jul 25, 2012
Slide 1
Slide 1 of 88
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88

About This Presentation

No description available for this slideshow.


Slide Content

Análisis y Simulación
de Decisiones
José Enrique Alvarez Estrada
Basado en un material elaborado por el Prof. Luigi Ceccaroni

Juegos
La teoría de juegos es un área de la matemática
aplicada que utiliza modelos para estudiar
interacciones en estructuras formalizadas de
incentivos (los llamados juegos) y llevar a cabo
procesos de decisión

Juegos
•Los juegos más simples que se estudian en
Toma de Decisiones son aquellos:
–De suma cero (lo que uno gana, el otro lo pierde y
viceversa)
–De dos jugadores (jugador MAX, jugador MIN)
–Por turnos
–De información perfecta (ajedrez, damas, tres en raya,
etc.)
–O de información imperfecta (poker, stratego, bridge...)
–Deterministas

Juegos
•Los juegos son interesantes porque son
demasiado difíciles de resolver.
•El ajedrez, por ejemplo, tiene un factor de
ramificación promedio de 35 y los juegos van a
menudo a 50 movimientos por cada jugador:
–grafo de búsqueda: aproximadamente 10
40
nodos
distintos
–árbol de búsqueda: 35
100
o 10
154
nodos
•Como en el mundo real, se requiere de tomar
alguna decisión (la jugada) cuando es infactible
calcular la decisión óptima.

5
Decisiones óptimas en juegos
•Un juego puede definirse formalmente
mediante:
–Un estado inicial
–Una función sucesor, que devuelve una lista
de pares (movimiento, estado)
–Una prueba terminal, que determina cuándo
termina el juego (por estructura o
propiedades o función utilidad)
–Una función utilidad
5

Búsqueda exhaustiva

Búsqueda exhaustiva
•Aproximación trivial: generar todo el árbol
de jugadas.
•Se etiquetan las jugadas terminales,
dependiendo de si gana MAX o MIN, con un
valor de utilidad de, por ejemplo, “+1” o “-1”.
•El objetivo es encontrar un conjunto de
movimientos accesible que dé como ganador
a MAX.
•Se propagan los valores de las jugadas
terminales de las hojas hasta la raíz.
•Incluso un juego simple como tic-tac-toe es
demasiado complejo para dibujar el árbol
completo

Búsqueda exhaustiva

Búsqueda exhaustiva

Búsqueda exhaustiva
•Aproximación heurística: definir una
función que nos indique lo cerca que
estamos de una jugada ganadora (o
perdedora).
•En esta función interviene información
del dominio.
•Esta función no representa ningún
coste, ni es una distancia en pasos.
•El algoritmo busca con profundidad
limitada.
•Cada nueva decisión por parte del
adversario implicará repetir parte de la
búsqueda.

Ejemplo: tic-tac-toe
e = P
MAX
- P
MIN
donde:
–e = función utilidad
–P
MAX
= número de filas, columnas y diagonales completas disponibles
para MAX
–P
MIN
= número de filas, columnas y diagonales completas disponibles
para MIN
•MAX juega con ✘ y desea maximizar e
•MIN juega con O y desea minimizar e
•Valores absolutos altos de e: buena posición para el que tiene que mover
•Controlar las simetrías
•Utilizar una profundidad de parada (en el ejemplo: 2)

tic-tac-toe: jugada #1

tic-tac-toe: jugada #1
juega MAX

tic-tac-toe: jugada #1
6-5=1
juega MIN

tic-tac-toe: jugada #1
6-5=15-5=0

tic-tac-toe: jugada #1
6-5=15-5=06-5=1

tic-tac-toe: jugada #1
6-5=15-5=06-5=15-5=0

tic-tac-toe: jugada #1
6-5=15-5=06-5=15-5=04-5=-1

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1
juega MAX

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-4=1
juega MIN

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1
MIN = 1
5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1
MIN = 1
5-4=1 6-4=2
juega MAX

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-1
MIN = 1
5-4=1 6-4=2
juega MIN

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=0
MIN = 1
5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=06-6=0
MIN = 1
5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=06-6=05-6=-1
MIN = 1
5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=06-6=05-6=-14-6=-2
MIN = 1
5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=06-6=05-6=-14-6=-2
MIN = 1 MIN = -2
5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=06-6=05-6=-14-6=-2
MIN = 1 MIN = -2
5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
MAX = 1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=06-6=05-6=-14-6=-2
MIN = 1 MIN = -2
5-4=1 6-4=2

tic-tac-toe: jugada #1
MIN = -1
MAX = 1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=06-6=05-6=-14-6=-2
MIN = 1 MIN = -2
5-4=1 6-4=2
Por tanto, la mejor
jugada de MAX es

tic-tac-toe: jugada #1
MIN = -1
MAX = 1
6-5=15-5=06-5=15-5=04-5=-1 5-6=-16-6=06-6=05-6=-14-6=-2
MIN = 1 MIN = -2
5-4=1 6-4=2
tras lo cual MIN
debería jugar

tic-tac-toe: jugada #2

tic-tac-toe: jugada #2
juega
MAX

tic-tac-toe: jugada #2
4-2=2
juega
MIN

tic-tac-toe: jugada #2
4-2=2
3-2=1

tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3

tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0

tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2

tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1

MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1

MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
juega
MAX

MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-3=1
juega
MIN

MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-3=13-3=0

MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-3=13-3=05-3=2

MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-3=13-3=05-3=23-3=0

MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-3=13-3=05-3=23-3=04-3=1

MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-3=13-3=05-3=23-3=04-3=14-3=1

MIN = 0
MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-3=13-3=05-3=23-3=04-3=14-3=1

MIN = 0
MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-3=13-3=05-3=23-3=04-3=14-3=1
juega
MAX

MIN = 0
MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
juega
MIN

MIN = 0
MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1

MIN = 0
MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=3
4-3=13-3=05-3=23-3=04-3=14-3=1

MIN = 0
MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=1
4-3=13-3=05-3=23-3=04-3=14-3=1

MIN = 0
MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1

MIN = 0
MIN = 0
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1

MIN = 0
MIN = 0
MIN = 1
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1

MIN = 0
MIN = 0
MIN = 1
MAX = 1
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
4-3=1

MIN = 0
MIN = 0
MIN = 1
MAX = 1
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
4-3=1
4-3=1

MIN = 0
MIN = 0
MIN = 1
MAX = 1
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
4-3=1
3-3=0
4-3=1

MIN = 0
MIN = 0
MIN = 1
MAX = 1
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
4-3=1
3-3=0
4-3=1
3-3=0

MIN = 0
MIN = 0
MIN = 1
MAX = 1
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
4-3=1
3-3=0
4-3=1
3-3=0
3-3=0

MIN = 0
MIN = 0
MIN = 1
MAX = 1
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
4-3=1
3-3=0
4-3=1
3-3=0
3-3=0
3-3=0

MIN = 0
MIN = 0
MIN = 1
MIN = 0
MAX = 1
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
4-3=1
3-3=0
4-3=1
3-3=0
3-3=0
3-3=0

MIN = 0
MIN = 0
MIN = 1
MIN = 0
MAX = 1
La mejor jugada de MAX es pues tras lo cual MIN podría jugar
0
X
X
0 0
X
X
tic-tac-toe: jugada #2
4-2=2
3-2=1
5-2=3
2-2=0
4-2=2
3-2=1
4-2=24-2=25-2=33-2=14-2=24-2=2
4-3=13-3=05-3=23-3=04-3=14-3=1
4-3=1
3-3=0
4-3=1
3-3=0
3-3=0
3-3=0

0 0
X
X
0 0
X X
X
X 0 0
X
X
0 0
X X
X
0 0
X
X X
0 0
X
X X
X 0 0
0 X
X
X 0 0
X
X 0
X 0 0
X
X 0
X 0 0
X 0
X
2-1=1
3-1=2
2-1=1
3-1=2
MIN = 1
MIN = -¥¥
MIN = -¥¥
MIN = -¥¥
MIN = -¥¥
MAX = 1
La mejor jugada de MAX es pues:

X 0 0
X
X
Ejemplo: tic-tac-toe
•Por convención:
–las jugadas ganadoras se evalúan a “+¥¥”
–las jugadas perdedoras se evalúan a “-¥¥”

Minimax
•Valor-Minimax(n): utilidad para MAX de
estar en el estado n asumiendo que
ambos jugadores jueguen óptimamente.

Minimax
•Valor-Minimax(n):
–Utilidad(n), si n es un estado terminal
–max
s Sucesores(n)

Valor-Minimax(s), si n es un estado MAX
–min
s Sucesores(n)

Valor-Minimax(s), si n es un estado MIN

Algoritmo minimax
•Calcula la decisión minimax del estado
actual.
•Usa un cálculo simple recurrente de los
valores minimax de cada estado sucesor.
•La recursión avanza hacia las hojas del
árbol.
•Los valores minimax retroceden por el
árbol cuando la recursión se va
deshaciendo.

Algoritmo minimax
•El algoritmo primero va hacia abajo a los
tres nodos izquierdos y utiliza la función
Utilidad para descubrir que sus valores
son 3, 12 y 8.
A
B

Algoritmo minimax
•Entonces el algoritmo toma el mínimo de
estos valores, 3, y lo devuelve como el
valor del nodo B.
A
B

Algoritmo minimax
•Realiza una exploración primero en
profundidad completa del árbol de juegos.
•Si la profundidad máxima del árbol es m, y hay
b movimientos legales en cada punto, entonces
la complejidad :
–en tiempo es O(b
m
);
–en espacio es
•O(bm) si se generan todos los sucesores a la vez;
•O(m) si se generan los sucesores uno por uno.
•Juegos reales: los costos de tiempo son
inaceptables, pero este algoritmo sirve como
base para el primer análisis matemático y para
algoritmos más prácticos.

Algoritmo minimax
función Decisión-Minimax(estado) devuelve una acción
variables de entrada: estado, estado actual del juego
v ← Max-Valor(estado)
devolver la acción de Sucesores(estado) con valor v
función Max-Valor(estado) devuelve un valor utilidad
si Test-Terminal(estado) entonces devolver Utilidad (estado)
v ← -∞
para un s en Sucesores(estado) hacer
v ← Max(v, Min-Valor(s))
devolver v
función Min-Valor(estado) devuelve un valor utilidad
si Test-Terminal(estado) entonces devolver Utilidad (estado)
v ← ∞
para un s en Sucesores(estado) hacer
v ← Min(v, Max-Valor(s))
devolver v

Poda alfa-beta
•Problema de la búsqueda minimax: el número
de estados que tiene que examinar es
exponencial con el número de movimientos.
•El exponente no se puede eliminar, pero se
puede dividir en la mitad.
•Es posible calcular la decisión minimax correcta
sin mirar todos los nodos en el árbol.
•La poda alfa-beta permite eliminar partes
grandes del árbol, sin influir en la decisión final.

Minimax con poda α-β
a
cb
e = min(-1, ?) = -1
-1 (gana MIN) ?
No tiene sentido seguir
buscando los otros
descendientes de c.
a
cb
g
f
d
e
0.03
-0.1 -0.05
e= max (-0.1, -0.05) = -0.05
En c: e= min(-0.05, v(g)) por lo tanto en a:
e = max(0.03, min(-0.05, v(g))) = 0.03
Se pueden pues podar los nodos bajo g; no aportan
nada.
?
El valor de la raíz y la decisión minimax son
independientes de los valores de las hojas podadas.

a
cb
id
0.03
he
gf
-0.1
max
min
max
min
max
e(e) = min(-0.1,v(g))
Como la rama b ya da un 0.03,
Cualquier cosa peor no sirve
=> No hay que explorar g
e(d) = max(e(e), h)
=> Sí hay que explorar h
...
La búsqueda minimax es
primero en profundidad: en
cualquier momento sólo se
consideran los nodos a lo
largo de un camino del
árbol.
Minimax con poda α-β

Poda alfa-beta
•Los dos parámetros alfa y beta describen los
límites sobre los valores que aparecen a lo largo
del camino:
– α = el valor de la mejor opción (el más alto) que se
ha encontrado hasta el momento en cualquier punto
del camino, para MAX
– β = el valor de la mejor opción (el más bajo) que se
ha encontrado hasta el momento en cualquier punto
del camino, para MIN
•La búsqueda alfa-beta actualiza el valor de α y β
según se va recorriendo el árbol y termina la
recursión cuando encuentra un nodo peor que el
actual valor α o β correspondiente.

Poda alfa-beta: ejemplo

Poda alfa-beta: ejemplo

Poda alfa-beta: ejemplo

Poda alfa-beta: ejemplo

Poda alfa-beta: ejemplo

MAX
Vi
{α, β}
Si Vi ≥ β poda β
Si Vi > α modificar α
Retornar α
{α, β}
Si Vi ≤ α poda α
Si Vi < β modificar β
Retornar β
MIN
Vi
Las cotas α y β se transmiten de padres a hijos de 1 en 1 y en el
orden de visita de los nodos.
Poda alfa-beta

Minimax con poda α-β
Funcion valorMax (g,α,β) retorna entero
Si estado_terminal(g) entonces
retorna(evaluacion(g))
si no
Para cada mov en movs_posibles(g)
α=max(α,valorMin(aplicar(mov,g),α,β))
si α≥β entonces retorna(β)
fPara
retorna(α)
fsi
fFuncion
Funcion valorMin (g,α,β) retorna entero
Si estado_terminal(g) entonces
retorna(evaluacion(g))
si no
Para cada mov en movs_posibles(g)
β=min(β,valorMax(aplicar(mov,g),α,β))
si α≥β entonces retorna(α)
fPara
retorna(β)
fsi
fFuncion
El recorrido se inicia llamando a la función valorMax con
α=-∞ y β=+∞.
En la función valorMax α es el valor que se actualiza.
En la función valorMin β es el valor que se actualiza.

A
CB
ED
3
{-∞, +∞}
A
CB
ED
3 5
3
{-∞, 3}
A
CB
D
3
HF
{3, +∞}
G
JI
LK
{3, +∞}
{3, +∞}
{3, +∞}
0
Se puede podar I
ya que es un nodo min y
el valor de
v(K) = 0 es < α = 3
{alpha = -∞, beta = +∞}
{-∞, 3}
{-∞, +∞}
{3, +∞}

A
CB
D
3
HF
{3, +∞}
G
J
{3, +∞}
{3, +∞}
5
5
A
CB
D
3
HF
{3, +∞}
G
J
{3, 5}
5
5
NM7
Podemos podar G pues es
un nodo max y el valor de
M (7) > β = 5
A
CB
D
3
HF
4
J
4
{3, 5}
5
5
4