Full text
Recomendador adaptativo y entrenador Pre-Flop para NLHE Trabajo de Fin de Grado Juan Carlos Marco González Iván Martín Herrero Dirigida por el Doctor Manuel Núñez García Grado en Ingeniería Informática Facultad de Informática Universidad Complutense de Madrid Junio 2016
Documento maquetado con T EXiS v.1.0+. Este documento está preparado para ser imprimido a doble cara.
Recomendador adaptativo y entrenador Pre-Flop para NLHE Trabajo de Fin de Grado Juan Carlos Marco González Iván Martín Herrero Dirigida por el Doctor Manuel Núñez García Grado en Ingeniería Informática Facultad de Informática Universidad Complutense de Madrid Junio 2016
Copyright c Juan Carlos Marco González y Iván Martín Herrero
A todas aquellas personas que disfruten jugando al póker, y que quieran tener una pequeña ventaja.
“El poker con límite es una ciencia; pero el sin límite es un arte. En el primero estás disparando a una diana; en el segundo, la diana cobra vida y te devuelve los disparos.” Jack Strauss
Agradecimientos Los ases son más grandes que la vida y más grandiosos que las montañas. Mike Caro Juan Carlos Marco González A mi familia y amigos por apoyarme en todo momento para conseguir este objetivo. En especial para: Mi madre Teresa, por darme esta oportunidad de futuro entre muchas otras, por realizar el esfuerzo económico que ello ha conllevado, por insistir en la ejecución de ello y por luchar por tus hijos. A mi padre Juan Carlos, aunque ya no estés entre nosotros, jamás te olvidaré. Me enseñaste lo dura que era la vida y por esa lección que me diste, he llegado hasta aquí. Gracias Papá. Sara, por ser un apoyo constante, por tanto cariño y por siempre estar tan pendiente de mí. Mario, por los momentos de hermanos que pasamos juntos ;) Etoó, por ser tan fiel, cariñoso y querer estar siempre con nosotros. Ángeles y Luís, por interesaros por mí y acogerme como uno mas en vuestra familia. A mis amigos Álvaro, Elena, Gabi, Isma y Juanje, por los buenos y malos momentos que hemos pasado juntos. ix
Índice Agradecimientos ix Resumen xiii Abstract xv 1. Introducción 1 1.1. Introducción............................ 1 1.2. Objetivos ............................. 2 1.3. Conceptos............................. 3 1.3.1. Fases............................ 3 1.3.2. Posiciones......................... 4 1.3.3. Acciones.......................... 4 1.3.4. Rangos .......................... 5 1.3.5. Otros conceptos . . . . . . . . . . . . . . . . . . . . . . 5 1.4. Modalidad de Juego . . . . . . . . . . . . . . . . . . . . . . . 6 1.5. Marcodetrabajo......................... 6 2. Introduction 9 2.1. Introduction............................ 9 2.2. Objectives............................. 10 2.3. Concepts.............................. 11 2.3.1. Phases........................... 11 2.3.2. Positions ......................... 11 2.3.3. Actions .......................... 12 2.3.4. Ranges........................... 12 2.3.5. Other concepts . . . . . . . . . . . . . . . . . . . . . . 13 2.4. GameModality.......................... 13 2.5. Frameofwork........................... 14 3. Proceso de desarrollo 15 3.1. Introducción............................ 15 xvii
xviii Índice 3.2. Metodología Scrum . . . . . . . . . . . . . . . . . . . . . . . . 16 3.3. Aplicación de Scrum al trabajo de fin de grado . . . . . . . . 16 3.4. Contribuciones de Juan Carlos Marco González . . . . . . . . 19 3.4.1. Servidor PokerStove . . . . . . . . . . . . . . . . . . . 19 3.4.2. Maestro.......................... 20 3.4.3. Trainer .......................... 24 3.5. Contribuciones de Iván Martín Herrero . . . . . . . . . . . . . 25 3.5.1. Idea inicial del proyecto . . . . . . . . . . . . . . . . . 25 3.5.2. Gestión del proyecto . . . . . . . . . . . . . . . . . . . 25 3.5.3. Realización y maquetación de la memoria . . . . . . . 25 3.5.4. Reconocedor de imagen . . . . . . . . . . . . . . . . . 26 4. Diseño, uso y resultados 33 4.1. Diseño del software . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.1. Flujo del Recomendador . . . . . . . . . . . . . . . . . 33 4.1.2. Flujo del Entrenador . . . . . . . . . . . . . . . . . . . 34 4.1.3. Flujo de la herramienta de rangos . . . . . . . . . . . . 34 4.1.4. Ruta de PokerStars . . . . . . . . . . . . . . . . . . . . 34 4.2. Uso del programa . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.1. Recomendador . . . . . . . . . . . . . . . . . . . . . . 39 4.2.2. Entrenador ........................ 41 4.2.3. Rangos .......................... 43 4.2.4. Ruta de PokerStars . . . . . . . . . . . . . . . . . . . . 46 4.3. Resultados............................. 47 5. Conclusiones y líneas futuras 51 5.1. Conclusiones ........................... 51 5.2. Problemas encontrados en el desarrollo y sus soluciones . . . . 52 5.3. Líneasfuturas........................... 53 6. Conclusions and future lines of work 55 6.1. Conclusions............................ 55 6.2. Problems found in development and solutions . . . . . . . . . 56 6.3. Futurelines............................ 57 A. Test de usabilidad 59 Bibliografía 65
Índice de figuras 1.1. Logo de PokerTracker 4 . . . . . . . . . . . . . . . . . . . . . 3 1.2. Ventana de PokerStars . . . . . . . . . . . . . . . . . . . . . . 7 2.1. PokerTracker 4 logo . . . . . . . . . . . . . . . . . . . . . . . 11 2.2. PokerStars window . . . . . . . . . . . . . . . . . . . . . . . . 14 3.1. Tablero de juego de PokerStars . . . . . . . . . . . . . . . . . 26 3.2. Ficha de posición en PokerStars . . . . . . . . . . . . . . . . . 28 3.3. AsdeCorazones ......................... 29 3.4. As de Diamantes . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5. Apuesta de un jugador . . . . . . . . . . . . . . . . . . . . . . 31 3.6. Bote total de la mesa . . . . . . . . . . . . . . . . . . . . . . . 32 4.1. Diagrama de flujo desde el menú principal . . . . . . . . . . . 34 4.2. Diagrama de flujo del recomendador . . . . . . . . . . . . . . 35 4.3. Diagrama de flujo del entrenador . . . . . . . . . . . . . . . . 36 4.4. Diagrama de flujo del cambio de los rangos . . . . . . . . . . 37 4.5. Diagrama de flujo del seleccionador de ruta de PokerStars . . 37 4.6. Aspecto del menú principal . . . . . . . . . . . . . . . . . . . 38 4.7. Aspecto del recomendador mientras espera a encontrar la mesa 39 4.8. Aspecto del recomendador mientras espera al turno del usuario 40 4.9. Aspecto del recomendador cuando llega el turno del usuario . 40 4.10. Aspecto del recomendador tras calcular una recomendación . 40 4.11. Aspecto del entrenador . . . . . . . . . . . . . . . . . . . . . . 41 4.12. Entrenador tras generar una jugada Open Range . . . . . . . 42 4.13. Entrenador tras evaluar la opción elegida . . . . . . . . . . . . 43 4.14. Aspecto de la ventana de Rangos . . . . . . . . . . . . . . . . 44 4.15. Ejemplo de creación de un Open Range en UTG . . . . . . . 45 4.16. Ejemplo de modificación del Opening Ranges_CO . . . . . . 45 4.17. Ejemplo de modificación de Opening Ranges_CO, seleccionando entre el 10 % y el 50 % y modificando jugadas . . . . . 46 4.18. Ventana de selección de ruta . . . . . . . . . . . . . . . . . . . 46 xix
xx Índice de figuras 4.19. Tiempo medio empleado en cada tarea . . . . . . . . . . . . . 48 4.20. Media de errores por tarea . . . . . . . . . . . . . . . . . . . . 48 4.21. Puntuación media de satisfacción según los criterios de evaluación del cuestionario final . . . . . . . . . . . . . . . . . . . 49
Capítulo 1 Introducción La persona que inventó el poker fue brillante; pero la persona que inventó las fichas fue un genio. Julius Weintraub Resumen: En este primer capítulo presentaremos los objetivos de este trabajo y los conceptos necesarios para entenderlo. 1.1. Introducción El póker online ha cogido mucha fuerza en los últimos años debido a las grandes apuestas que las casas de póker online han hecho con anuncios y promociones en televisión e internet. Por ello cada vez hay más gente que juega online, y debido a la facilidad que dan estas salas ha crecido el número de jugadores que juegan al póker para pasar un rato pero sin preparación. A estos jugadores les llamaremos, de aquí en adelante, “jugadores recreacionales”. A este tipo de jugadores será hacia los cuales está indicado el producto software de este trabajo de fin de grado. Nuestra intención es que les permita mejorar su juego sin necesidad de preparación o lecturas para las que no (necesariamente) disponen de tiempo. La variante más jugada en estas salas online es el No Limit Hold0Em, NLHE a partir de ahora. Una mano en este juego se divide en varias fases: Pre-Flop, Flop, Turn y River (sección 1.3). En cada fase hay una sucesión de apuestas entre los jugadores en las cuales no se impone ningún límite en la cuantía de las apuestas, de ahí el apelativo No Limit. Existen otras variantes en las que hay sí límites en el tamaño de las apuestas, como por ejemplo Pot 1
2Capítulo 1. Introducción Limit Hold0Em en las que el bote es la apuesta máxima que alguien puede realizar. La variante de póker Hold0Em se basa en que a cada jugador se le reparten dos cartas en la primera fase (Pre-Flop). En las siguientes fases se muestran hasta cinco cartas sobre la mesa. Los jugadores formaran su mano usando una combinación de sus cartas y las de la mesa, usando un total de cinco cartas. La primera ronda de apuestas empieza en la posición tras la ciega grande o “Big Blind” (BB), llamada “Under the gun” (UTG). Una vez que haya al menos dos jugadores que hayan igualado la apuesta, o todos se hayan retirado ante la apuesta de alguno de los jugadores, se pasa a la siguiente fase (si se ha igualado alguna apuesta), el “Flop”. En el Flop la primera carta del mazo se descarta y se muestran tres cartas sobre la mesa y comienza una nueva ronda de apuestas a partir de la posición ciega pequeña o “Small Blind” (SB) con el mismo fin que en la primera fase.La siguiente fase (si la hubiera) es el “Turn”, en la que se descarta la primera carta del mazo y se muestra una en la mesa, continuando la ronda de apuestas igual que en el Flop. Por último para el “River” se procede igual que en el Turn y al final, si se igualan al menos dos apuestas los jugadores involucrados descubren sus cartas para ver quién tiene mejor mano y gana el “Pot” o bote (PokerStars.es, 2016a). El caso de Heads Up (en el cuál un jugador se enfrenta a otro) con límite de apuesta máxima ha sido resuelto recientemente por la Universidad de Alberta (Oskari Tammelin y Bowling, 2015) con un algoritmo exploratorio de estados. Ello ha posible ya que para dos jugadores el espacio de estados es elevado pero factible. Pero en el momento que aumentamos el número de jugadores o no ponemos límite a la apuesta, el número de estados empieza a crecer desorbitadamente y no se puede resolver nada más que con aproximaciones y acotaciones para disminuir el número de estados. Basándonos en lo anterior, y como no es posible resolver el juego de forma algorítmica, decidimos mejorar las posibilidades del usuario dándole más oportunidades y explotando a los rivales más débiles y defendiéndonos frente a los rivales mejores que nosotros. Para ello, tomamos como punto de partida las tablas de rangos dados por Janda en su libro “Applications of NLHE” (Janda, 2013), y aumentaremos o disminuiremos los rangos de estas tablas basándonos en como juegan nuestros rivales. 1.2. Objetivos Uno de los objetivos de este trabajo de fin de grado es presentar un recomendador en directo de la mejor opción usando las tablas de Janda. Ello
1.3. Conceptos 3 ayudará a los jugadores recreacionales a jugar al póker de una manera mas eficiente, al menos desde la suposición de que todo el mundo juega con estas tablas. En realidad solo algunas personas las usan, jugadores profesionales por lo general e incluso éstos tienen sus propias tablas adaptadas a como les gusta jugar y que varían en función de contra quien jueguen. Estas tablas podrían incluso no ser óptimas contra jugadores recreacionales, ya que al no jugar óptimamente podemos “explotar” sus debilidades. Esta consideración nos lleva a la segunda parte del trabajo de fin de grado: un recomendador adaptativo dependiendo de contra quien juguemos cada mano. Para llevar a cabo esta ampliación necesitamos datos sobre como juegan nuestros rivales, para poder clasificarlos entre recreacionales y habituales 1. Para esto usaremos la herramienta PokerTracker 4 (Max-Value-Software, 2016) (figura 2.1) que recoge las estadísticas en una Base de datos de la cual podemos sacar la información que necesitemos de cada jugador contra el que ya hayamos jugado y tengamos información. Como en cualquier experimento, necesitaremos un mínimo número de manos para que los datos sean fiables. Figura 1.1: Logo de PokerTracker 4 Para ambos recomendadores necesitaremos conocer la situación de la mesa en el momento en que sea nuestro turno para saber qué acción realizar en función de nuestras cartas y los rangos, y lo que hayan hecho nuestros rivales. Para poder recoger esta información se ha implementado un reconocedor de imágenes que obtiene datos en el momento del turno como nuestras cartas en mano, la posición en la que estamos y las apuestas previas de los jugadores anteriores si las hubiera. 1.3. Conceptos 1.3.1. Fases Pre-Flop: Primera fase del juego en la que cada jugador solo dispone de sus cartas en la mano. 1En inglés se usa el término regular que se traduce usualmente, de forma errónea, como jugadores “regulares”
4Capítulo 1. Introducción Flop: Segunda fase del juego en la que tras descartar una carta del mazo se sacan 3 cartas del mazo y se muestran en la mesa. Turn: Tercera fase del juego en la que tras descartar una carta del mazo se muestra una más en la mesa River: Cuarta fase del juego en la que tras descartar una carta del mazo se muestra una más en la mesa y al finalizar las apuesta y si se igualan las apuestas de al menos dos jugadores, los involucrados muestran las cartas haciendo alguna jugada seleccionando 5 de entre las 5 cartas comunes de la mesa y las dos de las respectivas manos. 1.3.2. Posiciones Ciega pequeña o “Small Blind” (SB): Es el primer jugador en hablar tras la fase de Pre-Flop; además al iniciar la mano hace una apuesta de la mitad de la ciega grande. Es el penúltimo jugador en hablar en la fase Pre-Flop justo antes de la ciega grande. Ciega grande o “Big Blind” (BB): Es el segundo jugador jugador en hablar tras la fase de Pre-Flop, además al iniciar la partida hace una apuesta igual a la ciega grande. Es el último jugador en hablar en la fase de Pre-Flop. Under the Gun (UTG): Es el primer jugador en hablar en la fase Pre-Flop, y el tercero asumiendo que las dos ciegas siguen en las manos,en las siguientes fases. Es la posición donde tendremos nuestras tablas con los rangos de apertura más pequeños ya que partimos sin saber nada de los demás jugadores. Mid Position (MP): Son las posiciones intermedias (para mesas de más de seis jugadores hay varios jugadores en MP) tras UTG. Aquí nuestro rango será más amplio que en UTG pero no mucho más amplio. Cut Off (CO): Es el jugador tras MP y ampliaremos aún más el rango de apertura ya que disponemos de más información de los jugadores anteriores. Button o Dealer (BTN): Es el jugador que habla antes de las ciegas. Tendrá un rango bastante más amplio que CO y similar al de SB. 1.3.3. Acciones Tirarse o Fold: Es la acción de no jugar una mano y “tirar” las cartas, no aceptando la apuesta de un jugador previo a nosotros. Haremos esta acción cuando no nos sean favorables las cartas para poder ganar.
1.3. Conceptos 5 Ver o Call: Es la acción de igualar la apuesta de un jugador anterior a nosotros para continuar a la siguiente fase o, si es el River, ver quien tiene la mejor jugada. Limp: Es una acción especial de Call que es ver la ciega grande sin subir. Subir o Raise: Es la acción de apostar más que alguna de las apuestas anteriores, o si no ha habido ninguna, hacer una apertura de apuestas. 1.3.4. Rangos Todos los rangos dependen de la posición en la que estemos. Rango de apertura u Opening Range (OR): Es el rango de jugadas en las que haremos Raise cuando nos llega la mano sin apuestas o con solo las ciegas y los jugadores que hayan igualado la ciega grande en Pre-Flop (limpers). Rango de 3-Bet (3BET): Es el rango de jugadas con el que volveremos a subir la apuesta de alguien que ha subido la apuesta inicial o a alguno de los otros jugadores. Rango de Fold to 3-Bet(F3BET): Es el rango de jugadas con el que haremos Fold a una apuesta de 3-BET. Rango de 4-Bet (4BET): Es el rango de jugadas con el que haremos Raise a una apuesta de 3-BET. Rango de Fold to 4-Bet(F4BET): Es el rango de jugadas con el que haremos Fold a una apuesta de 4-BET. Cold Calling (CC): Es el rango de hacer call frente a alguna de las apuestas sin haber apostado antes. 1.3.5. Otros conceptos Valores de la base de datos de PokerTracker 4 que usaremos VPIP: Indica el dinero voluntariamente añadido al bote y señala en que porcentaje de casos un jugador pone dinero en el bote antes del “Flop” “Pre-Flop Raise” (PFR): Señala cuán a menudo sube un jugador en la primera ronda de apuestas.
12 Capítulo 2. Introduction 2.3.2. Positions Small Blind (SB): First player to talk after the Pre-Flop phase; furthermore at the start of the hand they make a bet that is half of the big blind. They are the second to last to talk in the Pre-Flop phase, just before the big blind. Big Blind (BB): Second player to talk after the Pre-Flop phase; furthermore at the start of the hand they make a bet that is equal to the big blind. They are the last player to talk in the Pre-Flop phase. Under the Gun (UTG): First player to talk in the Pre-Flop phase, and the third assuming that the two blinds do not fold. It is the position with the tightest opening ranges, because there is no information from the other players. Mid Position (MP): Intermediate positions (for boards with more than six players, there are several players in this position) after UTG. Here the range will be a little wider. Cut Off (CO): Player after MP wiht wider range because there is information about the previous players. Button or Dealer (BTN): Player that talks before the blinds. The range in this position will be wider. 2.3.3. Actions Fold: Action of not playing a hand and “folding” the cards, not taking the bets from a previous player. Only done when the cards aren’t favourable to win. Call: Action of taking the bet and equalling it to the bet from a previous player to continue to the next phase. If it is the River, see who has the best hand. Limp: A special action of calling a bet equal to the big blind without raising. Raise: Action of raising a previous bet. 2.3.4. Ranges All ranges vary depending on the position of the player. Opening Range (OR): Range of hands on which we will raise the bet when the hand comes to us without beeing raised, or just with the blinds and the limpers.
2.4. Game Modality 13 3-Bet range (3BET): Range of hands on which we raise a bet from a previous player. Fold to 3-Bet range(F3BET): Range of hands on which we fold when another player makes a 3-Bet to our bet. 4-Bet range(4BET): Range of hands on which we raise a bet from a 3-Bet from a previous player. Fold to 4-Bet range(F4BET): Range of hands on which we fold when another players make a 4-Bet to our bet. Cold Calling (CC): Range of hands to call a previous bet. 2.3.5. Other concepts Values that will be used from the PokerTracker 4 database VPIP: Percentage of cases for which the player puts money in the pot without obligation before the “Flop”. “Pre-Flop Raise” (PFR): Frequency of a player raising the bet in the Pre-Flop. Some of the previous concepts of ranges also appear as data in the Pokertracker database and will reference the percentage for a player to do that action. These two concepts are relevant to see the ranges depending of the rival we face and the position on the table: “In Position” (IP): To be in position facing another player means that we talk after that player, for example the player in BTN is IP facing UTG. “Out Position” (OP): To be out of position facing another player means that we talk before that player, for example the player in UTG is OP facing BTN. 2.4. Game Modality As we said before, there are many variants of poker. In this Graduate Thesis we center on the variant of NLHE in the “Pre-Flop” phase and the tools needed. In this phase each player, must decide to bet or not in function of the cards in their hand and the probabilities to make a hand.
14 Capítulo 2. Introduction Furthermore we have chosen the scenario of a table with nine active players due to recreational players usually playing big tournament tables that have that number of players. 2.5. Frame of work All algorithms and functions in this Graduate Thesis have been developed in Java. The frame of work aims to help recreational players that play online poker. For this, users have a live action recommender and a customizable trainer to practice different situations and improve their game. The recommender can also be customized. The ranges can be modified in order to, once the player know how to play and their personal ranges, they can modify the existing ranges or creating new ranges. Finally, we have used external libraries such as Tess4J (Nguyen, 2016) to recognise the number of the bets of the players on the table from an image. There are also some restrictions due to the difficulty and the time it took to adapt to the changes in the PokerStars user interface (PokerStars.es, 2016b). These rectrictions are: The player must select in the PokerStars options to be seated on the bottom center part of the table. The player must select from the user options to use the deck theme with four colours and white numbers. No other window can cover the corners of the Pokerstar application (image 2.2) since they are needed to locate the window.
2.5. Frame of work 15 Figura 2.2: PokerStars window
Capítulo 3 Proceso de desarrollo Si la suerte no influyera en el poker, yo siempre ganaría. Phil Hellmuth Resumen: En este capítulo se explica cómo hemos trabajado de forma conjunta los integrantes del trabajo de fin de grado. 3.1. Introducción Teóricamente todo software desarrollado debería conllevar una documentación que se iría realizando a la vez que el proceso de desarrollo. Desgraciadamente en la mayoría de las ocasiones esto no sucede así; lo más común es generar al final un documento recogiendo la funcionalidad del código. Para el caso en el que el proyecto está integrado por más de una persona, la situación se complica de cara a asegurar que todo siga adelante de forma clara y robusta, ya que implica estar en constante comunicación con los demás integrantes del equipo. Para solucionar este problema se siguen procesos de desarrollo con una definición de los pasos y objetivos para cada fase hasta llegar al final. Por lo anterior, al ser dos personas trabajando en este proyecto, decidimos usar una metodología ágil basada en Scrum para asegurar una comunicación efectiva y eficiente. La metodología Scrum tiene muchos beneficios, como su gran flexibilidad a cambios, mayor calidad de software, mayor productividad, o disponer de una predicción de tiempos para medir la velocidad a la que se desarrolla. 17
18 Capítulo 3. Proceso de desarrollo La metodología Scrum se basa periodos de un tiempo determinado llamados “Sprints”, con reuniones periódicas y objetivos a terminar. Los Sprints pueden ser de tiempo variable, dependiendo de los objetivos del Sprint. Esta metodología es una de las más usadas en las empresas del sector de desarrollo de Software, ya que permite una integración rápida y con objetivos finales de cara a un cliente que quiere obtener su producto y, a partir de ahí, mejorarlo en cada Sprint. Desde la primera reunión decidimos dividir el trabajo de tal forma que ambos pudiéramos avanzar sin tener que preocuparnos de la parte del compañero, para así agilizar el proceso y no ralentizarlo con conversaciones intermedias. Para almacenar los avances en el código usamos la plataforma Github como sistema de control de versiones. 3.2. Metodología Scrum En la versión pura de esta metodología el ciclo que se sigue en cada Sprint tiene las siguientes reuniones: Daily Scrum: reunión diaria para ver cómo va el proyecto. Reunión de planificación del Sprint (Sprint planning meeting): reunión al inicio de cada Sprint para seleccionar el trabajo que se hará. Reunión de revisión del Sprint (Sprint Review Meeting): reunión en la que se revisa el trabajo realizado. Retrospectiva del Sprint: reunión en la cual se opina sobre el Sprint para mejorar. El Sprint es el periodo en el cual se lleva a cabo el trabajo en sí. Suele tener una duración constante definida por el equipo en base a la propia experiencia, pero en cada Sprint se puede modificar en función del ritmo del equipo o de los objetivos por fechas. 3.3. Aplicación de Scrum al trabajo de fin de grado Al ser un grupo de dos personas, nos hemos basado en la metodología Scrum pero adaptándola a nuestra situación. Hemos eliminado las reuniones diarias ya que, al ser solo dos, en cualquier momento teníamos disponibilidad para hablar el uno con el otro y tratar los problemas según surgieran. Esto mismo es también aplicable a la retrospectiva.
3.3. Aplicación de Scrum al trabajo de fin de grado 19 Por tanto, nos quedamos con los beneficios de las reuniones de planificación y las de revisión. Al inicio decidimos empezar con un Sprint inicial de 60 días días debido a la necesidad de investigar las herramientas y tomar decisiones, para después continuar con Sprints de 30 días. Los Sprints realizados fueron los siguientes: 1. Sprint Inicial [25/11/2016-25/1/2016] En la reunión de planificación se decidió que ambos miembros del equipo nos dedicaríamos a la búsqueda de información sobre las salas de póker online e investigación sobre estrategias y las primeras aproximaciones en reuniones para darle forma al recomendador. En la reunión de revisión se decidió usar la sala PokerStars por ser, con mucha diferencia la más popular, tener una interfaz adaptable y, en un primer momento, la facilidad para sacar los datos que necesitábamos. 2. Sprint de Inicio de desarrollo [25/1/2016-25/2/2016] En la reunión de planificación se decidió separar el trabajo en dos partes debido a unos cambios en la interfaz de PokerStars que hicieron que no se pudieran obtener los datos de manera sencilla. El reparto fue el siguiente, y se mantendría hasta el final del trabajo: el alumno Juan Carlos Marco González se encargaría de hacer la implementación en Java del recomendador y el alumno Iván Martín Herrero se encargaría de hacer un reconocedor de imágenes para conseguir la información en el momento del turno del jugador. Partiendo de aquí, ambas funcionalidades se reestructuraron y subdividieron en varias tareas para los siguientes sprints. Para el Sprint actual se decidió que Juan Carlos Marco implementaría las tablas de Janda (Janda, 2013) pasadas al código y las funciones del recomendador para procesar la información llegada del Reconocedor de imágenes. Por su parte, Iván Martin implementaría el reconocedor de pantalla devolviendo la información de las cartas en mano, ciegas y posición. En la reunión de revisión cada uno presentó su parte pero se tenían ciertas dudas. En la parte del recomendador había algunas jugadas que no estaban claras y se decidió preguntar al tutor para saber cómo había que leerlas, de cara a saber cómo implementarlas. En el apartado del reconocedor se llegó con una solución para un tamaño de pantalla fijo y sin obtener aún las ciegas, por problemas al interpretar los números.
20 Capítulo 3. Proceso de desarrollo 3. Sprint de mejoras [25/2/201625/3/2016] En la reunión de planificación se decidió dedicar un sprint a mejorar lo que ya se tenía de las jugadas, con los cambios sugeridos por el tutor, y en la parte del reconocedor de imagen hacer que capturara los datos independientemente del tamaño de la pantalla. En la reunión de revisión se mostró una primera versión de cómo funcionaba el recomendador en directo con las mejoras en las jugadas, pero aún con la versión anterior del reconocedor ya que al extender la funcionalidad para cualquier tamaño, llevó tiempo de investigación volver a hacer los algoritmos para encontrar la pantalla de juego, las cartas, las posiciones y las ciegas, trabajo que se continuaría en el siguiente Sprint. 4. Sprint de Reconocedor y entrenador [25/3/201625/4/2016] En la reunión de planificación se decidió, con la ayuda del tutor, hacer un entrenador de jugadas como opción para aprender cómo jugar al póker y reaccionar ante las situaciones más comunes o aleatorias. En el apartado del reconocedor de imagen se decidió finalizarlo con la investigación hecha para los distintos tamaños y con la librería Tess4J para leer los números de las ciegas. En la reunión de revisión se llegó con todo realizado y funcionando, tanto el entrenador como el reconocedor para el recomendador. 5. Sprint de mejoras y memoria [25/4/2016 - 25/5/2016] En la reunión de planificación se decidió seguir mejorando y haciendo debug del software para casos distintos, ya ambos miembros del equipo trabajando en lo mismo, buscando los errores que pudieran surgir, además de investigando para mejorar el reconocedor y optimizarlo frente a jugadores explotables. Así mismo, se decidió comenzar la escritura de la memoria y darle forma. El coordinador de la redacción fue el alumno Iván Martín. 6. Sprint de Finalización [25/5/2016-Final] Se terminó de añadir el recomendador adaptativo con las llamadas a la base de datos de PokerTracker. Además, se completó la escritura de la memoria con los últimos cambios pertinentes y se procedió a su entrega al tutor.
3.4. Contribuciones de Juan Carlos Marco González 21 3.4. Contribuciones de Juan Carlos Marco González 3.4.1. Servidor PokerStove Se empezó a crear una aplicación de servidor que ofrecería, mediante la invocación de métodos en remoto de Java, Java RMI, la posibilidad de calcular el equity desde la aplicación cliente, utilizando una herramienta ya existente llamada PokerStove, capaz de calcular millones de manos en apenas segundos. Sin embargo, nos encontramos con el hándicap de no saber cómo usarla por medio de la terminal. Tras un periodo de investigación para determinar si existía alguna forma de invocar al programa desde la terminal, y no encontramos nada al respecto. Se tomó la decisión de usar éste en su modo normal, es decir, el gráfico. Para ello, se comenzó a investigar cómo se podían usar aplicaciones con entorno gráfico desde Java y, al fín, se dio con la respuesta. Ésta se corresponde con la clase Robot de Java, la cuál permite usar los eventos normales de uso para comunicarse con la maquina, como son: mover el ratón, hacer click, escribir, etc. En la parte del servidor se decidió crear una interfaz con métodos acordes a las prestaciones que da la aplicación PokerStove (cómo introducir los rangos de los jugadores en sus respectivas casillas, cambiar entre la generación de todas las manos o modo Montecarlo, etc.). De esta forma es posible que desde la aplicación cliente, se pudiera usar PokerStove, en remoto, con la garantía de recibir los datos de forma rápida y poder usarlos en nuestro recomendador de póker. A continuación se presentó un nuevo hándicap: ¿cómo conectar el servidor con la aplicación cliente? Para esta cuestión se comenzó a investigar la conexión remota en Java, y se llegó a dos posibles soluciones: usar Java RMI, el cuál permite manejar objetos instanciados en la memoria de otra máquina, de forma que desde la aplicación cliente se puede utilizar como si estuviera en la propia máquina; o, como segunda opción, usar Sockets, los cuales por medio de la red, envían mensajes con comandos y un servidor que al recibir estos mensajes, los clasifica y responde acorde a los comandos creados. Finalmente, se eligió la primera opción, Java RMI, dado que ya se tenía hecha una interfaz la cuál generaba el comando concreto para PokerStove, y por tanto adaptar ésto a Java RMI era una cosa trivial y por consiguiente se ganaría bastante tiempo.
28 Capítulo 3. Proceso de desarrollo también que al estar familiarizado con hacer documentación de los proyectos para la empresa, tenía mayor conocimiento para hacerlo de forma más eficiente. Para la maquetación se usó TEXiS, una plantilla de L A TEX(Oetiker et al., 1996), un sistema de composición de textos orientado a la creación de documentos escritos con alta calidad tipográfica. TEXiSestá desarrollada por dos profesores de la Facultad: Marco Antonio Gómez Martín y Pedro Pablo Gómez Martín (Gómez-Martín y Gómez-Martín, 2009). Esta plantilla facilitó la maquetación ya que aporta un sistema común a los demás documentos de la facultad, ayuda a separar las secciones y aporta un estilo distintivo a la portada y al proyecto en general. 3.5.4. Reconocedor de imagen Tablero de Juego Llamaremos tablero de juego a la ventana de PokerStars con una partida en curso (figura 3.1) y dentro de la cuál vamos a leer las distintas opciones que necesitaremos de cara a decidir qué hacer en cada jugada. Figura 3.1: Tablero de juego de PokerStars Para encontrar la posición de esta ventana se decidió usar el logotipo de
3.5. Contribuciones de Iván Martín Herrero 29 PokerStars ya que nos daba la información de dónde empezaba la ventana y, como en un primer momento se decidió hacerlo con la pantalla de tamaño predeterminado, nos daba toda la información necesaria para encontrar el tablero de juego. Se procedió a desarrollar este algoritmo paraencontrar la pantalla mediante la extracción de la imagen a buscar y un algoritmo de búsqueda para encontrar un parecido con esta imagen: se buscaba que coincidiera la imagen al completo, mediante una comparación del color de los pixeles de la imagen tomada mediante una captura de pantalla y la imagen extraída. Al tratarse de una imagen pequeña, la comparación no llevaba mucho tiempo, pero si el recorrido que se realizaba para encontrar el inicio. Posteriormente, se mejoró el código de tal forma que sólo comparaba la imagen al completo si, una vez encontrado el primer pixel coincidente, el último de la imagen extraída coincidía con el de la captura, avanzando el tamaño de la imagen extraída; en caso contrario, se seguía con la búsqueda habiendo hecho solo dos comparaciones. Una mejora posterior consistió en tener en cuenta que determinada la coincidencia de ambos extremos, sólo se compararían con las respectivas posiciones en la captura de pantalla: el pixel central, el superior, el inferior, el izquierdo y el derecho respecto al central (es decir, la cruz formada por los 5 pixeles mencionados). Esto resultaba más eficiente y todavía efectivo, ya que la probabilidad de encontrar ese patrón en otro lugar de la pantalla era muy baja, al ser un logotipo. Una vez realizada la última versión, al realizar la unión con la lógica que leería los datos, aunque solo fuera el encontrar el tablero de momento y una primera versión de la lógica, se vio que en una versión anterior de Windows la ventana era diferente y, aunque aparecía el logotipo de PokerStars, aparecía descentrado y además las dimensiones no eran las mismas debido a la resolución de pantalla. Por tanto en la siguiente reunión del Sprint se decidió cambiar el método, lo que conllevó una investigación adicional para encontrar de otras formas de hacerlo, y además, hacerlo escalable. Tras un periodo de investigación y de ensayos y errores, ya que la pantalla al cambiar de tamaño no seguía ninguna proporción, se llegó a la versión funcional y escalable que reconocería la posición y el tamaño del tablero. Para ello se descubrió que el chat y el tamaño del campo de escritura del mismo situado en la parte inferior izquierda de la pantalla siempre mantenían el mismo tamaño independientemente del tamaño exterior de la pantalla, por lo que se tomó como punto de partida. Ahora faltaba encontrar el tamaño tanto de ancho como de largo de la pantalla. Esta parte fue más tediosa ya que, dependiendo del tamaño de la ventana, los colores y formas de las esquinas superior e inferior derechas y la
30 Capítulo 3. Proceso de desarrollo superior izquierda cambiaban demasiado como para tomar un patrón claro o una imagen de partida como en el caso inicial del proyecto. Finalmente, tras probar varios métodos, se encontró un patrón en la esquina superior izquierda que permitió establecer el alto del tablero de juego así como el punto inicial desde el que se procedería a cortar la imagen para luego tratar el tablero de forma autónoma. Nos quedaba entonces encontrar el ancho pero, una vez tenemos la altura en la que se empieza, solo había que seguir esa línea de pixeles, ya que en algún punto se terminaría para dar paso a la pantalla de escritorio del usuario o marco de la ventana. Para ello se encontró otro patrón en esa esquina, que cuando cambiaba después de una línea en un tono de gris a otro color, se sabía que era el final, y por tanto ya teníamos el ancho del tablero. Una vez teníamos el punto inicial, alto y ancho de nuestro tablero, pudimos proceder a hacer un recorte de la captura inicial de la pantalla para solo tener el tablero de juego y leer los demás datos que necesitaremos, ya que aunque la proporción no es siempre la misma con el tamaño (esto lo volveremos a ver dentro de cada uno de los reconocimentos de elementos siguientes) difiere poco una vez tomado los valores correctos del tablero de juego. Ficha de posición Llamaremos ficha de posición al círculo con el as de picas rojo que esté en el tablero e indica quien es el Dealer (repartidor) y a partir del cual se ponen las ciegas. Para encontrar esta ficha se sacó una imagen de ella para buscar dentro del tablero (figura 3.2). Al principio se sacaron todas las posibles posiciones (SB, BB, UTG, EP, MP, CO, BTN) con las coordenadas donde tendría que estar la ficha de posición en cada una, ya que el tamaño de la ventana era fijo y se iba probando si coincidía por posición hasta que una encajara. Figura 3.2: Ficha de posición en PokerStars Tras ver los anteriormente mencionados casos en los que la pantalla podría tener tamaños distintos, este método resultó poco fiable, por lo que se procedió a investigar nuevas formas de buscar la ficha de posición, descubriendo que el tamaño de la ficha también variaba con el tamaño de la
3.5. Contribuciones de Iván Martín Herrero 31 pantalla, por lo que se decidió coger una imagen de cada uno de los tamaños posibles, seis en total. Acto seguido, dado que la posición dentro de la pantalla también variaba según el tamaño, y teniendo en cuenta que el tamaño era practicamente proporcional y el error despreciable, se decidió que se acotarían las zonas en función del tamaño de la ventana usando porcentajes para delimitar las búsquedas de las posiciones. Una vez delimitada, en la porción objetico se hace una búsqueda de la imagen de la ficha de posición, empezando por la de tamaño más común y así sucesivamente por posición hasta que la ficha de tamaño correcto es encontrada, devolviendo la posición en la que nos encontramos. Además, este método se aprovecha para saber en que tamaño de tablero nos encontramos ya que las cartas de la mano cambian de tamaño a la par que esta ficha. No se puede usar el tamaño que hemos sacado para el tablero porque los cambios entre una ficha y la de siguiente tamaño apenas eran apreciables cuando se investigó. Cartas de la mano Llamaremos cartas de la mano a las dos cartas que se muestran al jugador durante la mano y que serán exclusivas de dicho jugador para completar las jugadas. Para encontrar estas cartas, como al principio se supuso un tamaño fijo de la ventana, se buscaban las coordenadas dentro del tablero de juego. Para obtener el palo de la carta se optó por coger el color de un pixel de dentro de la carta y en función del color asignar el palo ya que al ser constante el punto del que lo sacamos para cada uno de los posibles palos (picas, diamantes, corazones, tréboles) sería siempre el mismo color. Para el número abstraeríamos la zona superior izquierda de la carta, que es donde se encuentra, y se cuenta el número de pixeles en blanco que hay para el número. Figura 3.3: As de Corazones Tras el cambio a tablero de juego escalable,volvimos a sufrir problemas similares a los casos anteriores, ya que el tamaño de las cartas y sus coordenadas dentro del tablero cambiaban en función del tamaño del tablero.
32 Capítulo 3. Proceso de desarrollo Figura 3.4: As de Diamantes Tras comprobar que el cambio de tamaño era análogo al de la ficha de posición, se crearon unas constantes asociadas con las posiciones de las cartas para cada tamaño, de forma que, en función del tamaño obtenido en el método de la búsqueda de la ficha, pudiéramos usar las coordenadas adecuadas. Para obtener el palo se continuó usando el mismo método, dado que al ser las coordenadas fijas para una carta del mismo palo nos devolvería en ese pixel el mismo color. En cuanto al número, se siguió cortando la imagen de la carta para sacar solo la zona del número en función del tamaño, y se empezó a usar la librería Tess4J, una librería de reconocimiento de texto y números en imágenes. Al principio fallaba, ya que muchas veces no conseguía leer bien el número, ya que al hacerlo por reconocimiento de patrones y comparación con su diccionario, a veces eran muy parecidas y daba resultados erróneos. Para resolver este problema se hicieron casos excepcionales dentro del método para sacar el número y calibrar estos errores. Tras lo anterior hubo una mejora que permitió hacer más rápido el reconocimiento; los tamaños de las cartas se dejaron de guardar en función del tablero, y pasaron a almacenarse como porcentaje en función del tamaño del tablero obtenido en el paso de recortar el tablero de juego. Por ello hubo que cambiar el modo de obtener el palo, ya que no siempre se obtenía ahora el mismo pixel en la posición de la carta, aunque se siguió el mismo proceso estableciendo rangos del color (la función que nos daba el color del pixel los daba en tipo entero) y así diferenciarlos. La mejora en el número consistió en tener en cuenta que los rangos usados para obtener el palo también se usaron para convertir esas zonas a pixeles en negro y dejó solo en color claro el número de la carta para que Tess4J pudiera sacarlo de forma más eficaz. Apuestas de rivales Llamaremos apuestas de los rivales a los montones de fichas que aparecen delante de las personas a los que nos enfrentemos. Aunque desarrollamos un método que devuelve las de todos, en la lógica solo se tienen en cuenta hasta nuestra posición. Es decir, si estamos en MP solo se van a tener en cuenta las de SB, BB, y EP que son las personas que han jugado ya, las de los demás
3.5. Contribuciones de Iván Martín Herrero 33 será cero. Se hizo un primer intento con la librería Tess4J para la versión de tamaño fijo, pero fallaba bastante al distinguir los números; se necesitaba entrenar más el conjunto de diccionarios o hacer reglas excluyentes. Para obtener estos números se recortaba la porción del tablero donde estaban las ciegas y se pasaba el archivo a Tess4J. Pero antes llegó el hacerlo escalable, y tras los avances realizados para obtener los números de las cartas, se aplicó el mismo algoritmo consistente en convertir en píxeles negros todos aquellos que no formaran parte del conjunto de colores en el que se mostraban los números. Además, se siguió la misma forma de capturar las zonas, investigación de las posiciones y establecer a partir de que porcentaje se encontraban para buscarlo independientemente del tamaño del tablero. Ciegas, apuestas y bote Por último nos queda sacar las apuestas hechas en la mesa hasta nuestra posición. Para ello se investigó un procedimiento que consistía en capturar la posición, de las apuestas de cada jugador para aplicar a continuación el mismo método que con las cartas para obtener el valor de las apuestas. Al principio, como en los casos anteriores, estaba establecido dónde se encontraban pero, tras el cambio para permitir que los tableros fueran escalables, se pasó a porcentaje en función del tamaño total del tablero de juego. Para cada uno de los jugadores se toma una imagen de donde debería estar su apuesta, y ésta se pasa a un método para encontrar los valores, si no hay apuesta devuelve 0, y si la hay entonces devuelve la apuesta encontrada. Figura 3.5: Apuesta de un jugador En este apartado se aplicó la segunda versión de la optimización consistente en volver los pixeles negros, a excepción de los que fueran los correspondientes a los números para que así la librería Tess4J los reconociera mucho mejor. Por último, el bote total de la mesa se saca de manera análoga a las apuestas (figura 3.6).
34 Capítulo 3. Proceso de desarrollo Figura 3.6: Bote total de la mesa
Capítulo 4 Diseño, uso y resultados El juego del poker no consiste en ganar dinero, sino en tomar buenas decisiones. Si tomas la decisión correcta, ganarás dinero. Annie Duke 4.1. Diseño del software El diseño de este software se planteó como un programa amigable y fácil de usar por los usuarios de manera intuitiva. Para ello se hizo el siguiente diseño. Un menú principal con las opciones del software de tal forma que pulsando en cada botón el usuario accede a la herramienta que se quiera usar en ese momento. De cualquier ventana se vuelve al menú principal cerrándola, lo que se representa en los diagramas como una X. En el primer diagrama de flujo (figura 4.1) se muestran los distintos caminos que se pueden seguir desde el menú principal. Cada uno de los flujos se explicará con más detalle en las siguientes secciones. 4.1.1. Flujo del Recomendador Tras llegar a la ventana del recomendador se comprueba si el usuario ha añadido previamente una ruta a sus manos de Pokerstars; en caso contrario le pedimos que lo haga ahora. Una vez tengamos la ruta de las manos, el usuario podrá poner en marcha el recomendador con el botón de Start, y el software empezará a buscar la mesa en la pantalla y, mientras no la encuentre, seguirá esperándola. Una vez 35
36 Capítulo 4. Diseño, uso y resultados Figura 4.1: Diagrama de flujo desde el menú principal la encuentre, esperará el turno del jugador, mostrándole la recomendación mientras sea el turno, una vez se pase, esperará al siguiente turno del jugador, como se observa en la figura 4.2. 4.1.2. Flujo del Entrenador Una vez estemos en la ventana del entrenador, podremos seleccionar que tipo de jugada queremos generar con los botones o generar una propia manualmente. Después seleccionaremos la acción a realizar (FOLD, RAISE, CALL), y evaluaremos la jugada. A continuación se mostrará la información de si hemos acertado o no y podremos generar una nueva jugada. 4.1.3. Flujo de la herramienta de rangos En esta ventana podremos o bien crear nuevos rangos o bien modificar algunos de los ya establecidos. Para crear un nuevo rango seleccionamos la situación en la que estaremos (OR, 3-Bet, etc) la posición (SB,BB,MP, etc) y finalmente las jugadas para ese rango. Guardaremos el rango dándole el nombre que queramos. Para modificar un rango existente lo seleccionaremos de la lista desplegable de rangos, de la tabla seleccionaremos las jugadas que queramos añadir o quitar, modificando el rango y pulsaremos en reescribir. Podremos dejarle el mismo nombre o modificarlo y después guardar. 4.1.4. Ruta de PokerStars Se nos abre una ventana para seleccionar la ubicación, podemos o bien seleccionar la ubicación y aceptar o cancelar.
4.1. Diseño del software 37 Figura 4.2: Diagrama de flujo del recomendador
44 Capítulo 4. Diseño, uso y resultados Nuevo 3-Bet: Genera una nueva jugada de 3-Bet. Por otro lado, hay dos ventanas de información en el lado derecho de la ventana. La superior indica la jugada que el usuario tiene en la mano y se podrá modificar con el botón de Rangos o dejarla como está cuando generemos una jugada. La inferior indica de forma sencilla cuál es la jugada. Una vez el usuario decida qué hacer, el entrandor indicará si la decisión ha sido un acierto o un error. Para empezar a entrenar el usuario debe elegir qué tipo de jugada desea generar: Aleatoria, Open Range o 3-Bet, y pulsar sobre el botón de la jugada elegida. Ésta se mostrará en al parte de la izquierda, y la sección de log mostrará la información de la que se dispone (figura 4.12). Figura 4.12: Entrenador tras generar una jugada Open Range La posición del usuario en la jugada generada se indica mediante el círculo seleccionado en la parte izquierda, así como en la información del log. También dispone de los datos de los jugadores que se encuentran antes del jugador, así como las cartas que tiene en la mano, mostradas en la ventana de “Mi Mano”. Con esta información, el usuario deberá elegir qué hacer, seleccionando una de las opciones del desplegable correspondiente a su posición (CALL, RAISE o FOLD). Una vez seleccionado un movimiento, el usuario pulsará “Evaluar” para saber si la decisión ha sido adecuada o no, tras lo cual el programa mostrará en la ventana de log la siguiente información (figura 4.13): Situación: Rango que se ha usado para evaluar la jugada. Su acción/Acción ideal: Muestra el movimiento elegido y la acción óptima.
4.2. Uso del programa 45 Resultado: Muestra de forma visual si se ha acertado o no en la jugada. Figura 4.13: Entrenador tras evaluar la opción elegida Ahora el usuario podrá generar una nueva mano con los botones de “Nuevo Aleatorio”, “Nuevo OR” o “Nuevo 3-Bet” para continuar entrenando. Si no se desea tener toda la información de entrenamiento de la sesión hasta ahora, se puede borrar el log con el botón “Limpiar”, disponible debajo del mismo. También podrá limpiar la mesa anterior para generar una jugada propia. Si el usuario intenta generar una jugada imposible, el entrenador mostrará un mensaje indicando que no es una mano reconocible en el póker. Por ello se recomienda no utilizar esta opción a no ser ue se trate de un jugador de póker de nivel medio, sugiriendo a los usuarios noveles que utilicen las jugadas generadas con las opciones automáticas. 4.2.3. Rangos En esta ventana el usuario podrá ver, modificar o añadir nuevos rangos para utilizar con nuestro recomendador. Para ello se presenta la interfaz de la figura 4.14. Si el usuario desea crear un rango nuevo, deberá seguir los siguientes pasos: 1. En el desplegable “Situación” de la parte derecha, seleccionará la situación para la que desea generar el rango. 2. Justo debajo, seleccionará la posición en la que se encuentra.
46 Capítulo 4. Diseño, uso y resultados Figura 4.14: Aspecto de la ventana de Rangos 3. Seleccionar sobre la tabla de la izquierda las jugadas que queramos en nuestro rango. 4. Pulsará sobre “Guardar Rangos en situación”, dará un nombre y guardará. Si por otro lado el usuario desea modificar un rango existente, deberá seleccionar en “Cargar rangos” a la derecha el rango que desea modificar (figura 4.16). En la tabla de la izquierda aparecen en amarillo las jugadas que componen el rango seleccionado. Una vez cargado, el usuario tiene varias opciones para modificarlo: Jugadas: Quitar o poner a mano las jugadas que quiere o no quiere incluir, pulsando sobre ellas en la tabla. Porcentajes: Coger el porcentaje de manos a partir del primer valor y hasta el segundo valor. Polarizar: Tomar los valores polarizados entre los porcentajes establecidos para añadir valores de “farol”. Esta modificación se plantea para usuarios de nivel alto de conocimiento de póker. El usuario podrá usar una de estas opciones o cualquier combinación de la primera con alguna de las otras dos. Hecho esto, el usuario pulsará sobre “Reescribir rangos”, dará un nombre o sobreescribirá uno existente y guardará.
4.2. Uso del programa 47 Figura 4.15: Ejemplo de creación de un Open Range en UTG Figura 4.16: Ejemplo de modificación del Opening Ranges_CO
48 Capítulo 4. Diseño, uso y resultados Figura 4.17: Ejemplo de modificación de Opening Ranges_CO, seleccionando entre el 10 % y el 50 % y modificando jugadas 4.2.4. Ruta de PokerStars Al seleccionar la opción de Ruta de PokerStars, se abre una ventana (figura 4.18) donde el usuario podrá seleccionar la ruta donde desea guardar las manos de PokerStars. El programa utilizará estas manos para adaptar los rangos cuando se tenga suficiente información de los jugadores. Figura 4.18: Ventana de selección de ruta
4.3. Resultados 49 4.3. Resultados En este proyecto se construyó un producto software que no genera una salida a partir de una entrada, si no que supone un soporte para gente que está empezando en el mundo del póker online. Por ello, en vez de presentar los resultados de las pruebas unitarias realizadas a lo largo del proceso software, parecería más relevante aportar los resultados de un test de usabilidad, para estudiar si los usuarios encuentran la herramienta útil e intuitiva de cara a mejorar su juego. El test de usabilidad que se presentó (anexo A) consiste en tres partes, cuyos resultados se analizan de forma anónima. Las partes del test de usabilidad son las siguientes: Formulario de control: Breve cuestionario anónimo de clasificación de los participantes por edad, género, estudios, ocupación y conocimiento sobre póker. Tareas: Una serie de tareas a realizar con la herramienta, durante las cuales se pide a los participantes que piensen en voz alta y hagan comentarios y sugerencias durante el proceso. Asímismo se miden los tiempos y errores durante la realización de cada tarea usando la hoja de mediciones A. Cuestionario final: Un cuestionario de evaluación de la aplicación y una nueva oportunidad para que el participante exprese su opinión. El test de usabilidad se realizó con tres participantes, de los cuales uno se consideraba un jugador novel de póker, uno decía tener un nivel medio y el tercero era experto. Todos eran hombres y mayores de edad, aunque tenían distintos niveles de estudios y ocupaciones. Las tareas, que se pueden consultar en el anexo A, tomaron una media de 54.3 minutos a cada participante, con la primera siendo la más costosa, tanto en tiempo como en errores, seguida de la tarea 3.2, mientras que la más sencilla fue la tarea 4. Estos datos se pueden comprobar en las gráficas de las figuras 4.19 y 4.20. En general, los participantes encontraron que la aplicación cumple con su cometido: ofrece una ventaja a la hora de utilizar el recomendador durante el juego, además de una herramienta útil de aprendizaje. Sin embargo, encontraron que algunos aspectos de la aplicación resultaban complicados al uso y podrían tener una interfaz mejorada. También se sugirieron algunas ampliaciones o mejoras, como incluir una explicación breve de los conceptos básicos para los usuarios más principiantes o ampliar la funcionalidad a otras
50 Capítulo 4. Diseño, uso y resultados Figura 4.19: Tiempo medio empleado en cada tarea Figura 4.20: Media de errores por tarea
4.3. Resultados 51 fases de la mano, más allá del Pre-Flop. Como se observa en la gráfica de la figura 4.21, las puntuaciones medias son relativamente satisfactorias, con una puntuación mínima de 3 para todos los criterios. Figura 4.21: Puntuación media de satisfacción según los criterios de evaluación del cuestionario final La parte de la aplicación que más gustó y más útil resultó fue el recomendador, a pesar de que encontraron incómodos los tiempos de espera. Por otro lado, los rangos resultaron menos agradables, por ser considerada la sección más compleja y que más requería de explicación de conceptos.
Capítulo 5 Conclusiones y líneas futuras No olvides que siempre habrá otra partida de poker, si no mañana, pasado mañana o la semana que viene. Me gusta pensar en el poker como un juego constante que dura toda mi carrera. Jennifer Harman Resumen: Tras finalizar el proceso de desarrollo de un proyecto software, es primordial ver hasta dónde hemos llegado y qué hemos conseguido. En este capítulo vamos a ver qué objetivos hemos cumplido, los problemas que hemos encontrado por el camino y las posibles formas de avanzar en el proyecto en un futuro. 5.1. Conclusiones En este proyecto hemos conseguido cumplir todos los objetivo planteados al inicio del proceso, es decir, construir tanto un recomendador como un entrenador para la fase Pre-Flop de juegos de póker NLHE online en la sala PokerStars. Más específicamente hemos desarrollado: Un reconocedor de imágen eficiente de la situación de la mesa de juego en un momento dado. Un recomendador de jugadas adaptativo en función de nuestros rivales y de como hayan jugado hasta entonces. Un entrenador para mejorar y aprender a hacer frente a las jugadas más comunes en el póker. 53
Apéndice A Test de usabilidad Introducción Estamos evaluando esta herramienta realizando con usted un test de usabilidad. Durante el test le agradeceremos que se sienta libre de realizar cualquier comentario, sugerencia o pregunta que se le ocurra. El test de usabilidad consiste en la realización de una serie de tareas con la aplicación, que le explicaremos a continuación. Tenga en cuenta que estamos evaluando la aplicación, no a usted, por lo que no va a hacerlo ni bien ni mal, nuestro objetivo es ver el uso de la aplicación en una situación real para identificar problemas y fallos que presente. El primer paso será un pequeño formulario general de clasificación. Todos los datos serán anónimos, no tendrá que darnos ninguna información identificativa. Continuaremos con la realización de las tareas indicadas, durante la cual tomaremos anotaciones que corresponderán con el tiempo empleado y los comentarios que vaya haciendo. Finalmente procederemos con un pequeño cuestionario para recoger información de su satisfacción en el uso del producto. ¡Muchas gracias por su colaboración! 61
62 Apéndice A. Test de usabilidad Formulario de control Género •Hombre •Mujer •Otros (indique cual) Edad •<18 •18-24 •25-29 •30-39 •40-49 •50-59 •60-69 •70+ Ocupación •Estudiante •Informático •Otros (indique cual) Nivel de estudios •Educación secundaria obligatoria (ESO) •Bachiller o COU •Formación Profesional (FP) •Estudios Universitarios (licenciatura o grado) •Estudios de post-grado (máster o doctorado) •Otros (indique cual) Conocimiento sobre póker •Novel •Medio •Alto
63 Tareas a realizar Las tareas que debe realizar son las siguientes: 1. Recomendador Juegue 10 de manos en PokerStars, aplicando las recomendaciones del programa. a) ¿Le parece clara la indicación de las esperas entre manos? b) ¿Le parece clara la recomendación? 2. Entrenador a)Generar una jugada aleatoria Genere una jugada aleatoria pulsando el botón correspondiente y posteriormente seleccionando la jugada a realizar y después el botón evaluar; 1) ¿Le parece claro el botón de seleccionar la jugada? 2) ¿Es capaz de reconocer la situación de la mesa? 3) ¿Es capaz de encontrar su posición? 4) ¿Es capaz de seleccionar su jugada? 5) ¿El botón de Evaluar le parece claro? 6) ¿Le parece claro como limpiar la ventana de Log? 7) ¿Le parece claro como reiniciar/limpiar la mesa? b)Generar jugada Open Raise Genere una jugada Open Raise pulsando el botón correspondiente y posteriormente seleccionando la jugada a realizar y después el botón evaluar; 1) ¿Le parece claro el botón de seleccionar la jugada? 2) ¿Es capaz de reconocer la situación de la mesa? 3) ¿Es capaz de encontrar su posición? 4) ¿Es capaz de seleccionar su jugada? 5) ¿El botón de Evaluar le parece claro? 6) ¿Le parece claro como limpiar la ventana de Log? 7) ¿Le parece claro como reiniciar/limpiar la mesa? c)Generar jugada 3-Bet Genere una jugada de 3-Bet pulsando el botón correspondiente y posteriormente seleccionando la jugada a realizar y después el botón evaluar; 1) ¿Le parece claro el botón de seleccionar la jugada? 2) ¿Es capaz de reconocer la situación de la mesa? 3) ¿Es capaz de encontrar su posición?
64 Apéndice A. Test de usabilidad 4) ¿Es capaz de seleccionar su jugada? 5) ¿El botón de Evaluar le parece claro? 6) ¿Le parece claro como limpiar la ventana de Log? 7) ¿Le parece claro como reiniciar/limpiar la mesa? 3. Rangos Solo debe realizar estas tareas si se considera un usuario medio o avanzado. a)Crear un nuevo rango Cree un nuevo rango desde 0 seleccionando las jugadas que desee de la tabla interactiva de la izquierda, seleccione el tipo de rango que es, su posición en la mesa y guarde. 1) ¿Le parece sencillo seleccionar las jugadas? 2) ¿Y la situación? 3) ¿Y la posición? b)Modificar un rango existente Modifique uno de los rangos existentes, seleccionandolo con el desplegable y cambiando las jugadas con la tabla interactiva de la parte izquierda, y/o usando las opciones de porcentajes o polarizando. 1) ¿Le parece sencillo seleccionar el rango? 2) ¿Y modificarlo con la tabla interactiva? 3) ¿Y modificarlo con los porcentajes/polarizarlo? 4. Cambiar la ruta del fichero de Pokerstars Modifique la ruta actual de las manos guardadas a un directorio distinto. a) ¿Le parece sencillo el cambio?
65 Cuestionario final Por favor evalúe los siguientes criterios del 1 al 5, siendo 1 la puntuación mínima y 5 la máxima: 1. Facilidad de uso de la aplicación en general. 2. Utilidad del recomendador. 3. Utilidad del entrenador. 4. Utilidad de modificar los rangos (si aplica). 5. Utilidad de cambiar la ruta. 6. Estructura y organización de la aplicación. 7. Representatividad y claridad de los botones y ventanas de la aplicación. 8. En general, ¿le fue intuitivo usar el recomendador? 9. Teniendo en cuenta el propósito de la aplicación, ¿le parece que cumple su cometido? Por favor, conteste brevemente a las siguientes preguntas: 10. ¿Qué parte le ha gustado más? ¿Por qué? 11. ¿Cuál le ha gustado menos? ¿A qué es debido? 12. ¿Qué sección considera la más complicada? ¿Cuál podría ser su causa? 13. Por favor, comparta su opinión personal y cualquier observación acerca de la aplicación:
66 Apéndice A. Test de usabilidad Medidas del test A continuación se muestran las medidas que se tomarán durante la realización del test: Tiempo total: Total de errores: Medidas de tarea, se podrán anotar en la tabla A.1: (A) Tiempo empleado en realizar la tarea (B) Número de errores (C) Tiempo empleado en errores y recuperación (D) Frecuencia en la que se ha necesitado ayuda Tabla A.1: Medidas de usabilidad para las tareas A B C D Tarea 1 Tarea 2 a) Tarea 2 b) Tarea 2 c) Tarea 3 a) Tarea 3 b) Tarea 4
Bibliografía Intenta decidir lo buena que es tu mano en un momento determinado. No importa nada más. ¡Nada en absoluto! Doyle Brunson Gómez-Martín, M. A. yGómez-Martín, P. P. T EXiS: Una Plantilla de L A T EX Para Tesis y otros documentos, Manual de Usuario. 2009. Disponible en http://gaia.fdi.ucm.es/files/nightlybuilds/TeXiS/ TeXiS-Manual-NightlyBuild.pdf (último acceso, Junio 2016). Janda, M. Applications of No-Limit Poker. Two Plus Two Publishing LLC, 2013. ISBN 1-880-68555-8. Max-Value-Software.PokerTracker. 2016. Disponible en https://www. pokertracker.com/ (último acceso, Junio 2016). Muñoz, S. Rankings de Sklansky-Chubukov. 2009. Disponible en http://www.poker-red.com/articulos/estrategia/ rankings-sklansky-chubukov (último acceso, Junio 2016). Nguyen, Q. Tess4J, A Java JNA wrapper for Tesseract OCR API. 2016. Disponible en http://tess4j.sourceforge.net/ (último acceso, Junio 2016). Oetiker, T.,Partl, H.,Hyna, I. ySchlegl, E. The Not So Short Introduction to L A T EX 2ε. Versión electrónica, 1996. Oskari Tammelin, M. J., Neil Burch yBowling, M. Solving heads-up limit texas hold0em. 2015. Disponible en http://poker.cs.ualberta.ca/ publications/2015-ijcai-cfrplus.pdf (último acceso, Junio 2016). PokerStars.es.Poker Texas Hold0em. 2016a. Disponible en https:// www.pokerstars.es/poker/games/texas-holdem/ (último acceso, Junio 2016). PokerStars.es.PokerStars. 2016b. Disponible en https://www. pokerstars.es/ (último acceso, Junio 2016). 67
5 AUTORIZACIÓN PARA LA DIFUSIÓN DEL TRABAJO FIN DE GRADO Y SU DEPÓSITO EN EL REPOSITORIO INSTITUCIONAL E-PRINTS COMPLUTENSE Los abajo firmantes, alumno/s y tutor/es del Trabajo Fin de Grado (TFG) en el Grado en …………………………………………………………………………………………de la Facultad de …………………………………………………..………, autorizan a la Universidad Complutense de Madrid (UCM) a difundir y utilizar con fines académicos, no comerciales y mencionando expresamente a su autor el Trabajo Fin de Grado (TF) cuyos datos se detallan a continuación. Así mismo autorizan a la Universidad Complutense de Madrid a que sea depositado en acceso abierto en el repositorio institucional con el objeto de incrementar la difusión, uso e impacto del TFG en Internet y garantizar su preservación y acceso a largo plazo. Periodo de embargo (opcional): 6 meses 12meses TÍTULO del TFG: .......................................................................................................... …………………………………………………………………………………………………. Curso académico: 20….. / 20….. Nombre del Alumno/s: ………………………………………………………………………………………………… ………………………………………………………………………………………………… Tutor/es del TFG y departamento al que pertenece: ………………………………………………………………………………………………… ………………………………………………………………………………………………… ………………………………………………………………………………………………… Firma del alumno/s Firma del tutor/es Ingeniería en Informática Informática Recomendador adaptativo y entrenador pre-flop para NLHE 15 16 Juan Carlos Marco González Iván Martín Herrero Manuel Nuñez García Departamento de Sistemas Informáticos y Computación