\section{Evaluación del Desempeño del Agente}
La evaluación del agente tiene como propósito estimar el correcto comportamiento de la inteligencia artificial dentro del videojuego, como por ejemplo la cantidad de monedas recolectadas, veces que murió, etc.
\subsection{Sistema}

\subsubsection{Monitor}
Desarrollamos un monitor hecho en el lenguaje GDScript, que es parte del motor de videojuegos Godot y que graba todo la sesión del agente y/o jugadores. La grabación del  partido es basado en el ciclo de update del motor Godot, es decir que si la pantalla del jugador tiene 60Hz como su taza de refresco, se grabará 60 cuadros de información cada segundo. Al terminar un partido toda esta información se envía a un servidor donde se procesa y guarda para futuro análisis. Cabe mencionar que se envía todo los datos en formato JSON a un servidor de REST.

\subsubsection{Servidor}
El servidor fue programado en el lenguaje Go. La razón es por su alto nivel de rendimiento y bajo nivel de uso de recursos, tales como CPU y RAM. Esto nos permite recibir muchos más datos simultáneamente de varios partidos al mismo tiempo sin complicaciones. También el servidor provee una API de tipo REST con varios endpoints que permiten almacenar las partidas del juego y consultar la información guardada en ello para futuro estudio.

\subsubsubsection{Estructura de Base de Datos}
Todo la información de las partidas jugadas se almacenan en un base de datos MySQL.

\begin{figure}[H]
    \centering
    \includegraphics[width=1.4\textwidth, height=1.4\textheight, keepaspectratio, angle=270]{figures/backend_db_structure.png}
    \caption{Estructura del Base de Datos del Backend}
    \label{fig:dbstructure-backend}
\end{figure}

\begin{table}[H]
\centering
\begin{tabular}{|l|p{0.66\linewidth}|}
\hline
\multicolumn{1}{|c|}{\textbf{Nombre de Tabla}} & \multicolumn{1}{c|}{\textbf{Propósito}} \\ \hline
frame & La tabla frame se utiliza para almacenar la cantidad de puntos, monedas, tiempo que pasó y posiciones de los objetos en el mundo cada cuadro que dibuja el juego. \\ \hline
game & La tabla game contiene información sobre el partido y el equipo que corre tal partido, incluyendo sistema operativo dimensiones de la pantalla y datos similares. \\ \hline
godot\_version & La tabla godot\_version se usa para almacenar las versiones de Godot que han corrido un partido del juego. \\ \hline
level & La tabla level es una tabla de parametros que contiene los nombres de los niveles que se puede jugar. \\ \hline
object & La tabla object se utiliza para almacenar el estado, posición y velocidad de un objeto en un cuadro especifico del partido. \\ \hline
object\_name & La tabla object\_name es una tabla de parámetros que contiene los nombres de todos los objetos que existen en un partido del juego. \\ \hline
object\_state & La tabla object\_state tiene todos los nombres de los estados de un objeto. \\ \hline
os & La tabla os es una tabla de parámetros que contiene los posibles sistemas operativos que pueden jugar el juego. \\ \hline
player & La tabla player es una tabla opcional donde se puede almacenar los datos de la persona que está jugando un partido para poder hacer un análisis sin ser anónima. \\ \hline
user & La tabla user contiene los usuarios y contraseñas de los personas que tienen permiso hacer consultas al API para obtener los datos y usarlos. \\ \hline
\end{tabular}
\caption{Estructura del Base de Datos del Backend}
\label{tab:db-structure-backend}
\end{table}

\subsection{Análisis}
Muchos tipos de análisis son posibles con los datos que recolectamos. Por ejemplo en algunas partidas podemos calcular el promedio de veces que ganó el agente, cuantas monedas obtuvo, cuanto demoró realizar todas las acciones, o en tomar una decisión, etc.