ACTUALIZACIÓN 2018-07-26: ¡ Eso es! ¡Ahora nos estamos acercando al punto en que este tipo de juego será solucionable! Usando OpenAI y basado en el juego DotA 2, un equipo podría hacer una IA que pueda vencer a los jugadores semiprofesionales en un juego 5v5 . Si conoces DotA 2, sabes que este juego es bastante similar a los juegos de Diablo en términos de mecánica, pero se podría argumentar que es aún más complicado debido al juego en equipo.
Como se esperaba, esto se logró gracias a los últimos avances en el aprendizaje por refuerzo con aprendizaje profundo, y al uso de marcos de juego abiertos como OpenAI que facilita el desarrollo de una IA ya que obtienes una API ordenada y también porque puedes acelerar el juego (la IA jugó ¡el equivalente a 180 años de juego contra sí mismo todos los días!).
El 5 de agosto de 2018 (¡en 10 días!) , Se planea enfrentar a esta IA contra los mejores jugadores de DotA 2. Si esto funciona, espera una gran revolución, tal vez no tan mediatizada como la resolución del juego Go, ¡pero sin embargo será un gran hito para los juegos de IA!
ACTUALIZACIÓN 2017-01: El campo se está moviendo muy rápido desde el éxito de AlphaGo, y hay nuevos marcos para facilitar el desarrollo de algoritmos de aprendizaje automático en los juegos casi todos los meses. Aquí hay una lista de los últimos que he encontrado:
- OpenAI's Universe : una plataforma para jugar prácticamente cualquier juego utilizando el aprendizaje automático . La API está en Python, y ejecuta los juegos detrás de un entorno de escritorio remoto VNC, por lo que puede capturar las imágenes de cualquier juego. ¡Probablemente puedas usar Universe para jugar a Diablo II a través de un algoritmo de aprendizaje automático!
- OpenAI's Gym : similar al Universo pero apuntando a algoritmos de aprendizaje de refuerzo específicamente (por lo que es una especie de generalización del marco utilizado por AlphaGo pero para muchos más juegos). Hay un curso sobre Udemy que cubre la aplicación del aprendizaje automático a juegos como breakout o Doom usando OpenAI Gym.
- TorchCraft : un puente entre Torch (marco de aprendizaje automático) y StarCraft: Brood War.
- pyGTA5 : un proyecto para construir autos sin conductor en GTA5 usando solo capturas de pantalla (con muchos videos en línea ).
Tiempos muy emocionantes!
ACTUALIZACIÓN IMPORTANTE (2016-06): Como señaló OP, este problema de entrenar redes artificiales para jugar usando solo entradas visuales ahora está siendo abordado por varias instituciones serias, con resultados bastante prometedores, como DeepMind Deep-Qlearning-Network (DQN ) .
Y ahora, si desea asumir el desafío del siguiente nivel, puede usar una de las diversas plataformas de desarrollo de juegos de visión de IA como ViZDoom , una plataforma altamente optimizada (7000 fps) para entrenar redes para jugar Doom usando solo entradas visuales :
ViZDoom permite desarrollar bots de IA que juegan Doom usando solo la información visual (el búfer de pantalla). Está destinado principalmente a la investigación en aprendizaje visual de máquinas, y aprendizaje de refuerzo profundo, en particular. ViZDoom se basa en ZDoom para proporcionar la mecánica del juego.
Y los resultados son bastante sorprendentes, ¡ mira los videos en su página web y el bonito tutorial (en Python) aquí!
También hay un proyecto similar para Quake 3 Arena, llamado Quagents , que también proporciona un fácil acceso API a los datos subyacentes del juego, pero puede eliminarlo y solo usar capturas de pantalla y la API solo para controlar a su agente.
¿Por qué es útil esta plataforma si solo usamos capturas de pantalla? Incluso si no accede a los datos subyacentes del juego, dicha plataforma proporciona:
- Implementación de juegos de alto rendimiento (¡puede generar más generaciones de datos / juegos / aprendizaje con menos tiempo para que sus algoritmos de aprendizaje puedan converger más rápido!).
- una API simple y receptiva para controlar a sus agentes (es decir, si intenta usar entradas humanas para controlar un juego, algunos de sus comandos pueden perderse, por lo que también lidiaría con la falta de confiabilidad de sus salidas ...).
- Fácil configuración de escenarios personalizados .
- renderizado personalizable (puede ser útil para "simplificar" las imágenes que obtienes para facilitar el procesamiento)
- reproducción sincronizada ("paso a paso") (por lo que no necesita que su algoritmo funcione en tiempo real al principio, es una gran reducción de la complejidad).
- características de conveniencia adicionales, como compatibilidad de plataforma cruzada, retrocompatibilidad (no corres el riesgo de que tu bot ya no funcione con el juego cuando hay una nueva actualización del juego), etc.
En resumen, lo mejor de estas plataformas es que alivian gran parte de los problemas técnicos anteriores con los que tuvo que lidiar (cómo manipular las entradas del juego, cómo configurar escenarios, etc.) para que solo tenga que lidiar con el algoritmo de aprendizaje sí mismo.
Así que ahora, ponte a trabajar y conviértenos en el mejor robot visual de IA de la historia;)
Publicación anterior que describe los problemas técnicos del desarrollo de una IA que se basa solo en entradas visuales:
Al contrario de algunos de mis colegas anteriores, no creo que este problema sea insoluble. ¡Pero sin duda es muy difícil!
El primer problema como se señaló anteriormente es el de la representación del estado del juego. : no puedes representar el estado completo con una sola imagen, necesitas mantener algún tipo de memorización(salud pero también objetos equipados y elementos disponibles para usar, misiones y objetivos, etc.). Para obtener dicha información, tiene dos formas: acceder directamente a los datos del juego, que es el más confiable y fácil; o bien puede crear una representación abstracta de estas informaciones mediante la implementación de algunos procedimientos simples (abrir inventario, tomar una captura de pantalla, extraer los datos). Por supuesto, extraer datos de una captura de pantalla tendrá que poner algún procedimiento supervisado (que defina completamente) o sin supervisión (a través de un algoritmo de aprendizaje automático, pero luego aumentará mucho la complejidad ...). Para el aprendizaje automático no supervisado, deberá utilizar un tipo bastante reciente de algoritmos llamados algoritmos de aprendizaje estructural (que aprenden la estructura de los datos en lugar de cómo clasificarlos o predecir un valor).http://techtalks.tv/talks/54422/
Entonces, otro problema es que, incluso cuando ha obtenido todos los datos que necesita, el juego solo es parcialmente observable . Por lo tanto, debe inyectar un modelo abstracto del mundo y alimentarlo con información procesada del juego, por ejemplo, la ubicación de su avatar, pero también la ubicación de elementos de búsqueda, objetivos y enemigos fuera de la pantalla. Quizás pueda buscar en los filtros de partículas de mezcla de Vermaak 2003 para esto.
Además, debe tener un agente autónomo , con objetivos generados dinámicamente. Una arquitectura conocida que puede probar es el agente BDI, pero probablemente tendrá que modificarla para que esta arquitectura funcione en su caso práctico. Como alternativa, también existe la Red de Petri Recursiva, que probablemente puede combinar con todo tipo de variaciones de las redes de Petri para lograr lo que desea, ya que es un marco muy bien estudiado y flexible, con excelentes procedimientos de formalización y pruebas.
Y, por último, incluso si haces todo lo anterior, deberás encontrar una manera de emular el juego a velocidad acelerada (usar un video puede ser bueno, pero el problema es que tu algoritmo solo funcionará sin control y podrá intentarlo por sí mismo es muy importante para aprender). De hecho, es bien sabido que el algoritmo actual de última generación requiere mucho más tiempo para aprender lo mismo que un humano puede aprender (aún más con el aprendizaje de refuerzo), por lo tanto, si no puede acelerar el proceso ( es decir, si no puedes acelerar el tiempo del juego), tu algoritmo ni siquiera convergerá en una sola vida ...
Para concluir, lo que quiere lograr aquí está en el límite (y tal vez un poco más allá) de los algoritmos de vanguardia actuales . Creo que puede ser posible, pero incluso si lo es, vas a pasar mucho tiempo , porque este no es un problema teórico sino un problema práctico que estás abordando aquí, y por lo tanto necesitas implementar y combinar mucho de diferentes enfoques de IA para resolverlo.
Es posible que varias décadas de investigación con todo un equipo trabajando en él no sean suficientes, por lo que si está solo y trabajando en él a tiempo parcial (ya que probablemente tenga un trabajo para ganarse la vida) puede pasar toda una vida sin llegar a ningún lado Una solución de trabajo.
Entonces, mi consejo más importante aquí es que baje sus expectativas y trate de reducir la complejidad tu problema sea utilizar toda la información que puedas y evitar la mayor cantidad posible de capturas de pantalla (es decir, intenta conectarte directamente al juego, busca la inyección de DLL) y simplifica un poco problemas al implementar procedimientos supervisados, no permita que su algoritmo aprenda todo (es decir, descarte el procesamiento de imágenes por el momento tanto como sea posible y confíe en la información interna del juego, más adelante si su algoritmo funciona bien, puede reemplazar algunas partes de su programa de IA con procesamiento de imágenes, logrando así su objetivo completo, por ejemplo, si puede lograr que algo funcione bastante bien, puede intentar complicar su problema y reemplazar los procedimientos supervisados y los datos del juego de memoria por algoritmos de aprendizaje automático no supervisados en las capturas de pantalla).
¡Buena suerte, y si funciona, asegúrate de publicar un artículo, seguramente podrás ser reconocido por resolver un problema tan difícil y práctico!