Periodo 3 desarrollo de habilidades de pensamiento - trabajo grupal
Memoria intermedia
1. Práctica de Inteligencia Artificial en las Organizaciones
IA en el Póker Online
Año Académico: 2009-2010
Convocatoria: Febrero
Grupo de prácticas: Grupo 4
Alumnos:
Díaz Ponce, Antonio email: 100055301@alumnos.uc3m.es
Martínez Fernández, Raúl email: 100054986@alumnos.uc3m.es
García-Cuerva Velasco, Javier email: 100055253@alumnos.uc3m.es
2. Índice
1. Introducción ............................................................................................... 3
1.1. Descripción del Problema ...................................................................... 3
1.2. Objetivos ............................................................................................ 3
2. Estado del Arte ........................................................................................... 4
1. Programas que aprendan a jugar como una persona: ................................... 4
2. Clústering para agrupar tipos de jugadores:............................................... 11
3. Descripción completa de los datos y fuentes empleados .................................. 13
3.1 Datos de entrada ..................................................................................... 13
3.2 Datos adicionales ..................................................................................... 16
3.3 Datos de Salida ................................................................................... 17
4. Descripción de la solución adoptada ................................................................ 18
1. Estudio de los datos ................................................................................ 18
2. Procesado de datos .................................................................................... 18
3. Selección de atributos................................................................................. 19
5. Resultados de la experimentación ................................................................... 20
6. Análisis de Dificultades, Riesgos y Aplicabilidad ................................................ 21
6.1 Dificultades en la Obtención de la Solución ............................................. 21
6.2 Riesgos Previstos ................................................................................ 21
6.3 Análisis de Implantación ...................................................................... 21
7. Análisis de los resultados y conclusiones .......................................................... 22
8. Trabajos futuros (posibles mejoras) ................................................................ 23
2
3. 1. Introducción
1.1. Descripción del Problema
El problema principal es la toma de decisiones en el juego del Póker, las
principales acciones que se pueden realizar en este juego son:
o No ir: Lo que supone que el jugador deja de jugar.
o Pasar: El jugador decide no subir ninguna apuesta.
o Subir N: El jugador sube la apuesta del juego una cantidad “N”, podrá subir
tanto como la cantidad de dinero de la que disponga.
Sin embargo, a pesar de que el conjunto de salida parece reducido, el conjunto
de variables a tomar en cuenta es mucho mayor, ya que, a la hora de tomar una
decisión no sólo dependerá de las cartas que se poseen, sino que también se tendrá
en cuenta la posición que se ocupa en la mesa y el modo de jugar de los
contrincantes.
Además el tiempo de respuesta también suele influir en el modo de juego de
los jugadores, por ejemplo, un jugador que no tiene segura su jugada tardará más en
decidirse que un jugador que tiene una buena mano.
Actualmente, la modalidad de Póker a la que más se juega es Texas Hold 'em
Sin Límite, esta es la modalidad sobre la que realizaremos el estudio. En ella cada
jugador sólo posee dos cartas (cartas personales) y su jugada es la mejor combinación
de cartas que puede formar con las cartas que se van poniendo en la mesa
(denominadas cartas comunitarias).
1.2. Objetivos
El objetivo principal es obtener un jugador mediante una técnica de inteligencia
artificial que sea capaz de tomar las mejores decisiones posibles, en la primera ronda
de apuestas del juego (Preflop). Es cierto que es complejo de valorar finalmente si
hemos creado un buen jugador, o hemos conseguido aprender las mejores decisiones,
ya que el conjunto de posibilidades es muy grande.
En nuestro caso sería positivo que con estas decisiones consiguiésemos ganar
el mayor dinero posible cuando realicemos apuestas, y de perder la menor cantidad de
dinero posible cuando la jugada sea mala.
3
4. 2. Estado del Arte
La Inteligencia Artificial ya se ha adentrado en el campo de la toma de
decisiones en el Póker. Actualmente se dice que es una de las principales amenazas
del Póker Online, y esto se debe a que los jugadores que han sido generados, a pesar
de que no son capaces de vencer a jugadores expertos, sí que son capaces de ganar a
jugadores amateur y estándar.
Es por ello que actualmente se intentan introducir técnicas para poder expulsar
a jugadores automáticos. Técnicas como la resolución de los cada vez más inservibles
captchas o de problemas más específicos como preguntas, etc.
Además de empresas dedicadas a este propósito también las universidades se
encargan de organizar concursos, uno de los más conocidos es el First Man-Machine
Poker Championship, promocionado por la universidad de Alberta (Edmonton,
Canadá), los cuáles también son criticados ya que están realizando programas
automáticos que juegan al póker, pero se defienden diciendo que sus bots ganan a
otros bots, pero no a los humanos.
Debido al secretismo que genera este terreno, por su directa productividad, es
difícil que las empresas comenten su relación con este tipo de investigaciones, y por
tanto es difícil obtener datos de manos y jugadas, así con información relacionada con
la aplicación directa de este tipo de solución.
A continuación, vamos a describir varios casos que hacen uso de IA en el
póker.
1. Programas que aprendan a jugar como una persona:
Nos vamos a centrar en los diseñados en el torneo anual de la universidad de
Alberta.
En esta competición, cada jugador tiene que diseñar en Java un jugador,
usando las técnicas oportunas que considere, normalmente IA.
Respecto a la competición de este año podemos ver los resultados en el
siguiente enlace.
http://www.cs.ualberta.ca/~pokert/2009/index.php
En televisiones estadounidenses han hecho reportajes referentes a estos:
http://www.youtube.com/watch?v=m3fSc_gUNZk
A continuación ponemos una pequeña presentación, para conocer mejor la
competición, quién ha ganado este año y que técnicas han usado para hacer sus
jugadores:
4
9. A continuación vamos a describir las técnicas de IA usadas por los ganadores:
• Limit Bankroll: MANZANA
Usaron un Perceptrón Multicapa con una capa oculta y tres neuronas de
salida.
Las neuronas de entrada se encargan de codificar las características relevantes
de la situación actual del juego, tales como las cartas de mano, cartas de la mesa y
las apuestas anteriores, mientras que las neuronas de salida están entrenadas para
dar P(fold), P(call), P(raise), siendo P la probabilidad con la que los robots deben
retirarse, igualar o subir, en función del estado actual del juego.
El entrenamiento se realiza utilizando algoritmos estándares de aprendizaje,
mientras que los ejemplos de entrenamiento se construyeron a partir de las manos del
ganador de la competición del último año.
• Limit Runoff: GGValuta
El algoritmo general utilizado para calcular el equilibrio es un CFR
(counterfactual regret minimization) (reducción al mínimo).
El modelo de abstracción utilizado ha sido ligeramente modificado para cada
calle: En el pre-flop nosotros almacenan un nodo para cada posible situación (sin
abstracción) y en el flop/turn/river se utilizó un algoritmo de k-medias modificado para
hacer clustering sobre las manos.
Cada mano se asigna a un punto de N-dimensiones con una función diferente
para cada calle. Estas fueron elegidas en su mayoría intuitivamente y cada punto se
coordina como (E [HS] o el más bajo (E [HS]) o el más alto (E [HS])), donde el mayor
y menor muestran el rango potencial de que se complete otra carta.
Para el river se utilizó E [HS] con algunos cambios en las medias del rango
potencial de las rondas anteriores.
• No Limit Bankroll: Hyperborean-BR
La técnica Hyperborean-BR empleó una variedad de técnicas diseñadas para
explotar el método tradicional de la lectura de los otros jugadores.
Se trata de manipular el tamaño del bote, de manera que no se distinga de su
oponente. Con el fin de aprovechar que su oponente realice una exploración en el
comienzo del juego, para crear un modelo en bruto de su oponente.
• No Limit Runoff: Hyperborean-EQM
La técnica Hyperborean-EQM fue creado usando las mismas técnicas
utilizadas por la Universidad de Alberta en el pasado, con la excepción de que ahora
9
10. utiliza una lectura más suave. Además, los métodos utilizados para crear la estrategia
han sido optimizados para jugar sin límite.
• 3 player Bankroll && Runoff: Hyperborean-EQM
Se usó la ejecución de un CFR (counterfactual regret minimization)
(reducción al mínimo), durante varias semanas, para crear tres jugadores. Los
jugadores resultantes eran tan grandes (respecto a estados del juego), que se usó un
grano más grueso para construirlos. Se usan 16 categorías o rangos según la fuerza
de la mano, donde el jugador olvida sus rangos de las rondas anteriores.
10
11. 2. Clústering para agrupar tipos de jugadores:
Estas técnicas intentan inferir posibles conjuntos de tipos de jugadores.
Nos centraremos en la usada por un español:
http://jesusnubiola.com/poker/?p=92#more-92
Sus resultados no son buenos. Y estadísticamente ya existen otras soluciones
bastantes buenas, pero describiremos esta.
Su fuente de información es una inmensa base de datos de más de 22 millones
de manos de Texas Hold’em No Limit 50. A esta base de datos con las 22 millones
de manos, hicieron diferentes filtros para poder tratar mejor la información
(preproceso), seleccionando los atributos más relevantes para después pasar al
proceso de clusterización. Mediante el análisis de tres experimentos, muestran las
diferentes posibilidades que ofrecen los distintos algoritmos más conocidos hoy en día:
X-means, K-Means y EM.
Cometieron muchos errores, el más grave de los cuales fue subestimar el
preprocesamiento de los datos. Antes de lanzarse hacia un ejercicio de clusterización
debieron estudiar concienzudamente los datos a tratar. Si bien es verdad que su
primer error fue tratar con una base de datos demasiado escasa (por los atributos que
querían analizar), no es menos cierto que quizás el nivel escogido tampoco fue el
adecuado. Según palabras del autor:
“Debíamos haber tratado de importar una base de datos de un nivel
más elevado de juego (e.g. NL200+) dónde los jugadores son mucho más
sistemáticos jugando y no existe tanto jugador ocasional.“
Estos aspectos, que deberían haber tenido muy en cuenta antes de lanzarse a
la clusterización de los datos (y más con tantos atributos) ya que sólo que un atributo
contenga valores dispares puede hacer que toda la clusterización se vea afectada (no
digamos si son más de dos atributos los que tienen valores no fidedignos). Es por
esto, por lo que no han obtenido todo lo que cabía esperar de sus experimentos,
aunque en el último experimento, los resultados han sido muy esperanzadores porqué
se veía dónde estaba el problema y, consecuentemente, se pasó a filtrar con muchas
más manos y menos atributos.
Aún con todas las dificultades encontradas, llegaron a la conclusión que para su
problema era mejor hacer uso del algoritmo EM en contra de usar el K-medias.
Otra cosa a tener en cuenta es que se enfrentaron a un problema “real”, con
una ingente cantidad de datos por filtrar. Sólo la importación de los datos ya ha
llevado más de 50 horas. Esto sumado a que la base de datos que crea el Holdem
Manager no es conocida (hay muy poca documentación sobre cómo son las tablas) ha
hecho que dedicáramos mucho tiempo en hacer ingeniería inversa para poder sacar
los datasets.
11
12. Otra área muy interesante que podrían haber tratado, pero no fue posible por
la incoherencia de los resultados obtenidos es la de reglas de asociación. Las reglas de
asociación permiten atacar por otro bando el problema y podrían llegar a dar
información muy interesante acerca de cómo se comportan los perfiles de jugadores
(en caso de conseguir clusterizar) o jugadores aislados (en caso de no poder
clusterizar). Un enfoque que sería muy práctico sería el de ir definiendo acciones
claves (a criterio de experto) para ver cómo actúa cada perfil. Por ejemplo el
comportamiento de un jugador cuando es robado por un perfil agresor y tiene cartas
Premium (KK++) de mano. Ir definiendo numerosas reglas de este estilo e ir llenando
nuestro data set con las distintas acciones que nos va respondiendo la base de datos
(e.g % de call, raise y fold). Hay que destacar que esta manera de tratar el problema
es mucho más compleja que la usada hasta ahora, ya que implica unas sentencias
SQL mucho más elaboradas y un agrupamiento en forma de Datasets muy complejo
de realizar, pero es mucho más interesante las reglas que podrían sacar así que no las
reglas que sacarían si tratáran la información como en el Clústering (con tantos por
ciento de cada atributo).
12
13. 3. Descripción completa de los datos y fuentes
empleados
3.1 Datos de entrada
En este apartado nos centraremos en explicar la fuente principal de los datos,
así como una visión panorámica de los datos utilizados.
Para la adquisición de los datos hemos tenido diversos problemas, ya que estos
datos, comúnmente, son de uso privado, y en caso de querer adquirirlos serian de
pago. Debido a esto, nos resulto muy complicado encontrar datos utiles para el
estudio. Por ello pedimos datos en diversos blogs sobre póker online, así como
contactando con los responsables de 3 webs, sin recibir respuesta alguna
Después decidimos pedir los datos en foros sobre póker online, en los cuales
nos pusieron varias “pegas”: nos dijeron que queríamos los datos para hacer trampas,
que no conseguiríamos llegar a ningún sitio con nuestro estudio, que no darían sus
manos ya que son de pago, etc.
Finalmente, un usuario del foro de pokerred accedió a darnos datos de manos
que disponía. En total eran 100000 manos de póker, con las cuales empezamos
nuestro estudio.
El formato de los datos es XML, y en el se recogen los datos más importantes
que se deben recoger en una mesa de póker.
13
14. A continuación explicaremos globalmente el formato de los datos:
<general>
<mode>real</mode>
<gametype>Holdem NL 0.50/1</gametype>
<tablename>Aosta__No_DP_</tablename>
<duration>N/A</duration>
<gamecount>N/A</gamecount>
<startdate>2009-10-20 13:21:35</startdate> Información de la mano que comienza
<currency>USD</currency>
<nickname>PokerHandScout.com</nickname>
<bets>N/A</bets>
<wins>N/A</wins> Hora de inicio de la mano
<chipsin>N/A</chipsin>
<chipsout>N/A</chipsout>
<ipoints>N/A</ipoints>
</general>
<startdate>2009-10-20 13:58:22</startdate>
<players>
<player seat="4" name="ChandlerMBing" chips="$10000000" dealer="0" win="$0"
bet="$0" /><player seat="3" name="Hummelx2" chips="$10000000" dealer="0"
win="$0" bet="$1" /><player seat="2" name="fakinit" chips="$10000000"
dealer="0" win="$39" bet="$20" /><player seat="1" name="BowserJr"
chips="$10000000" dealer="1" win="$0" bet="$20" />
</players>
Resumen de la mano para cada
jugador (lo que ha ganado, las fichas
que tenia, su posición en la mesa, si
era mano, si era ciega pequeña o
grande y su nombre)
14
15. <round no="0">
<action no="1" player="fakinit" type="1" sum="$0.50"/>
<action no="2" player="Hummelx2" type="2" sum="$1"/>
</round>
Numero de ronda
<round no="1">
<cards type="Pocket" player="BowserJr">c10 s10</cards>
<cards type="Pocket" player="fakinit">dJ cJ</cards>
Cartas de las que
<action no="3" player="ChandlerMBing" type="0" sum="$ 0"/> dispone un jugador
<action no="4" player="BowserJr" type="23" sum="$3"/>
<action no="5" player="fakinit" type="23" sum="$20"/>
<action no="6" player="Hummelx2" type="0" sum="$ 0"/>
<action no="7" player="BowserJr" type="3" sum="$17"/> Apuestas
</round>
<round no="2">
<cards type="Flop" player="">hJ cA s9</cards>
</round>
<round no="3">
<cards type="Turn" player="">d10</cards> Cartas comunes que se
</round> van poniendo sobre la
mesa
<round no="4">
<cards type="River" player="">cK</cards>
</round>
15
16. 3.2 Datos adicionales
Información adicional podría ser otra información que tuviese el jugador, que no fuese
sólo la mesa de juego, los oponentes, las fichas y las cartas, es decir, que no fuese
sólo la información que te da la sala de póker, que es la mínima para poder jugar.
Existen programas que usan los datos de las manos para generar estadísticas
de tus contrincantes. Y estas estadísticas se pueden mostrar sobreimpresas en la
mesa de la sala de póker online. A esto se llama HUD (head up display).
A continuación mostramos una mesa sin HUD y después una con HUD:
Figura 1: Mesa de Póker sin HUD
Figura 2: Mesa de Póker con HUD
Estadísticas del HUD
Esta información define a los jugadores, pudiéndose así saber si el jugador va a
muchas manos o a pocas, si es agresivo o pasivo, etc.
La ventaja del póker online son estas herramientas que te dan información
extra de mucha utilidad durante el juego.
Tener esta información podría servir como información adicional a nuestros
datos.
16
17. 3.3 Datos de Salida
Los datos de entrada necesitan un procesamiento que se explicará en el
siguiente apartado. De nuestro clasificador se espera que, dada una mano, sepa que
decisión tomar en cuanto a Retirarse (Fold), Igualar (Call), Subir (Raise), Resubir (Re-
Raise).
En cuanto a la mano se necesitará toda la información que hemos mencionado
en el apartado 3.1.
17
18. 4. Descripción de la solución adoptada
A continuación pasaremos a explicar las distintas etapas que hemos seguido
para la realización de la práctica.
1. Estudio de los datos
El primer paso de nuestra práctica fue estudiar el formato de los datos que nos
proporcionaron, para así saber los que parte de ellos nos iban a ser realmente utiles
para la práctica. Gracias a ello, nos dimos cuenta que los datos correspondían a manos
en las cuales solo se veían las cartas de cada jugador en el caso de que llegasen al
showdown (momento final de la mano). Debido a ello, de esas 100000 manos
iniciales, las que realmente nos iban a interesar eran muchas menos.
Finalmente nos percatamos de que, cuando se mostraban las cartas, como
mínimo lo hacían dos jugadores, asíque realmente disponíamos del doble o más de
manos útiles, por lo que el número total de manos a utilizar son 10710.
2. Procesado de datos
A continuación comenzamos con el procesado de los ficheros XML. Nuestra
intención era seleccionar una serie de atributos y clases para que fuesen introducidas
en WEKA y realizar un estudio de minería de datos. Para ello debíamos transformar los
datos dados en el XML al formato arff de WEKA.
Para crear nuestro fichero arff programamos en Java un parser que recibiese
los ficheros XML de las manos, seleccionase y transformase los datos necesarios para
la construcción de los atributos, y finalmente construyese el fichero arff con los
atributos, patrones y clases.
18
19. 3. Selección de atributos
Antes de realizar la evaluación de los datos decidimos utilizar algunas técnicas
de selección de atributos como:
♦ CfsSubsetEval con método de búsqueda BestFirst (-D1, -N 5)
♦ ChiSquaredAttributeEval con Ranker como método de búsqueda
Los resultados obtenidos fueron los siguientes:
Método CfsSubsetEval ChiSquaredAttributeEval
• ValorSubida1
• ValorSubida2
• ValorSubida3
• ValorCarta2
• ValorCarta1 • ValorCarta1
• ValorCarta2 • ValorSubida4
• ValorSubida1 • ValorSubida5
• ValorSubida2 • Suited
Atributos
• ValorSubida3 • JugadoresTotales
seleccionados
• ValorSubida4 • FichasJugador6
• ValorSubida5 • PosicionJugador6
• FichasJugador5
• PosicionJugador5
• FichasJugador4
• PosicionJugador4
Y las clases a utilizar en WEKA serían:
• 4 clases {0,1,2,3} -> Valores Continuos (Clasificación)
• 0: Apuesta de $0 -> 1048 patrones
• 1: Apuesta entre $0 y $2.5 -> 3866 patrones
• 2: Apuesta entre $2.5 y $5 -> 4193 patrones
• 3: Apuesta superior a $5 -> 1596 patrones
19
20. 5. Resultados de la experimentación
En la primera etapa de la experimentación se evaluaron los datos con el
perceptrón multicapa y con el árbol de decisión J48. En la siguiente tabla se muestran
los resultados obtenidos:
Método Capas Error
% aciertos % fallos
ocultas cuadrático
Perceptrón 1 43.6975 % 56.3025 % 98.2544 %
Multicapa
2 45.4093 % 54.5907 % 97.7409 %
3 46.0317 % 53.9683 % 96.7809 %
J48 - 47.8369 % 52.1631 % 110.109 %
20
21. 6. Análisis de Dificultades, Riesgos y Aplicabilidad
6.1 Dificultades en la Obtención de la Solución
Describir brevemente en este apartado las dificultades inherentes al problema y
a las técnicas propuestas, analizando las posibles soluciones o mitigaciones.
La principal dificultad a la hora de realizar el trabajo ha sido la obtención de los
datos preliminares. Debido a que estos datos suelen ser de carácter privado, o en su
defecto de carácter comercial, es muy complicado encontrarlos en la red. Para ello nos
hemos encargado de pedirlos a diversas páginas y particulares, esperando a su
contestación.
Otra de las dificultades encontradas es la necesidad de tener un gran número
de datos, así como que estos sean de jugadores de un nivel medio-alto, labor bastante
difícil de realizar.
La tercera dificultad aparecerá a la hora de eliminar datos innecesarios dentro
de los datos preliminares, los cuales pueden desvirtuar el resultado final de no
detectarlos con anterioridad. Esto se arreglará con el análisis con Weka, con el que
nos encargarnos de eliminar estos datos innecesarios.
6.2 Riesgos Previstos
La principal incertidumbre que se nos plantea viene determinada por la
obtención de los datos. Esto es debido a que, aparte de necesitar una buena cantidad
de manos para poder realizar la práctica con unos buenos resultados, sería interesante
que estas manos fuesen de buena calidad para que el aprendizaje fuese correcto.
Otro de los riegos, como en cualquier proyecto de estas características, es que
a la hora de obtener los resultados, estos no sean todo lo buenos que se esperaba, y
nos obligue a replantearnos el procedimiento.
6.3 Análisis de Implantación
Para poder llevar a cabo este proyecto necesitaremos un ordenador de nivel
medio para poder llevarlo a cabo. Las especificaciones recomendadas serían:
Procesador: Intel Pentium4 2,4 Ghz
Disco duro: 200 Gb
Memoría RAM: 2 Gb
El principal problema que se nos planteaba era que Weka tenía un espacio de
memoria limitado, pero se puede ampliar sin problemas.
21
22. 7. Análisis de los resultados y conclusiones
Como se puede apreciar el porcentaje de aciertos es medio y, por tanto,
mejorable. En la presentación ya comentamos los problemas para obtener los datos y
esto ha hecho que para nosotros la tarea más costosa sea la extracción de los datos
para su posterior manejo.
Esperamos aumentar la tasa de aciertos hasta un 60 %, mediante la opción
Experimenter de Weka trataremos de encontrar el mejor algoritmo con la mejor
configuración para que el error cuadrático se reduzca drásticamente.
22
23. 8. Trabajos futuros (posibles mejoras)
De cara a la siguiente entrega, seguiremos probando distintos evaluadores de
atributos y distintos clasificadores para intentar maximizar la bonanza de los
resultados. Probablemente también utilicemos en el futuro validación cruzada, así
como baterías de pruebas con Experimenter. Entre otras mejoras se incluyen la
posibilidad de añadir nuevos atributos, como por ejemplo “iguales” que indique si las
dos cartas que posee el jugador tienen el mismo valor, es decir, si son dos cincos
estaría a uno y si fuesen distintas valdría cero.
Queda también en interrogante la posibilidad de que nos ofrezcan más datos,
para así intentar tener mejores resultados.
23