Choose Language
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
Abak Logo
Jugando Abak Evolution con Aprendizaje por Refuerzo
El aprendizaje por refuerzo ha cambiado el juego para todos en IA. Lo usé para entrenar la red neuronal de Abak con resultados sobresalientes.

En 2018, Google venció al Campeón de GO con su Red Neuronal AlphaGo, y hubo tanto revuelo. Nuevas excelentes bibliotecas de Machine Learning de código abierto se volvieron disponibles, usando GPUs domésticas para acelerar el proceso de entrenamiento.

Tomé la decisión de intentarlo con Abak, pero cuando empecé, apenas sabía qué era una red neuronal. Había tenido una pequeña tentación en la universidad (1996), pero sin datos, una GPU, ni un objetivo, era complejo abordarlo. Además: matemáticamente, las Redes Neuronales son un tema pesado, y necesitas mucha inspiración.

Después de mucha investigación intensa y obsesiva, pude construir un modelo y hacerlo aprender.

De pie sobre hombros de gigantes, mi primer intento fue aprender del Dr. Gerald Tesauro, quien desarrolló TD-Gammon en los '90. Si recuerdo correctamente, esta fue la primera implementación práctica de un algoritmo de aprendizaje por refuerzo.

Pero como Abak es un juego bidimensional, no podía usar el modelo propuesto y tuve que desarrollar el mío propio. Decidí usar la salida de algunos de los algoritmos como parte del modelo, como información experta, para que la RN tuviera el proceso de aprendizaje más fácil. Me sentí como haciendo trampa al hacer eso.

Aquí hay una comparación entre ambos modelos, Backgammon y Abak.

Modelo de Backgammon

El modelo TD ampliamente usado de Backgammon describe columnas. Para cada columna del tablero, se usan 4 entradas para describirla.

  • Sin fichas: [0,0,0,0]
  • Una ficha: [1,0,0,0]
  • Dos fichas: [1,1,0,0],
  • Tres fichas: [1,1,1,0]
  • Más de tres fichas: [1,1,1,1].

Tiene 28 de estos conjuntos (uno por columna del tablero) para referirse a cada equipo, así que 28*2*4 entradas en total, más algunas para contar fichas en la barra. Desafortunadamente, estoy escribiendo esto de memoria, que podría no ser precisa.

Modelo de Abak Evolution

El modelo de Abak es muy diferente. Describe fichas, y cada una tiene un conjunto de características. En versiones más nuevas, añadí una descripción simplificada del tablero como complemento, con resultados que no fueron increíbles, pero las características siguen ahí.

El modelo de descripción del juego tiene cuatro partes [477 entradas]:

  • Descripción de Fichas (14x30): La descripción incluye estadísticas de la ficha, distancia, altura, etc. No incluye la clase, que es heredada por su posición en el modelo.
  • Estado del Equipo (4x2): Conteo de algunas características de fichas o estado.
  • Mapa de fuerza (24x2).
  • Estado del juego: ¡quién lanza siguiente! (1).

Puedes ver una descripción completa del modelo abajo.

Versiones:

1.- Python Cumpy (TD-V1).

La primera versión de esta IA fue entrenada en Python puro usando Cumpy, una biblioteca similar a Numpy que corre en la GPU. Quería aprender desde cero, así que aunque jugué un rato con Tensorflow, decidí ir al desnudo (bueno, equipado con el fantástico combo de Python y Cumpy).

Características:

  • Una red que estima las probabilidades de que el equipo 0 gane la partida.
  • Sin conocimiento de puntos.
  • No tenía la bandera "quién lanza siguiente".
  • No tenía el mapa de fuerza.
  • Una capa oculta, con activadores sigmoid.
  • Tomó 45.000 partidas para vencer a mi IA anterior escrita con información experta (GOFAI).
  • Aprendió por 4.500.000 partidas. Y ganó el 75% de los casos contra GOFAI.
  • Estuvo en producción por 2 años.

2.- Tensorflow (TD-V2).

Mi dolor con la Versión 1 era que no era buena calculando probabilidades de ganar porque fue entrenada sin la bandera "quién lanza siguiente". De alguna manera, los resultados de la RN eran bastante buenos para seleccionar un buen movimiento, pero matemáticamente, no eran consistentes. La Versión 2 arregló ese problema y añadió una nueva red para calcular las probabilidades de que la partida termine en 1, 2 o 3 puntos.

Elegí Tensorflow esta vez para entrenar el nuevo modelo porque quería aprender un framework, y encontré un excelente ejemplo para empezar.

Características:

  • Una red para calcular las probabilidades de que el equipo 0 gane la partida.
  • Una red para calcular la probabilidad de que la partida termine en 1, 2 o 3 puntos.
  • Incluye el nuevo mapa de fuerza.
  • Dos capas ocultas, con diferentes activadores: Leaky RELU para las capas ocultas y sigmoid en la capa de salida.
  • Tomó 12.000 partidas para ganar el 50% del tiempo contra TD-V1.
  • Aprendió por 350.000 partidas y alcanzó un 80% de tasa de victoria contra TD-V1.

3.- Versión 3: En Espera.

Como la milla final en la toma de decisiones de seleccionar el mejor movimiento, hay un algoritmo simple que busca la mejor Equidad [%V*%p1+%V*%p2+%V*%p3].

Dependiendo del objetivo del match, el número de puntos necesarios para que cada jugador gane, y el valor del cubo, pondera la salida de las redes de manera diferente.

Me gustaría hacer una RN que maneje eso. Esa será V3. No en desarrollo ahora mismo.

Modelo de Red Neuronal de Abak:

Descripción de Ficha (14 entradas x 30 fichas):

  • Distancia a casa
    x/25
  • Cantidad de fichas arriba
    x/4
  • Cantidad de fichas abajo
    x/4
  • Está en la barra
    [0,1]
  • Está en casa
    [0,1]
  • Está segura (a distancia = 0).
    [0,1]
  • Está haciendo bloqueo con otra ficha
    [0,1]
  • Es atrapable por el druida
    [0,1]
  • Está atrapada por el druida
    [0,1]
  • Está atrapando (esta entrada es solo para cada druida)
    [0,1]
  • Riesgo de ser capturada en zona cercana (6 posiciones adelante)
    [0..1]
  • Riesgo de ser capturada en zona lejana (12 posiciones adelante)
    [0..1]
  • Riesgo de ser atrapada por druida
    [0..1]
  • Probabilidades de movimiento
    [0..1]

Entrada relacionada al juego para cada equipo (4x2):

  • Cantidad de fichas en la barra.
    x/15
  • Cantidad de fichas seguras.
    x/15
  • Todas las fichas están en casa.
    [0,1]
  • Cantidad de fichas seguras 0.
    [0,1]

Mapa de Fuerza: (24*2):

Por último, un mapa de fuerza, similar a lo que propuso el Doctor Tesauro para Backgammon, pero simplificado. Para cada posición y para cada equipo, tiene un número entre 0 y 1, representando qué tan fuerte es ese bloqueo:

  • 0.0
    si está vacío.
  • 0.1
    si hay una ficha.
  • 0.5
    si esa ficha es un guardia.
  • 1.0
    si hay dos o más fichas.

Abak Evolution Backgammon es una increíble variante de Backgammon basada en clases, que literalmente añade una nueva dimensión al juego de mesa clásico.