Después de jugar demasiado Angry Birds, comencé a observar mis propias estrategias. Resulta que desarrollé un enfoque muy específico para obtener 3 estrellas en cada nivel.
Eso me hizo preguntarme sobre los desafíos de desarrollar un sistema de aprendizaje automático que pudiera jugar a Angry Birds. Interactuar con el juego y lanzar los pájaros es trivial. Pero una pregunta que tuve es sobre los "bloques de construcción" del sistema.
Los sistemas de aprendizaje automático parecen funcionar con conceptos simples o comprensión sobre el problema. Esto a menudo se codifica como características como entradas. Por lo tanto, parece que el sistema necesita tener la capacidad de comprender algunos conceptos de alto nivel para generar una estrategia.
¿Es esto cierto? Además, ¿cuáles son los desafíos o las partes difíciles del desarrollo de dicho sistema?
EDITAR # 1:
Aquí hay algunas aclaraciones. Obtener 3 estrellas es un problema difícil porque tienes que maximizar los puntos. Esto se puede hacer de dos maneras no exclusivas: 1) Minimizando el número de aves utilizadas (obtienes 10,000 puntos por cada ave no utilizada). 2) Maximizó la destrucción de vidrio, madera y otros objetos. Cada objeto destruido te da puntos. Es posible destruir más de 10,000 puntos en objetos con un solo pájaro.
Aquí hay una pequeña explicación sobre los "conceptos de alto nivel". Para maximizar los puntos descritos anteriormente, debes usar los poderes especiales de cada ave. Entonces, eso significa lanzar diferentes pájaros con diferentes trayectorias, dependiendo del diseño del mapa. Y, mientras juego, desarrollo una estrategia que destruye ciertas áreas con ciertas aves en cierto orden.
Parece que sin una comprensión de cómo usar cada ave para destruir un área específica, el sistema no podría aprender a obtener 3 estrellas. Entonces, ¿cómo manejas y codificas algo así? ¿Cómo se asegura de que el sistema pueda aprender estos conceptos de alto nivel?
Buena pregunta!
Parece que esta pregunta es sobre la técnica natural para este tipo de problema. Creo que la técnica natural para este tipo de problema es el aprendizaje por refuerzo (RL). RL se trata de cómo un agente debe tomar medidas en un entorno para maximizar alguna noción de recompensa acumulativa. Quizás el algoritmo más conocido para RL es Q-learning . Creo que esta es la primera pregunta en este sitio sobre el aprendizaje por refuerzo.
Creo que lo que estás preguntando es cierto si intentas enfocar esto como clasificación / regresión, pero esas no parecen ser la herramienta adecuada para este problema. Esto es naturalmente un problema de RL donde las secuencias de acciones y resultados deben tenerse en cuenta.
fuente
Mira aquí cómo lo hacen otros o participa tú mismo: Angry Birds AI Challenge http://ai2012.web.cse.unsw.edu.au/abc.html
fuente
acabo de mencionar esto en meta. Hubo un uso pionero de algoritmos genéticos por parte de Koza para resolver el videojuego Pacman. construyó primitivas algorítmicas que podían sentir y actuar. Como recuerdo, estos se combinaron en árboles similares a Lisp para crear algoritmos más grandes. El cruce con árboles Lisp implica la sustitución o el intercambio de subárboles que representan las expresiones del algoritmo. la función de éxito es algo así como "puntos comidos" o "puntos más fantasmas comidos" o "el tiempo se mantuvo vivo". Todavía hay algo de trabajo en esta área. Hay una referencia de koza en el siguiente documento. El tiempo de entrenamiento puede ser muy largo y la "convergencia" muy gradual para este tipo de problemas.
Aprendiendo a jugar Pac-Man: un enfoque evolutivo basado en reglas por Gallagher y Ryan
fuente