Unity:Manuales:Configuracion ML Agents

De WikiGarcia

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.

  1. Instalar Unity 2019.4 o posterior
  2. Instalar Python 3.6.1 o posterior

Crear nuevo proyecto de Unity

  1. Abrir Unity Hub
  2. 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

  1. Abrir el proyecto en Unity
  2. Descargar el paquete ML Agents:
    1. Ir a Window->Package Manager .
    2. En la parte superior cambiar a Packages: Unity Registry.
    3. Buscar ML Agents en la lista.
    4. Dar clic en See other versions y seleccionar la versión más nueva.
    5. 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