Länka en ohanterad simulator till Bonsai


  • Total tid att slutföra: 40 minuter
  • Aktiv tid: 40 minuter
  • Inaktiv tid: 0 minuter


  • Total tid att slutföra: 60 minuter
  • Aktiv tid: 30 minuter
  • Inaktiv tid: 30 minuter


  • Total tid att slutföra: 60 minuter
  • Aktiv tid: 30 minuter
  • Inaktiv tid: 30 minuter

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

Innan du börjar

Tips

Om du stöter på problem med att isolera felmatchade Python-beroenden eller allmänna miljökonflikter bör du överväga att konfigurera en virtuell Miniconda-miljö för kodningsarbete.

  • Du måste ha Bonsai CLI installerat.
  • Du måste ha en lokal simulator implementerad. Anvisningarna i den här guiden förklarar hur du uppdaterar en befintlig maskinundervisningssimulator och kör den lokalt med Bonsai.
  • Du måste känna till ditt Bonsai arbetsyte-ID. Om du vill hitta ditt arbetsyte-ID följer du anvisningarna i Hämta information om arbetsytan.
  • Du måste ha en åtkomstnyckel inställd på din Bonsai arbetsyta. Om du inte har en åtkomstnyckel följer du anvisningarna i Hämta åtkomstnyckeln för arbetsytan för att skapa en ny nyckel.

Steg 1: Lägg till en Bonsai anslutningsapp

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

Du måste omsluta din befintliga AnyLogic-modell och koppla Bonsai anslutningsbiblioteket innan du kan använda det med Bonsai. Omslutning är processen 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 lagringsplatsenBonsai AnyLogic GitHub.
  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 plustecknet (+) i det nedre vänstra hörnet för att öppna dialogrutan Hantera bibliotek .
    3. Välj knappen Lägg 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 omslutningsmodellen.
  6. Hovra åt vänster i redigeringspanelen i omslutningsagenten getObservable för att se Bonsai anslutningsobjektet och funktionen.
  7. Dra och släpp agenten på den översta nivån på projektpanelen för din befintliga simulatormodell i wrapper-agenten.

AnyLogic screenshot

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 egenskaperna för databasobjektet 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äkerhetskopia som du skapade.
  5. När du har återställt databasen kan du ta bort säkerhetskopian.
  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 screenshot of wrapped model

    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 i 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 state för 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 screenshot of fully connected model

Skärmbild av Användargränssnittet för Simulink med relevanta block anslutna enligt beskrivningen i processen ovan.

Steg 2: Konfigurera anslutningsappen Bonsai

Dedikerade anslutningsappar anpassas som standard till den associerade simulatorn. Du kan se ett exempel på en fullt fungerande dedikerad anslutning i exempletBonsai: Cartpole. GitHub lagringsplats Exemplet körs lokalt för att registrera och ansluta den inkluderade Cartpole Python-simulatorn. Anpassningsbara element flaggas i exempelfilen som TODO:er.

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 de simulatorkonfigurationsvariabler som definierats i Inkling-filen.
  • ModelAction: måste innehålla alla variabler som Bonsai hjärnan skickar tillbaka till omslutningsmodellen. ModelActionvariabler är tillgängliga i fältet BonsaiepisodeStep i 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 i början av varje avsnitt steg av getObservable funktionen och mappas till de simulatortillstånd som definierats i din Inkling-fil.

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 det observationsutrymme som definierats i ModelObservation med rätt utdata från den befintliga modellen.

Om du vill komma åt 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, episodestep 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 i ett terminaltillstånd (True eller False) inget
  1. Skapa en ny fil med namnet SIM_PARAMS.m och definiera de variabler som krävs av simulatorn. Ett 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 vara inställt på -1 (rekommenderas) om du vill köra Bonsai blocket med samma hastighet som din modell. Annars anger du önskad exempelfrekvens i andra.
  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 flaggas med %TODO kommentarer med information som är relevant för din Bonsai arbetsyta och befintlig simulator.
  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 namn 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

Innan du ansluter simulatorn till Bonsaibör du köra modellen lokalt med en standardkonfiguration för att se till att den fungerar som förväntat.

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 (med GUI) för din testkörning.

Steg 5: Registrera simulatorn som en ohanterad sim

Starta en lokal instans av Python-simulatorn och notera sessions-ID:t som returneras av CreateSession.

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

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

Steg 6: 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 uppmaningen 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 .
  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 med 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.