Comment concevriez-vous un système d'apprentissage automatique pour jouer à Angry Birds?


22

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?

Réponses:


13

En supposant que vous puissiez obtenir les bons crochets dans le logiciel (ou que vous travaillez avec votre propre maquette), certaines choses seraient faciles ici, et d'autres moins. C'est un problème assez difficile, je pense. Comme l'a mentionné carlosdc, l' apprentissage par renforcement (RL) est une avenue possible, même si je ne suis pas sûr que ce soit la bonne.

Lorsque vous commencez, vous devez définir votre espace d'état , votre espace d' action , votre dynamique de transition et votre fonction de récompense . Les espaces état / action peuvent être continus ou discrets, et la dynamique de transition peut être donnée par le problème ou modélisée mathématiquement. Enfin la fonction de récompense peut être donnée a priori , ou peut être échantillonnée (avec ou sans bruit).

L'espace d'action est simple: c'est simplement la direction et la puissance que vous tirez sur l'oiseau actuel. Pour l'homme, c'est un problème discret (la souris / l'écran tactile est un périphérique d'entrée numérique) - disons (par exemple) qu'il y a 32 directions possibles et 10 puissances possibles, donnant 320 actions possibles.

La fonction de récompense est également assez facile à dériver: l'objectif est de se débarrasser de tous les porcs avec le moins d'oiseaux (OK donc il y a des points supplémentaires pour d'autres choses mais ignorons cela pour l'instant). La meilleure chose serait si nous connaissions la fonction réelle qui génère des points en tuant des porcs (dépend de la taille du porc, etc. IIRC) - mais pour un seul niveau, cela pourrait être parfaitement modélisé.

L'espace d'état et la dynamique de transition sont beaucoup plus difficiles. Afin de modéliser cela correctement, nous devons connaître la disposition complète de la carte et la physique du jeu. La dynamique de transition dit "Si je suis dans l'état x et que j'exécute l'action y , j'atterrirai dans l'état z ". Vous pouvez voir la difficulté de cela, d'une part car la physique complexe du système signifie que cela sera extrêmement difficile à modéliser avec précision, et d'autre part car il y a tellement d'états résultants possibles après même le premier tour (320), et c'est si nous supposons qu'il n'y a pas de stochasticité dans le moteur physique, ce qui, après l'avoir joué, existe. Je pense qu'à ce stade, vous abandonneriez et rentreriez chez vous.

Une autre approche consiste à le traiter comme un être humain au tout début - c'est-à-dire essai et erreur. L'humain, au moins pour commencer, tire presque au hasard (bien qu'avec un assez fort avant d'envoyer les oiseaux vers les cochons, mais cela peut facilement être codé), jusqu'à ce qu'une gamme de bonnes actions soient trouvées. C'est plus comme le bandit multi-arméréglage. Les "bras" des bandits sont ici les actions possibles. L'algorithme essaie d'équilibrer l'exploration et l'exploitation - c'est-à-dire l'exploration de l'espace d'action et l'exploitation des bonnes actions lorsqu'elles sont trouvées. Pour cela, vous n'avez besoin de rien savoir sur la dynamique sous-jacente - vous avez seulement besoin de connaître les actions et les récompenses. Pour le faire pleinement, vous devriez avoir un bras pour chaque action possible sur tous les tours (par exemple, vous avez 5 oiseaux * 320 actions = 320 ^ 5 = environ 10 ^ 12 actions), donc l'espace d'action est très grand! Cependant, vous pouvez utiliser quelques astuces pour améliorer cela si vous en savez un peusur l'espace d'état. Par exemple, vous pourriez probablement exclure des actions qui éloignent l'oiseau des porcs, le descendent dans le sol ou sans suffisamment de puissance pour atteindre l'un d'eux. De plus, vous n'avez besoin d'atteindre le 5ème oiseau que si vous n'avez pas tué les cochons lors des tours précédents, donc une proportion des états d'action n'est pas réellement possible. Cela rappelle quelque peu l'approche utilisée dans l'algorithme MoGo , qui est un programme informatique pour jouer au Go basé sur des limites de confiance supérieure appliquées aux arbres , une approche pour résoudre le problème des bandits à plusieurs bras.


1
Très bonne réponse! Je pense que l'espace d'action est bien plus grand que 320 actions possibles. Chaque pixel balayé par un arc de peut-être 0,7 pouce (sur l'iPad) de l'horizontale gauche à la verticale va générer une trajectoire et un résultat différents. L'iPad a une résolution de 132 dpi, ce qui peut faire environ 8 000 pixels parmi lesquels choisir. Je ne voulais pas m'attarder sur les détails, mais l'augmentation de l'espace d'action à 8 000 modifie-t-elle la réponse? Comment pouvez-vous travailler avec un espace d'action plus grand?
B Seven

Essayer de simuler la dynamique est une question complètement différente (et difficile). Je pense que pour cette discussion, nous devons supposer que nous avons accès au code source et que nous pouvons obtenir avec précision les informations d'état. De plus, la fonction de récompense n'est pas seulement le nombre de porcs que vous tuez. Pour obtenir 3 étoiles sur un niveau, vous devez faire quelque chose de plus difficile. Voir modifier pour questionner.
B Seven

@BSeven En principe non, l'espace d'action plus grand ne change pas la réponse, bien que vous deviez faire plus d'élagage et utiliser beaucoup plus de puissance de calcul ;-) Notez cependant que c'est un candidat parfait pour le traitement parallèle. La question des étoiles est délicate, car cela implique qu'il n'y a pas de simple cartographie des tués aux étoiles, même si je pensais que vous obteniez plus d'étoiles simplement en franchissant des seuils de points (cela se fait généralement en utilisant moins d'oiseaux). Sinon, vous devrez augmenter artificiellement la quantité d'exploration pour éviter de vous installer trop tôt sur des chemins sous-optimaux.
tdc

8

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.



4

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.