Een onmanagede simulator koppelen aan Bonsai


  • Totale tijd om te voltooien:40 minuten
  • Actieve tijd:40 minuten
  • Inactieve tijd:0 minuten


  • Totale tijd om te voltooien:60 minuten
  • Actieve tijd:30 minuten
  • Inactieve tijd:30 minuten


  • Totale tijd om te voltooien:60 minuten
  • Actieve tijd:30 minuten
  • Inactieve tijd:30 minuten

Verbinding maken simulator die wordt uitgevoerd in uw lokale omgeving naar uw werkruimte voor Bonsai simulatortests en training in uw brein.

Voordat u begint

  • U moet bekend zijn met Python-codering. In de onderstaande instructies wordt ervan uitgenomen dat u de basisbeginselen van Python-codering begrijpt. Als u nog nooit eerder in Python hebt gecodeerd, raden we u aan de cursus MS Learn: Inleiding tot Python te volgen voordat u doorgaat.
  • Python moet zijn geïnstalleerd. Alle voorbeeldcode is geschreven in Python 3.7. Als Python al is geïnstalleerd en u wilt voorkomen dat er problemen zijn met een bestaande installatie, gebruikt u een Python-omgeving (pyenv) of virtuele omgeving (virtualenv).
  • U moet de hebben geïnstalleerd.
  • U moet de hebben geïnstalleerd.
  • U moet een lokale simulator hebben geïmplementeerd. In de instructies in deze handleiding wordt uitgelegd hoe u een bestaande machine teaching simulator bijwerkt en lokaal kunt uitvoeren met .
  • U moet uw werkruimte-id kennen. Volg de instructies in Uw werkruimtegegevens op halen om uw werkruimte-id te vinden.
  • U moet een toegangssleutel hebben ingesteld in uw werkruimte. Als u geen toegangssleutel hebt, volgt u de instructies in Uw werkruimtetoegangssleutel op halen om een nieuwe sleutel te maken.

Tip

Als u problemen hebt met het isoleren van niet-overeenkomende Python-afhankelijkheden of algemene omgevingsconflicten, kunt u overwegen om een virtuele Miniconda-omgeving in te stellen voor het coderen van werk.

  • U moet de hebben geïnstalleerd.
  • U moet een lokale simulator hebben geïmplementeerd. In de instructies in deze handleiding wordt uitgelegd hoe u een bestaande machine teaching simulator bijwerkt en lokaal kunt uitvoeren met .
  • U moet uw werkruimte-id kennen. Volg de instructies in Uw werkruimtegegevens op halen om uw werkruimte-id te vinden.
  • U moet een toegangssleutel hebben ingesteld in uw werkruimte. Als u geen toegangssleutel hebt, volgt u de instructies in Uw werkruimtetoegangssleutel op halen om een nieuwe sleutel te maken.
  • U moet de hebben geïnstalleerd.
  • U moet een lokale simulator hebben geïmplementeerd. In de instructies in deze handleiding wordt uitgelegd hoe u een bestaande machine teaching simulator bijwerkt en lokaal kunt uitvoeren met .
  • U moet uw werkruimte-id kennen. Volg de instructies in Uw werkruimtegegevens op halen om uw werkruimte-id te vinden.
  • U moet een toegangssleutel hebben ingesteld in uw werkruimte. Als u geen toegangssleutel hebt, volgt u de instructies in Uw werkruimtetoegangssleutel op halen om een nieuwe sleutel te maken.
  • U moet alleen ondersteunde MATLAB-werksets in uw simulatiemodel gebruiken.

Stap 1: een connector Bonsai toevoegen

Werk de simulatorcode bij om een toe te dedicated Bonsai connector voegen.

U moet uw bestaande AnyLogic-model verpakken en de Bonsai connectorbibliotheek koppelen voordat u het kunt gebruiken met Bonsai . Wrapping is het proces van het insluiten van uw bestaande simulatormodel als een afhankelijkheid in een nieuw model (het wrappermodel), zodat het wrappermodel de hoofdagent van uw bestaande model kan bepalen. U kunt de relatie tussen uw bestaande model en het wrappermodel zien in de sectie Afhankelijkheden van het venster met eigenschappen van het wrappermodel.

A. Het wrappermodel bouwen

  1. Download de Bonsai Library.jar" data-linktype="external">Connector Library ( Library.jar) uit de BonsaiBonsaiBonsai Bonsai AI/bonsai-anylogic" data-linktype="external">Bonsai AnyLogic GitHub repository .
  2. Download de wrapper-modelsjabloon van de .
  3. In AnyLogic:
    1. Selecteer het deelvenster Palet.
    2. Selecteer het plusteken (+) in de linkerbenedenhoek om het dialoogvenster Bibliotheken beheren te openen.
    3. Selecteer de knop Toevoegen aan de rechterkant van het dialoogvenster.
    4. Blader naar en selecteer het Bonsai bestand Library.jar op uw computer.
    5. Bevestig alle dialoogvensters.
  4. Open het Wrapper-model en uw bestaande simulatormodel in AnyLogic.
  5. Open het type wrapperagent in het Wrapper-model.
  6. Wijs in het editorvenster van de wrapperagent de muisaanwijzer naar links om het connectorobject en Bonsai de functie te getObservable zien.
  7. Sleep de agent op het hoogste niveau in het projectpaneel voor uw bestaande simulatormodel naar de Wrapper-agent.

AnyLogic-schermopname

Schermopname van AnyLogic UI met de relevante menu-items gemarkeerd

Uw bestaande model wordt nu als een object in het wrappermodel gemaakt. Velden en functies in uw bestaande model zijn nu toegankelijk via het hoofdobject dat u aan het wrappermodel hebt toegevoegd.

Tip

Zolang het Bonsai JAR-bestand van de connector niet wordt verplaatst of verwijderd, is het beschikbaar voor alle AnyLogic-projecten.

B. Uw bestaande model bijwerken

Voor elke functie in uw bestaande model die kan worden aangeroepen in de getObservable functie van het wrappermodel of de Bonsai connector:

  1. Open het eigenschappenvenster voor de functie.
  2. Ga naar de sectie Geavanceerd.
  3. Selecteer 'openbaar' in de vervolgkeuzelijst met toegangsopties.

C. De Bonsai connector bijwerken

Klik op het Bonsai connectorobject in AnyLogic en geef de volgende informatie op onder Bonsai

  • Uw werkruimte-id.
  • Uw toegangssleutel.
  • Een unieke naam voor uw simulator.

D. Uw ingebouwde AnyLogic-database migreren

Notitie

Als uw bestaande model geen gebruik maakt van de ingebouwde AnyLogic-database, kunt u deze stap overslaan.

Optie 1: de databasemap kopiëren

  1. Open beide modeldirecties in de bestandenverkenner van uw keuze.
  2. Sluit beide modellen in AnyLogic.
  3. Kopieer de databasemap van uw bestaande modelmap naar de map met het wrappermodel.

Optie 2: een back-up van een database maken en herstellen

  1. Open de eigenschappen van het databaseobject in uw bestaande model.
  2. Selecteer Back-up maken van database en sla het back-upbestand op uw computer op.
  3. Open de eigenschappen van het databaseobject voor het wrappermodel.
  4. Selecteer Database herstellen en kies het back-upbestand dat u hebt gemaakt.
  5. Nadat u de database hebt hersteld, kunt u het back-upbestand verwijderen.
  1. Download de Bonsai werkset van Bonsai webpage on MATLAB-Central .
  2. Dubbelklik op het installatieprogramma voor de werkset (.mltbx).
  3. Volg de aanwijzingen die op het scherm worden weergegeven om de werkset voor uw standaard MATLAB-/Simulink-versie te installeren.
  4. Open uw Simulink-model.
  5. Verpak uw bestaande model zodat het en waarden actionInitialConfig accepteert als invoer en states een waarde als uitvoer.

    Schermopname van verpakt model simulinken

    Schermopname van Simulink met een bestaand model dat is verpakt met invoer en uitvoer.

  6. Voeg in de Simulink-bibliotheekbrowser de volgende blokken toe:
    • Bonsai
    • Constant
    • Mux
    • Simulatie stoppen
  7. Maak een constant blok met de waarde False .
  8. Maak zoveel constante blokken als nodig is om de begintoestand van uw simulatie aan te geven.
  9. Gebruik het Mux-blok om de oorspronkelijke eigenschapswaarden te combineren en de Mux-uitvoerpoort te verbinden met de InitialConfig invoerpoort van uw bestaande model.
  10. Verbinding maken action uitvoerpoort van het blok Bonsai aan de action invoerpoort van uw Simulink-model.
  11. Verbinding maken reset uitvoerpoort van het blok Bonsai aan het blok Simulatie stoppen.
  12. Verbinding maken state uitvoerpoort van uw bestaande model aan de state invoerpoort van het Bonsai blok.
  13. Verbinding maken constante False blok aan de halted invoerpoort van het Bonsai blok.
  14. Dubbelklik op het blok Bonsai en stel Voorbeeldtijd in op [DEFAULT_SIMULATION_RATE, 0] .

Schermopname van volledig verbonden model

Schermopname van de Simulink-gebruikersinterface met de relevante blokken die zijn verbonden, zoals beschreven in het bovenstaande proces.

Stap 2: de Bonsai connector configureren

Toegewezen connectors worden standaard aangepast aan de bijbehorende simulator. U ziet een voorbeeld van een volledig functionele, toegewezen connector in de Bonsai example: Cartpole . GitHub opslagplaats Het voorbeeld wordt lokaal uitgevoerd om de meegeleverde Cartpole Python-simulator te registreren en te verbinden. Aanpasbare elementen worden in het voorbeeldbestand gemarkeerd als TOMO's.

A. De wrapper-klassen configureren

Het wrappermodel bevat drie Java-klassen die vereist zijn voor het definiëren van de beginconfiguratie, actieruimte en observatieruimte van uw model voor Bonsai :

  • ModelConfig: moet alle variabelen bevatten die nodig zijn om een trainingsaflevering te initialiseren. Als de initialisatieconfiguratie wordt uitgevoerd als onderdeel van de simulatielogica, kunt u deze klasse leeg laten. ModelConfig Variabelen zijn toegankelijk in het veld ModelConfig van het connectorobject en worden aan de simulatorconfiguratievariabelen die in uw Bonsai Inkling-bestand zijn gedefinieerd, weergegeven.
  • ModelAction: moet alle variabelen bevatten die het Bonsai brein terugsteert naar het wrappermodel. ModelAction Variabelen zijn toegankelijk in het ModelAction van het connectorobject en zijn te zien aan de toegestane breinacties die Bonsai zijn gedefinieerd in uw Inkling-bestand. ModelAction -waarden worden door het Bonsai brein geleverd om het model bij elke stap bij te werken.
  • ModelObservation: moet alle variabelen bevatten die nodig zijn om de waarneembare ruimte voor uw simulatie te definiëren. Variabelen die in zijn gedefinieerd, worden aan het begin van elke stap ingevuld door de functie en worden aan de simulator-staten die zijn gedefinieerd in uw ModelObservationgetObservable Inkling-bestand, weergegeven.

Belangrijk

Het platform staat momenteel alleen numerieke velden (gehele getallen en dubbele velden) en Bonsai matrices als gegevenstypen toe.

B. De functie getObservable voor het wrappermodel bijwerken

Hoe u bijwerkt, is afhankelijk van uw bestaande model, maar het is belangrijk om elk element van de observatieruimte die is gedefinieerd in te koppelen aan een juiste uitvoer van getObservableModelObservation het bestaande model.

Als u toegang wilt krijgen tot de velden en functies van uw bestaande model, voorvoegselt u de namen met het hoofdobject dat het bestaande model vertegenwoordigt. Als u bijvoorbeeld toegang wilt tot een variabele met de naam in het bestaande model, gebruikt u om er naar te verwijzen, waarbij het hoofdagenttype van het currTempMain.currTempMain wrappermodel is.

Belangrijk

Alle code die u aan de functie getObservable en de Bonsai connector toevoegt, moet verwijzen naar uw bestaande model. De wrapper is alleen bedoeld voor het verpakken van binnenkomende en uitgaande informatie, Bonsai zodat uw bestaande model kan communiceren.

C. De Bonsai connectorvelden bijwerken

  1. Werk de velden voor de afleveringStart,stepen gestopt bij met code die fungeert of rapporteert over uw bestaande model.
Veld Gebruik Lokale variabelen
:Start de gesimuleerde omgeving initialiseren config (aliassen ModelConfig )
stap: : de gesimuleerde omgeving bijwerken action (aliassen ModelAction )
Stopgezet geeft aan of de simulatie een terminale status heeft ( True of False ) geen
  1. Maak een nieuw bestand met de naam SIM_PARAMS.m en definieer de variabelen die vereist zijn voor uw simulator. Bijvoorbeeld:
    TemplateParam = 1;  %% dummy variable
    
  2. Maak een nieuw bestand met de naam startup.m en voeg de volgende code toe:
    addpath(genpath(pwd))
    SIM_PARAMS
    DEFAULT_SIMULATION_RATE = -1;  % units: sec
    
  3. Laat DEFAULT_SIMULATION_RATE ingesteld op -1 (aanbevolen) als u het blok met dezelfde snelheid Bonsai wilt uitvoeren als uw model. Anders stelt u de gewenste samplefrequentie in tweede.
  4. Maak een nieuw bestand met de naam bonsaiConfig.m en voeg de volgende code toe:
    % 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. Werk elk van de regels die worden gemarkeerd met %TODO opmerkingen bij met de details die relevant zijn voor uw werkruimte en bestaande Bonsai simulator.
  6. Maak een nieuw bestand met de naam bonsaiTrain.m en voeg de volgende code toe:
    % 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. Werk elk van de regels die worden gemarkeerd met %TODO opmerkingen als volgt bij:
  • initialProp1 ... initialPropN : werk bij om overeen te komen met de werkelijke namen die zijn gedefinieerd als de initiële eigenschappen voor uw model.
  • initialConfig1: werk de naam bij met de initiële configuratieparameter die is gedefinieerd in het bestand bonsaiConfig.m.

Stap 3: de Bonsai CLI en uw omgeving configureren

Stel de SIM_WORKSPACESIM_ACCESS_KEY omgevingsvariabelen en in.

export SIM_WORKSPACE="YOUR_WORKSPACE_ID"
export SIM_ACCESS_KEY="YOUR_WORKSPACE_ACCESS_KEY"

Voer vervolgens de opdracht bonsai configure uit om uw werkruimte-id in te stellen voor de Bonsai CLI:

bonsai configure --workspace-id ${SIM_WORKSPACE}

Stap 4: Sim uitvoeren met een standaardconfiguratie

Voordat u uw simulator verbindt met , moet u uw model lokaal uitvoeren met een standaardconfiguratie om ervoor te zorgen dat Bonsai het werkt zoals verwacht.

De simulator lokaal uitvoeren:

  1. Klik op de knop Uitvoeren in AnyLogic.
  2. Selecteer de gewenste simulator in de vervolgkeuzelijst die wordt weergegeven.

U kunt een headless experiment (geen GUI) of een animatie (met GUI) gebruiken voor uw testrun.

Stap 5: registreer uw simulator als een niet-mande sim

Start een lokaal exemplaar van uw Python-simulator en noteer de sessie-id die wordt geretourneerd door CreateSession .

Start uw lokale AnyLogic-model. De Bonsai connector registreert uw simulator automatisch bij als een Bonsai onmanagede simulator.

Start uw lokale Simulink-model. In Bonsai de werkset wordt uw simulator automatisch geregistreerd Bonsai als een niet-mande simulator.

Stap 6: uw onmanagede simulator uitvoeren met een testbrein

Controleer of uw simulator correct kan communiceren met voordat u deze aan uw werkruimte toevoegt als Bonsai een beheerde (schaalbare) simulator.

  1. Open het Bonsai UI.
  2. Selecteer + Brein maken en volg de prompt om een leeg brein te maken.
  3. Open het voorbeeldbestand basic brain en plak de Inkling-sjabloon in het lege coderingspaneel op het tabblad Leren.
  4. Configureer de sjabloon met geldige staten en acties voor uw simulator.
  5. Selecteer de knop Trainen.
  6. Selecteer uw simulator in de lijst met niet-managede simulators.

Na enkele ogenblikken ziet u dat er afleveringsgegevens worden gestreamd in de MATLAB-console.

Wanneer u voldoende testgegevens hebt, selecteert u Training stoppen. Simulink registreert details van de test die wordt uitgevoerd als CSV-logboeken met de bestandsnaam die is ingesteld in uw Bonsai configuratiebestand ( bonsaiConfig.m ).

Volgende stappen

Zodra uw simulator lokaal verbinding maakt en u het juiste gedrag kunt controleren, bent u klaar om het te converteren naar een beheerde simulator en de schaal van de training voor het brein aan te passen met Bonsai .