Академический Документы
Профессиональный Документы
Культура Документы
u “configuración ganadora”,
u “configuración perdedora” y
u “configuración empatadora o nula”.
– Interpretación:
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
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).
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
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.}
...
...
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);
...
...
...
...
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