MISE À JOUR 2018-07-26 : C'est ça ! Nous approchons maintenant du point où ce type de jeu sera soluble ! En utilisant OpenAI et en se basant sur le jeu DotA 2, une équipe pourrait créer une IA qui peut battre des joueurs semi-professionnels dans un match 5v5 . Si vous connaissez DotA 2, vous savez que ce jeu est assez similaire aux jeux de type Diablo en termes de mécanismes, mais on pourrait dire qu'il est encore plus compliqué en raison du jeu en équipe.
Comme prévu, ce résultat a été obtenu grâce aux dernières avancées en matière d'apprentissage par renforcement et d'apprentissage profond, ainsi qu'à l'utilisation de cadres de jeu ouverts tels qu'OpenAI, qui facilitent le développement d'une IA en offrant une API soignée et en permettant d'accélérer le jeu (l'IA a joué l'équivalent de 180 ans de jeu contre elle-même chaque jour !)
Le 5 août 2018 (dans 10 jours !) il est prévu d'opposer cette IA aux meilleurs joueurs de DotA 2. Si cela fonctionne, attendez-vous à une grande révolution, peut-être pas aussi médiatisée que la résolution du jeu de Go, mais ce sera néanmoins une étape importante pour l'IA des jeux !
MISE À JOUR 2017-01 : Le domaine évolue très vite depuis le succès d'AlphaGo, et il y a de nouveaux cadres pour faciliter le développement d'algorithmes d'apprentissage automatique sur les jeux presque tous les mois. Voici une liste des derniers que j'ai trouvés :
-
L'univers d'OpenAI : une plateforme pour jouer à pratiquement tous les jeux grâce à l'apprentissage automatique . L'API est en Python, et il exécute les jeux derrière un environnement de bureau à distance VNC, de sorte qu'il peut capturer les images de n'importe quel jeu ! Vous pouvez probablement utiliser Universe pour jouer à Diablo II grâce à un algorithme d'apprentissage automatique !
-
Gymnase d'OpenAI : Similaire à Universe mais ciblant spécifiquement les algorithmes d'apprentissage par renforcement (il s'agit donc d'une sorte de généralisation du cadre utilisé par AlphaGo mais à beaucoup plus de jeux). Il y a un cours sur Udemy couvrant l'application de l'apprentissage automatique à des jeux comme Breakout ou Doom en utilisant OpenAI Gym.
-
TorchCraft : un pont entre Torche (cadre d'apprentissage automatique) et StarCraft : Brood War.
-
pyGTA5 : un projet visant à construire des voitures autopilotées dans GTA5 en utilisant uniquement des captures d'écran (avec beaucoup de vidéos en ligne ).
Une période très excitante !
MISE À JOUR IMPORTANTE (2016-06) : Comme l'a noté OP, ce problème de formation de réseaux artificiels pour jouer à des jeux en utilisant uniquement des données visuelles est maintenant abordé par plusieurs institutions sérieuses, avec des résultats assez prometteurs, tels que Réseau d'apprentissage profond DeepMind (DQN) .
Et maintenant, si vous voulez relever le défi du niveau suivant, vous pouvez utiliser l'un des différents moyens suivants Plateformes de développement de jeux avec vision d'IA comme ViZDoom Une plateforme hautement optimisée (7000 images par seconde) pour entraîner des réseaux à jouer à Doom en utilisant uniquement des entrées visuelles :
ViZDoom permet de développer des bots IA qui jouent à Doom en utilisant uniquement les informations visuelles (le tampon d'écran). Il est principalement destiné à la recherche en apprentissage visuel automatique, et en particulier en apprentissage par renforcement profond. ViZDoom est basé sur ZDoom pour fournir les mécanismes de jeu.
Et les résultats sont assez étonnants, voir les vidéos sur leur page web et le bon tutoriel (en Python) ici !
Il existe également un projet similaire pour Quake 3 Arena, appelé Quagents qui fournit également un accès facile par API aux données de jeu sous-jacentes, mais vous pouvez l'abandonner et n'utiliser que des captures d'écran et l'API pour contrôler votre agent.
Pourquoi une telle plateforme est-elle utile si nous n'utilisons que des captures d'écran ? Même si vous n'avez pas accès aux données sous-jacentes du jeu, une telle plateforme permet :
-
haute performance mise en œuvre de jeux (vous pouvez générer plus de données/jeux/générations d'apprentissage en moins de temps afin que vos algorithmes d'apprentissage puissent converger plus rapidement !)
- une méthode simple et API réactive pour contrôler vos agents (c'est-à-dire que si vous essayez d'utiliser des entrées humaines pour contrôler un jeu, certaines de vos commandes peuvent être perdues, et vous devrez donc faire face à un manque de fiabilité de vos sorties...).
- installation facile de scénarios personnalisés .
-
rendu personnalisable (peut être utile pour "simplifier" les images que vous obtenez pour faciliter le traitement)
-
lecture synchronisée ("turn-by-turn") (vous n'avez donc pas besoin que votre algorithme fonctionne en temps réel au départ, c'est une énorme réduction de la complexité).
- des fonctions pratiques supplémentaires telles que la compatibilité multiplateforme, la rétrocompatibilité (vous ne risquez pas que votre robot ne fonctionne plus avec le jeu lorsqu'il y a une nouvelle mise à jour du jeu), etc.
Pour résumer, l'avantage de ces plateformes est que ils atténuent une grande partie des problèmes techniques précédents que vous avez dû gérer (comment manipuler les entrées du jeu, comment mettre en place des scénarios, etc. vous devez juste vous occuper de l'algorithme d'apprentissage lui-même.
Alors maintenant, mettez-vous au travail et faites de nous le meilleur robot visuel d'IA qui soit ;)
Vieux poste décrivant les problèmes techniques liés au développement d'une IA reposant uniquement sur des données visuelles :
Contrairement à certains de mes collègues ci-dessus, je ne pense pas que ce problème soit insoluble. Mais c'est sûrement un problème très difficile !
Le premier problème, tel que souligné ci-dessus, est celui de la représentation de l'état du jeu : vous ne pouvez pas représenter l'état complet avec une seule image, vous devez maintenir une sorte d'interface entre les images. mémorisation (santé, mais aussi objets équipés et objets disponibles à utiliser, quêtes et objectifs, etc.) Pour récupérer ces informations, vous avez deux possibilités : soit en accédant directement aux données du jeu, ce qui est le plus fiable et le plus facile ; soit en créant une représentation abstraite de ces informations en mettant en place quelques procédures simples (ouvrir l'inventaire, faire une capture d'écran, extraire les données). Bien sûr, l'extraction de données à partir d'une capture d'écran vous obligera à mettre en place une procédure supervisée (que vous définissez complètement) ou non supervisée (via un algorithme d'apprentissage automatique, mais alors cela augmentera considérablement la complexité...). Pour l'apprentissage automatique non supervisé, vous devrez utiliser un type d'algorithme assez récent appelé algorithme d'apprentissage structurel (qui apprend la structure des données plutôt que la façon de les classer ou de prédire une valeur). L'un de ces algorithmes est le réseau neuronal récursif (à ne pas confondre avec le réseau neuronal récurrent) de Richard Socher : http://techtalks.tv/talks/54422/
Ensuite, un autre problème est que même lorsque vous avez récupéré toutes les données dont vous avez besoin, le jeu est seulement partiellement observable . Vous devez donc injecter un modèle abstrait du monde et l'alimenter avec des informations traitées provenant du jeu, par exemple l'emplacement de votre avatar, mais aussi l'emplacement des objets de quête, des objectifs et des ennemis en dehors de l'écran. Pour ce faire, vous pouvez peut-être consulter Mixture Particle Filters de Vermaak 2003.
De plus, vous devez avoir un agent autonome avec objectifs généré dynamiquement. Une architecture bien connue que vous pouvez essayer est l'agent BDI, mais vous devrez probablement la modifier pour qu'elle fonctionne dans votre cas pratique. Comme alternative, il y a aussi le réseau de Petri récursif, que vous pouvez probablement combiner avec toutes sortes de variations des réseaux de Petri pour obtenir ce que vous voulez, car c'est un cadre très bien étudié et flexible, avec de grandes procédures de formalisation et de preuves.
Et enfin, même si vous faites tout ce qui précède, vous devrez trouver un moyen d'émuler le jeu en vitesse accélérée (l'utilisation d'une vidéo peut être intéressante, mais le problème est que votre algorithme ne fera que regarder sans contrôle, et la possibilité d'essayer par lui-même est très importante pour l'apprentissage). En effet, il est bien connu que les algorithmes actuels prennent beaucoup plus de temps pour apprendre la même chose qu'un humain (encore plus avec l'apprentissage par renforcement), donc si vous ne pouvez pas accélérer le processus (c'est-à-dire si vous ne pouvez pas accélérer le temps de jeu), votre algorithme ne convergera même pas en une seule vie...
En conclusion, ce que vous voulez réaliser ici est à la limite (et peut-être un peu au-delà) des algorithmes actuels de pointe . Je pense que c'est possible, mais même si ça l'est, vous allez passer beaucoup de temps parce qu'il ne s'agit pas d'un problème théorique, mais d'un problème de santé publique. problème pratique que vous abordez ici, et vous devez donc mettre en œuvre et combiner un grand nombre d'approches différentes de l'IA afin de le résoudre.
Plusieurs décennies de recherche avec toute une équipe travaillant sur le sujet ne suffiraient peut-être pas. Si vous êtes seul et que vous travaillez sur le sujet à temps partiel (car vous avez probablement un emploi pour gagner votre vie), vous risquez de passer toute une vie sans parvenir à une solution fonctionnelle.
Donc mon conseil le plus important ici serait que vous revoir vos attentes à la baisse et essayer de réduire la complexité. Vous pouvez aussi simplifier certains problèmes en implémentant des procédures supervisées, ne laissez pas votre algorithme tout apprendre (par exemple, laissez tomber le traitement d'image pour l'instant et reposez-vous sur les informations internes du jeu), plus tard, si votre algorithme fonctionne bien, vous pourrez remplacer certaines parties de votre programme d'IA par le traitement d'images, ce qui vous permettra d'atteindre progressivement votre objectif, par exemple, si vous arrivez à faire fonctionner quelque chose assez bien, vous pouvez essayer de complexifier votre problème et remplacer les procédures supervisées et les données de jeu en mémoire par des algorithmes d'apprentissage automatique non supervisés sur des captures d'écran).
Bonne chance, et si ça marche, n'oubliez pas de publier un article, vous pourrez sûrement être renommé pour avoir résolu un problème pratique aussi difficile !
2 votes
Regardez ce papier. :D ri.cmu.edu/pub_files/pub2/pomerleau_dean_1992_1/
0 votes
Une grande différence entre le problème de conduite de l'article et un jeu est que dans le problème de conduite, l'entrée visuelle est une représentation d'état suffisamment complète : s'il y a un obstacle à droite, tournez à gauche, s'il y a un obstacle à gauche, tournez à droite. Cependant, dans un jeu, vous devez souvent prendre des décisions en fonction d'éléments qui ne sont pas affichés à l'écran. Chaque fois que vous entrez dans un magasin, il peut sembler identique, mais vous devez acheter des articles différents.
1 votes
Pour autant que je m'en souvienne, Diablo 2 utilise des feuilles de sprites faciles à extraire. Il devrait être assez simple de lier des objets (joueur, ennemis etc...) à une liste de sprites associés. Cela ne résout pas le problème des objets masqués les uns par les autres, mais c'est un début.
0 votes
@zergylord Il serait utile que vous disiez à quel point vous voulez respecter vos critères : a) jouer à Diablo 2 et b) utiliser des pixels dessinés à l'écran comme seule source d'entrée. Si vous voulez vous faciliter la tâche, je pense que vous allez devoir assouplir un peu l'un de ces critères (ou les deux) - êtes-vous prêt à le faire ?
0 votes
@StompChicken Oui, plus je pense à ce problème, plus je réalise à quel point il doit être simplifié. Pour répondre à votre question : Je ne suis pas marié à Diablo 2, mais le type de jeu (c'est-à-dire isométrique 2d, en temps réel avec un seul avatar) est assez important pour moi. J'aimerais que le robot éventuellement jouer comme un humain le ferait -- à partir d'une simple entrée d'écran, mais je m'ouvre à l'idée de "tricher" afin de mieux l'entraîner. En outre, je me concentre sur le gameplay de base - juste tuer des trucs, donc je ne cherche pas à planifier à haut niveau ou quoi que ce soit.
0 votes
@zergylord : J'ai fait une longue réponse ci-dessous sur la résolution de votre problème initial, mais en effet, je pense vraiment que vous devez simplifier votre problème et tricher partout où vous le pouvez, sinon vous ne serez pas en mesure d'obtenir une solution fonctionnelle dans un délai raisonnable.
1 votes
Vote de clôture car trop large.