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.
- 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.
- Solo debe usar los cuadro de herramientas de MATLAB admitidos en el modelo de simulación.
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
- 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 .
- Descargue la plantilla de modelo de contenedor desde .
- 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 del lado derecho del cuadro de diálogo.
- Vaya al archivo Bonsai Library.jar y selecciónelo en el equipo.
- 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 objeto Bonsai del conector y la
getObservablefunción. - 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 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:
- Abra la ventana de propiedades de la función.
- Vaya a la sección Avanzadas.
- 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
- Abra ambos directorios de modelo en el explorador de archivos de su elección.
- 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 el equipo.
- 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 hizo.
- Una vez restaurada la base de datos, puede eliminar el archivo de copia de seguridad.
- Descargue el cuadro Bonsai de herramientas de Bonsai webpage on 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 de la versión predeterminada de MATLAB/Simulink.
- Abra el modelo de Simulink.
- Ajuste el modelo existente para que acepte los valores
actiony como entrada y un valor comoInitialConfigstatessalida.Captura de pantalla de Simulink con un modelo existente encapsulado con entradas y salidas. - En el explorador de la biblioteca de Simulink, agregue los siguientes bloques:
- Bonsai
- Constante
- Mux
- Detener simulación
- Crear 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 de Mux al puerto de
InitialConfigentrada del modelo existente. - Conectar el
actionpuerto de salida del bloque al puerto de entrada del modelo de BonsaiactionSimulink. - Conectar el
resetpuerto de salida del bloque al bloque Detener Bonsai simulación. - Conectar el
statepuerto de salida del modelo existente al puerto de entrada delstateBonsai bloque. - Conectar bloque
Falseconstante al puerto de entrada delhaltedBonsai bloque. - Haga doble clic en el Bonsai bloque y establezca Hora de la muestra en
[DEFAULT_SIMULATION_RATE, 0].
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.ModelConfigLas variables son accesibles en elModelConfigdel 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.ModelActionLas variables son accesibles en elModelActiondel objeto Connector y se asignan a las acciones de cerebro permitidas definidas Bonsai en el archivo Inkling.ModelActionel 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 definidosModelObservationgetObservableen 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
- 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 |
- 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 establecido en -1 (recomendado) si desea ejecutar el bloque a
DEFAULT_SIMULATION_RATEla misma velocidad que el Bonsai modelo. De lo contrario, establezca la frecuencia de muestreo deseada en segundo lugar. - 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 - Actualice cada una de las líneas marcadas con
%TODOcomentarios con los detalles pertinentes para el área de trabajo y el simulador Bonsai existente. - 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 - Actualice cada una de las líneas marcadas
%TODOcon 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:
- Haga clic en el botón Ejecutar en AnyLogic.
- 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).
- Abra Bonsai UI.
- Seleccione + Crear cerebro y siga el aviso para crear un cerebro vacío.
- 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.
- 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.
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 .