Crear agentes de IA de aprendizaje automático en Unreal Engine 4 y 5
Introducción a MindMaker: https://www.youtube.com/watch?v=erm_pzhapia
Descripción general: https://youtu.be/tuo423nujek
Discord Group: https://discord.gg/shxfwtmsha
El complemento Mindmaker AI es un complemento de código abierto que permite que los juegos y simulaciones dentro de UE4 y UE5 funcionen como entornos de gimnasio OpenAI para entrenar agentes autónomos de aprendizaje automático. El complemento facilita una conexión de red entre un proyecto de motor Unreal que contiene el entorno de aprendizaje y una biblioteca de Python ML que recibe datos de Unreal Engine y analiza un entorno personalizado de Gym Operai para entrenar al agente. La biblioteca de aprendizaje automático independiente puede ser un script de Python personalizado en el caso de que esté creando su propia herramienta ML utilizando el servidor ML remoto de MindMaker, o podría ser un motor de aprendizaje precompilado como el motor DRL de Mindmaker (algoritmos estables de Baselines3). Independientemente de la opción que elija, el uso de los desarrolladores e investigadores de complementos Mindmaker AI puede capacitar fácilmente a los agentes de aprendizaje automático para proyectos 2D, 3D y VR.
Las posibles aplicaciones se extienden más allá del diseño del juego a una variedad de esfuerzos científicos y técnicos. Estos incluyen simulación robótica, conducción autónoma, arquitectura generativa, gráficos de procedimiento y mucho más. Esta API proporciona una plataforma central desde la cual los avances en el aprendizaje automático pueden llegar a muchos de estos campos. Para los desarrolladores de juegos, los casos de uso para los agentes autoptimizantes incluyen el control del comportamiento de NPC (en una variedad de entornos, como el agente múltiple y el adversario), las decisiones de diseño de juegos de creación de prototipos y las pruebas automatizadas de las construcciones de juegos.
El motor de aprendizaje DRL se incluye en el enlace al proyecto Ejemplo, así como en el código fuente de Python para modificarlo, que se encuentra en el directorio de fuente Content Mindmaker . Los algoritmos actualmente respaldados por el motor de aprendizaje DRL incluyen: Critic de actor (A2C), muestra de actor eficiente-crítico con reproducción de experiencia (ACER), Critic de actor utilizando la región de confianza de KonRecker-Factor Trust (ACKTR), Deep Q Network (DQN), Optimización de la Región de Políticas Proximales (PPO), Soft Actor Critic (SAC), TWIN Deleted DDPG (TD3) (TRATY POTICAS POTICULADAS (POTICULADAS PPO) (TRATO POTICULADAS (SAC), TRPO (TRATO POTICACIONES DE RUFT ), Gradiente de política determinista profunda (DDPG). El complemento es funcionalmente similar a los agentes ML de Unity, con algunas ventajas, en lugar de necesitar crear un entorno de gimnasio Operai personalizado para cada aplicación, uno usa un entorno único y simplemente elige cuáles de las observaciones y acciones del agente exponer al algoritmo ML. Voila, ¡que comience el aprendizaje!
Hay dos componentes principales que utilizará mientras trabaja con el complemento Mindmaker, un proyecto de Inglejes de Unreal que contiene el entorno de aprendizaje y una biblioteca de aprendizaje automático independiente utilizada por el agente para optimizar lo que intente aprender. La biblioteca de aprendizaje automático independiente puede ser un script de Python personalizado en el caso de que esté creando su propia herramienta ML utilizando el servidor ML remoto de MindMaker, o podría ser un motor de aprendizaje precompilado como el motor DRL Mindmaker (algoritmos estables de líneas de base).
Para experimentar el uso de diferentes bibliotecas ML junto con MindMaker, use el servidor ML Remote ML de Mindmaker. Con él, puede personalizar su propio motor de aprendizaje de Python, en lugar de usar el motor DRL de fabricante mental precompilado. Para usar el servidor ML remoto, siga estos pasos:
Si desea emplear múltiples clientes de ML conectados a un solo entorno de aprendizaje, por ejemplo, en un escenario de agente múltiple, esto se puede hacer utilizando el servidor y el complemento de MindMaker.
Para crear múltiples agentes de aprendizaje, primero configure sus agentes de aprendizaje como se muestra en uno de los planos de ejemplo. Para cada nuevo agente de aprendizaje, deberá incrementar la configuración del puerto Socketio en el nuevo controlador AI por 1. Al momento de iniciar el servidor, los nuevos números de puerto del servidor se crean automáticamente para cada nueva instancia de Mindmaker.exe que lanza, comenzando con 3000 y subiendo desde allí para un total de 100. Si necesita más de 100 agentes de aprendizaje, solicite esto en el repositorio de Github.
Por ejemplo, si agrega un segundo agente de aprendizaje a su mapa, necesitará las mismas funciones que se encuentren en el primer agente de aprendizaje, el nodo de plano de mentalidad de lanzamiento, etc., pero en lugar de asignar esta al puerto 3000, le asignará el puerto 3001 en planos. Además de cambiar la configuración del puerto Socketio en BluePrints, también deberá cambiar para cambiar la función Connect Socketio BluePrint, modificando la dirección y el puerto en el nuevo número que ha creado "http: // localhost: 3001", por ejemplo.
Una vez hecho esto, solo necesitará crear una segunda instancia de su archivo Mindmaker_client.py que se conectará a su segundo agente de aprendizaje. El entrenamiento se puede hacer simultáneamente, en paralelo. La única modificación que necesita hacer a Mindmaker_client.py es cambiar sio.connect ('http: // localhost: 3000') en la parte inferior del archivo a sio.connect ('http: // localhost: 3001') o lo que sea el número de nuevos agentes de aprendizaje con los que está trabajando. Si tiene cinco agentes de aprendizaje, tendrá cinco instancias del cliente en ejecución y cada uno tendrá un nuevo número de puerto hasta 3005
Aprendizaje de imitación con StableBasElines 3 La fuente de Python Mindmaker se puede modificar para apoyar el aprendizaje de imitación utilizando los algoritmos de aprendizaje de imitación de STABLEBASELINES STATA
Para guardar un modelo capacitado, establezca la casilla de verificación "Guardar el modelo después de la capacitación" en la función de lanzamiento mental del fabricante mental en verdad. Deberá asegurarse de que su número de episodios de capacitación sea un número no cero. El modelo ahorrará después de que se complete la capacitación. Para cargar los modelos capacitados, desmarque la casilla de verificación "Guardar el modelo después del entrenamiento" y, en su lugar, configure la casilla de verificación "Cargar el modelo pre -entrenado" en la función de lanzamiento de mentalidad mental en verdad. También deberá establecer el número de episodios de entrenamiento en cero, ya que no se producirá ningún entrenamiento. Asegúrese de que el número de episodios de evaluaciones sea un entero distinto de cero, ya que así es como el modelo previamente capacitado demuestra el aprendizaje. Los modelos se guardan localmente en la carpeta "APPData Roaming" de su computadora, por ejemplo, C: Users Leon AppData Roaming
Por defecto, MindMaker solo guarda en el directorio AppData/roaming en las máquinas de Windows. Para habilitar el registro de placa tensor, siga estos pasos.
Este es un proceso de tres pasos, debe decidir qué acciones puede tomar el agente, cuáles serán sus criterios de recompensa y qué observaciones deberá hacer el agente sobre su entorno para aprender con éxito a recibir una recompensa.
Lanzamiento de Mindmaker ---------> Recibir acción --------> hacer Obs -----> Compruebe las recompensas --------> Enviar Obs y Rwrd a Mindmaker ------ Regreso para recibir Acción
En el proceso de aprendizaje, el motor de aprendizaje de MindMaker primero debe configurarse con el espacio de observación que el agente está utilizando y el número total de acciones disponibles para el agente. No necesita proporcionar ninguna información de recompensa cuando se inicialice, esto solo se encontrará durante la capacitación.
El proceso general para el aprendizaje es que una vez lanzado y conectado a Conectado a Unreal Engine, el motor de aprendizaje de MindMaker comenzará a suministrar acciones aleatorias para que el agente del motor Unreal tome, y en respuesta, el agente con UE enviará una lista de observaciones que realizó una vez que se tomó la acción, además de cualquier recompensa que recibió en el proceso. Ver Diagrama de arriba. En muchos episodios, el algoritmo empleado por MindMaker optimizará las acciones de los agentes en respuesta a las observaciones y recompensas recibidas de UE. Este proceso es el mismo independientemente del algoritmo de aprendizaje automático que uno elige emplear con el creador mental. Con esta información, el algoritmo de aprendizaje que se usa MindMaker comenzará a optimizar las decisiones de acción de los agentes, descubriendo idealmente la secuencia necesaria para recibir las recompensas de manera consistente. La compensación entre acciones aleatorias y las intencionales se controla en los parámetros de exploración/explotación de la biblioteca ML que ha seleccionado para usar con MindMaker, por ejemplo, líneas de base estables. Este proceso se repite para cada episodio de entrenamiento. Después de un número fijo de episodios de capacitación, puede cambiar completamente a usar el algoritmo para predecir "mejores" acciones en lugar de tomar las aleatorias.
El fabricante mental funciona envolviendo un entorno irreal en un formato compatible con el gimnasio Operai para que cualquier biblioteca de ML que haya sido diseñada para trabajar con OpenAI Gym se pueda implementar en su entorno de motor Unreal. El propósito de usar el gimnasio de IA abierto es estandarizar los factores relevantes para el aprendizaje, a saber, el formato para recibir las observaciones, recompensas y acciones de los agentes, de modo que cualquier algoridad de ML pueda tener acceso a las variables relevantes para aprender sin necesidad de volver a ser adaptados para cada tarea específica. Los algoritmos que funcionan con Operai Gym pueden trabajar con cualquier entorno y agente que esté utilizando el protocolo Operai estandarizado.
Configuración de MindMaker Learning Engine Desde el principio, deberá configurar la función de inicio de la mentalidad de lanzamiento dentro de Unreal Engine para su agente de aprendizaje. Esto se hace estableciendo la variable Action_Space dentro de MindMaker para igualar el número total de acciones disponibles para su agente. También deberá configurar la variable Observation_space para que coincida con el número y el tipo de observaciones que su agente usará con respecto a la recompensa que intenta recibir. Por defecto, las observaciones se pasan de Unreal como una matriz, consulte el proyecto de ejemplo. Dependiendo del número de observaciones que su agente encontrará necesario para usar, el tamaño de Observation_Space cambiará.
Recompensa: una recompensa es una variable establecida de acuerdo con el criterio específico que ha elegido para que el agente aprenda u optimice. En el plan UE4 usará un nodo de rama para determinar qué condiciones ambientales y la acción del agente deben cumplirse para que se active la recompensa. Esto es pasado a MindMaker por la conexión Socketio. Ver ejemplo del proyecto. Acción: esta es una variable que contiene un valor entero que representa cualquier acción que haya tomado el agente. También deberá decidir el número total de acciones disponibles para el agente y establecer los maxctions en MindMaker para igualar este número. Observaciones: prehapse las variables más complicadas con las que lidiará. La clave para establecer esto correctamente es comprender que las acciones de los agentes mismas deben incluirse en la variable de observaciones, además de cualquier otro criterio ambiental mencionado en la función de recompensa. El agente necesita saber qué acciones o acciones tomó que influyeron en la recompensa y las variables de entorno que también cambiaron. Estos se pasan al motor de aprendizaje del fabricante mental como una matriz y se actualizan en la variable de observaciones en el mismo.
Aquí discutiremos los parámetros individuales del nodo Blueprint de BluePrint, que es el componente principal de las funciones de BluePrints de MindMaker.
Algoritmo RL: aquí es donde se puede seleccionar el sabor del algoritmo RL con el que uno quiere entrenar al agente. Hay diez opciones en el menú desplegable, y cada algoritmo tiene sus propios pros y contras. Aquí se puede encontrar una discusión detallada de los algoritmos relevantes y sus casos de uso. https://spinningup.openai.com/en/latest/spinningup/rl_intro2.html
Num Train EP – Esta es una entrada entera que representa el número de episodios de capacitación que uno desea que el agente emprenda. Cuanto mayor sea el número de episodios de capacitación, más exploración hace el agente antes de la transición al comportamiento estratégico que adquiere durante la capacitación. La complejidad de las acciones que el agente intenta aprender típicamente determina el número de episodios de capacitación requeridos: estrategias y comportamientos más complejos requieren más episodios de capacitación.
Num eval EP: esta es también una entrada entera y representa el número de episodios de evaluación que sufrirá el agente después del entrenamiento. Estos son los episodios en los que el agente demuestra su comportamiento aprendido.
Espacio de acción continuo: esta es una entrada booleana que determina si el agente está utilizando un espacio de acción continuo. Un espacio de acción continuo es aquel en el que hay un número infinito de acciones que el agente puede tomar, por ejemplo, si está aprendiendo a dirigir un automóvil, y un rango de ángulos sobre los cuales la columna de dirección puede cambiar es un valor decimal entre 0 y 180, entonces hay un número infinito de valores dentro de ese rango como .12 y 145.774454. Deberá identificarse al comienzo de usar si su agente tiene un número infinito de acciones o acciones finitas que pueden tomar. El espacio de acción debe ser continuo o discreto, no puede ser ambos.
Espacio de acción discreto: esta es una entrada booleana que determina si el agente está utilizando un espacio de acción discreto. Un espacio de acción discreto es aquel en el que hay un número finito de acciones que el agente puede tomar, como si la IA solo puede mover a la derecha un espacio o dejar un espacio. En cuyo caso solo tiene dos acciones disponibles y el espacio de acción es discreto. El usuario determina qué tipo de espacio de acción utilizará el agente antes de usar MindMaker y establecer estos valores en consecuencia.
Forma del espacio de acción: esto define los límites inferiores y superiores de las acciones disponibles para el agente. Si está utilizando un espacio de acción discreto, este es simplemente el número total de acciones disponibles para el agente, por ejemplo 2 u 8. Si está utilizando un espacio de acción continuo, las cosas son más complicadas y debe definir los límites bajos y altos del espacio de acción por separado. El formato para hacerlo es el siguiente: Bajo = Boundario bajo, alto = Formador alto, Forma = (1,) En este caso, bajo el valor es un valor como -100.4 y el alto contenido de hueso es un valores como 298.46. Todos los valores decimales entre estos límites representarán acciones disponibles para el agente. Si tuviera una variedad de tales acciones, podría cambiar la parte de la forma para reflejar esto.
Forma del espacio de observación: por hablar correctamente, esta entrada es un derivado de pitón de la clase de entorno personalizado de IA abierto y define los límites inferiores y superiores de las observaciones disponibles para el agente después de que tome una acción. El formato para hacerlo es el siguiente: Low = Np.Array ([LowBoundary]), High = Np.Array ([Highboundary]), dtype = np.float32. Imagine un agente que necesitaba tomar tres medidas específicas seguidas para recibir una recompensa, entonces su espacio de observación necesitaría incluir el acceso a esas tres acciones, que cada una estaría representada por una observación única. Por lo tanto, la variedad de observaciones tendría que incluir tres valores diferentes, cada uno con límites únicos. Por ejemplo, dicho espacio de acción podría definirse como tal: low = np.array ([0,0,0]), high = np.array ([100,100,100]), dtype = np.float32 Si cada uno de sus propios acciones que el agente necesita ser un valor entre 0 y 100. Una regla de thumb es que es que un valor es parte de la función de recompensa para el agente, su comportamiento, su comportamiento solo es una condición que se concreta solo una condición que se concreta. El espacio de observación debe incluir una referencia a ese valor. Si se deben cumplir cinco condiciones para que un agente se recompensara, cada una de estas cinco condiciones debe ser parte del espacio de observación de los agentes.
Modelo de carga pre -entrenado: este es un valor booleano que determina si desea que el agente cargue algún comportamiento pre -entrenado que se guardara previamente. Si establece esto en True, querrá especificar el nombre del archivo en el cuadro de entrada de nombre de modelo Guardar /Cargar. Todos los modelos se guardan de forma predeterminada en el directorio de roaming de datos de la aplicación de la computadora, por ejemplo, c: users username appData roaming
Guardar modelo después del entrenamiento: este es un valor booleano que determina si desea que el agente ahorre el comportamiento que ha aprendido después del entrenamiento. Si establece esto en True, querrá especificar el nombre del archivo en el cuadro de entrada de nombre de modelo Guardar/Cargar. Todos los modelos se guardan de forma predeterminada en el directorio de roaming de datos de la aplicación de la computadora, por ejemplo, c: users username appData roaming
Guardar/Cargar el nombre del modelo: esta es una cadena que representa el nombre del modelo que desea guardar o cargar. Los archivos se guardan en el directorio de roaming de datos de la aplicación de la computadora, por ejemplo, C: Users UserName AppData Roaming
Use parámetros personalizados: este es un valor booleano que determina si desea utilizar la versión de stock del algoritmo que ha seleccionado o desea modificar sus parámetros. Si desea utilizar parámetros personalizados, se puede acceder a estos variables de estructura de parámetros personalizados. Si hace clic en ellos, por ejemplo, A2CParams, verá todos los valores que se pueden establecer dentro de estas estructuras. Aquí se puede encontrar un desglose detallado de los parámetros para cada algoritmo: https://stable-baselines.readthedocs.io/en/master/
A continuación se presentan una lista de muestras de funciones del proyecto de ejemplo para comprender cómo se pasa la información entre el fabricante mental y el motor irreal, todos los activos de UE relevantes para el problema del juguete están contenidos en la carpeta de activos/profundoseLearningNpc. De particular importancia es el plan llamado AI_CHARACTER_CONTROLER_BP en el plano AI_CHARACTER_CONTROLER_BP, todas las variables de entorno están configuradas para pasar a la aplicación independiente de fabricante mental. Estos incluyen las siguientes funciones esenciales
Función de entrada sensorial de carga: importa los objetos a los que la IA tendrá acceso para detectar o manipulación de su medio ambiente Función de controles ambientales: esto controla la lógica para partes del entorno que cambian tales luces de encendido, etc.
Definir la función de espacio de acción: codifique todas las acciones de agente posibles en un solo valor numérico que se puede pasar a la aplicación independiente para la evaluación por el algoritmo RL
Función de lanzamiento de MindMind: esto llama a la aplicación independiente al comienzo de la obra para que pueda comenzar los datos de evaluación del entorno UE. Después de iniciar esto, la aplicación RL comienza a sondear el entorno con acciones aleatorias que genera, como una persona ciega que busca en la oscuridad una luz. La luz es la recompensa, que se especifica en la función de verificación de la función UE. LaunchlearningEngine también pasa una información básica del entorno UE a la aplicación independiente, como el número de acciones que el agente puede tomar, el número total de episodios para entrenar y el número de episodios para mostrar la estrategia adquirida de los agentes después de la capacitación. Mostrar todo el entrenamiento aleatorio de los agentes tomaría demasiado tiempo.
Función AVIVEACTION: después de que haya comenzado la función del motor de aprendizaje de lanzamiento, la siguiente función para disparar es la recompensa. Esto recibe la acción elegida por la aplicación independiente, y realiza una serie de procedimientos de seguimiento con ella, como actualizar la ubicación de los agentes en el entorno, verificar si la nueva acción satisface la condición de recompensa, mostrando las acciones de los agentes si estamos a través de la capacitación y actualizamos las observaciones de los agentes sobre su entorno para que puedan aprobarse en la aplicación independiente en el próximo episodio.
Hacer que las observaciones funcionen: el propósito de esto es actualizar las observaciones de los agentes sobre su entorno después de la acción que acaba de tomar. Estos incluirán, por ejemplo, la ubicación de los agentes con el medio ambiente y cualquier otro datos ambientales que hayan cambiado desde la última vez que tomó una acción. Estos se almacenan en una variable de estructura personalizada.
Checkreward: esto especifica la condición de recompensa para el agente en el entorno. Si esta condición de recompensa se cumple después del agente tomando una acción, esta información se pasa a la aplicación independiente en la función de observaciones de envío que sigue. Enviar la función de observaciones: toma las nuevas observaciones hechas por el agente, así como cualquier información de recompensa y las pasa a la aplicación independiente. Así es como el algoritmo RL podrá evaluar si la acción que acaba de tomar fue buena y actualizar su estrategia en consecuencia. Después de que esta función se dispara, se completa la única iteración o episodio del juego, y el proceso repite AD Infinitum.
Ciertas tareas pueden requerir períodos prolongados de capacitación en los que visualizar los movimientos de los agentes resultaría probable que consumiera mucho tiempo. Como tal, en ciertos ejemplos, la visualización de los movimientos del agente ha sido deshabilitado, pero la capacitación está ocurriendo en segundo plano una vez que se ejecuta el ejemplo y al finalizar, el agente demostrará la estrategia adquirida.
El aleatorio en este caso significa que el agente está utilizando un generador de números aleatorios para elegir entre las acciones disponibles durante el entrenamiento. El algoritmo RL observa los resultados de estas acciones aleatorias, así como cualquier recompensa recibida y usa esta información para elegir mejores acciones durante la fase de "explotación". Así es como se desarrolla una estrategia aprendida.
La recopilación de información durante el aprendizaje toma la forma de una variedad de observaciones que se generan después de cada una de las acciones aleatorias del agente. Si se usa el complemento MindMaker, la forma exacta de la matriz se define en la propiedad de tamaño de observación de la función de plan de lanzamiento de mentalidad mental y dependerá de qué variables sean necesarias para que el agente observe en ese juego o tarea de aprendizaje en particular. Cambiará dependiendo de la tarea o el juego de aprendizaje.
El agente percibe solo la parte del entorno que el diseñador de juegos está expuesto a ellos. Cuando se usa el complemento de fabricante mental, estas observaciones están pobladas en la llamada de la función de planos de observaciones dentro de Unreal Engine. Esto generará una variedad de números en la forma definida por la propiedad de tamaño de observación de la función de plano de mentalidad de lanzamiento. Las observaciones deben seleccionarse para que solo comprendan los datos necesarios para que el agente aprenda, de lo contrario, la capacitación podría llegar a un tiempo prohibitivo.
En Vanilla Q Learning: no se requiere red neuronal y el aprendizaje se almacena en un formato tabular. Al usar el aprendizaje de refuerzo profundo del fabricante mental, uno puede elegir entre una variedad de arquitecturas de redes neuronales, incluidas RNN, CNN, etc. Uno puede configurarlos dentro de las propiedades personalizadas de cada algoritmo de la llamada de función de plan de lanzamiento de MindMaker.
Creación de un entorno de aprendizaje de refuerzo profundo personalizado
Introducción Para refuerzo de aprendizaje para el videojuego ai
Aprendizaje de refuerzo: es promesa y peligro
Documentación de líneas de base estables