Vincular un simulador no administrado a Bonsai


  • Tiempo total para completar: 40 minutos
  • Tiempo activo:40 minutos
  • Tiempo de inactividad:0 minutos


  • Tiempo total para completar: 60 minutos
  • Tiempo activo:30 minutos
  • Tiempo de inactividad:30 minutos


  • Tiempo total para completar: 60 minutos
  • Tiempo activo:30 minutos
  • Tiempo de inactividad:30 minutos

Conectar simulador que se ejecuta en el entorno local en el área de trabajo para Bonsai pruebas de simulador y entrenamiento del cerebro.

Antes de empezar

  • Debe estar familiarizado con la codificación de Python. En las instrucciones siguientes se supone que comprende los conceptos básicos de la codificación de Python. Si nunca ha codificado en Python antes, se recomienda seguir el curso MS Learn: Introduction to Python (MS Learn: Introducción a Python) antes de continuar.
  • Debe tener Python instalado. Todo el código de ejemplo se escribe en Python 3.7. Si ya tiene Python instalado y desea evitar colisiones con una instalación existente, use un entorno de Python (pyenv) o un entorno virtual (virtualenv).
  • Debe tener instalado.
  • Debe tener instalado.
  • Debe tener implementado un simulador local. En las instrucciones de esta guía se explica cómo actualizar un simulador de enseñanza automática existente y ejecutarlo localmente con .
  • Debe conocer el identificador del área de trabajo. Para buscar el identificador del área de trabajo, siga las instrucciones de Obtención de la información del área de trabajo.
  • Debe tener una clave de acceso establecida en el área de trabajo. Si no tiene una clave de acceso, siga las instrucciones de Obtención de la clave de acceso del área de trabajo para crear una nueva clave.

Sugerencia

Si tiene problemas para aislar las discrepancias de dependencias de Python o conflictos generales del entorno, considere la posibilidad de configurar un entorno virtual de Miniconda para codificar el trabajo.

  • Debe tener instalado.
  • Debe tener implementado un simulador local. En las instrucciones de esta guía se explica cómo actualizar un simulador de enseñanza automática existente y ejecutarlo localmente con .
  • Debe conocer el identificador del área de trabajo. Para buscar el identificador del área de trabajo, siga las instrucciones de Obtención de la información del área de trabajo.
  • Debe tener una clave de acceso establecida en el área de trabajo. Si no tiene una clave de acceso, siga las instrucciones de Obtención de la clave de acceso del área de trabajo para crear una nueva clave.

Paso 1: Agregar un Bonsai conector

Actualice el código del simulador para agregar un dedicated Bonsai connector .

Debe ajustar el modelo AnyLogic existente y adjuntar la biblioteca connector para Bonsai poder usarlo con Bonsai . El ajuste es el proceso de insertar el modelo de simulador existente como una dependencia en un nuevo modelo (el modelo contenedor) para que el modelo contenedor pueda controlar el agente raíz del modelo existente. Puede ver la relación entre el modelo existente y el modelo contenedor en la sección Dependencias de la ventana de propiedades del modelo contenedor.

A. Compilación del modelo de contenedor

  1. Descargue el archivo Bonsai Library.jar" data-linktype="external">Connector Library ( Library.jar) desde el repositorio BonsaiBonsaiBonsai bonsai AI/bonsai-anylogic" data-linktype="external">Bonsai AnyLogic GitHub .
  2. Descargue la plantilla de modelo de contenedor desde .
  3. En AnyLogic:
    1. Seleccione el panel Paleta.
    2. Seleccione signo más (+) en la esquina inferior izquierda para abrir el cuadro de diálogo Administrar bibliotecas.
    3. Seleccione el botón Agregar del lado derecho del cuadro de diálogo.
    4. Vaya al archivo Bonsai Library.jar y selecciónelo en el equipo.
    5. Confirme todos los cuadros de diálogo.
  4. Abra el modelo contenedor y el modelo de simulador existente en AnyLogic.
  5. Abra el tipo de agente contenedor en el modelo contenedor.
  6. En el panel del editor del agente contenedor, mantenga el puntero a la izquierda para ver el objeto Bonsai del conector y la getObservable función.
  7. Arrastre y coloque el agente de nivel superior en el panel del proyecto para el modelo de simulador existente en el agente contenedor.

Captura de pantalla de AnyLogic

Captura de pantalla de la interfaz de usuario de AnyLogic con los elementos de menú pertinentes resaltados

Ahora se crea una instancia del modelo existente como un objeto en el modelo contenedor. Ahora se puede acceder a los campos y funciones del modelo existente a través del objeto raíz que agregó al modelo contenedor.

Sugerencia

Siempre que el archivo jar del conector no se haya movido ni Bonsai eliminado, estará disponible para todos los proyectos de AnyLogic.

B. Actualización del modelo existente

Para cualquier función del modelo existente a la que se pueda llamar en getObservable la función del modelo contenedor o del Bonsai conector:

  1. Abra la ventana de propiedades de la función.
  2. Vaya a la sección Avanzadas.
  3. Seleccione "public" en la lista desplegable de opciones de acceso.

C. Actualización del Bonsai conector

Haga clic en Bonsai el objeto de conector en AnyLogic y proporcione la siguiente información en Bonsai:

  • Identificador del área de trabajo.
  • La clave de acceso.
  • Un nombre único para el simulador.

D. Migración de la base de datos de AnyLogic integrada

Nota

Si el modelo existente no usa la base de datos AnyLogic integrada, puede omitir este paso.

Opción 1: Copiar la carpeta de base de datos

  1. Abra ambos directorios de modelo en el explorador de archivos de su elección.
  2. Cierre ambos modelos en AnyLogic.
  3. Copie la carpeta de base de datos de la carpeta del modelo existente en la carpeta del modelo contenedor.

Opción 2: Realizar y restaurar una copia de seguridad de base de datos

  1. Abra las propiedades del objeto de base de datos en el modelo existente.
  2. Seleccione Copia de seguridad de la base de datos y guarde el archivo de copia de seguridad en el equipo.
  3. Abra las propiedades del objeto de base de datos para el modelo contenedor.
  4. Seleccione Restaurar base de datos y elija el archivo de copia de seguridad que hizo.
  5. Una vez restaurada la base de datos, puede eliminar el archivo de copia de seguridad.
  1. Descargue el cuadro Bonsai de herramientas de Bonsai webpage on MATLAB-Central .
  2. Haga doble clic en el instalador del cuadro de herramientas (.mltbx).
  3. Siga las indicaciones que aparecen en la pantalla para instalar el cuadro de herramientas de la versión predeterminada de MATLAB/Simulink.
  4. Abra el modelo de Simulink.
  5. Ajuste el modelo existente para que acepte los valores action y como entrada y un valor como InitialConfigstates salida.

    Captura de pantalla de Simulink del modelo encapsulado

    Captura de pantalla de Simulink con un modelo existente encapsulado con entradas y salidas.

  6. En el explorador de la biblioteca de Simulink, agregue los siguientes bloques:
    • Bonsai
    • Constante
    • Mux
    • Detener simulación
  7. Crear un bloque constante con el valor False .
  8. Realice tantos bloques constantes como sea necesario para representar el estado inicial de la simulación.
  9. Use el bloque Mux para combinar los valores de propiedad iniciales y conectar el puerto de salida de Mux al puerto de InitialConfig entrada del modelo existente.
  10. Conectar el action puerto de salida del bloque al puerto de entrada del modelo de Bonsaiaction Simulink.
  11. Conectar el reset puerto de salida del bloque al bloque Detener Bonsai simulación.
  12. Conectar el state puerto de salida del modelo existente al puerto de entrada del stateBonsai bloque.
  13. Conectar bloque False constante al puerto de entrada del haltedBonsai bloque.
  14. Haga doble clic en el Bonsai bloque y establezca Hora de la muestra en [DEFAULT_SIMULATION_RATE, 0] .

Captura de pantalla de Simulink del modelo totalmente conectado

Captura de pantalla de la interfaz de usuario de Simulink con los bloques pertinentes conectados como se describe en el proceso anterior.

Paso 2: Configuración del Bonsai conector

Los conectores dedicados se personalizan para el simulador asociado de forma predeterminada. Puede ver un ejemplo de un conector dedicado totalmente funcional en Bonsai example: Cartpole . GitHub repositorio el ejemplo se ejecuta localmente para registrar y conectar el simulador de Python de Cart ldap incluido. Los elementos personalizables se marcan en el archivo de ejemplo como TODOs.

A. Configuración de las clases contenedoras

El modelo contenedor incluye tres clases de Java necesarias para definir la configuración inicial, el espacio de acción y el espacio de observación del modelo para Bonsai :

  • ModelConfig: debe contener todas las variables necesarias para inicializar un episodio de entrenamiento. Si la configuración de inicialización se produce como parte de la lógica de simulación, puede dejar esta clase vacía. ModelConfig Las variables son accesibles en el ModelConfig del objeto Connector y se asignan a las variables de configuración del simulador definidas Bonsai en el archivo Inkling.
  • ModelAction: debe contener todas las variables que Bonsai el cerebro pasa al modelo contenedor. ModelAction Las variables son accesibles en el ModelAction del objeto Connector y se asignan a las acciones de cerebro permitidas definidas Bonsai en el archivo Inkling. ModelAction el cerebro proporciona valores Bonsai para actualizar el modelo en cada paso.
  • ModelObservation: debe contener todas las variables necesarias para definir el espacio observable para la simulación. Las variables definidas en se rellenan al principio de cada paso del episodio mediante la función y se asignan a los estados del simulador definidos ModelObservationgetObservable en el archivo Inkling.

Importante

Actualmente, Bonsai la plataforma solo permite campos numéricos (enteros y dobles) y matrices como tipos de datos.

B. Actualización de getObservable la función para el modelo contenedor

La forma de actualizar dependerá del modelo existente, pero es importante asociar cada elemento del espacio de observación definido en con una salida adecuada getObservableModelObservation del modelo existente.

Para acceder a los campos y funciones desde el modelo existente, anteiga los nombres con el objeto raíz que representa el modelo existente. Por ejemplo, si desea acceder a una variable llamada en el modelo existente, use para hacer referencia a ella, donde es el tipo de agente currTempMain.currTemp raíz del modelo Main contenedor.

Importante

Cualquier código que agregue a la getObservable función y el conector debe hacer referencia al modelo Bonsai existente. El contenedor solo está pensado para empaquetar la información entrante y saliente para Bonsai que el modelo existente pueda comunicarse.

C. Actualización de los Bonsai campos del conector

  1. Actualice los campos episodeStart, episodestepy halted con código que actúe o informe sobre el modelo existente.
Campo Uso Variables locales
episodeStart inicializar el entorno simulado config (alias ModelConfig )
episodeStep actualizar el entorno simulado action (alias ModelAction )
Detenido indica si la simulación en en un estado terminal ( True o False ) ninguno
  1. Cree un nuevo archivo denominado SIM_PARAMS.m y defina las variables necesarias para el simulador. Por ejemplo:
    TemplateParam = 1;  %% dummy variable
    
  2. Cree un nuevo archivo denominado startup.m y agregue el código siguiente:
    addpath(genpath(pwd))
    SIM_PARAMS
    DEFAULT_SIMULATION_RATE = -1;  % units: sec
    
  3. Deje establecido en -1 (recomendado) si desea ejecutar el bloque a DEFAULT_SIMULATION_RATE la misma velocidad que el Bonsai modelo. De lo contrario, establezca la frecuencia de muestreo deseada en segundo lugar.
  4. Cree un nuevo archivo denominado bonsaiConfig.m y agregue el código siguiente:
    % 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. Actualice cada una de las líneas marcadas con %TODO comentarios con los detalles pertinentes para el área de trabajo y el simulador Bonsai existente.
  6. Cree un nuevo archivo denominado bonsaiTrain.m y agregue el código siguiente:
    % 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. Actualice cada una de las líneas marcadas %TODO con comentarios como se muestra a continuación:
  • initialProp1 ... initialPropN : actualice para que coincida con los nombres reales definidos como las propiedades iniciales del modelo.
  • initialConfig1: actualice el nombre para que coincida con el parámetro de configuración inicial definido en el archivo bonsaiConfig.m.

Paso 3: Configuración de la Bonsai CLI y su entorno

Establezca las SIM_WORKSPACE variables de entorno y SIM_ACCESS_KEY .

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

A continuación, bonsai configure ejecute el comando para establecer el identificador del área de trabajo para la Bonsai CLI:

bonsai configure --workspace-id ${SIM_WORKSPACE}

Paso 4: Ejecución de la sim con una configuración predeterminada

Antes de conectar el simulador a , debe ejecutar el modelo localmente con una configuración predeterminada para asegurarse de que Bonsai se comporta según lo previsto.

Para ejecutar el simulador localmente:

  1. Haga clic en el botón Ejecutar en AnyLogic.
  2. Seleccione el simulador deseado en la lista desplegable que aparece.

Puede usar un experimento desencanal (sin GUI) o animado (con GUI) para la ejecución de pruebas.

Paso 5: Registro del simulador como sim no administrada

Inicie una instancia local del simulador de Python y anote el identificador de sesión devuelto por CreateSession .

Inicie el modelo AnyLogic local. El Bonsai conector registrará automáticamente el simulador con Bonsai como un simulador no administrado.

Inicie el modelo de Simulink local. El Bonsai cuadro de herramientas registrará automáticamente el simulador con como un simulador no Bonsai administrado.

Paso 6: Ejecución del simulador no administrado con un cerebro de prueba

Debe comprobar que el simulador puede comunicarse correctamente con antes de agregarlo al área de trabajo como Bonsai un simulador administrado (escalable).

  1. Abra Bonsai UI.
  2. Seleccione + Crear cerebro y siga el aviso para crear un cerebro vacío.
  3. Abra el archivo de ejemplo de cerebro básico y pegue la plantilla Inkling en el panel de codificación vacío de la pestaña Enseñar.
  4. Configure la plantilla con estados y acciones válidos para el simulador.
  5. Seleccione el botón Entrenar.
  6. Seleccione el simulador en la lista de simuladores no administrados.

Transcurridos unos instantes, debería ver el streaming de datos de episodios en la consola de MATLAB.

Cuando tenga suficientes datos de prueba, seleccione Detener entrenamiento. Simulink registra los detalles de la ejecución de prueba como registros csv con el nombre de archivo establecido en el Bonsai archivo de configuración ( bonsaiConfig.m ).

Pasos siguientes

Una vez que el simulador se conecta localmente y puede comprobar el comportamiento correcto, está listo para convertirlo en un simulador administrado y escalar el entrenamiento del cerebro con Bonsai .