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

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.

É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

  1. Téléchargez la Bonsai bibliothèque de connecteurs (BonsaiLibrary.jar) à partir du Bonsai référentiel AnyLogic GitHub.
  2. Téléchargez le modèle de modèle wrapper à partir de la page AnyLogic Microsoft ProjectBonsai.
  3. Dans AnyLogic :
    1. Sélectionnez le panneau Palette .
    2. Sélectionnez plus le signe (+) dans le coin inférieur gauche pour ouvrir la boîte de dialogue Gérer les bibliothèques .
    3. Sélectionnez le bouton Ajouter à droite de la boîte de dialogue.
    4. Accédez à, puis sélectionnez le Bonsaifichier Library.jar sur votre ordinateur.
    5. Confirmez toutes les boîtes de dialogue.
  4. Ouvrez le modèle Wrapper et votre modèle de simulateur existant dans AnyLogic.
  5. Ouvrez le type d’agent wrapper dans le modèle Wrapper.
  6. Dans le panneau d’éditeur de l’agent wrapper, pointez vers la gauche pour voir l’objet Bonsai connecteur et la getObservable fonction.
  7. 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.

AnyLogic screenshot

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 :

  1. Ouvrez la fenêtre propriétés de la fonction.
  2. Accédez à la section Avancé.
  3. 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

  1. Ouvrez les deux répertoires de modèles dans l’Explorateur de fichiers de votre choix.
  2. Fermez les deux modèles dans AnyLogic.
  3. 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

  1. Ouvrez les propriétés de l’objet de base de données dans votre modèle existant.
  2. Sélectionnez Sauvegarder la base de données et enregistrez le fichier de sauvegarde sur votre ordinateur.
  3. Ouvrez les propriétés de l’objet de base de données pour le modèle wrapper.
  4. Sélectionnez Restaurer la base de données et choisissez le fichier de sauvegarde que vous avez créé.
  5. Une fois que vous avez restauré la base de données, vous pouvez supprimer le fichier de sauvegarde.
  1. Téléchargez la boîte à outils à partir de Bonsai laBonsai page web sur MATLAB-Central.
  2. Double-cliquez sur le programme d’installation de la boîte à outils (.mltbx).
  3. Suivez les invites qui s’affichent sur votre écran pour installer la boîte à outils pour votre version PAR défaut de MATLAB/Simulink.
  4. Ouvrez votre modèle Simulink.
  5. Encapsulez votre modèle existant afin qu’il accepte et InitialConfig valeurs action en tant qu’entrée et valeur states comme sortie.

    Simulink screenshot of wrapped model

    Capture d’écran de Simulink avec un modèle existant encapsulé avec des entrées et des sorties.

  6. À partir du navigateur de bibliothèque Simulink , ajoutez les blocs suivants :
    • Bonsai
    • Constant
    • Mux
    • Arrêter la simulation
  7. Créez un bloc constant avec la valeur False.
  8. Faites autant de blocs constants que nécessaire pour représenter l’état initial de votre simulation.
  9. 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.
  10. Connecter le action port de sortie du Bonsai bloc vers le action port d’entrée de votre modèle Simulink.
  11. Connecter le reset port de sortie du Bonsai bloc vers le bloc Arrêter la simulation.
  12. Connecter le state port de sortie de votre modèle existant vers le state port d’entrée du Bonsai bloc.
  13. Connecter le False bloc constant au halted port d’entrée du Bonsai bloc.
  14. Double-cliquez sur le Bonsai bloc et définissez Sample Time sur [DEFAULT_SIMULATION_RATE, 0].

Simulink screenshot of fully connected model

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 dans ModelObservation sont remplies au début de chaque étape d’épisode par la getObservable 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

  1. 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
  1. Créez un fichier appelé SIM_PARAMS.m et définissez les variables requises par votre simulateur. Exemple :
    TemplateParam = 1;  %% dummy variable
    
  2. Créez un fichier appelé startup.m et ajoutez le code suivant :
    addpath(genpath(pwd))
    SIM_PARAMS
    DEFAULT_SIMULATION_RATE = -1;  % units: sec
    
  3. 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.
  4. 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
    
  5. 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.
  6. 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
    
  7. 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 :

  1. Cliquez sur le bouton Exécuter dans AnyLogic.
  2. 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).

  1. Ouvrez l’interfaceBonsai utilisateur.
  2. Sélectionnez + Créer un cerveau et suivez l’invite pour créer un cerveau vide.
  3. 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 .
  4. Configurez le modèle avec des états et des actions valides pour votre simulateur.
  5. Sélectionner le bouton Train (Entraîner).
  6. 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.