Après avoir joué beaucoup trop d'Angry Birds, j'ai commencé à observer mes propres stratégies. Il s'avère que j'ai développé une approche très spécifique pour obtenir 3 étoiles à chaque niveau.
Cela m'a fait me questionner sur les défis du développement d'un système d'apprentissage automatique capable de jouer à Angry Birds. Interagir avec le jeu et lancer les oiseaux est trivial. Mais une question que je me posais concerne les «éléments constitutifs» du système.
Les systèmes d'apprentissage automatique semblent fonctionner avec des concepts simples ou une compréhension du problème. Ceci est souvent encodé en tant que fonctionnalités comme entrées. Il semble donc que le système doive avoir la capacité de comprendre certains concepts de haut niveau pour générer une stratégie.
Est-ce vrai? En outre, quels sont les défis ou les parties difficiles de l'élaboration d'un tel système?
EDIT # 1:
Voici quelques éclaircissements. Obtenir 3 étoiles est un problème difficile car il faut maximiser les points. Cela peut se faire de deux manières non exclusives: 1) Minimiser le nombre d'oiseaux utilisés (vous obtenez 10 000 points pour chaque oiseau non utilisé). 2) Maximisé la destruction du verre, du bois et d'autres objets. Chaque objet détruit vous rapporte des points. Il est possible de détruire plus de 10 000 points d'objets avec un seul oiseau.
Voici un peu plus d'explications sur les "concepts de haut niveau". Afin de maximiser les points décrits ci-dessus, vous devez utiliser les pouvoirs spéciaux de chaque oiseau. Cela signifie donc lancer différents oiseaux avec des trajectoires différentes, selon la disposition de la carte. Et, tout en jouant, je développe une stratégie qui détruit certaines zones avec certains oiseaux dans un certain ordre.
Il semble que sans comprendre comment utiliser chaque oiseau pour détruire une zone spécifique, le système ne pourrait pas apprendre à obtenir 3 étoiles. Alors, comment gérez-vous et encodez-vous quelque chose comme ça? Comment vous assurez-vous que le système peut apprendre ces concepts de haut niveau?
Cool question!
Il semble que cette question concerne la technique naturelle pour ce type de problème. Je pense que la technique naturelle pour ce type de problème est l' apprentissage par renforcement (RL). RL concerne la façon dont un agent doit prendre des mesures dans un environnement afin de maximiser une certaine notion de récompense cumulative. Peut-être l'algorithme le plus connu pour RL est Q-learning . Je pense que c'est la première question de ce site sur l'apprentissage par renforcement.
Je pense que ce que vous demandez est vrai si vous essayez d'approcher cela comme une classification / régression, mais ceux-ci ne semblent pas être le bon outil pour ce problème. Il s'agit naturellement d'un problème de RL où les séquences d'actions et les résultats doivent être pris en compte.
la source
Vérifiez ici comment les autres le font ou participez vous-même: Angry Birds AI Challenge http://ai2012.web.cse.unsw.edu.au/abc.html
la source
vient de le mentionner dans la méta. il y avait une utilisation pionnière des algorithmes génétiques par Koza pour résoudre le jeu vidéo Pacman. il a construit des primitives algorithmiques capables de détecter et d'agir. si je me souviens bien, ils ont été combinés dans des arbres de type Lisp pour créer de plus grands algorithmes. le croisement avec les arbres Lisp implique la substitution ou l'échange de sous-arbres qui représentent les expressions de l'algorithme. la fonction de réussite est quelque chose comme "points mangés" ou "points plus fantômes mangés" ou "le temps est resté vivant". il y a encore du travail dans ce domaine. il y a une référence koza dans cet article qui suit. le temps de formation peut être très long et la «convergence» très progressive pour ces types de problèmes.
Apprendre à jouer à Pac-Man: une approche évolutive basée sur des règles par Gallagher et Ryan
la source