Propojit nespravovaný simulátor s Bonsai


  • Celková doba dokončení: 40 minut
  • Aktivní čas: 40 minut
  • Neaktivní čas: 0 minut


  • Celková doba dokončení: 60 minut
  • Aktivní čas: 30 minut
  • Neaktivní čas: 30 minut


  • Celková doba dokončení: 60 minut
  • Aktivní čas: 30 minut
  • Neaktivní čas: 30 minut

Připojení simulátor spuštěný ve vašem místním prostředí do svého Bonsai pracovního prostoru pro testování simulátoru a školení mozku.

Než začnete

  • Musíte být obeznámeni s psaním kódu Pythonu. Níže uvedené pokyny předpokládají základy kódování Pythonu. Pokud jste v Pythonu ještě nikdy neúčtovali, doporučujeme, abyste před pokračováním přebírali MS učí: Úvod ke kurzu Pythonu .
  • Musíte mít nainstalovaný Python. Veškerý vzorový kód je napsán v pythonu 3,7. Pokud už máte nainstalovaný Python a chcete se vyhnout kolizím se stávající instalací, použijte prostředí Python (pyenv) nebo virtuální prostředí (virtualenv).
  • Musíte mít nainstalováno.
  • Musíte mít nainstalováno.
  • Je nutné, aby byl implementován místní simulátor. Pokyny v této příručce vysvětlují, jak aktualizovat existující simulátor výuky počítačů a spustit ho místně pomocí .
  • Musíte znát ID vašeho pracovního prostoru. Pokud chcete zjistit ID vašeho pracovního prostoru, postupujte podle pokynů v části získání informací o pracovním prostoru.
  • Ve vašem pracovním prostoru musíte mít nastavenou přístupovou klávesu. Pokud nemáte přístupový klíč, postupujte podle pokynů v části získání přístupového klíče k pracovnímu prostoru a vytvořte nový klíč.

Tip

Pokud narazíte na potíže s izolací nevyhovujících závislostí Pythonu nebo obecných konfliktů prostředí, zvažte vytvoření Miniconda virtuálního prostředí pro kódování práce.

Krok 1: přidání Bonsai konektoru

Aktualizujte kód simulátoru a přidejte dedicated Bonsai connector .

Je potřeba zabalit stávající model AnyLogic a připojit Bonsai knihovnu konektorů, abyste ho mohli použít s Bonsai . Zabalení je proces Vložení existujícího modelu simulátoru jako závislosti do nového modelu (obálky modelu), takže model obálky může řídit kořenového agenta stávajícího modelu. Můžete zobrazit vztah mezi vaším existujícím modelem a modelem obálky v části závislosti v okně vlastnosti modelu obálky.

A. Sestavení modelu obálky

  1. stáhněte si knihovnu bonsaje library. jar "data-linktype =" external ">Bonsai knihovny konektorů ( Bonsai library. jar) z Bonsai bonsaje AI/bonsaje-anylogic" data-linktype = "external" >Bonsai anylogic GitHub úložiště .
  2. Stáhněte šablonu modelu obálky z .
  3. V AnyLogic:
    1. Vyberte panel palety .
    2. V levém dolním rohu vyberte znaménko plus (+). otevře se dialogové okno Spravovat knihovny .
    3. Vyberte tlačítko Přidat na pravé straně dialogového okna.
    4. Přejděte na Bonsai soubor Library. jar na počítači a vyberte ho.
    5. Potvrďte všechna dialogová okna.
  4. Otevřete Obálkový model a svůj stávající model simulátoru v AnyLogic.
  5. V modelu obálky otevřete typ agenta obálky.
  6. V panelu editoru agenta obálky, najeďte myší na levou stranu, aby se zobrazil Bonsai objekt konektoru a getObservable funkce.
  7. Přetáhněte agenta nejvyšší úrovně na panelu projektu pro existující model simulátoru do agenta obálky.

Snímek obrazovky AnyLogic

Snímek obrazovky uživatelského rozhraní AnyLogic s zvýrazněnými odpovídajícími položkami nabídky

Stávající model se teď vytvoří v modelu obálky jako objekt. Pole a funkce ve vašem stávajícím modelu jsou nyní přístupné prostřednictvím kořenového objektu, který jste přidali do modelu obálky.

Tip

Dokud není Bonsai soubor JAR konektoru přesunutý ani odstraněný, bude dostupný pro všechny projekty AnyLogic.

B. Aktualizovat existující model

Pro všechny funkce v existujícím modelu, které mohou být volány ve getObservable funkci modelu obálky nebo Bonsai konektoru:

  1. Otevřete okno Vlastnosti pro danou funkci.
  2. Přejít na část Upřesnit .
  3. V rozevíracím seznamu možností přístupu vyberte Public.

C. Aktualizace Bonsai konektoru

BonsaiV AnyLogic klikněte na objekt konektoru a v části Bonsaizadejte následující informace:

  • ID vašeho pracovního prostoru.
  • Váš přístupový klíč.
  • Jedinečný název simulátoru.

D. Migrace integrované databáze AnyLogic

Poznámka

Pokud Váš existující model nepoužívá integrovanou databázi AnyLogic, můžete tento krok přeskočit.

Možnost 1: zkopírování složky databáze

  1. V Průzkumníku souborů podle vašeho výběru otevřete obě adresáře modelů.
  2. Zavřete oba modely v AnyLogic.
  3. Zkopírujte složku databáze z vaší stávající složky modelu do složky modelu obálky.

Možnost 2: vytvoření a obnovení zálohy databáze

  1. V existujícím modelu otevřete vlastnosti databázového objektu.
  2. Vyberte zálohovat databázi a uložte záložní soubor do počítače.
  3. Otevřete vlastnosti databázového objektu pro model obálky.
  4. Vyberte obnovit databázi a zvolte záložní soubor, který jste provedli.
  5. Po obnovení databáze můžete záložní soubor odstranit.
  1. Stáhněte si Bonsai sadu nástrojů z Bonsai webpage on MATLAB-Central .
  2. Dvakrát klikněte na instalační program sady nástrojů (. mltbx).
  3. Podle zobrazených výzev na obrazovce nainstalujte sadu nástrojů pro výchozí verzi programu MATLAB/Simulink.
  4. Otevřete model Simulink.
  5. Zabalte existující model tak, aby jako vstup přijal action hodnoty a a jako výstup InitialConfigstates hodnotu.

    Snímek obrazovky simulink zabaleného modelu

    Snímek obrazovky simulink s existujícím modelem zabalený se vstupy a výstupy

  6. V prohlížeči knihovny Simulink přidejte následující bloky:
    • Bonsai
    • Konstanta
    • Mux
    • Zastavení simulace
  7. Blok konstanty vytvořte s hodnotou False .
  8. Vytvořte tolik konstantních bloků, kolik je potřeba k reprezentaci počátečního stavu simulace.
  9. Pomocí bloku Mux zkombinujte počáteční hodnoty vlastností a propojte výstupní port Mux se InitialConfig vstupním portem stávajícího modelu.
  10. Připojení výstupní port bloku na vstupní actionBonsai port modelu action Simulink.
  11. Připojení reset výstupní port bloku do bloku Zastavit Bonsai simulaci.
  12. Připojení state výstupní port existujícího modelu na state vstupní port Bonsai bloku.
  13. Připojení False konstantní blok na vstupní port haltedBonsai bloku.
  14. Poklikejte na Bonsai blok a nastavte Čas ukázky na [DEFAULT_SIMULATION_RATE, 0] .

Snímek obrazovky Simulink s plně připojeným modelem

Snímek obrazovky s uživatelským rozhraním Simulink s připojenými relevantními bloky, jak je popsáno v procesu výše

Krok 2: Konfigurace Bonsai konektoru

Vyhrazené konektory jsou ve výchozím nastavení přizpůsobené přidruženému simulátoru. Příklad plně funkčního vyhrazeného konektoru najdete v tématu Bonsai example: Cartpole . GitHub úložiště Příklad se spustí místně, aby se zaregistroval a propojil zahrnutý simulátor Cartpole Python. Přizpůsobitelné prvky jsou v příkladu souboru označeny jako TODO.

A. Konfigurace tříd obálky

Model obálky zahrnuje tři třídy Jazyka Java, které jsou potřeba k definování počáteční konfigurace, prostoru akcí a prostoru pozorování modelu pro Bonsai :

  • ModelConfig: Musí obsahovat všechny proměnné potřebné k inicializaci trénovací scény. Pokud inicializace konfigurace probíhá jako součást logiky simulace, můžete tuto třídu ponechat prázdnou. ModelConfig Proměnné jsou přístupné v ModelConfig objektu Konektor a mapované na proměnné konfigurace simulátoru definované Bonsai v souboru Inkling.
  • ModelAction: musí obsahovat všechny proměnné, které Bonsai mozek předává zpět do modelu obálky. ModelAction Proměnné jsou přístupné v ModelAction objektu Konektor a mapované na povolené akce mozku definované Bonsai v souboru rukopisu. ModelAction Hodnoty poskytuje mozek k Bonsai aktualizaci modelu v každém kroku.
  • ModelObservation: Musí obsahovat všechny proměnné potřebné k definování pozorovatelného prostoru pro vaši simulaci. Proměnné definované v se vyplní na začátku každého kroku scény funkcí a namapuje se na stavy simulátoru definované ModelObservationgetObservable v souboru rukopisu.

Důležité

Platforma Bonsai v současné době povoluje pouze číselná pole (celá čísla a dvojité hodnoty) a pole jako datové typy.

B. Aktualizace getObservable funkce pro model obálky

Způsob aktualizace bude záviset na existujícím modelu, ale je důležité přidružit každý prvek prostoru pozorování definovaného v souboru se správným výstupem getObservableModelObservation z existujícího modelu.

Pokud chcete získat přístup k polím a funkcím z existujícího modelu, před názvy zadejte kořenový objekt, který představuje existující model. Pokud například chcete získat přístup k proměnné s názvem v existujícím modelu, použijte k odkazování, kde je typ kořenového agenta modelu currTempMain.currTempMain obálky.

Důležité

Jakýkoli kód, který do funkce getObservable přidáte, a Bonsai konektor by měl odkazovat na existující model. Obálka je určena pouze k zabalení příchozích a odchozích informací, takže Bonsai stávající model může komunikovat.

C. Aktualizace polí Bonsai konektoru

  1. Aktualizujte pole sceneStart,scenestepa halted pomocí kódu, který funguje nebo hlásí váš existující model.
Pole Použití Místní proměnné
sceneStart inicializace simulovaného prostředí configModelConfig(aliasy)
přidchytádka aktualizace simulovaného prostředí actionModelAction(aliasy)
Zastavil určuje, jestli je simulace v terminálovém stavu ( True nebo False ) žádné
  1. Vytvořte nový soubor s názvem SIM_PARAMS.m a definujte proměnné vyžadované simulátorem. Například:
    TemplateParam = 1;  %% dummy variable
    
  2. Vytvořte nový soubor s názvem startup.m a přidejte následující kód:
    addpath(genpath(pwd))
    SIM_PARAMS
    DEFAULT_SIMULATION_RATE = -1;  % units: sec
    
  3. Pokud chcete blok spustit se stejnou rychlostí jako váš model, ponechte nastavenou hodnotu DEFAULT_SIMULATION_RATE -1 Bonsai (doporučeno). Jinak nastavte požadovanou vzorkovací frekvenci za sekundu.
  4. Vytvořte nový soubor s názvem bonsaiConfig.m a přidejte následující kód:
    % 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. Aktualizujte všechny řádky s příznakem komentářů s podrobnostmi souvisejícími s pracovním prostorem a %TODOBonsai existujícím simulátorem.
  6. Vytvořte nový soubor s názvem bonsaiTrain.m a přidejte následující kód:
    % 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. Aktualizujte jednotlivé řádky s příznakem %TODO komentářů následujícím způsobem:
  • initialProp1 ... initialPropN : Aktualizujte tak, aby odpovídaly skutečným názvům definovaným jako počáteční vlastnosti modelu.
  • initialConfig1: Aktualizuje název tak, aby odpovídal počátečnímu konfiguračnímu parametru definovanému v souboru bonsaiConfig.m.

Krok 3: Konfigurace rozhraní příkazového řádku a Bonsai prostředí

Nastavte SIM_WORKSPACE proměnné prostředí a SIM_ACCESS_KEY .

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

Potom spuštěním příkazu bonsai configure nastavte ID pracovního prostoru pro rozhraní příkazového Bonsai řádku:

bonsai configure --workspace-id ${SIM_WORKSPACE}

Krok 4: Spuštění sim s výchozí konfigurací

Před připojením simulátoru k nástroji byste měli model spustit místně s výchozí konfigurací, abyste se ujistili, že se Bonsai chová podle očekávání.

Místní spuštění simulátoru:

  1. V části AnyLogic klikněte na tlačítko Run (Spustit).
  2. V rozevíracím seznamu, který se zobrazí, vyberte požadovaný simulátor.

Pro testovací běh můžete použít bezdomovný experiment (bez grafického uživatelského rozhraní) nebo animovaný experiment (s grafickým uživatelským rozhraním).

Krok 5: Registrace simulátoru jako nespravovaného sim

Spusťte místní instanci simulátoru Pythonu a poznamenejte si ID relace vrácené CreateSession .

Spusťte místní model AnyLogic. Konektor Bonsai automaticky zaregistruje váš simulátor pomocí Bonsai jako nespravovaný simulátor.

Spusťte místní model Simulink. Sada Bonsai nástrojů automaticky zaregistruje váš simulátor jako Bonsai nespravovaný simulátor.

Krok 6: Spuštění nespravovaného simulátoru pomocí testovacího mozku

Před přidáním simulátoru do pracovního prostoru jako spravovaného (škálovatelného) simulátoru byste měli ověřit, že se simulátorem může správně Bonsai komunikovat.

  1. Otevřete třídu Bonsai UI.
  2. Vyberte + Create Brain (+ Vytvořit mozek) a podle pokynů vytvořte prázdný mozek.
  3. Otevřete základní ukázkový soubor mozku a vložte šablonu Rukopis do prázdného panelu kódování na kartě Výuka.
  4. Nakonfigurujte šablonu s platnými stavy a akcemi pro váš simulátor.
  5. Vyberte tlačítko Train (Trénovat).
  6. Vyberte simulátor ze seznamu nespravovaných simulátorů.

Po chvíli byste měli vidět streamování dat epizody v konzole MATLAB.

Pokud máte dostatek testovacích dat, vyberte zastavit školení. Simulink zaznamenává údaje o protokolech sdílených svazků clusteru (CSV) s názvem souboru nastaveným v Bonsai konfiguračním souboru ( bonsaiConfig.m ).

Další kroky

Jakmile se simulátor připojí místně a můžete ověřit správné chování, budete připraveni ho převést na spravovaný simulátor a v rámci školení mozku škálovat Bonsai .