Algoritmo para bots de Mahjong


Introducción
El algoritmo de abajo describe el nivel de IA o “raciocinio” de los bots de Mahjong.
Los bots aplicados no tienen capacidad de autoaprendizaje y siempre actúan en estricta conformidad con el algoritmo de abajo.

El algoritmo seleccionado para los bots de mahjong se basó en la observación y el análisis de cómo afrontan el juego los jugadores expertos. El algoritmo de abajo adopta las estrategias más comunes que emplean los jugadores expertos para formar combinaciones de mahjong.

Disposiciones generales
  • Los bots de mahjong toman decisiones basándose exclusivamente en la misma información abierta a la que tienen acceso los jugadores normales conforme a las reglas del juego.
  • Los bots no pueden ver nunca el contenido del muro o de las manos cerradas de los demás jugadores.
  • Los bots no tienen capacidad de autoaprendizaje y siempre actúan en estricta conformidad con el algoritmo. Los bots no modifican su comportamiento dependiendo de contra quién jueguen o de la puntuación.
  • El algoritmo para los bots y sus combinaciones preferidas varían dependiendo del ajuste de Puntos Mínimos (PM). Así, el bot se comportará de un modo distinto cuando juegue a la misma variante de mahjong con PM0 y con PM8.
  • Los bots nunca intentarán formar combinaciones especiales de alta puntuación que sean difíciles de obtener, p. ej. los bots para el Mahjong Hong Kong nunca formarán Siete pares, Tres grandes sabios, Trece huérfanos, etc.

    Definiciones
    1. Fichas Expuestas
    Fichas Expuestas son todas las fichas de descartes abiertos (Río) y de las combinaciones abiertas de otros jugadores (en las versiones Riichi esto incluye fichas Dora, Kan-Dora y Ura Kan-Dora).

    2. Fichas Muertas
    Una Ficha Muerta es una ficha en una mano propia cerrada que ya no puede formar parte de ninguna combinación mahjong (con la excepción de los 13 Huérfanos). Una Ficha Muerta tampoco puede formar parte de una pareja.
    Por ejemplo, si el VS (viento del Sur) forma parte de una mano, pero ya hay tres fichas VS en Fichas Expuestas, el VS en la mano será una Ficha Muerta.
    Si la mano contiene B2 (dos de bambúes) y la mano abierta tiene cuatro B1, tres B2, cuatro B3, el B2 es una Ficha Muerta.

    3. Una Ficha Problemática
    Una Ficha Problemática es una ficha con pocas probabilidades de formar parte de una combinación.
    Ejemplo de Ficha problemática:
  • Cualquier ficha de Viento o de Dragón si una de esas fichas está en la mano al tiempo que las Fichas Expuestas contienen 1 o 2 de esas fichas.
  • Cualquier ficha de número si una de esas fichas está en la mano y solo puede formar parte de una pareja.

    4. Una Ficha Única
  • Cualquier ficha de Viento o de Dragón cuando la mano cerrada solo contiene una de esas fichas
  • Cualquier ficha de número cuando la mano cerrada no contiene la misma ficha o una ficha que difiera en 1 o 2 de esa ficha
    Ejemplo: una mano que contenga: B1 B2 B4 C1 C4 D1 D2 D3 D4 VS VN VN VN
    B4 - NO es una Ficha Única
    D1 y D4 - NO son Fichas Únicas
    C1, C4, VS - Fichas Únicas

    5. Una Ficha Menor
  • Cualquier ficha de número que difiera en 1 de un Chow incompleto
    Ejemplo:
    B1 B2 B4    C2 C4 C5
    B4, C2 son Fichas menores y B1 B3 - una combinación incompleta así que B1 y B3 no son ni fichas únicas ni fichas menores.

  • Cualquier ficha de número descartada que no disminuya el número máximo de combinaciones ocultas (Chow, Pong, Kong, Pareja)
    Ejemplo de la mano anterior:
    B1 B2 B4 C1 C4 D1 D2 D3 D4 VS VN VN VN
    B4, D1, D4 - Fichas Menores

    6. Chow Incompleto Muerto
    Dos fichas de número consecutivas de la mano cerrada que no pueden completarse como chow.
    Por ejemplo, si la mano contiene B1, B2 pero las Fichas expuestas ya tienen cuatro B3, la combinación de B1, B2 es un Chow incompleto muerto.

    7. Pareja Muerta
    Una pareja que no se puede completar para formar un Pong.
    Por ejemplo, si la mano cerrada contiene B2, B2 pero las Fichas expuestas también tienen B2, B2, entonces B2, B2 es una Pareja Muerta.

    8. Chow Incompleto
    Dos fichas de número consecutivas sin la tercera o dos fichas de número que difieran en 2.

    Algoritmo para bots de Mahjong Hong Kong PM0

    1. Descartar
    El bot decide qué ficha descartar tras analizar las fichas de su propia mano y las Fichas Expuestas.
    El bot busca las fichas conforme a las Prioridades para descartar de abajo y selecciona la primera ficha con la máxima prioridad.
    Prioridades para descartar:
  • Fichas Muertas
  • Fichas Problemáticas
  • Fichas de Chows Incompletos Muertos
  • Fichas de Parejas Muertas si la mano contiene más de 1 Pareja muerta
  • Fichas Únicas (no Honores)
  • Fichas Únicas (Dragones y Vientos)
  • Fichas menores
  • Fichas de Chow incompleto
  • Fichas de Parejas muertas
  • Fichas de Parejas

    2. Declarar Mahjong
    El bot siempre acepta una declaración de Mahjong.

    3. Hacer un Kong
    El bot siempre acepta añadir una ficha para hacer un Kong.

    4. Pong, Kong, Chow
    Antes de descartar una ficha que podría usarse para formar una combinación, el bot debe comparar el número máximo de combinaciones ocultas (solo Chow, Pong, Kong) antes y después de declarar una combinación.
    Se declara una combinación únicamente en los siguientes casos:
  • Cuando el número máximo de combinaciones ocultas antes y después de la declaración de la combinación no varía
  • Cuando el número máximo de combinaciones ocultas disminuye en 1 - en este caso se declara la combinación Kong

    Algoritmo para bots de Mahjong Hong Kong 1 < PM <=8 (1,2,3 Fan)
    En esta variante del juego, la mano debe tener un mínimo de 3 Fan, de lo contrario no es posible declarar mahjong.
    Para descartar la posibilidad de que el bot forme 4 combinaciones y siga sin poder declarar mahjong, desde el comienzo del juego el bot intentará formar una de dos combinaciones relativamente sencillas: Pung o Un Palo con Honores.
    Siempre que el bot descarta, debe determinar cuál de las dos combinaciones de arriba es más probable.
    La probabilidad de cada una de las combinaciones está determinada por el mayor número de puntos del siguiente modo:
    Mano de Pung
    +5 puntos por cada Pong o Kong oculto o expuesto
    +2 puntos por cada pareja

    Un Palo con Honores
    15 puntos básicos
  • 2 puntos por cada ficha de un palo no común
  • 1 punto por cada ficha de Dragón o Viento
    Si un bot forma Un palo con honores, el primer elemento de las prioridades para descartar pasa a ser:
  • Al descartar una ficha del palo incorrecto si un bot no forma un Pung, los cálculos para el descarte no implican comprobar si hay Chow.
    El resto del algoritmo es igual que con PM0.

    Algoritmo para bots de Mahjong Hong Kong 8 < PM <=16 (4,5,6 Fan)

    Un bot para esta variante del juego está basada en la variante anterior.
    Si una mano contiene 1 Fan garantizado (Flor o Estación de Viento Propio, Pung de Dragones o Pung de Viento propio o Viento dominante) el bot se comporta del mismo modo que en el nivel anterior.
    Sin 1 Fan garantizado en la mano, el bot en esta variante forma una combinación de Un solo palo y descarta fichas de otros palos así como las fichas de Viento y Dragón.

    Algoritmo para bots de Mahjong Hong Kong 16 < PM <= (7 + Fan)

    En esta variante del juego, un bot solo forma una combinación de Un solo palo y ayuda a reunir las fichas que falten con la ayuda del azar al coger (Flores, Coger la última ficha, Cerrar la mano con una ficha cogida del muro).

    Algoritmo para bots de Mahjong Riichi
    Conforme a las reglas del Riichi, la mano debe contener al menos 1 Yaku.
    Hay unas pocas combinaciones sencillas disponibles con una mano abierta y otras que solo están disponibles con manos ocultas.
    Por ello, el bot debe decidir si crear una mano oculta o una mano abierta.

    Si el bot ya tiene una combinación expuesta, solo buscará combinaciones de mano abiertas.
    Si el bot tiene un Pon, un Kan cerrado o un par de Dragones o Viento propio o Viento dominante, buscará crear una mano abierta.
    De lo contrario, el bot intentará formar una mano cerrada.

    Un bot declarará Riichi siempre que tenga oportunidad de declararlo.
    En caso de que el bot esté construyendo una mano abierta y tenga solo una pareja de Dragones o Viento propio o Viento Dominante (y no Yaku), el bot no debe descartar nunca fichas de ese par y, en su lugar, elegirá descartar fichas de Chows o Pons ocultos.
    Una vez aplicadas las normas de arriba, el bot actúa exactamente del mismo modo que el bot Hong Kong MP0.

    Algoritmo para bots de la variante de Mahjong Rojo

    En todas las variantes de Mahjong Rojo, el bot no debe descartar nunca los Comodines.
    Por lo demás, el bot actúa exactamente igual que en las variantes Hong Kong con muy pocas excepciones.

    Si los puntos mínimos son más de 0 pero menos de 12, el bot intentará reunir Todos los Pungs o la combinación de Flush con Honores.
    Las normas para determinar qué combinación reunir son las mismas que en el Mahjong Hong Kong.
    Si los puntos mínimos son más de 12, el bot solo reunirá Flush Puros. Un bot reunirá el palo con la mayoría de fichas en una mano propia e intentará descartar primero fichas del resto de palos y fichas de Honores.