Créer des agents AI d'apprentissage automatique dans un moteur Unreal 4 et 5

Introduction à Mindmaker: https://www.youtube.com/watch?v=erm_pzhapia
Blueprints Aperçu: https://youtu.be/tuo423nujek
Discord Group: https://discord.gg/shxfwtmsha
Le plugin Mindmaker AI est un plugin open-source qui permet aux jeux et aux simulations au sein de l'UE4 et de l'UE5 de fonctionner comme des environnements de gym Openai pour former des agents d'apprentissage automatique autonomes. Le plugin facilite une connexion réseau entre un projet de moteur Unreal contenant l'environnement d'apprentissage, et une bibliothèque Python ML qui reçoit des données d'un moteur Unreal et des analyses dans un environnement de gym Openai personnalisé pour la formation de l'agent. La bibliothèque d'apprentissage automatique autonome peut être soit un script Python personnalisé dans le cas où vous créez votre propre outil ML en utilisant le serveur ML distant de Mindmaker, ou il pourrait s'agir d'un moteur d'apprentissage précompilé tel que le moteur DRL de Mindmaker (algorithmes stables-Baselines3). Quelle que soit l'option que vous choisissez, l'utilisation des développeurs et des chercheurs de plugin Mindmaker AI peut facilement former des agents d'apprentissage automatique pour les projets 2D, 3D et VR.
Les applications possibles s'étendent au-delà de la conception de jeux à une variété d'efforts scientifiques et techniques. Il s'agit notamment de la simulation robotique, de la conduite autonome, de l'architecture générative, des graphiques procéduraux et bien plus encore. Cette API fournit une plate-forme centrale à partir desquelles les progrès de l'apprentissage automatique peuvent atteindre bon nombre de ces domaines. Pour les développeurs de jeux, les cas d'utilisation pour les agents d'auto-optimisation comprennent le contrôle du comportement des PNJ (dans une variété de paramètres tels que le multi-agents et l'adversariat), les décisions de conception de jeux de prototypage et les tests automatisés des versions de jeu.
Le moteur d'apprentissage DRL est inclus dans le lien vers l'exemple de projet ainsi que dans le code source Python pour le modifier, trouvé dans le répertoire Source Content Mindmaker . Algorithms presently supported by the DRL Learning Engine include : Actor Critic ( A2C ), Sample Efficient Actor-Critic with Experience Replay (ACER), Actor Critic using Kronecker-Factored Trust Region ( ACKTR ), Deep Q Network ( DQN ), Proximal Policy Optimization ( PPO ), Soft Actor Critic ( SAC ), Twin Delayed DDPG ( TD3 ), Trust Region Policy Optimization ( TRPO ), Gradient de politique déterministe profonde (DDPG). Le plugin est fonctionnellement similaire aux agents ML d'Unity, avec certains avantages - plutôt que de devoir créer un environnement de gym Openai personnalisé pour chaque application, on utilise un seul environnement et de choisir les observations et les actions de l'agent à exposer à l'algorithme ML. Voila, laissez l'apprentissage commencer!
Il y a deux composants principaux que vous utiliserez tout en travaillant avec le plugin Mindmaker, un projet d'adhésion Unreal contenant l'environnement d'apprentissage et une bibliothèque d'apprentissage automatique autonome utilisée par l'agent pour optimiser tout ce qu'il tente d'apprendre. La bibliothèque d'apprentissage automatique autonome peut être un script Python personnalisé dans le cas où vous créez votre propre outil ML à l'aide du serveur ML distant de Mindmaker, ou il pourrait s'agir d'un moteur d'apprentissage précompilé tel que le moteur Mindmaker DRL (algorithmes de ligne de base stable).
Pour expérimenter à l'aide de différentes bibliothèques ML en collaboration avec Mindmaker, utilisez le serveur ML Mindmaker Remote. Avec lui, vous pouvez personnaliser votre propre moteur d'apprentissage Python, plutôt que d'utiliser le moteur Mindmaker DRL pré-compilé. Pour utiliser le serveur ML distant, suivez ces étapes:
Si vous souhaitez utiliser plusieurs clients ML connectés à un seul environnement d'apprentissage, par exemple dans un scénario multi-agents, cela peut être fait en utilisant Mindmaker Server et Plugin.
Pour créer plusieurs agents d'apprentissage, configurez d'abord vos agents d'apprentissage comme indiqué dans l'un des exemples de plans. Pour chaque nouvel agent d'apprentissage, vous devrez incrémenter les paramètres du port de sockettio dans le nouveau contrôleur AI par 1. Au moment du lancement du serveur, les nouveaux numéros de port du serveur sont automatiquement créés pour chaque nouvelle instance de Mindmaker.exe que vous lancez, à partir de 3000 et à monter à partir de là pour un total de 100. Si vous avez besoin de plus de 100 agents d'apprentissage, demandez-le dans le repo GitHub.
Par exemple, si vous ajoutez un deuxième agent d'apprentissage à votre carte, vous aurez besoin de toutes les mêmes fonctions qui sont dans le premier agent d'apprentissage, le nœud Blueprint de lancement de Mindmaker, etc., mais au lieu d'attribuer celui-ci au port 3000, vous lui attribuerez le port 3001 dans Blueprints. En plus de modifier le paramètre de port sockettio dans Blueprints, vous devrez également modifier pour modifier la fonction Blueprint SockEtio Connect, modifier l'adresse et le port en nouveau numéro que vous avez créé «http: // localhost: 3001» par exemple.
Une fois cela fait, vous aurez juste besoin de créer une deuxième instance de votre fichier Mindmaker_Client.py qui se connectera à votre deuxième agent d'apprentissage. La formation peut être effectuée simultanément, en parallèle. La seule modification que vous devez apporter à Mindmaker_Client.py modifie sio.connect ('http: // localhost: 3000') au bas du fichier vers Sio.connect ('http: // localhost: 3001') ou tout ce qui est le nombre de nouveaux agents d'apprentissage que vous travaillez. Si vous avez cinq agents d'apprentissage, vous aurez cinq instances du client et chacun aura un nouveau numéro de port jusqu'à 3005
Apprentissage d'imitation avec STABLE BASELINES 3 La source Mindmaker Python peut être modifiée pour soutenir l'apprentissage de l'imitation en utilisant les algorithmes d'apprentissage d'imitation stables de Baselines supportées
Pour enregistrer un modèle formé, définissez la case à cocher «Save Model After Training» dans la fonction Launch Mindmaker sur true. Vous devrez vous assurer que votre nombre d'épisodes de formation est un nombre non zéro. Le modèle économisera une fois la formation terminée. Pour charger les modèles qualifiés, décochez la case à cocher «Save Model After Training» et définissez à la place la case «Charges Pré-formation» dans la fonction Launch Mindmaker sur true. Vous devrez également définir le nombre d'épisodes de formation à zéro, car aucune formation ne devrait se produire. Assurez-vous que le nombre d'évaluations est un entier non nul, car ce sera la façon dont le modèle pré-formé démontre l'apprentissage. Les modèles sont enregistrés localement dans le dossier «Appdata Roaming» de votre ordinateur, par exemple C: Users Leon AppData Roaming
Par défaut, Mindmaker enregistre uniquement le répertoire AppData / Roaming sur les machines Windows. Pour activer la journalisation Tensorboard, suivez ces étapes.
Il s'agit d'un processus en trois étapes, vous devez décider quelles actions l'agent peut prendre, quels seront ses critères de récompense et quelles observations l'agent devra faire sur son environnement pour apprendre avec succès à recevoir une récompense.
Lancement de Mindmaker ---------> Recevoir l'action --------> Make Obs -----> Vérifier les récompenses --------> Envoyer OBS et RWRD à Mindmaker ------ Retour pour recevoir l'action
Dans le processus d'apprentissage, le moteur d'apprentissage Mindmaker doit d'abord être configuré avec l'espace d'observation que l'agent utilise et le nombre total d'actions disponibles pour l'agent. Vous n'avez pas besoin de fournir d'informations de récompense lorsqu'elle est initialisée, celle-ci ne sera rencontrée que pendant la formation.
Le processus global d'apprentissage est qu'une fois lancé et connecté au moteur Unreal, le moteur d'apprentissage Mindmaker commencera à fournir des actions aléatoires pour que l'agent moteur Unreal, et en réponse, l'agent avec UE renverra une liste d'observations qu'il a effectuées une fois l'action prise, en plus de toute récompense reçue en cours. Voir Diagramme ci-dessus. Au cours de nombreux épisodes, l'algorithme utilisé par Mindmaker optimisera les actions des agents en réponse aux observations et récompenses reçues de l'UE. Ce processus est le même quel que soit l'algorithme d'apprentissage automatique que l'on choisit d'employer avec Mindmaker. Avec ces informations, l'algorithme d'apprentissage utilisé Mindmaker commencera à optimiser les décisions d'action des agents, découvrira idéalement la séquence nécessaire pour recevoir de manière cohérente des récompenses. Le compromis entre actions aléatoires et intentionnels est contrôlé dans les paramètres d'exploration / exploitation de la bibliothèque ML que vous avez sélectionnés pour une utilisation avec Mindmaker, par exemple des lignes de base stables. Ce processus se répète pour chaque épisode de formation. Après un nombre fixe d'épisodes de formation, vous pouvez passer entièrement à l'utilisation de l'algorithme pour prédire les «meilleures» actions au lieu de prendre des actions aléatoires.
Mindmaker fonctionne en emballant un environnement Unreal dans un format compatible Openai Gym afin que toute bibliothèque ML qui a été conçue pour fonctionner avec Openai Gym peut être déployée sur votre environnement de moteur Unreal. Le but de l'utilisation du gymnase d'IA ouvert est de standardiser les facteurs pertinents pour l'apprentissage, à savoir le format pour recevoir les observations, les récompenses et les actions des agents, afin que toute algorité de ML puisse avoir accès aux variables pertinentes pour l'apprentissage sans avoir à être réorganisée pour chaque tâche spécifique. Les algorithmes qui fonctionnent avec Openai Gym peuvent travailler avec n'importe quel environnement et agent qui utilise le protocole OpenAI standardisé.
Configuration du moteur d'apprentissage Mindmaker au départ, vous devrez configurer la fonction de lancement de Mindmaker dans un moteur Unreal pour votre agent d'apprentissage. Cela se fait en définissant la variable Action_space dans Mindmaker pour égaler le nombre total d'actions disponibles pour votre agent. Vous devrez également configurer la variable observation_space pour correspondre au nombre et au type d'observations que votre agent utilisera en ce qui concerne la récompense qu'il tente de recevoir. Par défaut, les observations sont passées d'Unreal en tant que tableau, voir l'exemple du projet. Selon le nombre d'observations que votre agent trouvera nécessaire à utiliser, la taille d'Observation_Space changera.
Récompense - Une récompense est une variable définie en fonction du critère spécifique que vous avez choisi pour que l'agent apprenne ou optimise. Dans le plan UE4, vous utiliserez un nœud de branche pour déterminer quelles conditions environnementales et l'action de l'agent doivent être remplies pour que la récompense soit activée. Ceci est transmis à Mindmaker par la connexion sockettio. Voir l'exemple du projet. Action - Il s'agit d'une variable qui contient une valeur entière représentant l'action que l'agent a pris. Vous devrez également décider du nombre total d'actions disponibles pour l'agent et définir les maxctions dans Mindmaker pour égaler ce nombre. Observations - Perhapse les variables les plus délicates avec lesquelles vous aurez affaire. La clé pour le définir correctement est de comprendre que les actions des agents elles-mêmes doivent être incluses dans la variable d'observations, en plus de tout autre critère environnemental référencé dans la fonction de récompense. L'agent doit savoir quelles mesures ou actions il a fallu qui ont influencé la récompense et les variables environnementales qui ont également changé. Ceux-ci sont transmis au Mindmaker Learning Engine en tant que tableau et mis à jour dans la variable d'observations qui s'y trouvent.
Ici, nous discuterons des paramètres individuels du nœud Blueprint LaunchMindMaker, qui est le composant principal des fonctions Blueprints Mindmaker.
Algorithme RL - C'est là que l'on peut sélectionner la saveur de l'algorithme RL avec lequel on veut former l'agent. Il y a dix options dans le menu déroulant, chaque algorithme ayant ses propres avantages et inconvénients. Une discussion détaillée sur les algorithmes disponibles et leurs cas d'utilisation peut être trouvé ici. https://spinningup.openai.com/en/latest/spinningup/rl_intro2.html
NUM Train EP - Il s'agit d'une entrée entière représentant le nombre d'épisodes de formation que l'on souhaite que l'agent entreprenne. Plus le nombre d'épisodes de formation est élevé, plus l'agent fait de l'exploration avant de passer au comportement stratégique qu'elle acquiert pendant la formation. La complexité des actions que l'agent tente d'apprendre détermine généralement le nombre d'épisodes de formation requis - des stratégies et des comportements plus complexes nécessitent plus d'épisodes de formation.
NUM EVET EP - Il s'agit également d'une entrée entière et représente le nombre d'épisodes d'évaluation que l'agent subira après la formation. Ce sont les épisodes dans lesquels l'agent démontre son comportement appris.
Espace d'action continue - Il s'agit d'une entrée booléenne qui détermine si l'agent utilise un espace d'action continu. Un espace d'action continu est celui dans lequel il y a un nombre infini d'actions que l'agent peut prendre, par exemple s'il apprend à diriger une voiture, et une gamme d'angles sur lesquels la colonne de direction peut changer est une valeur décimale entre 0 et 180, qu'un nombre infini de valeurs dans cette plage tels que 0,12 et 145,774454. Vous voudrez identifier au début de l'utilisation si votre agent a un nombre infini d'actions ou des actions de nombre fini qu'ils peuvent prendre. L'espace d'action doit être continu ou discret, il ne peut pas être les deux.
Espace d'action discrète - Il s'agit d'une entrée booléenne qui détermine si l'agent utilise un espace d'action discret. Un espace d'action discrète est celui dans lequel il y a un nombre fini d'actions que l'agent peut prendre, comme si l'IA ne peut déplacer qu'un seul espace ou laissé un seul espace. Dans ce cas, il n'a que deux actions à sa disposition et l'espace d'action est discret. L'utilisateur détermine le type d'espace d'action que l'agent utilisera avant d'utiliser Mindmaker et de définir ces valeurs en conséquence.
Forme d'espace d'action - Cela définit les limites inférieures et supérieures des actions disponibles pour l'agent. Si vous utilisez un espace d'action discret, c'est simplement le nombre total d'actions disponibles pour l'agent, par exemple 2 ou 8. Si vous utilisez un espace d'action continu, les choses sont plus compliquées et vous devez définir les limites faibles et élevées de l'espace d'action séparément. Le format pour le faire est le suivant: Low = Lowboundary, High = Highboundary, Forme = (1,) Dans ce cas, la basse est une valeur telle que -100,4 et le haut-linaire est une valeur telle que 298,46. Toutes les valeurs décimales entre ces limites représenteront alors les actions disponibles pour l'agent. Si vous aviez un tableau de telles actions, vous pouvez modifier la partie de forme pour refléter cela.
Forme d'espace d'observation - correctement parlant cette entrée est une dérivée python de la classe d'environnement personnalisée AI ouverte et définit les limites inférieures et supérieures des observations disponibles pour l'agent après avoir pris une action. Le format pour le faire est le suivant: Low = np.array ([Lowboundary]), High = np.array ([Highboundary]), dtype = np.float32. Imaginez un agent qui devait prendre trois mesures spécifiques d'affilée pour recevoir une récompense, alors son espace d'observation devrait inclure l'accès à ces trois actions, qui seraient chacune représentées par une observation unique. Par conséquent, le tableau d'observations devrait inclure trois valeurs différentes, chacune avec des frontières uniques. Par exemple, un tel espace d'action peut être défini comme tel: bas = np.array ([0,0,0]), high = np.array ([100,100,100]), dtype = np.float32 si chacune de ses propres actions que l'agent devait observer était une valeur entre 0 et 100. Une règle de celle si une valeur est partie de la fonction de récompense pour l'agent, leur comportement est unique Met, que l'espace d'observation doit inclure une référence à cette valeur. Si cinq conditions doivent être remplies pour qu'un agent soit récompensé, chacune de ces cinq conditions doit faire partie de l'espace d'observation des agents.
Chargez le modèle préalable - il s'agit d'une valeur booléenne qui détermine si vous souhaitez à l'agent de charger un comportement préalable préalable qui a été enregistré. Si vous définissez ceci sur true, vous souhaiterez spécifier le nom du fichier dans la zone d'entrée de nom de modèle Enregistrer / charger. Tous les modèles sont enregistrés par défaut dans le répertoire itinérant des données de l'application de l'ordinateur par exemple C: Users Username AppData Roaming
Enregistrer le modèle après la formation - Il s'agit d'une valeur booléenne qui détermine si vous voulez à l'agent de sauver le comportement qu'il a appris après la formation. Si vous définissez ceci sur true, vous souhaiterez spécifier le nom du fichier dans la zone d'entrée de nom de modèle Enregistrer / charger. Tous les modèles sont enregistrés par défaut dans le répertoire itinérant des données de l'application de l'ordinateur par exemple C: Users Username AppData Roaming
Nom du modèle Enregistrer / charger - Il s'agit d'une chaîne représentant le nom du modèle que vous souhaitez enregistrer ou charger. Les fichiers sont enregistrés dans le répertoire d'itinérance des données de l'application de l'ordinateur par exemple C: Users username appdata roaming
Utilisez des paramètres personnalisés - c'est une valeur booléenne qui détermine si vous souhaitez utiliser la version stock de l'algorithme que vous avez sélectionné ou souhaitez modifier ses paramètres. Si vous souhaitez utiliser des paramètres personnalisés, ceux-ci sont accessibles via les variables de structure des paramètres personnalisés. Si vous cliquez sur eux, par exemple A2CParams, vous verrez toutes les valeurs qui peuvent être définies dans ces structures. Une ventilation détaillée des paramètres pour chaque algorithme peut être trouvée ici: https://stable-baselines.readthedocs.io/en/master/
Un exemple de liste de fonctions du projet d'exemple est présenté ci-dessous pour comprendre comment les informations sont transmises entre Mindmaker et Unreal Engine Tous les actifs UE pertinents pour le problème du jouet sont contenus dans le dossier Assets / DeepLearningNPC. Le Blueprint appelé AI_CHARACTER_CONTROLER_BP dans le Blueprint AI_CHARACTER_CONTROLER_BP, toutes les variables d'environnement sont configurées pour passer à l'application autonome Mindmaker. Il s'agit notamment des fonctions essentielles suivantes
Chargez la fonction d'entrée sensorielle - importe les objets auxquels l'IA aura accès à la détection ou à la manipulation de sa fonction environnementale de contrôle environnemental - Cela contrôle la logique pour des parties de l'environnement qui modifient ces lumières de commutation activées et éteintes, etc.
Définissez la fonction d'espace d'action - codez toutes les actions d'agent possibles en une seule valeur numérique qui peut être transmise à l'application autonome pour l'évaluation par l'algorithme RL
Fonction LaunchMindMaker - Cela appelle l'application autonome au début du jeu afin qu'il puisse commencer les données d'évaluation de l'environnement UE. Une fois que cela a été initié, l'application RL commence à sonder l'environnement avec des actions aléatoires qu'elle génère elle-même, comme une personne aveugle qui recherche dans l'obscurité une lumière. La lumière est la récompense, qui est spécifiée dans la fonction de récompense de vérification de la fonction UE. LauncharningEngine transmet également certaines informations de base de l'environnement de l'UE à l'application autonome, comme le nombre d'actions que l'agent peut prendre, le nombre total d'épisodes à former et le nombre d'épisodes pour afficher la stratégie acquise des agents après la formation. Afficher tous les agents l'entraînement aléatoire prendrait beaucoup trop de temps.
Fonction de réception - Une fois la fonction d'apprentissage du lancement, la fonction suivante pour tirer est la réévaluation. Cela reçoit l'action choisie par l'application autonome, et fait un certain nombre de procédures de suivi avec elle, telles que la mise à jour de l'emplacement des agents dans l'environnement, en vérifiant si la nouvelle action satisfait à l'état de récompense, affichant les actions des agents si nous traversons la formation et mettait à jour les observations des agents sur son environnement afin qu'ils puissent être remis à l'application autonome dans le prochain épisode.
Faire fonctionner les observations - le but est de mettre à jour les observations des agents sur son environnement suite à l'action qu'elle vient de prendre. Ceux-ci comprendront, par exemple, l'emplacement des agents avec l'environnement et toutes les autres données environnementales qui ont changé depuis la dernière fois qu'elle a pris des mesures. Ceux-ci sont stockés dans une variable de structure personnalisée.
CheckReward - Cela spécifie la condition de récompense pour l'agent dans l'environnement. Si cette condition de récompense est remplie à la suite de l'agent prenant une action, ces informations sont transmises à l'application autonome dans la fonction d'observations d'envoi qui suit. Envoyer une fonction d'observations - prend les nouvelles observations faites par l'agent ainsi que toute information de récompense et les transmet à l'application autonome. C'est ainsi que l'algorithme RL sera en mesure d'évaluer si l'action qu'il vient de prendre était bonne et de mettre à jour sa stratégie en conséquence. Une fois cette fonction se déclenche, la seule itération ou épisode du jeu est terminée et le processus répète Ad Infinitum.
Certaines tâches peuvent nécessiter de longues périodes de formation lorsque la visualisation des mouvements des agents s'avérerait prohibitive. En tant que tel, dans certains exemples, visualisant les mouvements de l'agent a été désactivé, mais la formation se produit en arrière-plan une fois l'exemple exécuté et une fois terminé, l'agent démontrera la stratégie acquise.
Dans ce cas, aléatoire signifie que l'agent utilise un générateur de nombres aléatoires pour choisir entre les actions disponibles pendant la formation. L'algorithme RL observe ensuite les résultats de ces actions aléatoires ainsi que toute récompense reçue et utilise ces informations pour choisir de meilleures actions pendant la phase «d'exploitation». C'est ainsi qu'une stratégie apprise est développée.
La collecte d'informations pendant l'apprentissage prend la forme d'un éventail d'observations générées après chacune des actions aléatoires de l'agent. Si vous utilisez le plugin Mindmaker, la forme exacte du tableau est définie dans la propriété de taille d'observation de la fonction Blueprint de lancement de Mindmaker et dépendra des variables nécessaires à l'agent à observer dans ce jeu ou tâche d'apprentissage particulier. Il changera en fonction de la tâche ou du jeu d'apprentissage.
L'agent ne perçoit que la partie de l'environnement qui leur est exposée par le concepteur de jeux. Lorsque vous utilisez le plugin Mindmaker, ces observations sont remplies dans l'appel de fonction Blueprint d'observations dans le moteur Unreal. Cela générera un tableau de nombres dans la forme définie par la propriété de taille d'observation de la fonction Blueprint de lancement de Mindmaker. Les observations doivent être sélectionnées afin qu'elles ne comprennent que les données nécessaires pour que l'agent puisse apprendre, sinon la formation pourrait prendre du temps prohibitif.
Dans Vanilla Q Learning - Aucun réseau de neurones n'est requis et l'apprentissage est stocké dans un format tabulaire. Lorsque vous utilisez l'apprentissage en renforcement profond de Mindmaker, on peut choisir entre une variété d'architectures de réseau neuronal, notamment RNN, CNN, etc. On peut les définir dans les propriétés personnalisées de chaque algorithme de l'appel de fonction Blueprint de lancement de Mindmaker.
Création d'un environnement d'apprentissage en renforcement profond personnalisé
Intro. Pour renforcer l'apprentissage pour le jeu vidéo AI
Apprentissage du renforcement - c'est promesse et péril
Documentation des lignes de base stables