23
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: [email protected] Martínez Fernández, Raúl email: [email protected] García-Cuerva Velasco, Javier email: [email protected]

Memoria intermedia

Embed Size (px)

Citation preview

Page 1: Memoria intermedia

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: [email protected]

Martínez Fernández, Raúl email: [email protected]

García-Cuerva Velasco, Javier email: [email protected]

Page 2: Memoria intermedia

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

Page 3: Memoria intermedia

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.

Page 4: Memoria intermedia

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:

Page 5: Memoria intermedia

5

Page 6: Memoria intermedia

6

Page 7: Memoria intermedia

7

Page 8: Memoria intermedia

8

Page 9: Memoria intermedia

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

Page 10: Memoria intermedia

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.

Page 11: Memoria intermedia

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.

Page 12: Memoria intermedia

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).

Page 13: Memoria intermedia

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.

Page 14: Memoria intermedia

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>

<currency>USD</currency>

<nickname>PokerHandScout.com</nickname>

<bets>N/A</bets>

<wins>N/A</wins>

<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>

Información de la mano que comienza

Hora de inicio de la mano

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)

Page 15: Memoria intermedia

15

<round no="0">

<action no="1" player="fakinit" type="1" sum="$0.50"/>

<action no="2" player="Hummelx2" type="2" sum="$1"/>

</round>

<round no="1">

<cards type="Pocket" player="BowserJr">c10 s10</cards>

<cards type="Pocket" player="fakinit">dJ cJ</cards>

<action no="3" player="ChandlerMBing" type="0" sum="$ 0"/>

<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"/>

</round>

<round no="2">

<cards type="Flop" player="">hJ cA s9</cards>

</round>

<round no="3">

<cards type="Turn" player="">d10</cards>

</round>

<round no="4">

<cards type="River" player="">cK</cards>

</round>

Numero de ronda

Cartas de las que dispone un jugador

Apuestas

Cartas comunes que se van poniendo sobre la mesa

Page 16: Memoria intermedia

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

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.

Estadísticas del HUD

Page 17: Memoria intermedia

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.

Page 18: Memoria intermedia

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.

Page 19: Memoria intermedia

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

Atributos seleccionados

• ValorCarta1 • ValorCarta2

• ValorSubida1 • ValorSubida2 • ValorSubida3 • ValorSubida4 • ValorSubida5

• ValorSubida1 • ValorSubida2 • ValorSubida3 • ValorCarta2 • ValorCarta1

• ValorSubida4 • ValorSubida5

• Suited • JugadoresTotales • FichasJugador6

• 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

Page 20: Memoria intermedia

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 ocultas

% aciertos % fallos Error

cuadrático

Perceptrón Multicapa

1 43.6975 % 56.3025 % 98.2544 %

2 45.4093 % 54.5907 % 97.7409 %

3 46.0317 % 53.9683 % 96.7809 %

J48 - 47.8369 % 52.1631 % 110.109 %

Page 21: Memoria intermedia

21

6. Análisis de Dificultades, Riesgos y Aplicabilida d

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.

Page 22: Memoria intermedia

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.

Page 23: Memoria intermedia

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.