Ansluta en ohanterad (lokal) simulator till Bonsai

Följande innehåll stöder ASSEMBLE-fasen i Bonsai användarresan

Anslut en simulator som körs i din lokala miljö till din Bonsai arbetsyta för simulatortestning och hjärnträning.

Anteckning

Proceduren för att ansluta ohanterade simulatorer bestäms av simulatorns plattformsleverantör. Se dokumentationen Bonsai i FlexSim-användardokumenten.

Innan du börjar

Steg 1: Lägg till en Bonsai anslutningsapp

Du måste omsluta din befintliga AnyLogic-modell och bifoga Bonsai anslutningsbiblioteket innan du kan använda den med Bonsai. Omslutning är processen för att bädda in din befintliga simulatormodell som ett beroende i en ny modell (omslutningsmodellen) så att omslutningsmodellen kan styra rotagenten för din befintliga modell. Du kan se relationen mellan din befintliga modell och omslutningsmodellen i avsnittet Beroenden i fönstret egenskaper för omslutningsmodellen.

A. Skapa omslutningsmodellen

  1. Bonsai Ladda ned anslutningsbiblioteket (BonsaiLibrary.jar) från Bonsai AnyLogic GitHub-lagringsplatsen.
  2. Ladda ned mallen för omslutningsmodell från sidan Microsoft Project Bonsai AnyLogic.
  3. I AnyLogic:
    1. Välj panelen Palette .
    2. Välj plustecken (+) i det nedre vänstra hörnet för att öppna dialogrutan Hantera bibliotek .
    3. Välj knappen Lägg till till till höger i dialogrutan.
    4. Bläddra till och välj Bonsaifilen Library.jar på datorn.
    5. Bekräfta alla dialogrutor.
  4. Öppna Wrapper-modellen och din befintliga simulatormodell i AnyLogic.
  5. Öppna omslutningsagentens typ i Wrapper-modellen.
  6. Hovra åt vänster i redigeringspanelen i omslutningsagenten för att se Bonsai anslutningsobjektet och getObservable funktionen.
  7. Dra och släpp agenten på den översta nivån på projektpanelen för din befintliga simulatormodell i Wrapper-agenten.

AnyLogic-skärmbild

Skärmbild av AnyLogic-användargränssnittet med relevanta menyalternativ markerade

Din befintliga modell instansieras nu som ett objekt i omslutningsmodellen. Fält och funktioner i din befintliga modell är nu tillgängliga via rotobjektet som du lade till i omslutningsmodellen.

Tips

Så länge jar-filen för anslutningsappen Bonsai inte flyttas eller tas bort blir den tillgänglig för alla AnyLogic-projekt.

B. Uppdatera din befintliga modell

För alla funktioner i din befintliga modell som kan anropas i funktionen för getObservable omslutningsmodellen eller anslutningsappen Bonsai :

  1. Öppna egenskapsfönstret för funktionen.
  2. Gå till avsnittet Avancerat .
  3. Välj "offentlig" i listrutan med åtkomstalternativ .

C. Uppdatera anslutningsappen Bonsai

Klicka på anslutningsobjektet Bonsai i AnyLogic och ange följande information under Egenskaper:

  • Ditt arbetsyte-ID.
  • Din åtkomstnyckel.
  • Ett unikt namn för simulatorn.

D. Migrera din inbyggda AnyLogic-databas

Anteckning

Om din befintliga modell inte använder den inbyggda AnyLogic-databasen kan du hoppa över det här steget.

Alternativ 1: Kopiera databasmappen

  1. Öppna båda modellkatalogerna i valfri utforskare.
  2. Stäng båda modellerna i AnyLogic.
  3. Kopiera databasmappen från din befintliga modellmapp till omslutningsmodellmappen.

Alternativ 2: Skapa och återställa en säkerhetskopia av databasen

  1. Öppna databasobjektegenskaperna i din befintliga modell.
  2. Välj Säkerhetskopiera databas och spara säkerhetskopian på datorn.
  3. Öppna databasobjektegenskaperna för omslutningsmodellen.
  4. Välj Återställ databas och välj den säkerhetskopieringsfil som du skapade.
  5. När du har återställt databasen kan du ta bort säkerhetskopian.

Uppdatera simulatorkoden för att lägga till en dedikerad Bonsai anslutningsapp.

  1. Ladda ned verktygslådan Bonsai från Bonsai webbsidan på MATLAB-Central.
  2. Dubbelklicka på installationsprogrammet för verktygslådan (.mltbx).
  3. Följ anvisningarna som visas på skärmen för att installera verktygslådan för din standardversion av MATLAB/Simulink.
  4. Öppna din Simulink-modell.
  5. Omslut din befintliga modell så att den accepterar action och InitialConfig värden som indata och ett states värde som utdata.

    Simulink skärmbild av omsluten modell

    Skärmbild av Simulink med en befintlig modell omsluten med indata och utdata.

  6. I Simulink Library Browser lägger du till följande block:
    • Bonsai
    • Konstant
    • Mux
    • Stoppa simulering
  7. Skapa ett konstant block med värdet False.
  8. Skapa så många konstanta block som behövs för att representera simuleringens ursprungliga tillstånd.
  9. Använd Mux-blocket för att kombinera dina ursprungliga egenskapsvärden och ansluta Mux-utdataporten till indataporten InitialConfig för din befintliga modell.
  10. action Anslut utdataporten för Bonsai blocket till indataporten action för Simulink-modellen.
  11. reset Anslut utdataporten för Bonsai blocket till stoppsimuleringsblocket.
  12. Anslut utdataporten för state din befintliga modell till state blockets Bonsai indataport.
  13. Anslut konstantblocket Falsehalted till blockets Bonsai indataport.
  14. Dubbelklicka på blocket och ställ in Exempeltid på Bonsai[DEFAULT_SIMULATION_RATE, 0].

Simulink-skärmbild av en helt ansluten modell

processen ovan.

Steg 2: Konfigurera anslutningsappen Bonsai

A. Konfigurera omslutningsklasserna

Omslutningsmodellen innehåller tre Java-klasser som krävs för att definiera startkonfigurationen, åtgärdsutrymmet och observationsutrymmet för din modell för Bonsai:

  • ModelConfig: måste innehålla alla variabler som behövs för att initiera ett träningsavsnitt. Om initieringskonfigurationen sker som en del av simuleringslogik kan du lämna den här klassen tom. ModelConfigvariabler är tillgängliga i fältet BonsaiepisodeStart i connector-objektet och mappas till simulatorns konfigurationsvariabler som definierats i Inkling-filen.
  • ModelAction: måste innehålla alla variabler som Bonsai hjärnan skickar tillbaka till omslutningsmodellen. ModelAction Variabler är tillgängliga i fältet episodeStep i Bonsai connector-objektet och mappas till de tillåtna hjärnåtgärder som definierats i Inkling-filen. ModelAction värden tillhandahålls av Bonsai hjärnan för att uppdatera modellen i varje steg.
  • ModelObservation: måste innehålla alla variabler som behövs för att definiera det observerbara utrymmet för simuleringen. Variabler som definieras i fylls i ModelObservation i början av varje avsnittssteg av getObservable funktionen och mappas till de simulatortillstånd som definierats i inklingfilen.

Viktigt

Plattformen Bonsai tillåter för närvarande endast numeriska fält (heltal och dubblar) och matriser som datatyper.

B. getObservable Uppdatera funktionen för omslutningsmodellen

Hur du uppdaterar getObservable beror på din befintliga modell, men det är viktigt att associera varje element i observationsutrymmet som definieras i ModelObservation med rätt utdata från den befintliga modellen.

För att få åtkomst till fälten och funktionerna från din befintliga modell prefixar du namnen med rotobjektet som representerar den befintliga modellen. Om du till exempel vill komma åt en variabel som heter currTemp i den befintliga modellen använder Main.currTemp du för att referera till den, där Main är rotagenttypen för omslutningsmodellen.

Viktigt

All kod som du lägger till i getObservable funktionen och anslutningsappen Bonsai bör referera till din befintliga modell. Omslutningen är endast avsedd att paketera inkommande och utgående information så Bonsai att din befintliga modell kan kommunicera.

C. Uppdatera kopplingsfälten Bonsai

  1. Uppdatera avsnittStart, avsnittsteg och stoppade fält med kod som agerar eller rapporterar om din befintliga modell.
Fält Användning Lokala variabler
episodeStart initiera den simulerade miljön config (alias ModelConfig)
episodeStep uppdatera den simulerade miljön action (alias ModelAction)
Stoppat ange om simuleringen är i ett terminaltillstånd (True eller False) inget

Dedikerade anslutningsappar anpassas som standard till den associerade simulatorn. Du kan se ett exempel på en fullt fungerande dedikerad anslutningsapp i Bonsai exemplet: Enkel Adder GitHub-lagringsplats. Exemplet körs lokalt för att registrera och ansluta den inkluderade simulatorn som lägger till tal.

  1. Skapa en ny fil med namnet SIM_PARAMS.m och definiera de variabler som krävs av simulatorn. Exempel:
    TemplateParam = 1;  %% dummy variable
    
  2. Skapa en ny fil med namnet startup.m och lägg till följande kod:
    addpath(genpath(pwd))
    SIM_PARAMS
    DEFAULT_SIMULATION_RATE = -1;  % units: sec
    
  3. Låt DEFAULT_SIMULATION_RATE värdet vara -1 (rekommenderas) om du vill köra Bonsai blocket med samma hastighet som din modell. Annars anger du önskad samplingsfrekvens i sekunden.
  4. Skapa en ny fil med namnet bonsaiConfig.m och lägg till följande kod:
    % 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. Uppdatera var och en av de rader som har flaggats med %TODO kommentarer med den information som är relevant för din Bonsai arbetsyta och den befintliga simulatorn.
  6. Skapa en ny fil med namnet bonsaiTrain.m och lägg till följande kod:
    % 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. Uppdatera var och en av de rader som har flaggats med %TODO kommentarer på följande sätt:
  • initialProp1 ... initialPropN: uppdatera för att matcha de faktiska namnen som definierats som de första egenskaperna för din modell.
  • initialConfig1: uppdatera namnet så att det matchar den inledande konfigurationsparametern som definierats i filen bonsaiConfig.m.

Steg 3: Konfigurera Bonsai CLI och din miljö

SIM_WORKSPACE Ange miljövariablerna och SIM_ACCESS_KEY .

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

Kör bonsai configure sedan kommandot för att ange ditt arbetsyte-ID för Bonsai CLI:

bonsai configure --workspace-id ${SIM_WORKSPACE}

Steg 4: Kör simen med en standardkonfiguration

Så här kör du simulatorn lokalt:

  1. Klicka på knappen Kör i AnyLogic.
  2. Välj önskad simulator i listrutan som visas.

Du kan använda ett huvudlöst (inget GUI) eller animerat experiment (med GUI) för din testkörning.

Steg 5: Registrera simulatorn som en ohanterad sim

Starta din lokala AnyLogic-modell. Anslutningsappen Bonsai registrerar automatiskt simulatorn med Bonsai som en ohanterad simulator.

Starta en lokal instans av Python-anslutningsappen. De flesta anslutningsappar körs med kommandot python main.py.

Starta din lokala Simulink-modell. Verktygslådan Bonsai registrerar automatiskt simulatorn med Bonsai som en ohanterad simulator.

Kör din ohanterade simulator med en test hjärna

Du bör kontrollera att simulatorn kan kommunicera korrekt med Bonsai innan du lägger till den i arbetsytan som en hanterad (skalbar) simulator.

  1. Öppna användargränssnittetBonsai.
  2. Välj + Skapa hjärna och följ anvisningarna för att skapa en tom hjärna.
  3. Öppna den grundläggande exempelfilen för hjärnan och klistra in Inkling-mallen i den tomma kodningspanelen på fliken Lär ut .
  4. Konfigurera mallen med giltiga tillstånd och åtgärder för simulatorn.
  5. Välj knappen Träna .
  6. Välj din simulator från listan över ohanterade simulatorer .

Efter en liten stund bör du se avsnittsdata som strömmas i MATLAB-konsolen.

När du har tillräckligt med testdata väljer du Stoppa träning. Simulink registrerar information om testkörningen som csv-loggar med filnamnet som angetts i konfigurationsfilen Bonsai (bonsaiConfig.m).

Nästa steg

När simulatorn ansluter lokalt och du kan kontrollera korrekt beteende är du redo att konvertera den till en hanterad simulator och skala hjärnträning med Bonsai.