Enseña una red neuronal para jugar un juego de cartas


10

Actualmente estoy escribiendo un motor para jugar un juego de cartas, ya que todavía no hay un motor para este juego en particular.

Espero poder introducir una red neuronal en el juego después, y que aprenda a jugarlo.

Estoy escribiendo el motor de tal manera que sea útil para un jugador de IA. Hay puntos de elección, y en esos puntos, se presenta una lista de opciones válidas. La selección aleatoria podría jugar el juego (aunque no bien).

Aprendí mucho sobre redes neuronales (principalmente NEAT e HyperNEAT) e incluso construí mi propia implementación. Todavía no estoy seguro de cómo construir mejor una IA que pueda tener en cuenta todas las variables en uno de estos tipos de juegos. ¿Hay un enfoque común? Sé que Keldon escribió una buena IA para RftG que tiene una cantidad decente de complejidad, no estoy seguro de cómo logró construir una IA así.

¿Algún consejo? ¿Es factible? ¿Hay algún buen ejemplo de esto? ¿Cómo se mapearon las entradas?

EDITAR: He buscado en línea y he aprendido cómo funcionan las redes neuronales y, por lo general, cómo se relacionan con el reconocimiento de imágenes o la dirección de un agente simple. No estoy seguro de si lo aplicaría o cómo lo haría para hacer selecciones con tarjetas que tienen una sinergia compleja. Cualquier dirección hacia lo que debería estar buscando sería muy apreciada.

Sobre el juego: El juego es similar a Magic: The Gathering. Hay un comandante que tiene salud y habilidades. Los jugadores tienen una reserva de energía que usan para poner súbditos y hechizos en el tablero. Los súbditos tienen salud, valores de ataque, costos, etc. Las cartas también tienen habilidades, que no se pueden enumerar fácilmente. Las cartas se juegan de la mano, las cartas nuevas se sacan de un mazo. Todos estos son aspectos que sería útil para la red neuronal considerar.


Hola, bienvenidos a AI.SE! Tal como está actualmente, parece demasiado amplio para que podamos responderlo bien. ¿Crees que podrías editarlo para reducirlo un poco? ¡Gracias!
Mítico

Si bien la pregunta es amplia, es una pregunta obvia y común para alguien nuevo en el campo. También uno donde las respuestas son difíciles de encontrar usando Google (ya que la mayoría de los tutoriales sobre NN parecen centrarse en el reconocimiento de imágenes y ejemplos de lenguaje). Creo que merece una respuesta que señale buenos recursos sobre enfoques y técnicas para usar NN para jugar, en este caso en particular juegos de cartas.
usuario12889

Gracias por la respuesta. He editado mi pregunta un poco. Cualquier dirección hacia el material de aprendizaje sería útil. Encuentro principalmente el reconocimiento de imágenes como mencionaste. Estoy ansioso por aprender y estoy feliz de tener un gran conjunto de lecturas recomendadas, en lugar de solo una respuesta simple.
pcaston2

Respuestas:


3

Creo que plantea una buena pregunta, especialmente WRT sobre cómo las entradas y salidas de NN se asignan a la mecánica de un juego de cartas como MtG, donde las acciones disponibles varían mucho según el contexto.

No tengo una respuesta realmente satisfactoria que ofrecer, pero he jugado Keldon's Race para la IA basada en Galaxy NN, estoy de acuerdo en que es excelente, y he investigado cómo se abordó este problema.

El último código para la IA de Keldon ahora se puede buscar y navegar en github .

El código ai está en un archivo . Utiliza 2 NN distintos, uno para "evaluar cartas de mano y activas" y el otro para "predecir elecciones de roles".

Lo que notará es que utiliza una buena cantidad de código que no es NN para modelar la mecánica del juego. Muy una solución híbrida.

El mapeo del estado del juego en la evaluación NN se realiza aquí . Varias características relevantes están codificadas en caliente, por ejemplo, la cantidad de productos que se pueden vender ese turno.


Otro excelente estudio de caso para mapear un juego complejo en un NN es el entorno de aprendizaje Starcraft II creado por Deepmind en colaboración con Blizzard Entertainment. Este documento ofrece una descripción general de cómo se asigna un juego de Starcraft en un conjunto de características que un NN puede interpretar, y cómo un agente de NN puede emitir acciones para la simulación del juego.


2

Esto es completamente factible, pero la forma en que se mapean las entradas dependerá en gran medida del tipo de juego de cartas y de cómo se juega.

Tendré en cuenta algunas posibilidades:

  1. ¿Importa el tiempo en este juego? ¿Un movimiento pasado influiría en uno futuro? En este caso, sería mejor usar redes neuronales recurrentes (LSTM, GRU, etc.).
  2. ¿Le gustaría que la red neuronal aprenda de los datos que recopila o aprende por sí solo? Si solo, ¿cómo? Si recopila datos de usted mismo jugando el juego decenas o cientos de veces, aliméntelos en la Red Neural y haga que aprenda de usted, entonces está haciendo algo llamado "Clonación conductual". Sin embargo, si desea que el NN aprenda solo, puede hacer esto de 2 maneras:

    a) Aprendizaje de refuerzo : RL permite que la red neuronal aprenda jugando contra sí misma muchas veces.

    b) Algoritmo NEAT / Genético : NEAT permite que la Red Neural aprenda utilizando un algoritmo genético.

Sin embargo, una vez más, para ser más específico en cuanto a cómo deben codificarse las entradas y salidas de la red neuronal, tendría que saber más sobre el juego de cartas en sí.


Hola, gracias por la respuesta! Investigaré estas áreas para ver qué aplica. He agregado una breve descripción del juego con la esperanza de que esto lo reduzca para ti. Mi motor admite deshacer, por lo que puede ser útil junto con NN. Como el motor no está terminado, no tengo un conjunto de muestra, pero planeo mantener todos los historiales del juego del servidor de alojamiento entre 2 jugadores. Estaba considerando usar la propagación inversa para acelerar el proceso.
pcaston2

Si el estado del juego importa, pero no cómo llegaste a ese estado , ¿dirías que el tiempo importa? ¿Puedes dar ejemplos de juegos donde el tiempo importa y algunos donde el tiempo no importa? Por el momento, solo puedo pensar en situaciones en las que el estado actual importa (quién es el turno, qué cartas conocidas o qué piezas del juego están dónde) pero no cómo llegaste allí (lo único que importa es dónde están ahora , no dónde están hace dos turnos)
Simon Forsberg

2

Definitivamente, querrás que tu red conozca información crucial sobre el juego, como qué cartas tiene el agente de IA (sus valores y tipos), grupo de maná, cuántas cartas hay en la mesa y sus valores, número de turnos, etc. Estas cosas que debe resolver por su cuenta, la pregunta que debe hacerse es "Si agrego este valor para ingresar cómo y por qué mejorará mi sistema". Pero lo primero que hay que entender es que la mayoría de las NN están diseñadas para tener un tamaño de entrada constante, y supongo que esto es importante en este juego ya que los jugadores pueden tener una cantidad diferente de cartas en su mano o en la mesa. Por ejemplo, si quieres que NN sepa qué cartas tiene, supongamos que el jugador puede tener un máximo de 5 cartas en su mano y cada carta puede tener 3 valores (maná, ataque y salud), por lo que puedes codificar esto como 5 * 3 vectores, donde los primeros 3 valores representan la tarjeta número uno y así sucesivamente. Pero, si el jugador tiene actualmente 3 cartas, un enfoque simple sería asignar ceros a las últimas 6 entradas, pero esto puede causar problemas ya que algunas cartas pueden tener 0 de coste de maná o 0 de ataque. Entonces necesita descubrir cómo resolver este problema. Puede buscar modelos NN que puedan manejar un tamaño de entrada variable o descubrir cómo codificar la entrada como un vector de tamaño constante.

En segundo lugar, las salidas también son vectores de tamaño constante. En el caso de este tipo de juego, puede ser un vector que codifica acciones que el agente puede tomar. Entonces, digamos que tenemos 3 acciones: poner una carta, saltar el turno y conceder. Por lo tanto, puede ser un codificador activo, por ejemplo, si tiene una salida 1 0 0, esto significa que el agente debe colocar alguna tarjeta. Para saber qué carta debe colocar, puede agregar otro elemento a la salida que producirá un número en el rango de 1 a 5 (5 es el número máximo de cartas en la mano).

Pero la parte más importante del entrenamiento de una red neuronal es que tendrá que encontrar una función de pérdida adecuada para su tarea. Tal vez las funciones de pérdida estándar como la pérdida cuadrática media o L2 sean buenas, tal vez deba cambiarlas para satisfacer sus necesidades. Esta es la parte donde tendrá que hacer una investigación. Nunca he trabajado con NEAT antes, pero como entendí correctamente, usa un algoritmo genético para crear y entrenar NN, y GA usa alguna función de aptitud física para seleccionar a un individuo. Básicamente, necesitará saber qué métrica utilizará para evaluar qué tan bien funciona su modelo y, en función de esta métrica, cambiará los parámetros del modelo.

PD. Es posible resolver este problema con la red neuronal, sin embargo, las redes neuronales no son mágicas y no son la solución universal a todos los problemas. Si su objetivo es resolver este cierto problema, también le recomendaría que profundice en la teoría del juego y su aplicación en la IA. Yo diría que resolver este problema requeriría un conocimiento complejo de diferentes campos de la IA.

Sin embargo, si su objetivo es aprender sobre redes neuronales, recomendaría realizar tareas mucho más simples. Por ejemplo, puede implementar NN que funcionará en el conjunto de datos de referencia, por ejemplo, NN que clasificará los dígitos del conjunto de datos MNIST. La razón de esto es que se escribieron muchos artículos sobre cómo hacer la clasificación en este conjunto de datos y aprenderá mucho y aprenderá más rápido al implementar cosas simples.


1

Si. Es factible.

Resumen de la pregunta

El objetivo del diseño del sistema parece ser obtener una ventaja estratégica ganadora al emplear una o más redes artificiales junto con un motor de juego de cartas.

La pregunta muestra una conciencia general de los conceptos básicos del juego como se describe en Morgenstern and von Neuman Game Theory .

  • En puntos específicos durante el juego, se puede requerir que un jugador ejecute un movimiento.
  • Hay un conjunto de opciones de movimiento de acuerdo con las reglas del juego.
  • Algunas estrategias para seleccionar un movimiento producen registros ganadores más altos en múltiples jugadas que otras estrategias.
  • Se puede emplear una red artificial para producir estrategias de juego que sean victoriosas con mayor frecuencia que la selección de movimientos aleatorios.

Otras características del juego pueden o no ser tan obvias.

  • En cada punto de movimiento hay un estado de juego, que es necesario para cualquier componente involucrado en mejorar el éxito del juego.
  • Además de no saber cuándo el oponente faroleará, en los juegos de cartas, el orden secreto de las cartas barajadas puede introducir el equivalente de un jugador virtual cuyos movimientos se aproximan al azar.
  • En tres o más juegos de jugadores, la señalización de socios o socios potenciales puede agregar un elemento de complejidad para determinar la estrategia del juego ganador en cualquier momento. Según las ediciones, no parece que este juego tenga tales complejidades.
  • Factores psicológicos como la intimidación también pueden jugar un papel en el juego ganador. Se desconoce si el motor presenta o no una cara al oponente, por lo que esta respuesta se omitirá.

Consejos de enfoque comunes

Existe un enfoque común para mapear tanto las entradas como las salidas, pero hay demasiado para explicar en una respuesta de Stack Exchange. Estos son solo algunos principios básicos.

  • Todo el modelado que se puede hacer explícitamente debe hacerse. Por ejemplo, aunque una red artificial puede aprender teóricamente cómo contar cartas (hacer un seguimiento de las posibles ubicaciones de cada una de las tarjetas), un algoritmo de conteo simple puede hacer eso, así que use el algoritmo conocido y alimente esos resultados en la red artificial como entrada.
  • Use como entrada cualquier información que esté correlacionada con la salida óptima, pero no use como entrada ninguna información que no pueda correlacionarse con la salida óptima.
  • Codifique los datos para reducir la redundancia en el vector de entrada, tanto durante el entrenamiento como durante el juego automatizado. La abstracción y la generalización son las dos formas comunes de lograr esto. La extracción de características se puede utilizar como herramientas para abstraer o generalizar. Esto se puede hacer tanto en las entradas como en las salidas. Un ejemplo es que si, en este juego, J> 10 de la misma manera que A> K, K> Q, Q> J y 10> 9, codifica las cartas como un número entero de 2 a 14 o de 0 a 12 por restando uno. Codifique los trajes como 0 a 3 en lugar de cuatro cadenas de texto.

El trabajo de reconocimiento de imágenes solo está relacionado de forma remota, demasiado diferente del juego de cartas para usarlo directamente, a menos que necesite reconocer las cartas de una imagen visual, en cuyo caso puede ser necesario LSTM para ver lo que los otros jugadores han elegido para los movimientos. Aprender estrategias ganadoras probablemente se beneficiaría de los diseños MLP o RNN, o uno de sus diseños derivados de redes artificiales.

Qué haría una red artificial y ejemplos de capacitación

La función principal de las redes artificiales de este tipo es aprender una función a partir de datos de ejemplo. Si tiene las secuencias de movimiento de los juegos reales, es un gran activo para su proyecto. Un gran número de ellos será muy útil para la capacitación.

Vale la pena considerar cómo organizar los ejemplos y si y cómo los etiqueta, sin las reglas del juego de cartas es difícil dar una dirección confiable. Si hay socios, si se basa en la puntuación, si el número de movimientos hacia una victoria y una docena de otros factores proporcionan los parámetros del escenario necesarios para tomar esas decisiones.

Estudia

El principal consejo que puedo dar es leer, no tanto artículos generales en la web, sino leer algunos libros y algunos de los documentos que puede comprender sobre los temas anteriores. Luego, encuentre algún código que pueda descargar e intente después de comprender la terminología lo suficientemente bien como para saber qué descargar.

Esto significa que es mucho más probable que las búsquedas de libros y las búsquedas académicas lo guíen en la dirección correcta que las búsquedas web generales. Hay miles de posers en el espacio web general, que explican los principios de IA con una gran cantidad de errores. Los editores de libros y artículos académicos son más exigentes con la debida diligencia en sus autores.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.