update the the report from the changes in overleaf

This commit is contained in:
Chris Cromer 2022-07-04 11:43:08 -04:00
parent 99db03415c
commit c0a6bf0e9c
Signed by: cromer
GPG Key ID: FA91071797BEEEC2
9 changed files with 83 additions and 23 deletions

1
.gitignore vendored
View File

@ -3,6 +3,7 @@
*.blg
*.log
*.lof
*.lot
*.toc
*.out
*.bcf

BIN
Informe.pdf (Stored with Git LFS)

Binary file not shown.

View File

@ -34,7 +34,7 @@
\renewcommand\thesubsubsubsection{\thesubsubsection.\arabic{subsubsubsection}}
\titleformat{\subsubsubsection}
{\normalfont\normalsize\bfseries}{\thesubsubsubsection}{1em}{}
{\normalfont\normalsize\bfseries}{\thesubsubsubsection.}{1em}{}
\titlespacing*{\subsubsubsection}
{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
@ -63,14 +63,16 @@
}
\usepackage{hypcap}
\usepackage[left=3.3cm,
right=2.3cm,
top=3.5cm,
bottom=3.0cm,
\usepackage[left=3.0cm,
right=3.0cm,
top=2.5cm,
bottom=2.5cm,
letterpaper]{geometry}
\usepackage{ragged2e}
\justifying
\setlength\RaggedRightParindent{36pt}
\RaggedRight
\newcommand{\sectionbreak}{\phantomsection}
@ -104,13 +106,13 @@
\clearpage
\listoffigures
%\newpage
%\phantomsection
%\hypersetup{pageanchor=false}
%\pagenumbering{gobble}
%\thispagestyle{empty}
%\clearpage
%\listoftables
\newpage
\phantomsection
\hypersetup{pageanchor=false}
\pagenumbering{gobble}
\thispagestyle{empty}
\clearpage
\listoftables
\clearpage
\pagenumbering{arabic}

View File

@ -2,5 +2,5 @@
El entorno usado para el desarrollo es:
\begin{itemize}
\item Linux Mint 21 o Ubuntu 22.04
\item Visual Studio Code 1.67
\item Visual Studio Code 1.68
\end{itemize}

View File

@ -1,6 +1,13 @@
\section{Estado del Arte}
La programación del comportamiento de agentes en videojuegos se ha realizado desde diferentes puntos de vista. Por tanto, podemos agrupar los siguientes proyectos de investigación en dos categorías:
\begin{itemize}
\item Basado en el lenguaje de programación lógico Prolog
\item Basado en el lenguaje de programación lógico GOLOG
\end{itemize}
A continuación se describirán los trabajos contenidos en sus correspondientes secciones.
\input{sections/estado_del_arte/prolog}
\input{sections/estado_del_arte/golog}
\input{sections/estado_del_arte/golog}
\input{sections/estado_del_arte/comparacion}

View File

@ -0,0 +1,28 @@
\subsection{Comparación de Trabajos}
\begin{table}[H]
\centering
\begin{tabular}{|r|c|c|c|}
\hline
\multicolumn{1}{|l|}{} & \textbf{Obelisk} & \textbf{Prolog} & \textbf{ReadyLog} \\ \hline
\textbf{Basado en} & Prolog & Prolog & Golog \\ \hline
\textbf{Tipo de Lenguaje} & Compilado & Scripted & Scripted \\ \hline
\textbf{Juego Propio} && No & No \\ \hline
\textbf{Tipo de Juego} & Platformer & FPS & FPS \\ \hline
\textbf{Tipo de I.A.} & Racional & Racional & Racional \\ \hline
\textbf{Uso de \textit{BOT}} & No &&\\ \hline
\textbf{Planificación de Camino} & Posible && Imposible \\ \hline
\textbf{Detección de Colisión} & Posible & Desconocido & Imposible \\ \hline
\textbf{Agente Omnisciente} & No && No \\ \hline
\end{tabular}
\caption{Comparación de Trabajos}
\label{tab:comparar-trabajos}
\end{table}
En el cuadro anterior, se realiza un resumen general de las principales características de proyectos de investigación similares al nuestro, contrastando las diferencias de cada uno de ellos.
Cabe destacar que una de las mayores diferencias presentes en relación a los otros trabajos es el tipo de lenguaje y si es un juego propio del autor.
Lo primero es porque el uso de lenguaje compilado trae consigo una enorme ventaja en aspectos como por ejemplo la velocidad de toma de decisiones complejas en distintos ambientes en que el agente pueda encontrarse.
El desarrollo de un juego propio permite una mejor integración entre la inteligencia artificial y el juego en cuestión, porque nos da mejor control en todos los aspectos que permiten el control del agente.

View File

@ -1,15 +1,23 @@
\subsection{Basado en el lenguaje de programación GOLOG}
\subsubsection{Controlling Unreal Tournament 2004 Bots with the Logic-based Action Language GOLOG}
El proyecto describe el uso de una variante del lenguaje de programación lógico llamado GOLOG para implementar agentes en un videojuego estilo FPS (Disparos en Primera Persona).
El proyecto describe el uso de una variante del lenguaje de programación lógico llamado GOLOG para implementar agentes en un videojuego estilo FPS (Disparos en Primera Persona) y enfrentarlos a los oponentes originales controlados por computador.
El videojuego en cuestión, llamado ''Unreal Tournament 2004'', es de tipo multijugador, donde jugadores humanos compiten para cumplir objetivos. Los oponentes pueden ser tanto humanos o controlados por el computador. \cite{FerreinJacobsLakemeyer2011}
\subsubsubsection{Control de oponentes dirigidos por la computadora}
El manejo de los bots esta hecho en \textit{''ReadyLog''}, un lenguaje basado el lenguaje de programación lógico GOLOG, que permite el razonamiento por acciones.
Originalmente, la toma de decisiones de los bots fue hecha usando un lenguaje orientado a objeto llamado ''UScript'', que es propio del juego y es de tipo script, con lógica basada en un \textit{''state machine''}, constando de nueve estados controlados por el motor del juego.
Originalmente, la toma de decisiones de los bots fue hecha usando un lenguaje orientado a objeto llamado ''UScript'', que es propio del juego y es de tipo script, con lógica basada en \textit{''state machines''}, constando de nueve y controladas por el motor del juego.
Sin embargo, el manejo de los bots se realizó en \textit{''ReadyLog''}, un lenguaje basado el lenguaje de programación lógico GOLOG, que permite el razonamiento por acciones.
Con esta información se agregó una interfaz al motor del juego que le permite transmitir información importante relacionada al mapa, tal como items (munición, vida y armas), ubicación de los jugadores y estilo del ambiente en general.
Por tanto, la información de estos elementos sera transmitida al bot si este es capaz de percibirlos, lo que da posibilidad a cambiar el comportamiento del bot dentro del framework.
Por tanto, la información de estos elementos sera transmitida al bot si este es capaz de percibirlos, lo que da posibilidad a cambiar el comportamiento del bot dentro del framework.
\subsubsubsection{Tipo de I.A.}
Este proyecto de investigación implementa un agente inteligente racional basado en objetivos, usando técnicas de planificación teóricas.
\subsubsubsection{Planificación de camino y Detección de Colisión}
La interfaz entre el juego, junto con el motor y los bots no permite modificar los algoritmos de la planificación de los caminos ni de la detección de colisiones para permitir el cumplimiento de los objetivos.
\subsubsubsection{Agente omnisciente}
El agente solo recibe información si está en su campo de visión, por tanto, no es omnisciente y no tiene información suficiente que le permita obtener una ventaja injusta contra otros agentes o jugadores.

View File

@ -5,4 +5,18 @@ Este proyecto de investigación consiste en la creación e implementación de un
La idea fue inspirada principalmente en la observación de tácticas de equipo presentes en torneos reales de Counter-Strike.
Por otro lado, la construcción de este framework esta basado en un proyecto anterior hecho por los autores para crear scripts para bots.
El pilar de esta investigación se construye en la premisa de diseñar el framework para utilizar un creador de mapas y así personalizar el comportamiento del bot para mapas nuevos, pues con esto se le entregaría al agente conocimiento necesario del ambiente que le rodea para adquirir una ventaja táctica frente a oponentes humanos.
El pilar de esta investigación se construye en la premisa de diseñar el framework para utilizar un creador de mapas y así personalizar el comportamiento del bot para mapas nuevos, pues con esto se le entregaría al agente conocimiento necesario del ambiente que le rodea para adquirir una ventaja táctica frente a oponentes humanos.
\subsubsubsection{Desarrollo del razonamiento lógico del agente}
Cada bot contiene dos pilas, una de acciones y otra de tareas. Estas siempre ejecutan el bloque que esta en el tope de la pila. Para que un bot sea capaz de cumplir una tarea de manera exitosa, hará ciertas acciones asociadas a esa tarea con tal de cumplirla. Algunas condiciones causarán que se agreguen o quiten acciones dentro de esta pila. Por tanto, cuando se complete una tarea o una acción, se borrará el bloque y luego el bot intentará ejecutar la acción o tarea siguiente en la pila.
Uno de los mecanismos de razonamiento utilizado es uno llamado ''Razonamiento de reflejos'', el cual sucede en cada actualización del estado actual del juego, prestando gran apoyo cuando ocurren cambios repentinos en un nivel, como en el ambiente o cuando el bot este siendo atacado. En consecuencia, este mecanismo posee una característica poderosa para agregar nuevas tareas o limpiar la pila de tareas, adaptándose a cada situación.
\subsubsubsection{Tipo de I.A.}
El agente usado en este proyecto es de tipo racional basado en objetivos, con base en un árbol de decisión con instrucciones condicionales.
\subsubsubsection{Planificación de camino}
En los trabajos previos hechos por el autor, se implementó una base de datos que contiene puntos de navegación, con el fin de calcular y planificar el camino que debe seguir al moverse el bot. También se usan los puntos de navegación para tomar decisiones racionales de naturaleza táctica.
\subsubsubsection{Agente omnisciente}
El bot adquiere total conocimiento del mapa, lo que le permite tener una ventaja táctica y así aumentar sus posibilidades para ganar la partida.

View File

@ -22,7 +22,7 @@ Tiene especial importancia para el proyecto ya que permite implementar otro leng
\label{fig:godot_gdnative_comparison}
\end{figure}
En el caso de generación de datos voxel, hay un aumento de 8846.43\% en su rendimiento comparando GDNative con GDScript y un aumento de 651.07\% comparando GDNative con C\#.
En el caso de generación de datos voxel, hay un aumento de 8,846.43\% en su rendimiento comparando GDNative con GDScript y un aumento de 651.07\% comparando GDNative con C\#.
\begin{figure}[H]
\centering