Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arboles de Juego
Arboles de Juego
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.
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.
yo
nivel 6 mueve yo
yo yo l l l
nivel 7 mueve l
yo yo yo yo l l l
yo yo yo yo l l l
-1
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
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).
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
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}
{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 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.}
{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); ... ...
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