Inteligencia Artificial en el Juego de la Brisca

Transcription

Inteligencia Artificial en el Juego de la Brisca
Inteligencia Artificial en el Juego de la Brisca
Gerardo Pinar Loriente
Ingeniería de Telecomunicación
5º curso
Universidad Carlos III de Madrid
Av. De la Universidad, 30
28911 Leganés (Madrid)
[email protected]
RESUMEN
Este documento recoge la implementación algorítmica en tres
pasos de un jugador inteligente para el juego de cartas conocido
como “la brisca”. Estos tres pasos corresponden a tres niveles de
inteligencia: nivel básico, nivel intermedio y nivel avanzado. Para
el nivel básico se emplean algoritmos muy simples para que el
jugador no sea demasiado “tonto”, en el segundo nivel se
introduce una heurística que mejora el comportamiento y en el
tercer nivel se combina la heurística del nivel anterior junto con el
algoritmo minimax para la fase final.
Términos Generales
En total, en la baraja, hay 120 puntos; por tanto, entre 2
jugadores, o entre 2 equipos, el objetivo del juego es alcanzar
más de 60 puntos.
2.1 Objetivo
El objetivo del juego consiste en sumar más puntos que el
adversario, ya se ha explicado el valor de cada carta, por tanto
ahora vamos a abordar las fases del juego.
2.2 Fases del juego
-
Se barajan las cartas.
-
Se reparten las cartas.
Keywords
-
Se echa el pinte.
Árbol minimax, entrenamiento, heurística
-
Juego: 1ª ronda.
-
Robo: 2ª ronda.
-
Juego 2ª ronda.
Algoritmos, diseño, medidas, experimentación, factores humanos.
1. INTRODUCCIÓN
En primer lugar vamos a describir el mecanismo del juego y su
reglamento, más adelante veremos cómo podemos diseñar un
jugador artificial que sea capaz de jugar a la brisca de manera
inteligente.
2. EL JUEGO DE LA BRISCA
En el juego de la brisca se utiliza una baraja española, 40 cartas y
4 palos: oros, copas, espadas y bastos. Tradicionalmente se juega
entre 2, pero pueden jugar 2, 3*, 4, 5,…1 incluso se suele jugar
por parejas, habiendo señas reglamentadas para la comunicación
entre compañeros. Los valores de las cartas son los que siguen:
As: 11 puntos.
Tres: 10 puntos.
Rey: 4 puntos.
Caballo: 3 puntos.
…
En la fase inicial, después de barajar, se reparten 3 cartas a cada
jugador y se echa la carta del pinte. El pinte señala el palo que
tiene prioridad respecto a los demás. El jugador a la derecha del
que repartió se denomina “mano” y es el que juega en primer
lugar.
Tras la ronda inicial, en el resto de rondas, el jugador que ganó en
la ronda anterior robará una carta, tras él lo harán el resto de
jugadores empezando por el de su derecha. Se seguirá ese mismo
orden para jugar en esa ronda.
Se suceden las rondas hasta que ya no quedan cartas para robar,
en ese punto la mecánica del juego se mantiene idéntica, con la
salvedad de que se suprime la fase de robo y se juegan las cartas
que se tienen en la mano, esto nos da 3 rondas más para la fase
final, una por cada carta.
Sota: 2 puntos
Resto: 0 puntos
2.3 Reglas que determinan la carta ganadora
Las reglas que deciden qué carta gana en cada ronda son sencillas:
1
La baraja cuadra para un número de jugadores n tal que la
división (40-(n*3))/n es exacta. Por ejemplo, para 2 jugadores:
(40-(2*3))/2 = 34/2 = 17 con resto cero, hay 17 rondas hasta que
se repartan todas las cartas. Si la división no es exacta, hay que
retirar tantas cartas como indique el juego, se suelen quitar los dos
que son los que menos valen.
Antes hemos mencionado los valores de las cartas, sus prioridades
siguen el mismo patrón, de mayor a menor: as, tres, rey, caballo,
sota, siete, seis, cinco, cuatro, dos. Ya podemos definir la primera
regla:
-
Gana la carta de mayor prioridad.
Tan sólo falta por aclarar un par de matices:
-
Una carta del pinte tendrá mayor prioridad que cualquier otra
que no lo sea.
3.1.2 Si el jugador inteligente juega en segundo
lugar
-
En caso de que ninguna de las 2 cartas sea del pinte, tendrá
mayor prioridad el palo de la carta que se jugó primero.
“Jugará la carta que le proporcione mayor ganancia”.
Dicho en otras palabras:
Una carta gana a otra si la primera:
-
Es del pinte y la otra no.
-
Tiene mayor prioridad que la otra siendo ambas del
pinte.
-
Tiene mayor prioridad que la otra sin ser ninguna del
pinte.
3. MODELANDO UN JUGADOR
INTELIGENTE
El modelo implementado responde a un esquema de 2 jugadores:
un jugador humano contra la máquina. Procedemos a describir las
3 aproximaciones para conseguir un jugador artificial inteligente.
3.1.3 Análisis y crítica
Parece razonable esta estrategia de maximizar el beneficio; sin
embargo, ese beneficio es sólo a largo plazo, y esta estrategia
pasar factura a largo plazo, pues se pueden desperdiciar cartas
“poderosas” para conseguir un botín que podía conseguirse con
una carta más baja.
En cuanto a la estrategia de ofensiva (cuando el jugador
inteligente juega primero), no es demasiado certera, pues
supongamos que tenemos cartas valiosas (briscas) que no son del
pinte. Según el comportamiento que hemos diseñado, en este caso
esa brisca se echaría pródigamente siendo presa fácil para el otro
jugador en caso de que tenga al menos una carta del pinte o
incluso una brisca del mismo palo que la nuestra pero de mayor
valor (nosotros echamos un tres y el un as), lo cual no es
demasiado improbable.
Como vemos, tenemos 2 claras pegas en este primer acercamiento,
demos ahora un paso más en la búsqueda del jugador inteligente.
3.2 Segunda aproximación
3.2.1 Si el jugador inteligente juega en primer lugar
En este caso, utilizamos la misma heurística que en el caso
anterior pero restringiendo la decisión de jugar cartas que no sean
del pinte al caso de que esa carta no sea más alta que un rey. Así
paliamos las consecuencias discutidas en el apartado anterior.
“Si tiene cartas que no sean del pinte, tomará –de entre ellas- la de
menor valor, y si no es más alta que un rey la jugará. En otro caso,
jugará la carta del pinte de menor valor”.
3.2.2 Si el jugador inteligente juega en segundo
lugar
En este caso se ha ideado un sistema para ponderar las cartas que
ha satisfecho bastante bien las expectativas.
3.1 Primera aproximación
En un primer enfoque de inteligencia artificial para el juego de la
brisca definimos un algoritmo basado en los siguientes puntos:
3.1.1 Si el jugador inteligente juega en primer lugar
“Si tiene cartas que no sean del pinte, jugará –de entre ellas- la de
menor valor. Si todas sus cartas son del pinte, jugará la de menos
valor”.
Esta estrategia viene de que la manera más fácil de hacer puntos
en la brisca es jugar un papel pasivo, esto es, si dejo que el otro
juegue en primer lugar eso me da ventaja, pues conozco su jugada
de antemano. Conviene además que me guarde las de mayor valor
(briscas) para poder “empelar” las presas que me proporcione el
otro jugador.
La idea viene, una vez más, de tratar de compensar las carencias
del modelo anterior. Pongamos por ejemplo el caso de que pintan
oros, el jugador juega una carta y yo contesto echando el as de
oros porque es el que me reporta mayor beneficio. Por un lado yo
quiero que mi jugador se lleve los tantos de esa baza pero por otro
lado quiero que le “duela” desprenderse del as de oros. Quiero
maximizar la ganancia y minimizar esa pérdida, naturalmente lo
que buscaré será un compromiso entre las dos. Para controlar ese
aspecto, hilvanamos el procedimiento siguiente:
Se comparan las cartas en base al “valor efectivo” derivado de
jugar cada una de ellas, este valor efectivo tiene la siguiente
forma:
Valor efectivo (i) = Ganancia de jugar la carta (i) x wganancia
– Coste de jugar la carta (i)
x wcoste
La ganancia será el valor de la carta jugada por el otro más el
valor de la carta de mi mano que estoy evaluando, el signo será
positivo, si con esa jugada resulto ganador y negativo si resulto
perdedor.
Ganancia
Coste
Mi carta gana:
Mi carta es del pinte
y tiene prioridad 10
G = 11 (as)
El coste representa la pérdida de “poder” derivada de jugar esa
carta. Lo hemos modelado como la prioridad, que se multiplica
por 10 en caso de que la carta sea del pinte.
+ 2 (sota)
C = 10 x 10 = 100
= +13
Prestemos atención por un momento a la lógica de la ecuación:
-
Cuanto mayor sea la ganancia más interés tendré en
jugar la carta. Ganancia sumando.
-
Cuanto mayor sea el coste menos interés tendré en jugar
la carta. Coste restando
-
Decidiré jugar la carta con mayor valor efectivo
Ilustremos esto con un ejemplo:
VE = 13 · wganancia – 100 · wcoste
En este punto, hemos obtenido los tres valores efectivos para cada
una de las cartas. Para esta situación, yo –como diseñadordetermino a mi criterio cuál sería la decisión inteligente para este
caso. Los coeficientes wganancia y wcoste deberán ser tales que se
satisfagan las dos inecuaciones subyacentes de la decisión tomada
como “buena”.
En este punto, si yo tomo un número suficiente de casos puedo
“entrenar” el sistema de forma que obtenga unos valores para los
coeficientes tales que se satisfagan todas las situaciones
entrenadas.
Al final de este proceso encontré unos valores razonablemente
apropiados para los dos coeficientes:
wganancia = 9.5;
wcoste = 2
3.3 Tercera aproximación
Pintan oros, el jugador humano ha jugado la sota de oros, evalúo
qué carta jugar:
Primero calculo las ganancias:
Ganancia
Coste
Mi carta gana:
Mi carta es del pinte
y tiene prioridad 9
G = 10 (3 oros)
+ 2 (sota de bastos)
VE = 12 · wganancia – 90 · wcoste
Ganancia
Coste
Mi carta pierde:
Mi carta no es del
pinte, prioridad 8
- 2 (sota )
El prodecimiento será el siguiente:
-
Si el jugador humano juega primero, se tomará su carta
como nodo raíz del árbol
-
Si el turno le corresponde a la máquina, ésta creará 3
árboles, cada uno con una carta diferente como nodo
raíz, se elegirá el que reporte mayor balance total.
C = 9 x 10 = 90
= +12
G =- 4 (rey)
Todavía se me ocurrió una tercera mejora para el diseño del
jugador, y fue aprovechar la gran ventaja qué puede tener un
ordenador frente a una persona: memoria + capacidad y velocidad
de cómputo. De modo que en este punto surgió la idea de crear un
registro en el que la máquina lleva la cuenta de todas las cartas
que van apareciendo en el juego. De forma que al final, cuando ya
no hay cartas que robar, la máquina conoce –no sólo las carta en
su mano- sino también, y por descarte, las cartas en la mano del
contrario. En este punto se aplica el algoritmo minimax para
encontrar la combinación de jugadas óptima asumiendo que el
jugador oponente no es tonto y querrá también maximizar su
ganancia.
C=8
= -6
VE = –6 · wganancia – 8 · wcoste
Los nodos del árbol minimax se crean en el orden que
indican los números de la figura
Los nodos marcados en gris corresponden a cartas que
cierran jugada, al ser creados establecen los balances
parciales en relación con el padre. El padre, en este caso, es
de distinto tipo pues corresponde a una carta jugada por el
jugador contrario.
Cuando se llega a un nodo hoja (el primero es el 5) se calcula
el balance total de ese nodo que será el mismo que el parcial,
el balance total se pasa al nodo padre.
Un nodo no termina de procesarse hasta que no se hayan
procesado todos sus hijos. Antes de terminar de procesarse
calcula su balance total basándose en el de sus hijos. Lo
forma tomándo el óptimo de uno de sus hijos y sumándole su
parcial. Si los hijos son de tipo “Jugador Humano”, ello
corresponde a una jugada del jugador humano, que,
asumimos, tomará una decisión para minimizar el balance
total de la máquina; por tanto, en este caso, el balance que
tomará el padre será el mínimo de los balances totales de los
hijos. Si por el contrario los hijos son de tipo “Jugador
Inteligente”, ello corresponde a una jugada de la máquina y
por tanto se tomará el máximo de los balances totales de los
hijos.
Tras aplicar el algoritmo descrito, se obtienen los caminos
óptimos mediante maximizaciones y minimizaciones de los
que sólo uno sobrevive hasta la raíz estableciendo el balance
total que conseguiremos.
Ilustremos el algoritmo con un ejemplo, sea la siguiente
situación:
3.4 Líneas futuras
Se han repartido ya todas las cartas, pintan espadas y el turno
es para la máquina.
Veamos el árbol construído con el 2 de espadas como nodo
raíz.
Se ha obtenido una inteligencia aceptable pero todavía se pueden
mejoras varios aspectos, una de las posibles mejoras podría ser la
siguiente:
En la baza en que se acaban las cartas uno de los 2 jugadores se
lleva la carta que queda encima del pinte y el otro el pinte, se
podría establecer un tercer coeficiente w para valorar lo que le
“interesa” a la máquina dejar que el jugador humano gane a
cambio de conseguir el pinte. Se podría estimar este interés puesto
que se conoce el valor del pinte, otro parámetro podría ser la
“necesidad de pinte” que pudiera tener, estudiada a partir de las
cartas del pinte que tengo en la mano.
Otra forma de mejorar sería un mejor ajuste de los coeficientes de
ganancia y coste. El cálculo de los coeficientes con los que se ha
implementado el sistema se hizo a partir de 10 muestras.
4. REFERENCES
[1] Villena, J, Transparencias de la asignatura “Inteligencia en
Redes de Comunicaciones” (2010)