MISE À JOUR 2018-07-26: Voilà! Nous approchons maintenant du point où ce genre de jeu pourra être résolu! En utilisant OpenAI et sur la base du jeu DotA 2, une équipe pourrait créer une IA capable de battre des joueurs semi-professionnels dans un jeu 5v5 . Si vous connaissez DotA 2, vous savez que ce jeu est assez similaire aux jeux de type Diablo en termes de mécanique, mais on pourrait dire qu'il est encore plus compliqué à cause du jeu en équipe.
Comme prévu, cela a été réalisé grâce aux dernières avancées en matière d'apprentissage par renforcement avec apprentissage en profondeur et en utilisant des cadres de jeu ouverts comme OpenAI qui facilite le développement d'une IA puisque vous obtenez une API soignée et aussi parce que vous pouvez accélérer le jeu (l'IA a joué l'équivalent de 180 ans de gameplay contre lui-même tous les jours!).
Le 5 août 2018 (dans 10 jours!) , Il est prévu de confronter 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 Go, mais ce sera néanmoins une étape importante pour les jeux AI!
MISE À JOUR 2017-01: Le domaine évolue très vite depuis le succès d'AlphaGo, et il existe de nouveaux frameworks 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 n'importe quel jeu en utilisant l'apprentissage automatique . L'API est en Python et exécute les jeux derrière un environnement de bureau à distance VNC, ce qui lui permet de capturer les images de n'importe quel jeu! Vous pouvez probablement utiliser Universe pour jouer à Diablo II grâce à un algorithme d'apprentissage automatique!
- OpenAI's Gym : Similaire à Universe mais ciblant spécifiquement les algorithmes d'apprentissage par renforcement (c'est donc une sorte de généralisation du cadre utilisé par AlphaGo mais à beaucoup plus de jeux). Il existe un cours sur Udemy couvrant l'application de l'apprentissage automatique à des jeux comme Breakout ou Doom utilisant OpenAI Gym.
- TorchCraft : un pont entre Torch (cadre d'apprentissage automatique) et StarCraft: Brood War.
- pyGTA5 : un projet de construction de voitures autonomes dans GTA5 en utilisant uniquement des captures d'écran (avec de nombreuses vidéos en ligne ).
Des moments très excitants!
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 entrées visuelles est maintenant abordé par plusieurs institutions sérieuses, avec des résultats assez prometteurs, tels que DeepMind Deep-Qlearning-Network (DQN ) .
Et maintenant, si vous voulez relever le défi de niveau suivant, vous pouvez utiliser l'une des différentes plates-formes de développement de jeux de vision IA telles que ViZDoom , une plate-forme hautement optimisée (7000 fps) pour former les réseaux à jouer à Doom en utilisant uniquement des entrées visuelles. :
ViZDoom permet de développer des robots 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 à l'apprentissage par renforcement profond. ViZDoom est basé sur ZDoom pour fournir les mécanismes de jeu.
Et les résultats sont assez étonnants, regardez les vidéos sur leur page web et le joli tutoriel (en Python) ici!
Il existe également un projet similaire pour Quake 3 Arena, appelé Quagents , qui fournit également un accès API facile aux données de jeu sous-jacentes, mais vous pouvez le supprimer et utiliser uniquement 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'accédez pas aux données de jeu sous-jacentes, une telle plate-forme fournit:
- implémentation de jeux haute performance (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 API simple et réactive pour contrôler vos agents (c'est-à-dire, si vous essayez d'utiliser des entrées humaines pour contrôler un jeu, certaines de vos commandes peuvent être perdues, vous devrez donc également gérer le manque de fiabilité de vos sorties ...).
- configuration facile de scénarios personnalisés .
- rendu personnalisable (peut être utile pour «simplifier» les images obtenues pour faciliter le traitement)
- lecture synchronisée ("tour par tour") (vous n'avez donc pas besoin de votre algorithme pour travailler en temps réel au début, c'est une énorme réduction de complexité).
- des fonctionnalités supplémentaires telles que la compatibilité multiplateforme, la rétrocompatibilité (vous ne risquez plus que votre bot ne fonctionne plus avec le jeu lors d'une nouvelle mise à jour du jeu), etc.
Pour résumer, la grande chose à propos de ces plates-formes est qu'elles atténuent une grande partie des problèmes techniques précédents que vous avez dû traiter (comment manipuler les entrées de jeu, comment configurer des scénarios, etc.) afin que vous n'ayez qu'à gérer l'algorithme d'apprentissage. lui-même.
Alors maintenant, mettez-vous au travail et faites de nous le meilleur robot visuel IA de tous les temps;)
Ancien article décrivant les problèmes techniques liés au développement d'une IA reposant uniquement sur des entré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 très dur!
Le premier problème comme 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 de 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 moyens: soit en accédant directement aux données du jeu, ce qui est le plus fiable et le plus simple; ou bien vous pouvez créer une représentation abstraite de ces informations en implémentant des procédures simples (ouvrir l'inventaire, prendre une capture d'écran, extraire les données). Bien sûr, extraire des données d'une capture d'écran vous obligera soit à mettre en place une procédure supervisée (que vous définissez complètement), soit non supervisée (via un algorithme d'apprentissage automatique, mais cela augmentera beaucoup la complexité ...). Pour l'apprentissage automatique non supervisé, vous devrez utiliser un type d'algorithme assez récent appelé algorithmes d'apprentissage structurel (qui apprennent la structure des données plutôt que comment les classer ou prédire une valeur).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 n'est que partiellement observable . Ainsi vous devez injecter un modèle abstrait du monde et le nourrir avec des informations traitées 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. Vous pouvez peut-être regarder dans les filtres à particules de mélange de Vermaak 2003 pour cela.
De plus, vous devez disposer d'un agent autonome , avec des objectifs générés dynamiquement. Une architecture bien connue que vous pouvez essayer est l'agent BDI, mais vous devrez probablement la modifier pour que cette architecture 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 à une vitesse accélérée (utiliser une vidéo peut être bien, mais le problème est que votre algorithme ne regardera que sans contrôle et ne pourra essayer par lui-même est très important pour l'apprentissage). En effet, il est bien connu que l'algorithme de pointe actuel prend beaucoup plus de temps pour apprendre la même chose qu'un humain peut apprendre (encore plus avec l'apprentissage par renforcement), donc s'il ne peut 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 ...
Pour conclure, 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 peut-être possible, mais même si c'est le cas, vous allez passer énormément de temps , car ce n'est pas un problème théorique mais un problème pratique que vous abordez ici, et donc vous devez mettre en œuvre et combiner beaucoup de différentes approches de l'IA afin de le résoudre.
Plusieurs décennies de recherche avec toute une équipe travaillant dessus ne suffiraient peut-être pas, donc si vous êtes seul et que vous y travaillez à temps partiel (car vous avez probablement un emploi pour vivre), vous pouvez passer toute une vie sans atteindre n'importe où une solution de travail.
Donc, mon conseil le plus important ici serait de réduire vos attentes et d'essayer de réduire la complexitéde votre problème en utilisant toutes les informations que vous pouvez, et évitez autant que possible de vous fier aux captures d'écran (c'est-à-dire essayez de vous connecter directement au jeu, recherchez l'injection de DLL), et simplifiez certains problèmes en implémentant des procédures supervisées, ne laissez pas votre L'algorithme apprend tout (c'est-à-dire, abandonne le traitement d'image pour le moment autant que possible et s'appuie sur les informations internes du jeu, plus tard, si votre algorithme fonctionne bien, vous pouvez remplacer certaines parties de votre programme d'IA par un traitement d'image, atteignant ainsi en général votre objectif complet, par exemple, si vous pouvez 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 de mémoire par des algorithmes d'apprentissage automatique non supervisés sur les captures d'écran).
Bonne chance, et si cela fonctionne, assurez-vous de publier un article, vous pouvez sûrement vous faire connaître pour avoir résolu un problème pratique aussi difficile!