No se han encontrado widgets en la barra lateral

El título de este post… es largo, pero se me queda corto. Si pudiera poner un subtitulo seria: Decisiones a tomar al crear un entorno de aprendizaje para Machine Learnig, especificamente basado en ML Agents.

Pero, aunque los consejos, o digamos el camino a seguir, estan directamente relacionados con los ML Agents de Unity, són tambien extrapolables a un proyecto de Machine Learning en general.

Pero sin enrollarme mas. ¿De que va este post? Muy sencillo, empiezo a crear un segundo curso de ML Agents y voy a intentar explicar las decisiones tomadas al crear el primer proyecto del curso.

¿Recordáis, o conocéis, el juego pong? Da lo mismo la edad que tengáis, seguro que a todos os suena ese simple juego de Atari, que simulaba una mesa de ping pong.

Para muestra una imagen:

Por cierto, si vais muy perdidos con ML Agents, o con Machine Learning, que sepáis que tenéis a vuestra disposición el curso de Introducción a los ML Agents, os servirá mucho para poder entender este post. Si ademas vais realmente mal de tiempo….. miraros tan solo este vídeo:

Creo que puede ser suficiente… siempre y cuando no tengas tiempo de hacer el tutorial de ML Agents al completo.

Bueno…. pues enfrentemos la primera decisión:

¿Discrete o continuous?

Estoy hablando del Space Type del Vector Action…. y para que nos entendamos, de lo que realmente se trata es de decidir cómo queremos organizar el vector de acciones que va a recibir nuestro agente.

Esta, diría Yo, que es la decisión más crucial. No solo afectará a cómo vamos a tener que tratar las acciones, sino que también puede afectar a la capacidad de nuestro juego de ir creciendo, o más bien, al grado de dificultad que vamos a tener que afrontar para realizar las incorporaciones.

Cuando escogemos el Space Type Continuous recibiremos un array del tamaño que le indiquemos de floats. Estos valores entonces nosotros los aplicaremos donde nos plazca…. en el caso que nos toca, mover una pala arriba y abajo por un espacio 2D, por lo que tendríamos que construir una función de movimiento que desplazase por el eje Y a nuestra pala, con el valore recibido en nuestro array.

Un código parecido a este:

public override void OnActionReceived(float[] vectorAction)
{
    //Construimos un vector con el vector recibido.
    Vector2 movimiento = new Vector3(0f, vectorAction[0]);
    //Sumamos el vector construido al rigidbody como fuerza 
    _rb.AddForce(movimiento * _fuerzaMovimieto * Time.deltaTime);
}

Pero ¿qué pasa cuando seleccionamos el espacio Discrete? Pues que recibimos un array conteniendo indices….. ¿ein? bueno, primero le vamos a tener que indicar el tamaño del array, y para cada posición el numero de acciones que queremos. Valeeeee… vamos a verlo con nuestro ejemplo….

Nuestra pala tan solo puede decidir si subir… o bajar, o estarse quieta, ¿no?. Bueno, pues necesitariamos tan solo un factor de decisión, con tres posibles acciones.

Aquí podéis ver la definición del Array de Aciones de tipo Discrete en Unity.

Las acciones serian: subir, bajar y estarse quieto.

public override void OnActionReceived(float[] vectorAction)
{
    float move = 0;
    float lMover = 0
    if (vectorAction[1] == 1)
    {
        lMover = -1;
    }
    else if (vectorAction[1] == 2)
    {
        lMover = 1;
    }

    _rb.MovePosition(transform.position +
        transform.up * lMover * _speed * Time.deltaTime);

}

El código es simple, pero por si acaso:

  • 0: No nos movemos.
  • 1: Bajamos.
  • 2: Subimos.

Como podéis ver la diferencia es mínima, sobretodo en este caso. Aunque yo claramente veo qué la opción correcta es la segunda, es decir Discrete!!!! ¿Por qué? Sencillamente, por que cada vez que pienso en alguna ampliación, me sale una nueva acción. Podríamos permitir a la pala disparar, desaparecer, crecer….. todo esto lo controlaremos mejor con Discrete.

¿Para qué nos puede servir entonces un Continuos?

Es perfecto, para control de personajes complejos…. seguro que habéis visto vídeos de personajes humanoides aprendiendo a caminar…. pues estos. Para todo lo otro….. el 90% de las veces sera mejor un espacio Discrete.

Aunque los que habéis seguido el curso de introducción al machine learning con ml agents ya habéis visto un ejemplo de cada!

……. el post ira creciendo a medida que vaya avanzando el curso intermedio de Ml Agents para Unity (que por ahora ni ha empezado) .

15/09/2020

Desplegando una aplicación Unity para Google Cardboard.
Como se ve una APP para Google Cardboard sin las gafas.

Si en el post anterior creábamos la aplicación para Android y para WebGL, en este nos dedicaremos a crearla para Read more

Trabajando con la Cámara en Unity.
Se aprecia como queda el juego visto desde la cámara.

Las cámaras, exagerando un poco, lo son todo en Unity. Representan como el usuario va a ver el juego. Un Read more

Creación de un sistema de comentarios con LangChain y OpenAI.

Como disclaimer me gustaría indicar que este artículo es tan solo un ejemplo creado para ver como funciona la herramienta Read more

¿Como incorporar un Game Over?

Todo juego tiene un final, y como ya sabes el final de un Juego se llama: Game Over! Es ese Read more

Por Martra

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *