Diferencia entre revisiones de «Unity:Manuales:Configuracion ML Agents»
(No se muestra una edición intermedia del mismo usuario) | |||
Línea 5: | Línea 5: | ||
El aprendizaje de máquina es una rama de la inteligencia artificial que utiliza algoritmos especializados para crear modelos de predicción, clasificación, etc. En el caso de los videojuegos, se puede usar para crear inteligencias artificiales que jueguen. | El aprendizaje de máquina es una rama de la inteligencia artificial que utiliza algoritmos especializados para crear modelos de predicción, clasificación, etc. En el caso de los videojuegos, se puede usar para crear inteligencias artificiales que jueguen. | ||
= | = Instalación ML Agents Toolkit = | ||
Podrás encontrar el Github oficial de la librería en: https://github.com/Unity-Technologies/ml-agents | Podrás encontrar el Github oficial de la librería en: https://github.com/Unity-Technologies/ml-agents | ||
Es importante destacar que las instrucciones pueden cambiar en nuevas versiones y siempre es mejor revisar el Github oficial. | Es importante destacar que las instrucciones pueden cambiar en nuevas versiones y siempre es mejor revisar el Github oficial. | ||
# [[Unity:Manuales:Instalacion Unity|Instalar Unity 2019.4 o posterior]] | # [[Unity:Manuales:Instalacion Unity|Instalar Unity 2019.4 o posterior]] | ||
Línea 59: | Línea 52: | ||
4. Instalar CUDA Toolkit. Descargar el instalador de la página https://developer.nvidia.com/cuda-downloads. | 4. Instalar CUDA Toolkit. Descargar el instalador de la página https://developer.nvidia.com/cuda-downloads. | ||
5. Instalar CuDNN. Ingresar a https://developer.nvidia.com/rdp/cudnn-download para descargarlo. Pedirá crear un usuario. Descargar el .zip y poner el contenido en la carpeta de instalación de CUDA. | 5. Instalar CuDNN. Ingresar a https://developer.nvidia.com/rdp/cudnn-download para descargarlo. Pedirá crear un usuario. Descargar el .zip y poner el contenido en la carpeta de instalación de CUDA. | ||
= Configuración del proyecto de Unity = | |||
== Importar el paquete == | |||
# Abrir el proyecto en Unity | |||
# Descargar el paquete ML Agents: | |||
## Ir a ''Window->Package Manager'' . | |||
## En la parte superior cambiar a ''Packages: Unity Registry''. | |||
## Buscar ML Agents en la lista. | |||
## Dar clic en ''See other versions'' y seleccionar la versión más nueva. | |||
## Hacer clic en ''Install''. | |||
== Crear un agente == | |||
Un agente es un script C# que se agrega como componente al GameObject deseado: | |||
<pre> | |||
using UnityEngine; | |||
using Unity.MLAgents; | |||
using Unity.MLAgents.Actuators; | |||
using Unity.MLAgents.Sensors; | |||
public class MoveToGoalAgent : Agent | |||
{ | |||
public override void OnEpisodeBegin() | |||
{ | |||
/*Acciones a realizar cuando comienza un episodio: | |||
Generalmente se reinicia la posición del agente para empezar un | |||
nuevo ciclo de entrenamiento*/ | |||
} | |||
public override void CollectObservations(VectorSensor sensor) | |||
{ | |||
/*Se definen las variables a observar. El número de variables | |||
se definen desde el editor.*/ | |||
//sensor.AddObservation(transform.localPosition); | |||
} | |||
public override void OnActionReceived(ActionBuffers actions) | |||
{ | |||
/*Básicamente es donde se hace algo con las salidas del sistema | |||
pueden ser continuas o discretas. El tipo y cantidad de acciones (salidas) | |||
se definen desde el editor./* | |||
//float moveX = actions.ContinuousActions[0]; | |||
//float moveZ = actions.DiscreteActions[1]; | |||
} | |||
public override void Heuristic(in ActionBuffers actionsOut) | |||
{ | |||
/*Cuando se pone en modo Heurístico que no entrena, puedes determinar | |||
cuales son las acciones (salidas) que deseas. Sirve para probar el sistema | |||
manualmente./* | |||
//ActionSegment<float> continuousActions = actionsOut.ContinuousActions; | |||
//continuousActions[0] = Input.GetAxis("Horizontal"); | |||
//continuousActions[1] = Input.GetAxis("Vertical"); | |||
} | |||
} | |||
</pre> | |||
== Configurar el agente == | |||
Al agregar el Script al GameObject correspondiente se muestran diversas variables en ''Behavior Parameters'': | |||
* Behaviour Name: Debe coincidir con la clase que creaste ya que es la forma de identificar el 'Modelo' que has creado y puedes crear muchos objetos con el mismo 'Modelo' y entrenarlo a la vez. | |||
* Vector Observation: Entradas | |||
** Space size: Número de entradas del sistema. | |||
** Stacked vectors: Pareciera como para hacer multiples niveles (no se). | |||
* Actions: Acciones continuas son salidas con valores entre 0 y 1. Acciones discretas son valores enteros. Solo se puede usar una a la vez. | |||
** Continuous actions: Define la cantidad de salidas continuas. | |||
** Discrete Branches: Si se selecciona más de 1 para cada rama pregunta el tamaño. | |||
* Model: En caso de que ya se tenga un modelo entrenado se puede colocar aquí y cambiar el ''Behavior Type'' a ''Inference Only''. Es para probar el modelo ya entrenado. | |||
== Agregar un Decision Requester == | |||
Será el encargado de disparar las acciones. | |||
En el GameObject de nuestro agente: ''Add Component->ML Agents->Decision Requester''. | |||
= Entrenamiento = | |||
Abrir una consola y entrar al entorno virtual configurado previamente. | |||
Ejecutar: | |||
<pre> | |||
mlagents-learn | |||
</pre> |
Revisión actual del 01:07 12 nov 2021
Introducción
ML Agents es un conjunto de librerías de Unity diseñadas para facilitar el proceso de crear y entrenar Agentes de Aprendizaje Máquina para tus juegos.
El aprendizaje de máquina es una rama de la inteligencia artificial que utiliza algoritmos especializados para crear modelos de predicción, clasificación, etc. En el caso de los videojuegos, se puede usar para crear inteligencias artificiales que jueguen.
Instalación ML Agents Toolkit
Podrás encontrar el Github oficial de la librería en: https://github.com/Unity-Technologies/ml-agents
Es importante destacar que las instrucciones pueden cambiar en nuevas versiones y siempre es mejor revisar el Github oficial.
Crear nuevo proyecto de Unity
- Abrir Unity Hub
- Crear un nuevo proyecto con la versión más reciente de Unity
Crear un entorno virtual de python para el proyecto
1. Abrir una consola
cd path/a/proyecto/
2. Crear el entorno
python -m venv venv
3. Activar el entorno virutal
venv/Scripts/activate
Instalar paquetes Python
Los pasos siguientes se hacen dentro del entorno virtual.
1. Actualizar pip
python -m pip install --upgrade pip
2. Instalar pythorch. Se necesita una versión específica, buscar en la documentación de Unity ML Agents.
pip install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html
3. Instalar paquete 'mlagents'.
pip install mlagents
4. Instalar CUDA Toolkit. Descargar el instalador de la página https://developer.nvidia.com/cuda-downloads. 5. Instalar CuDNN. Ingresar a https://developer.nvidia.com/rdp/cudnn-download para descargarlo. Pedirá crear un usuario. Descargar el .zip y poner el contenido en la carpeta de instalación de CUDA.
Configuración del proyecto de Unity
Importar el paquete
- Abrir el proyecto en Unity
- Descargar el paquete ML Agents:
- Ir a Window->Package Manager .
- En la parte superior cambiar a Packages: Unity Registry.
- Buscar ML Agents en la lista.
- Dar clic en See other versions y seleccionar la versión más nueva.
- Hacer clic en Install.
Crear un agente
Un agente es un script C# que se agrega como componente al GameObject deseado:
using UnityEngine; using Unity.MLAgents; using Unity.MLAgents.Actuators; using Unity.MLAgents.Sensors; public class MoveToGoalAgent : Agent { public override void OnEpisodeBegin() { /*Acciones a realizar cuando comienza un episodio: Generalmente se reinicia la posición del agente para empezar un nuevo ciclo de entrenamiento*/ } public override void CollectObservations(VectorSensor sensor) { /*Se definen las variables a observar. El número de variables se definen desde el editor.*/ //sensor.AddObservation(transform.localPosition); } public override void OnActionReceived(ActionBuffers actions) { /*Básicamente es donde se hace algo con las salidas del sistema pueden ser continuas o discretas. El tipo y cantidad de acciones (salidas) se definen desde el editor./* //float moveX = actions.ContinuousActions[0]; //float moveZ = actions.DiscreteActions[1]; } public override void Heuristic(in ActionBuffers actionsOut) { /*Cuando se pone en modo Heurístico que no entrena, puedes determinar cuales son las acciones (salidas) que deseas. Sirve para probar el sistema manualmente./* //ActionSegment<float> continuousActions = actionsOut.ContinuousActions; //continuousActions[0] = Input.GetAxis("Horizontal"); //continuousActions[1] = Input.GetAxis("Vertical"); } }
Configurar el agente
Al agregar el Script al GameObject correspondiente se muestran diversas variables en Behavior Parameters:
- Behaviour Name: Debe coincidir con la clase que creaste ya que es la forma de identificar el 'Modelo' que has creado y puedes crear muchos objetos con el mismo 'Modelo' y entrenarlo a la vez.
- Vector Observation: Entradas
- Space size: Número de entradas del sistema.
- Stacked vectors: Pareciera como para hacer multiples niveles (no se).
- Actions: Acciones continuas son salidas con valores entre 0 y 1. Acciones discretas son valores enteros. Solo se puede usar una a la vez.
- Continuous actions: Define la cantidad de salidas continuas.
- Discrete Branches: Si se selecciona más de 1 para cada rama pregunta el tamaño.
- Model: En caso de que ya se tenga un modelo entrenado se puede colocar aquí y cambiar el Behavior Type a Inference Only. Es para probar el modelo ya entrenado.
Agregar un Decision Requester
Será el encargado de disparar las acciones.
En el GameObject de nuestro agente: Add Component->ML Agents->Decision Requester.
Entrenamiento
Abrir una consola y entrar al entorno virtual configurado previamente.
Ejecutar:
mlagents-learn