Lier un simulateur non managé à Bonsai
- Durée totale : 40 minutes
- Temps actif : 40 minutes
- Temps inactif : 0 minutes
- Temps total de fin : 60 minutes
- Temps actif : 30 minutes
- Temps inactif : 30 minutes
- Temps total de fin : 60 minutes
- Temps actif : 30 minutes
- Temps inactif : 30 minutes
Connecter un simulateur s’exécutant dans votre environnement local vers votre Bonsai espace de travail pour tester et entraîner le cerveau.
Avant de commencer
- Vous devez être familiarisé avec le codage Python. Les instructions ci-dessous supposent que vous comprenez les principes de base du codage Python. Si vous n’avez jamais codé dans Python avant, nous vous recommandons de suivre le cours MS Learn : Présentation du cours Python avant de continuer.
- Vous devez installer Python. Tous les exemples de code sont écrits dans Python 3.7. Si vous avez déjà installé Python et que vous souhaitez éviter les collisions avec une installation existante, utilisez un environnement Python (pyenv) ou un environnement virtuel (virtualenv).
- Vous devez avoir installé l’API Microsoft Bonsai pour Python.
- L’interfaceBonsai CLI doit être installée.
- Vous devez avoir un simulateur local implémenté. Les instructions de ce guide expliquent comment mettre à jour un simulateur d’apprentissage automatique existant et l’exécuter localement avec Bonsai.
- Vous devez connaître votre Bonsai ID d’espace de travail. Pour trouver l’ID de votre espace de travail, suivez les instructions fournies dans Obtenir les détails de votre espace de travail Bonsai.
- Vous devez disposer d’une clé d’accès définie dans votre Bonsai espace de travail. Si vous n’avez pas de clé d’accès, suivez les instructions fournies dans Obtenir la clé d’accès de votre espace de travail pour en créer une.
Conseil
Si vous rencontrez des problèmes lors de l’isolement des incompatibilités de dépendances Python ou des conflits d’environnement généraux, envisagez de configurer un environnement virtuel Miniconda pour le codage du travail.
- L’interfaceBonsai CLI doit être installée.
- Vous devez avoir un simulateur local implémenté. Les instructions de ce guide expliquent comment mettre à jour un simulateur d’apprentissage automatique existant et l’exécuter localement avec Bonsai.
- Vous devez connaître votre Bonsai ID d’espace de travail. Pour trouver l’ID de votre espace de travail, suivez les instructions fournies dans Obtenir les détails de votre espace de travail Bonsai.
- Vous devez disposer d’une clé d’accès définie dans votre Bonsai espace de travail. Si vous n’avez pas de clé d’accès, suivez les instructions fournies dans Obtenir la clé d’accès de votre espace de travail pour en créer une.
- L’interfaceBonsai CLI doit être installée.
- Vous devez avoir un simulateur local implémenté. Les instructions de ce guide expliquent comment mettre à jour un simulateur d’apprentissage automatique existant et l’exécuter localement avec Bonsai.
- Vous devez connaître votre Bonsai ID d’espace de travail. Pour trouver l’ID de votre espace de travail, suivez les instructions fournies dans Obtenir les détails de votre espace de travail Bonsai.
- Vous devez disposer d’une clé d’accès définie dans votre Bonsai espace de travail. Si vous n’avez pas de clé d’accès, suivez les instructions fournies dans Obtenir la clé d’accès de votre espace de travail pour en créer une.
- Vous devez utiliser uniquement les boîtes à outils MATLAB prises en charge dans votre modèle de simulation.
Étape 1 : Ajouter un Bonsai connecteur
Mettez à jour votre code de simulateur pour ajouter un connecteur dédiéBonsai.
Vous devez encapsuler votre modèle AnyLogic existant et attacher la Bonsai bibliothèque connecteur avant de pouvoir l’utiliser avec Bonsai. Le wrapping est le processus d’incorporation de votre modèle de simulateur existant en tant que dépendance dans un nouveau modèle (le modèle wrapper) afin que le modèle wrapper puisse contrôler l’agent racine de votre modèle existant. Vous pouvez voir la relation entre votre modèle existant et le modèle wrapper dans la section Dépendances de la fenêtre propriétés du modèle wrapper.
R. Générer le modèle wrapper
- Téléchargez la Bonsai bibliothèque de connecteurs (BonsaiLibrary.jar) à partir du Bonsai référentiel AnyLogic GitHub.
- Téléchargez le modèle de modèle wrapper à partir de la page AnyLogic Microsoft ProjectBonsai.
- Dans AnyLogic :
- Sélectionnez le panneau Palette .
- Sélectionnez plus le signe (+) dans le coin inférieur gauche pour ouvrir la boîte de dialogue Gérer les bibliothèques .
- Sélectionnez le bouton Ajouter à droite de la boîte de dialogue.
- Accédez à, puis sélectionnez le Bonsaifichier Library.jar sur votre ordinateur.
- Confirmez toutes les boîtes de dialogue.
- Ouvrez le modèle Wrapper et votre modèle de simulateur existant dans AnyLogic.
- Ouvrez le type d’agent wrapper dans le modèle Wrapper.
- Dans le panneau d’éditeur de l’agent wrapper, pointez vers la gauche pour voir l’objet Bonsai connecteur et la
getObservable
fonction. - Faites glisser et déposez l’agent de niveau supérieur dans le panneau de projet de votre modèle de simulateur existant dans l’agent Wrapper.
Capture d’écran de l’interface utilisateur AnyLogic avec les éléments de menu pertinents mis en surbrillance
Votre modèle existant est désormais instancié en tant qu’objet dans le modèle wrapper. Les champs et fonctions de votre modèle existant sont désormais accessibles via l’objet racine que vous avez ajouté au modèle wrapper.
Conseil
Tant que le Bonsai fichier jar du connecteur n’est pas déplacé ou supprimé, il sera disponible pour tous les projets AnyLogic.
B. Mettre à jour votre modèle existant
Pour toute fonction de votre modèle existant qui peut être appelée dans la getObservable
fonction du modèle wrapper ou du Bonsai connecteur :
- Ouvrez la fenêtre propriétés de la fonction.
- Accédez à la section Avancé.
- Sélectionnez « public » dans la liste déroulante des options Access .
C. Mettre à jour le Bonsai connecteur
Cliquez sur l’objet Bonsai connecteur dans AnyLogic et fournissez les informations suivantes sous Propriétés :
- ID de votre espace de travail.
- Votre clé d’accès.
- Nom unique pour votre simulateur.
D. Migrer votre base de données AnyLogic intégrée
Notes
Si votre modèle existant n’utilise pas la base de données AnyLogic intégrée, vous pouvez ignorer cette étape.
Option 1 : Copier le dossier de base de données
- Ouvrez les deux répertoires de modèles dans l’Explorateur de fichiers de votre choix.
- Fermez les deux modèles dans AnyLogic.
- Copiez le dossier de base de données de votre dossier de modèle existant dans le dossier du modèle wrapper.
Option 2 : Effectuer et restaurer une sauvegarde de base de données
- Ouvrez les propriétés de l’objet de base de données dans votre modèle existant.
- Sélectionnez Sauvegarder la base de données et enregistrez le fichier de sauvegarde sur votre ordinateur.
- Ouvrez les propriétés de l’objet de base de données pour le modèle wrapper.
- Sélectionnez Restaurer la base de données et choisissez le fichier de sauvegarde que vous avez créé.
- Une fois que vous avez restauré la base de données, vous pouvez supprimer le fichier de sauvegarde.
- Téléchargez la boîte à outils à partir de Bonsai laBonsai page web sur MATLAB-Central.
- Double-cliquez sur le programme d’installation de la boîte à outils (.mltbx).
- Suivez les invites qui s’affichent sur votre écran pour installer la boîte à outils pour votre version PAR défaut de MATLAB/Simulink.
- Ouvrez votre modèle Simulink.
- Encapsulez votre modèle existant afin qu’il accepte et
InitialConfig
valeursaction
en tant qu’entrée et valeurstates
comme sortie.Capture d’écran de Simulink avec un modèle existant encapsulé avec des entrées et des sorties. - À partir du navigateur de bibliothèque Simulink , ajoutez les blocs suivants :
- Bonsai
- Constant
- Mux
- Arrêter la simulation
- Créez un bloc constant avec la valeur
False
. - Faites autant de blocs constants que nécessaire pour représenter l’état initial de votre simulation.
- Utilisez le bloc Mux pour combiner vos valeurs de propriété initiales et connecter le port de sortie Mux au
InitialConfig
port d’entrée sur votre modèle existant. - Connecter le
action
port de sortie du Bonsai bloc vers leaction
port d’entrée de votre modèle Simulink. - Connecter le
reset
port de sortie du Bonsai bloc vers le bloc Arrêter la simulation. - Connecter le
state
port de sortie de votre modèle existant vers lestate
port d’entrée du Bonsai bloc. - Connecter le
False
bloc constant auhalted
port d’entrée du Bonsai bloc. - Double-cliquez sur le Bonsai bloc et définissez Sample Time sur
[DEFAULT_SIMULATION_RATE, 0]
.
Capture d’écran de l’interface utilisateur Simulink avec les blocs pertinents connectés, comme décrit dans le processus ci-dessus.
Étape 2 : Configurer votre Bonsai connecteur
Les connecteurs dédiés sont personnalisés par défaut pour le simulateur associé. Vous pouvez voir un exemple de connecteur dédié entièrement fonctionnel dans l’exempleBonsai : Cartpole. GitHub référentiel L’exemple s’exécute localement pour inscrire et connecter le simulateur Cartpole Python inclus. Les éléments personnalisables sont marqués dans l’exemple de fichier en tant que TODOs.
R. Configurer les classes wrapper
Le modèle wrapper comprend trois classes Java qui sont nécessaires pour définir la configuration de départ, l’espace d’action et l’espace d’observation de votre modèle pour Bonsai:
ModelConfig
: doit contenir toutes les variables nécessaires pour initialiser un épisode d’entraînement. Si la configuration d’initialisation se produit dans le cadre de la logique de simulation, vous pouvez laisser cette classe vide.ModelConfig
Les variables sont accessibles dans le champ episodeStart de l’objet Bonsai Connector et mappent aux variables de configuration du simulateur définies dans votre fichier Inkling.ModelAction
: doit contenir toutes les variables que le Bonsai cerveau revient au modèle wrapper.ModelAction
les variables sont accessibles dans le champ episodeStep de l’objet Bonsai Connector et mappent aux actions de cerveau autorisées définies dans votre fichier Inkling.ModelAction
les valeurs sont fournies par le Bonsai cerveau pour mettre à jour le modèle à chaque étape.ModelObservation
: doit contenir toutes les variables nécessaires pour définir l’espace observable pour votre simulation. Les variables définies dansModelObservation
sont remplies au début de chaque étape d’épisode par lagetObservable
fonction et mappent aux états du simulateur définis dans votre fichier Inkling.
Important
Actuellement, la Bonsai plateforme autorise uniquement les champs numériques (entiers et doubles) et les tableaux en tant que types de données.
B. Mettre à jour la getObservable
fonction pour le modèle wrapper
La façon dont vous mettez à jour getObservable
dépend de votre modèle existant, mais il est important d’associer chaque élément de l’espace d’observation défini avec ModelObservation
une sortie appropriée du modèle existant.
Pour accéder aux champs et aux fonctions de votre modèle existant, préfixez les noms avec l’objet racine qui représente le modèle existant. Par exemple, si vous souhaitez accéder à une variable appelée currTemp
dans le modèle existant, utilisez-la Main.currTemp
pour la référencer, où Main
est le type d’agent racine du modèle wrapper.
Important
Tout code que vous ajoutez à la getObservable
fonction et le Bonsai connecteur doit référencer votre modèle existant. Le wrapper est destiné uniquement à empaqueter les informations entrantes et sortantes afin que Bonsai votre modèle existant puisse communiquer.
C. Mettre à jour les champs du Bonsai connecteur
- Mettez à jour l’épisodeStart, episodestep et arrêtez les champs avec du code qui agit ou signale sur votre modèle existant.
Champ | Utilisation | Variables locales |
---|---|---|
episodeStart | initialiser l’environnement simulé | config (alias ModelConfig ) |
episodeStep | mettre à jour l’environnement simulé | action (alias ModelAction ) |
Arrêté | indique si la simulation dans un état terminal (True ou False ) |
aucun |
- Créez un fichier appelé SIM_PARAMS.m et définissez les variables requises par votre simulateur. Exemple :
TemplateParam = 1; %% dummy variable
- Créez un fichier appelé startup.m et ajoutez le code suivant :
addpath(genpath(pwd)) SIM_PARAMS DEFAULT_SIMULATION_RATE = -1; % units: sec
- Laissez
DEFAULT_SIMULATION_RATE
la valeur -1 (recommandé) si vous souhaitez exécuter le Bonsai bloc à la même vitesse que votre modèle. Sinon, définissez le taux d’échantillonnage souhaité en seconde. - Créez un fichier appelé bonsaiConfig.m et ajoutez le code suivant :
% Copyright (c) Microsoft Corporation. % Licensed under the MIT License. function config = bonsaiConfig config = BonsaiConfiguration(); % % override api url, defaults to "https://api.bons.ai" % config.url = "https://api.bons.ai"; % bonsai workspace config.workspace = "YOUR_WORKSPACE_ID"; %TODO % access key, generated from https://beta.bons.ai/brains/accounts/settings config.accessKey = "YOUR_ACCESS_KEY"; %TODO % simulator name, for an unmanaged simulator launched from the desktop to show up on the web config.name = "YOUR_SIMULATOR_NAME"; %TODO % path to bonsai block in your simulink model file, used to determine state and action schemas config.bonsaiBlock = "simulinkModelFileName/Bonsai"; %TODO % % set state and action schemas (overrides data from bonsaiBlock) config.stateSchema = ["state1", "state2", "state3", "state4"]; %TODO config.actionSchema = ["action1"]; %TODO % set your InitialConfig Parameters config.configSchema = ["initialConfig1"]; %TODO % % time (in seconds) the simulator gateway should wait for % % your simulator to advance, defaults to 60 config.timeout = 60; % path to csv file where episode data should be logged config.outputCSV = "record-data.csv"; % % display verbose logs config.verbose = true; end
- Mettez à jour chacune des lignes marquées avec
%TODO
des commentaires avec les détails pertinents pour votre espace de travail et le Bonsai simulateur existant. - Créez un fichier appelé bonsaiTrain.m et ajoutez le code suivant :
% Copyright (c) Microsoft Corporation. % Licensed under the MIT License. % Main entrypoint for training a Bonsai brain. After starting this script you % must begin training your brain in the web, selecting the "Simulink Cartpole" % simulator. %% Load startupFiles startup; % Simulink Model File Name mdl = 'simulinkModelFilename'; %TODO load_system(mdl); set_param(mdl, 'FastRestart', 'on'); % run training config = bonsaiConfig; BonsaiRunTraining(config, mdl, @episodeStartCallback); % callback for running model with provided episode configuration function episodeStartCallback(mdl, episodeConfig) in = Simulink.SimulationInput(mdl); in = in.setVariable('initialProp1', 'initialProp1', ... 'initialPropN', episodeConfig.initialConfig1); %TODO sim(in); end
- Mettez à jour chacune des lignes marquées par
%TODO
des commentaires comme suit :
initialProp1
...initialPropN
: mise à jour pour correspondre aux noms réels définis comme propriétés initiales de votre modèle.initialConfig1
: mettez à jour le nom pour qu’il corresponde au paramètre de configuration initial défini dans le fichier bonsaiConfig.m.
Étape 3 : Configurer l’interface Bonsai CLI et votre environnement
Définissez les variables d’environnement et SIM_ACCESS_KEY
les variables d’environnementSIM_WORKSPACE
.
export SIM_WORKSPACE="YOUR_WORKSPACE_ID"
export SIM_ACCESS_KEY="YOUR_WORKSPACE_ACCESS_KEY"
Exécutez ensuite la bonsai configure
commande pour définir votre ID d’espace de travail pour l’interface Bonsai CLI :
bonsai configure --workspace-id ${SIM_WORKSPACE}
Étape 4 : Exécuter le sim avec une configuration par défaut
Avant de connecter votre simulateur Bonsai, vous devez exécuter votre modèle localement avec une configuration par défaut pour vous assurer qu’il se comporte comme prévu.
Pour exécuter le simulateur localement :
- Cliquez sur le bouton Exécuter dans AnyLogic.
- Sélectionnez le simulateur souhaité dans la liste déroulante qui s’affiche.
Vous pouvez utiliser une expérience sans interface graphique (gui) ou animée (avec gui) pour votre série de tests.
Étape 5 : Inscrire votre simulateur en tant que sim non managé
Démarrez une instance locale de votre simulateur Python et notez l’ID de session retourné par CreateSession
.
Démarrez votre modèle AnyLogic local. Le Bonsai connecteur inscrit automatiquement votre simulateur Bonsai en tant que simulateur non managé.
Démarrez votre modèle Simulink local. La Bonsai boîte à outils inscrit automatiquement votre simulateur Bonsai en tant que simulateur non géré.
Étape 6 : Exécuter votre simulateur non managé avec un cerveau de test
Vous devez vérifier que votre simulateur peut communiquer correctement avant Bonsai de l’ajouter à votre espace de travail en tant que simulateur managé (évolutif).
- Ouvrez l’interfaceBonsai utilisateur.
- Sélectionnez + Créer un cerveau et suivez l’invite pour créer un cerveau vide.
- Ouvrez le fichier d’exemple de cerveau de base et collez le modèle Inkling dans le panneau de codage vide sous l’onglet Enseigner .
- Configurez le modèle avec des états et des actions valides pour votre simulateur.
- Sélectionner le bouton Train (Entraîner).
- Sélectionnez votre simulateur dans la liste des simulateurs non gérés .
Après quelques instants, vous devez voir le streaming des données d’épisode dans la console MATLAB.
Lorsque vous avez suffisamment de données de test, sélectionnez Arrêter l’entraînement. Simulink enregistre les détails de l’exécution de test en tant que journaux csv avec le nom de fichier défini dans votre Bonsai fichier de configuration (bonsaiConfig.m
).
Étapes suivantes
Une fois que votre simulateur se connecte localement et que vous pouvez vérifier le comportement correct, vous êtes prêt à le convertir en simulateur managé et mettre à l’échelle l’entraînement du cerveau avec Bonsai.