Вы находитесь на странице: 1из 12

Árboles de juego: tic-tac-toe

v Estudio de ciertos juegos de estrategia


que pueden representarse mediante
árboles:
– cada nodo se corresponde con una configura-
ción posible del juego (por ejemplo, estado de un
tablero), y
– cada arco es una transición legal, o jugada, desde
una configuración posible a una de sus
sucesoras.

v Por simplificar, consideremos que:


– hay dos jugadores que juegan alternadamente,
– los dos jugadores están sometidos a las mismas
reglas (juego simétrico),
– el azar no interviene (juego determinista),
– una partida no puede durar indefinidamente, y
– ninguna configuración tiene un número infinito
de posibles sucesoras.

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 1


Árboles de juego: tic-tac-toe
– La configuración inicial del juego es la raíz del
árbol correspondiente.

– Las hojas del árbol corresponden a las configura-


ciones terminales del juego, en las que no existe
jugada siguiente

u bien porque uno de los jugadores ha ganado


u bien porque no ha ganado ninguno
(situación de empate)

– Los niveles impares del árbol están asociados con


las configuraciones en las que debe jugar uno de
los dos jugadores, mientras que los niveles pares
se asocian a las configuraciones en las que debe
jugar el otro.

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 2


Árboles de juego: tic-tac-toe
– A cada nodo del árbol se le asocia una etiqueta
llamada función de utilidad.

– Por ejemplo, una función de utilidad habitual


toma tres valores posibles:

u “configuración ganadora”,
u “configuración perdedora” y
u “configuración empatadora o nula”.

– Interpretación:

Situación (o posibilidades) que tiene el jugador


(tomamos partido por uno de ellos) en esa con-
figuración, suponiendo que ninguno de los dos
jugadores se equivocará y ambos realizarán en lo
sucesivo la mejor jugada posible.

– La función de utilidad puede asignarse de forma


sistemática.

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 3


Árboles de juego: tic-tac-toe

v Ejemplo: el juego del tic-tac-toe.


– Una especie de tres en raya con más de tres
fichas por jugador.
– Llamaremos a los dos jugadores “él” y “yo”.
– Supondremos, por ejemplo, que empieza “yo”.
– El árbol tiene la forma siguiente:

función de
utilidad “empatadora”
nivel 0 0
mueve “yo”

•••
• • •
• • •
• • •

función de
nivel 6
yo yo
utilidad “ganadora”
yo él 1
mueve “yo” él él función de
utilidad “perdedora”

yo yo yo yo yo yo yo
nivel 7 yo él 1 yo yo él -1 yo él 0
mueve “él”
él él él él él yo él

GANA “yo”

yo él yo yo yo yo él yo yo yo
nivel 8 yo yo él 0 yo yo él -1 yo él 0 él yo él 1
mueve “yo” él él él él él él yo él él yo él

GANA “él”

yo él yo yo él yo yo yo yo
nivel 9 yo yo él 0 yo yo él 0 él yo él 1
él yo él él yo él él yo él

EMPATE EMPATE GANA “yo”

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 4


Árboles de juego: tic-tac-toe

v Cálculo de la utilidad:
– Se da valor, en primer lugar, a las hojas:
u la utilidad en una hoja vale 1, 0 ó -1 si la
configuración del juego corresponde a una
victoria, empate o derrota, respectivamente,
del jugador por el que hemos tomado
partido (“yo”).
– Los valores de la función de utilidad se
propagan hacia arriba del árbol de acuerdo a la
siguiente regla (estrategia minimax):
u si un nodo corresponde a una configuración
del juego en la que juega “yo” (nivel 0 ó
par), se supone que ese jugador hará la
mejor jugada de entre las posibles y, por
tanto, el valor de la función de utilidad en la
configuración actual coincide con el valor de
esa función en la configuración de la mejor
jugada posible (para “yo”) que se puede
realizar desde la actual (nodo max);
u si un nodo corresponde a una configuración
del juego en la que juega “él” (nivel impar
del árbol), se supone que ese jugador hará la
mejor jugada de entre las posibles y, por
tanto, el valor de la función de utilidad en la
configuración actual coincide con el valor de
esa función en la configuración de la peor
jugada posible (para “yo”) (nodo min).

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 5


Árboles de juego: tic-tac-toe
– Si la raíz tuviera el valor 1, entonces “yo” tendría
una estrategia que le permitiría ganar siempre
(no es el caso del tic-tac-toe).

– En el tic-tac-toe la función de utilidad de la raíz


vale 0 (ningún jugador tiene una estrategia
ganadora):
si no se cometen errores, se puede garantizar
al menos un empate.

– Si la raíz tuviera un valor -1, el otro jugador


(“él”) tendría una estrategia ganadora.

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 6


Árboles de juego: tic-tac-toe
– La función de utilidad puede tener un rango más
amplio (por ejemplo, los números enteros).
– Ejemplo: Ajedrez
u se ha estimado que el árbol del juego tiene
más de 10100 nodos
u si un computador pudiera generar 1011
nodos por segundo, necesitaría más de 1080
años para construirlo
u es imposible dar valor a la función de
utilidad de cada nodo de abajo hacia arriba
(como en el caso del tic-tac-toe)
u para cada configuración actual del juego, se
toma dicha configuración como raíz del
árbol
u se construyen varios niveles del árbol
(el número depende de la velocidad del
computador o puede ser seleccionado por el
usuario)
u la mayor parte de las hojas del árbol cons-
truido son ambiguas (no indican triunfos,
derrotas ni empates)
u la función de utilidad de las posiciones del
tablero intenta estimar la probabilidad de
que el computador gane desde esa posición

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 7


Árboles de juego: tic-tac-toe

v Implementación (±) detallada:

– representación de una configuración del juego


(definición del tipo de dato configuración)

– enumeración de las configuraciones accesibles


desde una dada mediante la ejecución de una
jugada, y

– cálculo de la función de utilidad para una


configuración dada, sabiendo quién juega en ese
momento

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 8


Árboles de juego: tic-tac-toe

algoritmo
algoritmojuegaElComputador(e/s
juegaElComputador(e/sc:config)
c:config)
{c{ces
esuna
unaconfiguración
configuraciónno
nofinal;
final;elelalgoritmo
algoritmo
realiza
realiza la mejor jugada posible a partirde
la mejor jugada posible a partir dec,c,
lalacomunica
comunicaalalusuario
usuarioyyactualiza
actualizac}c}
variables
variablesmaxUtilidad,laUtilidad:entero;
maxUtilidad,laUtilidad:entero;
i:1..maxEntero;
i:1..maxEntero;
mejorJugada,unaJugada:config
mejorJugada,unaJugada:config
principio
principio
i:=1;
i:=1;
{cálculo
{cálculode
delala1ª
1ªconfig.
config.accesible
accesibledesde
desdec}c}
jugada(c,i,unaJugada);
jugada(c,i,unaJugada);
mejorJugada:=unaJugada;
mejorJugada:=unaJugada;
maxUtilidad:=utilidad(mejorJugada,falso);
maxUtilidad:=utilidad(mejorJugada,falso);
{"falso"
{"falso"indica
indicaque
quecuando
cuandolalaconfiguración
configuración
sea
sea "mejorJugada", no juegoyo}
"mejorJugada", no juego yo}
mq
mqnot notesLaUltimaJugada(c,i)
esLaUltimaJugada(c,i)hacer
hacer
i:=i+1;
i:=i+1;
jugada(c,i,unaJugada);
jugada(c,i,unaJugada);
laUtilidad:=utilidad(unaJugada,falso);
laUtilidad:=utilidad(unaJugada,falso);
sisilaUtilidad>maxUtilidad
laUtilidad>maxUtilidadentonces
entonces
mejorJugada:=unaJugada;
mejorJugada:=unaJugada;
maxUtilidad:=laUtilidad
maxUtilidad:=laUtilidad
fsi
fsi
fmq;
fmq;
comunicaAlUsuario(mejorJugada);
comunicaAlUsuario(mejorJugada);
c:=mejorJugada
c:=mejorJugada
fin
fin

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 9


Árboles de juego: tic-tac-toe

algoritmo
algoritmojugada(ent
jugada(entc:config;
c:config;
ent i:1..maxEntero;
ent i:1..maxEntero;
sal
salunaJugada:config)
unaJugada:config)
{Pre:
{Pre:ccadmite
admitealalmenos
menosi ijugadas
jugadasdiferentes.}
diferentes.}
{Post:
{Post:unaJugada
unaJugadaes eslalai-ésima
i-ésimajugada
jugadaposible
posible
desde c.}
desde c.}
...
...
algoritmo
algoritmoesLaÚltimaJug(ent
esLaÚltimaJug(entc:config;
c:config;
ent
enti:0..maxEntero)
i:0..maxEntero)
devuelve
devuelvebooleano
booleano
{Devuelve
{Devuelveverdad
verdadsisiyysólo
sólosisiccadmite
admite
exactamente
exactamentei ijugadas
jugadasdiferentes.}
diferentes.}
...
...
algoritmo
algoritmocomunicaAlUsuario(ent
comunicaAlUsuario(entc:config)
c:config)
{Muestra
{Muestraen
enpantalla
pantallalalaconfiguración
configuraciónc.}
c.}
...
...
algoritmo
algoritmoutilidadFinal(ent
utilidadFinal(entc:config)
c:config)
devuelve
devuelveentero
entero
{Pre:
{Pre:cces
esuna
unaconfiguración
configuraciónfinal
finaldel
deljuego.}
juego.}
{Post: devuelve la utilidad de c.}
{Post: devuelve la utilidad de c.}
...
...

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 10


Árboles de juego: tic-tac-toe

algoritmo
algoritmoutilidad(ent
utilidad(entc:config;
c:config;
ent
entjuegoYo:booleano)
juegoYo:booleano)
devuelve
devuelveentero
entero
{Calcula
{Calculalalautilidad
utilidadde
deccteniendo
teniendoen
encuenta
cuenta
quién juega.}
quién juega.}
variables
variableslaUtilidad:entero;
laUtilidad:entero;
i:1..maxEntero;
i:1..maxEntero;
unaJugada:config
unaJugada:config
principio
principio
sisiesLaUltimaJug(c,0)
esLaUltimaJug(c,0)
entonces
entonces
devuelve
devuelveutilidadFinal(c)
utilidadFinal(c)
sino
sino
i:=1;
i:=1;
jugada(c,i,unaJugada);
jugada(c,i,unaJugada);
laUtilidad:=
laUtilidad:=
utilidad(unaJugada,not
utilidad(unaJugada,notjuegoYo);
juegoYo);
...
...

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 11


Árboles de juego: tic-tac-toe

...
...
mq
mqnot notesLaUltimaJug(c,i)
esLaUltimaJug(c,i)hacer
hacer
i:=i+1;
i:=i+1;
jugada(c,i,unaJugada);
jugada(c,i,unaJugada);
sisijuegoYo
juegoYo
entonces
entonces
laUtilidad:=
laUtilidad:=
max(laUtilidad,
max(laUtilidad,
utilidad(unaJugada,falso))
utilidad(unaJugada,falso))
sino
sino
laUtilidad:=
laUtilidad:=
min(laUtilidad,
min(laUtilidad,
utilidad(unaJugada,verdad))
utilidad(unaJugada,verdad))
fsi
fsi
fmq;
fmq;
devuelve
devuelvelaUtilidad
laUtilidad
fsi
fsi
fin
fin

J. Campos - C.P.S. Arboles de juego: Tic-Tac-Toe Pág. 12

Вам также может понравиться