Vinculación de un simulador no administrado a Bonsai
- Tiempo total para completar: 40 minutos
- Tiempo activo: 40 minutos
- Tiempo inactivo: 0 minutos
- Tiempo total para completar: 60 minutos
- Tiempo activo: 30 minutos
- Tiempo inactivo: 30 minutos
- Tiempo total para completar: 60 minutos
- Tiempo activo: 30 minutos
- Tiempo inactivo: 30 minutos
Conecte un simulador que se ejecuta en el entorno local al Bonsai área de trabajo para pruebas de simuladores y entrenamiento cerebral.
Antes de comenzar
- 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 realizar el curso 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 quiere evitar colisiones con una instalación existente, use un entorno de Python (pyenv) o un entorno virtual (virtualenv).
- Debe tener instalada la API de Microsoft Bonsai para Python.
- Debe tener instalada la Bonsai CLI.
- Debe tener implementado un simulador local. Consulte Validación de la simulación para la enseñanza automática y Compilación de un conector de Python dedicado para Bonsai obtener más información sobre cómo crear un simulador local.
- Debe conocer el Bonsai 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 Bonsai á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 el trabajo de codificación.
- Debe tener instalada la Bonsai CLI.
- Debe tener implementado un simulador local. Consulte Validación de la simulación para la enseñanza automática y Compilación de un conector de Python dedicado para Bonsai obtener más información sobre cómo crear un simulador local.
- Debe conocer el Bonsai 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 Bonsai á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.
- Debe tener instalada la Bonsai CLI.
- Debe tener implementado un simulador local. Consulte Validación de la simulación para la enseñanza automática y Compilación de un conector de Python dedicado para Bonsai obtener más información sobre cómo crear un simulador local.
- Debe conocer el Bonsai 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 Bonsai á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.
- Solo debe usar los cuadros de herramientas de MATLAB compatibles en el modelo de simulación.
Paso 1: Agregar un Bonsai conector
Actualice el código del simulador para agregar un conector dedicadoBonsai.
Debe encapsular el modelo AnyLogic existente y adjuntar la Bonsai biblioteca del conector para poder usarla 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 contenedor
- Descargue la Bonsai biblioteca de conectores (BonsaiLibrary.jar) desde el Bonsai repositorio de GitHub anyLogic.
- Descargue la plantilla del modelo contenedor desde la página Microsoft Project Bonsai AnyLogic.
- En AnyLogic:
- Seleccione el panel Paleta .
- Seleccione signo más (+) en la esquina inferior izquierda para abrir el cuadro de diálogo Administrar bibliotecas .
- Seleccione el botón Agregar en el lado derecho del cuadro de diálogo.
- Vaya a y seleccione el archivo Library.jar en el Bonsaiequipo.
- Confirme todos los cuadros de diálogo.
- Abra el modelo contenedor y el modelo de simulador existente en AnyLogic.
- Abra el tipo de agente contenedor en el modelo contenedor.
- En el panel del editor del agente contenedor, mantenga el puntero a la izquierda para ver el Bonsai objeto del conector y la
getObservablefunción. - Arrastre y coloque el agente de nivel superior en el panel del proyecto del modelo de simulador existente en el agente contenedor.
Captura de pantalla de AnyLogic UI 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 Bonsai archivo jar del conector no se mueva o elimine, 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 la getObservable función del modelo contenedor o del Bonsai conector:
- Abra la ventana de propiedades de la función.
- Vaya a la sección Opciones avanzadas.
- Seleccione "public" en la lista desplegable de opciones de Access .
C. Actualización del Bonsai conector
Haga clic en el Bonsai objeto connector de AnyLogic y proporcione la siguiente información en Propiedades:
- Identificador del área de trabajo.
- La clave de acceso.
- Un nombre único para el simulador.
D. Migración de la base de datos 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 la base de datos
- Abra ambos directorios de modelos en el explorador de archivos que prefiera.
- Cierre ambos modelos en AnyLogic.
- 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
- Abra las propiedades del objeto de base de datos en el modelo existente.
- Seleccione Copia de seguridad de la base de datos y guarde el archivo de copia de seguridad en la máquina.
- Abra las propiedades del objeto de base de datos para el modelo contenedor.
- Seleccione Restaurar base de datos y elija el archivo de copia de seguridad que ha realizado.
- Una vez restaurada la base de datos, puede eliminar el archivo de copia de seguridad.
- Descargue el cuadro de herramientas de la BonsaiBonsai página web en MATLAB-Central.
- Haga doble clic en el instalador del cuadro de herramientas (.mltbx).
- Siga las indicaciones que aparecen en la pantalla para instalar el cuadro de herramientas para la versión predeterminada de MATLAB/Simulink.
- Abra el modelo de Simulink.
- Ajuste el modelo existente para que acepte
actionyInitialConfiglos valores como entrada y unstatesvalor como salida.Captura de pantalla de Simulink con un modelo existente ajustado con entradas y salidas. - En el Explorador de biblioteca de Simulink , agregue los siguientes bloques:
- Bonsai
- Constante
- Mux
- Detener simulación
- Cree un bloque constante con el valor
False. - Realice tantos bloques constantes como sea necesario para representar el estado inicial de la simulación.
- Use el bloque Mux para combinar los valores de propiedad iniciales y conectar el puerto de salida Mux al
InitialConfigpuerto de entrada del modelo existente. - Conecte el
actionpuerto de salida del Bonsai bloque alactionpuerto de entrada del modelo de Simulink. - Conecte el
resetpuerto de salida del Bonsai bloque al bloque Detener simulación. - Conecte el
statepuerto de salida del modelo existente alstatepuerto de entrada del Bonsai bloque. - Conecte el
Falsebloque de constanteshaltedal puerto de entrada del Bonsai bloque. - Haga doble clic en el Bonsai bloque y establezca Hora de ejemplo en
[DEFAULT_SIMULATION_RATE, 0].
Captura de pantalla de la interfaz de usuario de Simulink con los bloques pertinentes conectados, tal y como se describe en el proceso anterior.
Paso 2: Configuración del Bonsai conector
Los conectores dedicados se personalizan en el simulador asociado de forma predeterminada. Puede ver un ejemplo de un conector dedicado totalmente funcional en el Bonsai ejemplo: Cartpole. Repositorio de GitHub El ejemplo se ejecuta localmente para registrar y conectar el simulador de Python de Cartpole 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.ModelConfigLas variables son accesibles en el campo episodeStart del Bonsai objeto Connector y se asignan a las variables de configuración del simulador definidas en el archivo inkling.ModelAction: debe contener todas las variables que el Bonsai cerebro pasa al modelo contenedor.ModelActionLas variables son accesibles en el campo episodeStep del Bonsai objeto Connector y se asignan a las acciones cerebrales permitidas definidas en el archivo inkling.ModelActionEl Bonsai cerebro proporciona valores 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 enModelObservationse rellenan al principio de cada episodio paso por lagetObservablefunción y se asignan a los estados del simulador definidos en el archivo inkling.
Importante
Actualmente, la Bonsai plataforma solo permite campos numéricos (enteros y dobles) y matrices como tipos de datos.
B. Actualización de la getObservable función para el modelo contenedor
La forma de actualizar getObservable dependerá del modelo existente, pero es importante asociar cada elemento del espacio de observación definido en ModelObservation con una salida adecuada del modelo existente.
Para acceder a los campos y funciones del modelo existente, anteponga los nombres con el objeto raíz que representa el modelo existente. Por ejemplo, si desea acceder a una variable denominada currTemp en el modelo existente, use Main.currTemp para hacer referencia a ella, donde Main es el tipo de agente raíz del modelo contenedor.
Importante
Cualquier código que agregue a la getObservable función y el Bonsai conector debe hacer referencia al modelo existente. El contenedor solo está pensado para empaquetar la información entrante y saliente para que Bonsai el modelo existente pueda comunicarse.
C. Actualización de los campos del Bonsai conector
- Actualice los campos episodeStart, episodestep y halted con código que actúa o informa 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 un estado terminal (True o False) |
ninguno |
- Cree un nuevo archivo denominado SIM_PARAMS.m y defina las variables necesarias para el simulador. Por ejemplo:
TemplateParam = 1; %% dummy variable - Cree un nuevo archivo denominado startup.m y agregue el código siguiente:
addpath(genpath(pwd)) SIM_PARAMS DEFAULT_SIMULATION_RATE = -1; % units: sec - Deje
DEFAULT_SIMULATION_RATEestablecido en -1 (recomendado) si desea ejecutar el Bonsai bloque a la misma velocidad que el modelo. De lo contrario, establezca la frecuencia de muestreo deseada en segundo lugar. - Cree un archivo llamado 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 - Actualice cada una de las líneas marcadas con
%TODOcomentarios con los detalles pertinentes para Bonsai el área de trabajo y el simulador existente. - Cree un archivo llamado 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 - Actualice cada una de las líneas marcadas con
%TODOcomentarios de la siguiente manera:
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 el 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, ejecute el comando para establecer el bonsai configure identificador del área de trabajo para la Bonsai CLI:
bonsai configure --workspace-id ${SIM_WORKSPACE}
Paso 4: Ejecutar la sim con una configuración predeterminada
Antes de conectar el simulador a Bonsai, debe ejecutar el modelo localmente con una configuración predeterminada para asegurarse de que se comporta según lo previsto.
Para ejecutar el simulador localmente:
- Haga clic en el botón Ejecutar en AnyLogic.
- Seleccione el simulador deseado en la lista desplegable que aparece.
Puede usar un experimento sin guis (sin GUI) o animado (con GUI) para la ejecución de pruebas.
Paso 5: Registrar el simulador como un sim no administrado
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 Bonsai como un simulador no administrado.
Paso 6: Ejecutar el simulador no administrado con un cerebro de prueba
Debe comprobar que el simulador puede comunicarse correctamente con Bonsai antes de agregarlo al área de trabajo como simulador administrado (escalable).
- Abra la interfaz deBonsai usuario.
- Seleccione + Crear cerebro y siga el mensaje para crear un cerebro vacío.
- Abra el archivo de ejemplo básico del cerebro y pegue la plantilla inkling en el panel de codificación vacío de la pestaña Enseñar .
- Configure la plantilla con estados y acciones válidos para el simulador.
- Seleccione el botón Entrenar.
- Seleccione el simulador en la lista de simuladores no administrados .
Después de 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 Bonsai el 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 cerebral con Bonsai.