Está en la página 1de 12

rboles de juego: tic-tac-toe

Estudio de ciertos juegos de estrategia que pueden representarse mediante rboles:


cada nodo se corresponde con una configuracin posible del juego (por ejemplo, estado de un tablero), y cada arco es una transicin legal, o jugada, desde una configuracin posible a una de sus sucesoras.

Por simplificar, consideremos que:


hay dos jugadores que juegan alternadamente, los dos jugadores estn sometidos a las mismas reglas (juego simtrico), el azar no interviene (juego determinista), una partida no puede durar indefinidamente, y ninguna configuracin tiene un nmero infinito de posibles sucesoras.

rboles de juego: tic-tac-toe


La configuracin inicial del juego es la raz del rbol correspondiente. Las hojas del rbol corresponden a las configuraciones terminales del juego, en las que no existe jugada siguiente
u u

bien porque uno de los jugadores ha ganado bien porque no ha ganado ninguno (situacin de empate)

Los niveles impares del rbol estn 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.

rboles de juego: tic-tac-toe


A cada nodo del rbol se le asocia una etiqueta llamada funcin de utilidad. Por ejemplo, una funcin de utilidad habitual toma tres valores posibles:
u u u

configuracin ganadora, configuracin perdedora y configuracin empatadora o nula.

Interpretacin: Situacin (o posibilidades) que tiene el jugador (tomamos partido por uno de ellos) en esa configuracin, suponiendo que ninguno de los dos jugadores se equivocar y ambos realizarn en lo sucesivo la mejor jugada posible. La funcin de utilidad puede asignarse de forma sistemtica.

rboles de juego: tic-tac-toe


v

Ejemplo: el juego del tic-tac-toe.


Una especie de tres en raya con ms 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:

funcin de utilidad empatadora


nivel 0 mueve yo

yo

nivel 6 mueve yo

yo yo l l l

funcin de utilidad ganadora funcin de utilidad perdedora


yo yo yo l

nivel 7 mueve l

yo yo yo yo l l l

yo yo yo yo l l l

-1

l yo l

GANA yo nivel 8 mueve yo


yo l yo yo yo l l l yo yo yo yo l l l l yo l yo yo l l yo l yo yo l yo l l yo l

-1

GANA l
yo l yo yo yo l l yo l yo l yo yo yo l l yo l yo yo yo l yo l l yo l

nivel 9

EMPATE

EMPATE

GANA yo

rboles de juego: tic-tac-toe


v

Clculo de la utilidad:
Se da valor, en primer lugar, a las hojas: u la utilidad en una hoja vale 1, 0 -1 si la configuracin del juego corresponde a una victoria, empate o derrota, respectivamente, del jugador por el que hemos tomado partido (yo). Los valores de la funcin de utilidad se propagan hacia arriba del rbol de acuerdo a la siguiente regla (estrategia minimax): u si un nodo corresponde a una configuracin 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 funcin de utilidad en la configuracin actual coincide con el valor de esa funcin en la configuracin de la mejor jugada posible (para yo) que se puede realizar desde la actual (nodo max); u si un nodo corresponde a una configuracin 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 funcin de utilidad en la configuracin actual coincide con el valor de esa funcin en la configuracin de la peor jugada posible (para yo) (nodo min).

rboles de juego: tic-tac-toe


Si la raz tuviera el valor 1, entonces yo tendra una estrategia que le permitira ganar siempre (no es el caso del tic-tac-toe). En el tic-tac-toe la funcin de utilidad de la raz vale 0 (ningn jugador tiene una estrategia ganadora): si no se cometen errores, se puede garantizar al menos un empate. Si la raz tuviera un valor -1, el otro jugador (l) tendra una estrategia ganadora.

rboles de juego: tic-tac-toe


La funcin de utilidad puede tener un rango ms amplio (por ejemplo, los nmeros enteros). Ejemplo: Ajedrez u se ha estimado que el rbol del juego tiene ms de 10100 nodos u si un computador pudiera generar 1011 nodos por segundo, necesitara ms de 1080 aos para construirlo u es imposible dar valor a la funcin de utilidad de cada nodo de abajo hacia arriba (como en el caso del tic-tac-toe) u para cada configuracin actual del juego, se toma dicha configuracin como raz del rbol u se construyen varios niveles del rbol (el nmero depende de la velocidad del computador o puede ser seleccionado por el usuario) u la mayor parte de las hojas del rbol construido son ambiguas (no indican triunfos, derrotas ni empates) u la funcin de utilidad de las posiciones del tablero intenta estimar la probabilidad de que el computador gane desde esa posicin

rboles de juego: tic-tac-toe


v

Implementacin () detallada:
representacin de una configuracin del juego (definicin del tipo de dato configuracin) enumeracin de las configuraciones accesibles desde una dada mediante la ejecucin de una jugada, y clculo de la funcin de utilidad para una configuracin dada, sabiendo quin juega en ese momento

rboles de juego: tic-tac-toe


algoritmo e/s algoritmojuegaElComputador( juegaElComputador( e/sc:config) c:config)
{c {ces esuna unaconfiguracin configuracinno nofinal; final;el elalgoritmo algoritmo realiza realizala lamejor mejorjugada jugadaposible posibleaapartir partirde dec, c, la comunica al usuario y actualiza c} la comunica al usuario y actualiza 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; jugada(c,i,unaJugada); jugada(c,i,unaJugada); mejorJugada:=unaJugada; mejorJugada:=unaJugada; maxUtilidad:=utilidad(mejorJugada,falso); maxUtilidad:=utilidad(mejorJugada,falso);
{clculo {clculode dela la1 1config. config.accesible accesibledesde desdec} c}

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); si silaUtilidad>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

{"falso" {"falso"indica indicaque quecuando cuandola laconfiguracin configuracin sea sea"mejorJugada", "mejorJugada",no nojuego juegoyo} yo}

rboles de juego: tic-tac-toe


algoritmo ent algoritmojugada( jugada( entc:config; c:config; ent enti:1..maxEntero; i:1..maxEntero; sal salunaJugada:config) unaJugada:config)

{Pre: {Pre:ccadmite admiteal almenos menosi ijugadas jugadasdiferentes.} diferentes.} {Post: unaJugada es la i-sima jugada {Post: unaJugada es la i-sima jugadaposible posible desde c.} desde c.}

... ... algoritmo ent algoritmoesLaltimaJug( esLaltimaJug( entc:config; c:config; ent enti:0..maxEntero) i:0..maxEntero) devuelve booleano devuelve booleano
{Devuelve {Devuelveverdad verdadsi siyyslo slosi siccadmite admite exactamente i jugadas diferentes.} exactamente i jugadas diferentes.}

... ... algoritmo ent algoritmocomunicaAlUsuario( comunicaAlUsuario( entc:config) c:config)


{Muestra {Muestraen enpantalla pantallala laconfiguracin configuracinc.} c.}

... ... algoritmo ent algoritmoutilidadFinal( utilidadFinal( entc:config) c:config) devuelve devuelveentero entero ... ...

{Pre: {Pre:cces esuna unaconfiguracin configuracinfinal finaldel deljuego.} juego.} {Post: {Post:devuelve devuelvela lautilidad utilidadde dec.} c.}

rboles de juego: tic-tac-toe


algoritmo ent algoritmoutilidad( utilidad( entc:config; c:config; ent entjuegoYo:booleano) juegoYo:booleano) devuelve devuelveentero entero

{Calcula {Calculala lautilidad utilidadde deccteniendo teniendoen encuenta cuenta quin juega.} quin juega.}

variables variableslaUtilidad:entero; laUtilidad:entero; i:1..maxEntero; i:1..maxEntero; unaJugada:config unaJugada:config principio principio si siesLaUltimaJug(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); ... ...

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); si sijuegoYo 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

También podría gustarte