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 brain training.

Innan du börjar

  • Du måste vara bekant med Python-kodning. Anvisningarna nedan förutsätter att du förstår grunderna i Python-kodning. Om du aldrig har kodat i Python tidigare rekommenderar vi att du går kursen MS Learn: Introduction to Python innan du fortsätter.
  • Du måste ha Python installerat. All exempelkod är skriven i Python 3.7. Om du redan har Python installerat och vill undvika kollisioner med en befintlig installation använder du en Python-miljö (pyenv) eller en virtuell miljö (virtualenv).
  • Du måste ha installerat.
  • Du måste ha installerat.
  • Du måste ha en lokal simulator implementerad. Anvisningarna i den här guiden förklarar hur du uppdaterar en befintlig maskinlärarsimulator och kör den lokalt med .
  • Du måste känna till ditt arbetsyte-ID. Du hittar ditt arbetsyte-ID genom att följa anvisningarna i Hämta information om din arbetsyta.
  • Du måste ha en åtkomstnyckel inställd på din arbetsyta. Om du inte har en åtkomstnyckel följer du anvisningarna i Hämta din åtkomstnyckel för arbetsytan för att skapa en ny nyckel.

Tips

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

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

Steg 1: Lägga till en Bonsai anslutningsapp

Uppdatera simulatorkoden för att lägga till en dedicated Bonsai connector .

Du måste omsluta din befintliga AnyLogic-modell och koppla Bonsai connector-biblioteket 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 omslutningsmodell.

A. Skapa omslutningsmodellen

  1. Ladda ned Bonsai Library.jar" data-linktype="external">Bonsai Connector Library ( Bonsai Library.jar) från Bonsai Bonsai AI/bonsai-anylogic" data-linktype="external">Bonsai AnyLogic GitHub repository .
  2. Ladda ned omslutningsmodellmallen från .
  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 höger i dialogrutan.
    4. Bläddra till och välj filen Bonsai Library.jar på datorn.
    5. Bekräfta alla dialogrutor.
  4. Öppna wrapper-modellen och din befintliga simulatormodell i AnyLogic.
  5. Öppna omslutningsagenttypen i wrapper-modellen.
  6. I redigeringspanelen för omslutningsagenten hovrar du åt vänster 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 till 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 det rotobjekt som du lade till i omslutningsmodellen.

Tips

Så länge Bonsai jar-filen för anslutningsappen inte flyttas eller tas bort är 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 getObservable för omslutningsmodellen eller Bonsai anslutningsappen:

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

C. Uppdatera Bonsai anslutningsappen

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

  • 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 Utforskaren.
  2. Stäng båda modellerna i AnyLogic.
  3. Kopiera databasmappen från din befintliga modellmapp till mappen för omslutningsmodellen.

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 säkerhetskopian som du skapade.
  5. När du har återställt databasen kan du ta bort säkerhetskopian.
  1. Ladda ned Bonsai verktygslådan från Bonsai webpage on 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 värdena InitialConfig och som indata och ett värde states som utdata.

    Simulera skärmbild av omsluten modell

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

  6. Lägg till följande block från Simulink Library Browser:
    • 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 InitialConfig indataporten i din befintliga modell.
  10. Anslut action utdataporten för Bonsai blocket till action indataporten för din Simulink-modell.
  11. Anslut reset utdataporten för Bonsai blocket till blocket Stoppa simulering.
  12. Anslut state utdataporten för din befintliga modell till state blockets Bonsai indataport.
  13. Anslut False konstantblocket till halted blockets Bonsai indataport.
  14. Dubbelklicka på blocket Bonsai och ange Exempeltid till [DEFAULT_SIMULATION_RATE, 0] .

Simulera skärmbild av fullständigt ansluten modell

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

Steg 2: Konfigurera Bonsai anslutningsappen

Dedikerade anslutningsappar anpassas som standard till den associerade simulatorn. Du kan se ett exempel på en fullt funktionell dedikerad anslutningsapp i Bonsai example: Cartpole . GitHub-lagringsplats Exemplet körs lokalt för att registrera och ansluta den inkluderade Python-simulatorn i Cartpole. 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 simuleringslogiken kan du lämna den här klassen tom. ModelConfig variabler är tillgängliga i fältet ModelConfig för objektet Connector och mappa till simulatorkonfigurationsvariablerna som Bonsai definierats i indelningsfilen.
  • ModelAction: måste innehålla alla variabler som Bonsai hjärnan skickar tillbaka till omslutningsmodellen. ModelAction variabler är tillgängliga i fältet ModelAction för anslutningsobjektet och mappas till de tillåtna brain actions som definierats Bonsai i indelningsfilen. ModelAction värden tillhandahålls av hjärnan Bonsai 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 i början av varje avsnittssteg av funktionen och mappas till de simulator-tillstånd som ModelObservationgetObservable definieras i indelningsfilen.

Viktigt

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

B. Uppdatera funktionen getObservable för omslutningsmodellen

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

Om du vill komma åt fälten och funktionerna från din befintliga modell, prefixar du namnen med det rotobjekt som representerar den befintliga modellen. Om du till exempel vill komma åt en variabel med namnet i den befintliga modellen använder du för att referera till den, där är currTempMain.currTempMain omslutningsmodellens rotagenttyp.

Viktigt

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

C. Uppdatera Bonsai anslutningsappsfälten

  1. Uppdatera avsnittStart,avsnittsteg och stoppadefält med kod som agerar eller rapporterar på din befintliga modell.
Fält Användning Lokala variabler
avsnittStart initiera den simulerade miljön config (alias ModelConfig )
avsnittSteg uppdatera den simulerade miljön action (alias ModelAction )
Stoppat anger om simuleringen är 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. Till 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ämna DEFAULT_SIMULATION_RATE -1 (rekommenderas) om du vill köra Bonsai blocket med samma hastighet som din modell. Annars anger du önskad samplingshastighet 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 raderna som flaggats %TODO med kommentarer med information som är relevant för din Bonsai arbetsyta och befintliga 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 raderna som flaggats %TODO med kommentarer enligt följande:
  • initialProp1 ... initialPropN : uppdatera så att de matchar de faktiska namnen som definierats som de ursprungliga egenskaperna för din modell.
  • initialConfig1: uppdatera namnet så att det matchar den inledande konfigurationsparameter som definierats i filen bonsaiConfig.m.

Steg 3: Konfigurera Bonsai CLI och din miljö

Ange SIM_WORKSPACESIM_ACCESS_KEY miljövariablerna och .

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

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

bonsai configure --workspace-id ${SIM_WORKSPACE}

Steg 4: Kör sim med en standardkonfiguration

Innan du ansluter simulatorn till bör du köra modellen lokalt med en Bonsai 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 experiment (inget grafiskt användargränssnitt) eller ett animerat experiment (med GUI) för testkörningen.

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. BonsaiAnslutningsappen registrerar automatiskt simulatorn med som Bonsai en ohanterad simulator.

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

Steg 6: Kör din ohanterade simulator med en testhant

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

  1. Öppna Bonsai UI.
  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 mallen Indelning i den tomma kodpanelen 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 simulatorn i listan över ohanterade simulatorer.

Efter en liten stund bör du se strömmande avsnittsdata 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 det filnamn som angetts i Bonsai konfigurationsfilen ( bonsaiConfig.m ).

Nästa steg

När simulatorn ansluter lokalt och du kan verifiera korrekt beteende är du redo att konvertera den till en hanterad simulator och skala brain training med Bonsai .