Cómo hacer un bot que pueda ser entrenado para jugar juegos simples usando Python

En términos generales, hay tres tipos de IA de juego: basada en la búsqueda, basada en el aprendizaje y (por falta de un término mejor) buena IA pasada de moda (GOFAI).

Los agentes basados ​​en búsquedas utilizan un modelo interno del árbol del juego para buscar secuencias de movimientos que conducen a una puntuación más alta. Un buen ejemplo de esto es Chess AI. Son ampliamente aplicables y no requieren capacitación, pero necesitan un modelo avanzado de su entorno y están básicamente limitados por el tiempo de cálculo.

En cambio, la IA basada en el aprendizaje requiere ser entrenado en su entorno, y básicamente aprender eligiendo acciones que funcionaron bien en el pasado (pero esa es una explicación muy simplificada). Un buen ejemplo de esto es el MarI / O de Sethbling. Estos también se pueden aplicar a muchos juegos, pero hay que volver a entrenar para cada juego.

Finalmente, GOFAI confía en la IA de fabricación manual para un juego específico utilizando la experiencia humana. Estos tienden a funcionar bien en la mayoría de los casos, pero requieren mucha ingeniería humana. Además, tienden a ser superados por otros métodos en términos de rendimiento final del agente (aunque depende mucho del juego).

Por supuesto, hay muchas posibilidades para mezclar y combinar estos diferentes enfoques. De hecho, AlphaGo de Google es tan bueno porque utiliza una combinación de búsqueda y aprendizaje (y también una gran cantidad de aportes humanos en términos de su diseño).

Por interés personal, sugiero mirar los métodos de aprendizaje evolutivo. No son tan buenos como otros métodos de aprendizaje en muchos sentidos, pero son fáciles de aplicar y de entender (y parecen ser mucho más confiables que otros enfoques).

¿Has oído hablar de Deep Mind?

Es una pequeña empresa con sede en Londres que ha sido comprada por Google, y lo están haciendo increíble. ¡Se las arreglaron para crear una IA que puede jugar al juego de Atari usando como entrada solo los píxeles de las pantallas y la puntuación!

Para abreviar, todo se trata de Deep Reinforcement Learning. Encontrará el documento original aquí. [1]

Si no sabe sobre el aprendizaje por refuerzo, intente pensar en cómo jugaría una nueva máquina arcade que nunca antes había jugado. Desea aumentar su puntaje (bueno, la mayoría de las veces intentará sobrevivir primero jaja), para hacerlo, probará los controles y verá qué hacen. Paso a paso comprenderás de qué se trata el juego y encontrarás una manera de mejorar tal vez elaborando una estrategia.

Esa es la diferencia entre usted y una IA que juega, ¡la IA no tiene idea de lo bueno que es un movimiento porque no puede ver lo que sucede en la pantalla! ¡La única respuesta que obtiene la IA es la puntuación! En el aprendizaje por refuerzo, llamamos a esta retroalimentación de puntaje la recompensa . ¡El objetivo de la IA es, de hecho, tratar de encontrar una gran secuencia de movimientos de los controladores para obtener la mejor recompensa posible!

Es posible que haya escuchado sobre Q-learning , que es básicamente una de las técnicas de aprendizaje de refuerzo más simples. Digamos que para un estado dado durante el juego, tienes N diferentes acciones posibles para jugar, lo que quieres hacer es elegir la mejor acción, ¿no? Pero, ¿cómo saber cuál es el mejor? ¡Tienes varias opciones, básicamente puedes probar la acción y ver la recompensa que obtendrás! Esto se llama la función Q, y esta función se puede evaluar utilizando varias técnicas, incluidas técnicas simples cuando el juego es simple o redes neuronales, por ejemplo, y eso es lo que está haciendo Deep Mind.

AlphaGo es la aplicación más impresionante de estas teorías, estoy seguro de que has oído hablar de ella. Están utilizando redes neuronales que denominan Redes de políticas que toman como entrada un tablero de Go y eligen las jugadas que tienen más probabilidades de obtener la mejor recompensa: GANAN el juego lo más rápido posible. Por supuesto, este es un resumen realmente muy breve, pero es solo para que usted tenga la idea.

Aquí hay un gran contenido para que lo leas:
– El gran artículo de Karpathy sobre el aprendizaje por refuerzo para el juego pong
– Tutorial de Q-Learning
– Este gran tutorial sobre el aprendizaje por refuerzo usando n armes bandit example

¡El aprendizaje por refuerzo es un gran tema! ¡Espero que lo disfrutes!

Notas al pie

[1] https://www.cs.toronto.edu/~vmni

Esencialmente, un bot simple necesitaría la capacidad de registrar cada ‘movimiento’, y necesitaría una forma de evaluar el juego después de cada movimiento, es decir, podría determinar de alguna manera si el movimiento fue un buen movimiento o no después del evento.

Grabar cada movimiento no sería solo el movimiento que hace el ‘bot’, sino que necesitaría registrar la totalidad del estado del juego, o al menos alguna forma de registrar qué partes importantes del juego. Verá que los datos que almacena se vuelven muy complejos y muy grandes.

Luego necesitas una forma de analizar esos datos, para que puedas mejorar la coice de tu bot en el futuro, y una forma de alimentar ese análisis nuevamente en el bot para el próximo juego.

Debes tener en cuenta que en el estado actual de la tecnología de IA ahora no creo que sea posible implementar una IA general que pueda aprender a jugar más de un juego (es decir, poder jugar más de un juego a pedido sin tener memoria) mecanismo). La mayoría de los juegos (que a excepción de uno muy simple como tic-tac-toe, nim, etc.) son probablemente lo suficientemente complejos como para ser difíciles incluso para que una IA aprenda a jugar bien. Tenga en cuenta que difícil no es lo mismo que imposible, y existen muchas IA que pueden jugar juegos, incluso los más complejos, como Ajedrez, Go, etc.

Los juegos simples ‘tic-tac-toe’, por ejemplo, tienen tan pocos estados que podría programar un bot para registrar cada movimiento y registrar si fue un triunfo / suelto / empate después de ese movimiento; y luego hacer que el bot haga un movimiento aleatorio si ese estado del juego no se había visto previamente. Juegue muchos juegos, y acumulará suficientes datos para que pueda resolver el ‘mejor movimiento’.

Si el juego es aleatorio (como el Poker), entonces su bot necesitará al menos algo de “conocimiento” de la mecánica del juego, principalmente porque la mayoría del estado del juego es incognoscible (es decir, no puede predecirlo) o elige la siguiente carta a repartir).

More Interesting

¿Debo aprender Python o R para el aprendizaje automático si estoy cursando mi licenciatura en matemáticas e ingeniería informática? ¿Qué idioma se usa más en las industrias?

¿Qué métricas debo usar en mi investigación de preprocesamiento de datos (no estructurada)?

En Batch Normalization, ¿por qué se deben actualizar moving_mean y moving_variance?

¿Son los modelos gráficos probabilísticos comúnmente vistos / muy utilizados en la minería de datos práctica / cotidiana?

¿Cuáles son las principales áreas de la investigación bioinformática actual?

¿Qué significa la afluencia de IA y Machine Learning en productos tecnológicos para los diseñadores de UX?

¿Qué enfoque de aprendizaje automático recomendaría realizar OCR (reconocimiento de caracteres) en un sistema de reconocimiento automático de matrículas?

¿Dónde puedo encontrar un código de Python para preprocesar el conjunto de datos?

¿Por qué la máquina de Bolzmann restringida se llama memoria asociativa?

Cómo implementar un modelo entrenado de TensorFlow (solo parte de propaganda directa) en CPP puro

¿Qué intentos hay para crear redes neuronales más similares al cerebro biológico?

Cómo calcular la cantidad óptima de datos de entrenamiento para un pronóstico de series de tiempo usando Python

¿Qué métricas debo usar para evaluar un modelo generativo cuantitativamente y qué tan confiables son?

¿Cuáles son algunas buenas implementaciones para modelos gráficos probabilísticos? En particular, quiero poder crear y visualizar redes de creencias y aplicar varios algoritmos como la eliminación de variables y otros algoritmos de aproximación.

¿Cuántas imágenes necesito para entrenar una red neuronal convolucional?