Comment entraîner un réseau de neurones artificiels à jouer à Diablo 2 en utilisant l'entrée visuelle?

139

J'essaie actuellement d'obtenir un ANN pour jouer à un jeu vidéo et j'espérais obtenir de l'aide de la merveilleuse communauté d'ici.

J'ai opté pour Diablo 2. Le jeu se fait donc en temps réel et d'un point de vue isométrique, le joueur contrôlant un seul avatar sur lequel la caméra est centrée.

Pour rendre les choses concrètes, la tâche est d'obtenir votre personnage x points d'expérience sans que sa santé ne tombe à 0, où les points d'expérience sont gagnés en tuant des monstres. Voici un exemple de gameplay:

ici

Maintenant, puisque je veux que le net fonctionne uniquement sur la base des informations qu'il obtient des pixels à l'écran, il doit apprendre une représentation très riche afin de jouer efficacement, car cela exigerait vraisemblablement qu'il sache (implicitement au moins) comment divisez le monde du jeu en objets et comment interagir avec eux.

Et toutes ces informations doivent être enseignées au net d'une manière ou d'une autre. Je ne peux pas pour la vie de moi penser à comment entraîner cette chose. Ma seule idée est d'avoir un programme séparé pour extraire visuellement quelque chose d'innéement bon / mauvais dans le jeu (par exemple, santé, or, expérience) de l'écran, puis utiliser cette statistique dans une procédure d'apprentissage par renforcement. Je pense que cela fera partie de la réponse, mais je ne pense pas que ce sera suffisant; il y a tout simplement trop de niveaux d'abstraction, de l'entrée visuelle brute au comportement axé sur les objectifs, pour que des commentaires aussi limités entraînent un réseau au cours de ma vie.

Alors, ma question: à quelles autres façons pouvez-vous penser pour former un réseau à faire au moins une partie de cette tâche? de préférence sans faire des milliers d'exemples étiquetés.

Juste pour un peu plus de direction: je recherche d'autres sources d'apprentissage par renforcement et / ou des méthodes non supervisées pour extraire des informations utiles dans ce cadre. Ou un algorithme supervisé si vous pouvez penser à un moyen d'extraire des données étiquetées d'un monde de jeu sans avoir à les étiqueter manuellement.

MISE À JOUR (27/04/12):

Étrangement, je travaille toujours là-dessus et semble faire des progrès. Le plus grand secret pour faire fonctionner un contrôleur ANN est d'utiliser les architectures ANN les plus avancées adaptées à la tâche. Par conséquent, j'ai utilisé un réseau de croyances profondes composé de machines Boltzmann conditionnelles et restreintes factorisées que j'ai entraînées de manière non supervisée (sur une vidéo de moi jouant au jeu) avant de peaufiner la rétro-propagation des différences temporelles (c'est -à- dire l'apprentissage par renforcement avec le standard). ANN à action directe).

Toujours à la recherche d'une contribution plus précieuse, en particulier sur le problème de la sélection des actions en temps réel et comment encoder des images couleur pour le traitement ANN :-)

MISE À JOUR (21/10/15):

Je viens de me souvenir que j'avais posé cette question dans le passé et que je devais mentionner que ce n'était plus une idée folle. Depuis ma dernière mise à jour, DeepMind a publié son article sur la nature pour amener les réseaux de neurones à jouer aux jeux Atari à partir d'entrées visuelles . En effet, la seule chose qui m'empêche d'utiliser leur architecture pour jouer, un sous-ensemble limité, de Diablo 2 est le manque d'accès au moteur de jeu sous-jacent. Le rendu à l'écran, puis le redirection vers le réseau est tout simplement beaucoup trop lent pour s'entraîner dans un laps de temps raisonnable. Ainsi, nous ne verrons probablement pas ce type de bot jouer à Diablo 2 de si tôt, mais uniquement parce qu'il jouera quelque chose soit open-source, soit avec un accès API à la cible de rendu. (Un tremblement peut-être?)

Zergylord
la source
1
Consultez cet article. : D ri.cmu.edu/pub_files/pub2/pomerleau_dean_1992_1/…
zergylord
Une grande différence entre le problème de conduite dans le papier 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 - tourner à gauche, s'il y a un obstacle à gauche - tourner droite. Cependant, dans un jeu, vous devez souvent prendre des décisions basées sur des éléments qui ne sont pas affichés à l'écran. Chaque fois que vous entrez dans une boutique, elle peut avoir la même apparence, mais vous devez acheter des articles différents.
Don Reba
1
Pour être au mieux de mes souvenirs, Diablo 2 utilise des feuilles de sprites facilement extraites. 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 obscurcis les uns par les autres, mais c'est un début.
Ryan Jenkins
@zergylord Cela vous aiderait si vous pouviez dire avec quelle fermeté vous voulez vous en tenir à vos critères de a) Jouer à Diablo 2 et b) en utilisant les pixels dessinés sur l'écran comme seule source d'entrée. Si vous voulez vous faciliter les choses, je pense que vous allez devoir relâcher un (ou les deux) un peu - êtes-vous prêt à le faire?
Stompchicken
1
Vote de clôture trop large.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Réponses:

55

Je peux voir que vous vous inquiétez de la façon de former l'ANN, mais ce projet cache une complexité dont vous n'êtes peut-être pas conscient. La reconnaissance d'objets / personnages sur les jeux informatiques par le biais du traitement d'image est une tâche très difficile (pas fou pour les jeux FPS et RPG). Je ne doute pas de vos compétences et je ne dis pas non plus que cela ne peut pas être fait, mais vous pouvez facilement passer 10 fois plus de temps à reconnaître des choses qu'à mettre en œuvre l'ANN lui-même (en supposant que vous ayez déjà une expérience des techniques de traitement d'images numériques ).

Je pense que votre idée est très intéressante et aussi très ambitieuse . À ce stade, vous voudrez peut-être le reconsidérer. Je sens que ce projet est quelque chose que vous planifiez pour l'université, donc si l'objectif du travail est vraiment ANN, vous devriez probablement choisir un autre jeu, quelque chose de plus simple.

Je me souviens que quelqu'un d'autre est venu chercher des conseils sur un projet différent mais similaire il n'y a pas si longtemps. Cela vaut la peine de le vérifier.

D'un autre côté, il peut y avoir des approches meilleures / plus faciles pour identifier les objets dans le jeu si vous acceptez les suggestions. Mais d'abord, appelons ce projet pour ce que vous voulez qu'il soit: un robot intelligent .

Une méthode pour implémenter des bots accède à la mémoire du client du jeu pour trouver des informations pertinentes, telles que l'emplacement du personnage sur l'écran et sa santé. La lecture de la mémoire de l'ordinateur est triviale, mais déterminer exactement où chercher dans la mémoire ne l'est pas. Les scanners de mémoire comme Cheat Engine peuvent être très utiles pour cela.

Une autre méthode , qui fonctionne sous le jeu, consiste à manipuler les informations de rendu. Tous les objets du jeu doivent être rendus à l'écran. Cela signifie que les emplacements de tous les objets 3D seront finalement envoyés à la carte vidéo pour traitement. Soyez prêt pour un débogage sérieux.

Dans cette réponse, j'ai brièvement décrit 2 méthodes pour accomplir ce que vous voulez grâce au traitement d'image. Si vous êtes intéressé par eux, vous pouvez en trouver plus sur Exploiting Online Games (chapitre 6), un excellent livre sur le sujet.

karlphillip
la source
43

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!

joyeux
la source
27

Le problème que vous poursuivez est insoluble dans la manière dont vous l'avez défini. C'est généralement une erreur de penser qu'un réseau neuronal apprendrait «par magie» une riche représentation d'un problème. Un bon fait à garder à l'esprit lorsque vous décidez si ANN est le bon outil pour une tâche est qu'il s'agit d'une méthode d'interpolation. Pensez à savoir si vous pouvez définir votre problème comme la recherche d'une approximation d'une fonction, où vous avez de nombreux points de cette fonction et beaucoup de temps pour concevoir le réseau et le former.

Le problème que vous proposez ne passe pas ce test. Le contrôle du jeu n'est pas fonction de l'image à l'écran. Il y a beaucoup d'informations que le joueur doit garder en mémoire. Pour un exemple simple, il est souvent vrai qu'à chaque fois que vous entrez dans une boutique dans un jeu, l'écran est le même. Cependant, ce que vous achetez dépend des circonstances. Quelle que soit la complexité du réseau, si les pixels de l'écran sont son entrée, il effectuerait toujours la même action en entrant dans le magasin.

En outre, il y a le problème de l'échelle. La tâche que vous proposez est tout simplement trop compliquée à apprendre dans un laps de temps raisonnable. Vous devriez voir aigamedev.com pour savoir comment fonctionne l'IA du jeu. Les réseaux de neurones artificiels ont été utilisés avec succès dans certains jeux, mais de manière très limitée. L'IA de jeu est difficile et souvent coûteuse à développer. S'il y avait eu une approche générale de la construction de réseaux neuronaux fonctionnels, l'industrie l'aurait probablement saisi. Je vous recommande de commencer par des exemples beaucoup plus simples, comme le tic-tac-toe.

Don Reba
la source
C'est suffisant. On pourrait appeler presque tout ce qui ressemble à un réseau à un ANN, mais cela pourrait difficilement conduire à une discussion de fond. :)
Don Reba
Hé ouais ... J'aurais dû expliquer ma motivation plus en profondeur. Je sais qu'il existe de meilleures façons de créer des IA de jeu, mais je le fais pour repousser les limites du simulateur ANN que j'ai mis à niveau. Voir: stanford.edu/group/pdplab/pdphandbook
zergylord
1
Dans tous les cas, Don Reba a raison, je ne pense pas non plus qu'il sera possible d'apprendre une stratégie pour quelque chose comme Diablo sans intégrer beaucoup de connaissances préalables et extraire des fonctionnalités utiles sur lesquelles une approche d'apprentissage par renforcement pourrait être basée. Le simple fait d'apprendre à partir de l'entrée vidéo sera extrêmement difficile, voire impossible, avec les ordinateurs d'aujourd'hui.
ahans
18

On dirait que le cœur de ce projet est d'explorer ce qui est possible avec un ANN, donc je suggérerais de choisir un jeu où vous n'avez pas à gérer le traitement d'image (qui, d'après les réponses des autres ici, semble être une tâche très difficile dans un jeu en temps réel). Vous pouvez utiliser l'API Starcraft pour créer votre bot, ils vous donnent accès à tous les états de jeu pertinents.

http://code.google.com/p/bwapi/

tstramer
la source
2

Dans un premier temps, vous pouvez examiner la différence entre les images consécutives. Vous devez faire la distinction entre l'arrière-plan et les sprites de monstres réels. Je suppose que le monde peut également contenir des animations. Pour les trouver, je demanderais au personnage de se déplacer et de rassembler tout ce qui bouge avec le monde dans une grande image / animation d'arrière-plan.

Vous pouvez détecter et identifier les ennemis avec corrélation (en utilisant FFT). Cependant, si les animations se répètent exactement au pixel, il sera plus rapide de ne regarder que quelques valeurs de pixel. Votre tâche principale sera d'écrire un système robuste qui identifiera quand un nouvel objet apparaîtra à l'écran et mettra progressivement toutes les images du sprite dans une base de données. Vous devez probablement également construire des modèles pour les effets d'armes. Celles-ci doivent être soustraites afin de ne pas encombrer votre base de données d'opposants.

whoplisp
la source
2
Étant familier avec le jeu Diablo II, je peux dire qu'il utilise 256 couleurs (à moins que certains modes n'utilisent des couleurs élevées ou vraies). Il fait également un usage intensif des sprites pour afficher différents objets. Si vous parvenez à extraire certains sprites (même à partir d'une capture d'écran), vous pouvez entraîner votre outil à reconnaître les objets en fonction du sprite (par exemple, une `` Potion de guérison mineure '' déposée aura toujours la même apparence). Cependant, si j'approfondis les choses spécifiques à Diablo II, d'autres questions se poseront également. Bonne chance
Ivaylo Slavov
1

En supposant qu'à tout moment, vous pouvez générer un ensemble de `` résultats '' (pouvant impliquer des probabilités) à partir d'un ensemble de tous les `` mouvements '' possibles, et qu'il y a une certaine notion de cohérence dans le jeu (par exemple, vous pouvez jouer au niveau X encore et encore à nouveau), vous pouvez commencer avec N réseaux de neurones avec des poids aléatoires, et faire jouer chacun d'eux au jeu de la manière suivante:

1) Pour chaque `` mouvement '' possible, générez une liste de `` résultats '' possibles (avec les probabilités associées) 2) Pour chaque résultat, utilisez votre réseau de neurones pour déterminer une `` valeur '' (score) associée du `` résultat '' (par exemple, un nombre entre -1 et 1, 1 étant le meilleur résultat possible, -1 étant le pire) 3) Choisissez le `` coup '' menant au score de prob * le plus élevé 4) Si le mouvement a conduit à une `` victoire '' ou à une `` perte '', arrêtez, sinon revenez à l'étape 1.

Après un certain temps (ou une «victoire» / «perte»), évaluez à quel point le réseau de neurones était proche du «but» (cela impliquera probablement une certaine connaissance du domaine). Jetez ensuite les 50% (ou un autre pourcentage) de NN qui étaient les plus éloignés de l'objectif, effectuez un croisement / mutation des 50% supérieurs et exécutez à nouveau le nouvel ensemble de NN. Continuez à courir jusqu'à ce qu'un NN satisfaisant sorte.

tstramer
la source
Ah, ajouter un GA dans le mix, intéressant. Malheureusement, étant donné que le réseau envoie en fait des pressions sur les touches / mouvements de la souris en tant qu'actions, j'aurais besoin d'un ordinateur physique par réseau>. <Un autre problème est que l'espace d'état de l'environnement n'est pas discret (enfin, techniquement, il l'est, mais à un grain très fin). Par exemple, imaginez le résultat possible associé à un clic de souris: un personnage sous le contrôle du filet pourrait bouger ou attaquer, mais les ennemis pourraient également être déplacés, et il y aurait des différences au niveau des pixels dans l'environnement par rapport à des choses comme les ombres et les effets météorologiques. .
zergylord
Eh bien, de mon point de vue, vous ne pouvez pas faire grand-chose avec un réseau neuronal. Il semble que, au mieux, il pourrait être utilisé comme une fonction heuristique apprenable d'une certaine notion d'espace d'états discrets. Pour incorporer la variabilité de l'ennemi, vous devrez probablement utiliser une autre heuristique, puis vous pouvez l'utiliser pour créer un ensemble d'états de résultat possibles par mouvement avec les probabilités associées. Aussi, tant qu'il y a une notion statique de configuration initiale et finale, vous pouvez simplement exécuter chaque réseau neuronal un par un.
tstramer
1

Je pense que votre meilleur pari serait une architecture complexe impliquant quelques / peut réseaux: c'est-à-dire un pour reconnaître et répondre aux objets, un pour la boutique, un pour le combat (peut-être que vous en auriez besoin ici pour la reconnaissance de l'ennemi, un pour les attaques), etc. .

Essayez ensuite de penser au gameplay le plus simple possible de Diablo II, probablement un barbare. Alors restez simple au début, comme l'acte I, premier domaine seulement.

Ensuite, je suppose que les «objectifs» précieux seraient la disparition des objets ennemis et la diminution de la barre de santé (score inversement).

Une fois que vous avez pris en charge ces tâches distinctes et «plus simples», vous pouvez utiliser un ANN «maître» pour décider quel sous-ANN activer.

En ce qui concerne la formation, je ne vois que trois options: vous pouvez utiliser la méthode évolutive décrite ci-dessus, mais vous devez ensuite sélectionner manuellement les «gagnants», à moins que vous ne codiez un programme entièrement séparé pour cela. Vous pourriez demander aux réseaux de «regarder» quelqu'un jouer. Ici, ils apprendront à imiter le style d'un joueur ou d'un groupe de joueurs. Le réseau essaie de prédire la prochaine action du joueur, se renforce pour une estimation correcte, etc. Si vous obtenez réellement l'ANN que vous voulez, cela pourrait être fait avec un jeu vidéo, pas besoin de jeu réel en direct. Enfin, vous pouvez laisser le réseau jouer le jeu, avoir des morts d'ennemis, des augmentations de niveau, une santé retrouvée, etc. en tant que renforcement positif et des décès de joueurs, des pertes de santé, etc. en tant que renforcement négatif. Mais en voyant comment même un simple réseau nécessite des milliers d'étapes de formation concrètes pour apprendre même des tâches simples,

Dans l'ensemble, votre projet est très ambitieux. Mais pour ma part, je pense que cela pourrait «en théorie être fait», avec suffisamment de temps.

J'espère que cela aide et bonne chance!

Vincent Courtemanche
la source