final changes before restructure

This commit is contained in:
Chris Cromer 2023-01-14 15:33:16 -03:00
parent 8a4a399710
commit ecc73413c9
Signed by: cromer
GPG Key ID: FA91071797BEEEC2
16 changed files with 133 additions and 45 deletions

BIN
Informe.pdf (Stored with Git LFS)

Binary file not shown.

View File

@ -3,6 +3,7 @@
12pt]{article} 12pt]{article}
\newcommand{\titlename}{Diseño e Implementación de un Lenguaje de Programación de Tipo Declarativo Inspirado en Prolog para Control de Agentes en Videojuegos} \newcommand{\titlename}{Diseño e Implementación de un Lenguaje de Programación de Tipo Declarativo Inspirado en Prolog para Control de Agentes en Videojuegos}
\newcommand{\Titlename}{\expandafter\MakeUppercase\expandafter{\titlename}}
\usepackage[T1]{fontenc} \usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} \usepackage[utf8]{inputenc}
@ -28,6 +29,8 @@
\usepackage{titlesec} \usepackage{titlesec}
\usepackage{titling}
\usepackage{tocloft} \usepackage{tocloft}
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} \renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
@ -86,10 +89,25 @@
\thispagestyle{empty} \thispagestyle{empty}
\clearpage \clearpage
\pretitle{\begin{center}}
\posttitle{\\[40pt]\par\end{center}}
\preauthor{\begin{center} \large \uppercase{Proyecto de Título Presentado por} \MakeUppercase}
\postauthor{\uppercase{ de la Carrera Ingeniería Civil en Informática}\\ \large \uppercase{Dirigido por Clemente Rubio-Manzano}\\[50pt] \end{center}}
\date{2022}
\title{ \title{
\includegraphics[width=0.5\textwidth, height=0.5\textheight, keepaspectratio]{figures/ubb.png}\\ \includegraphics[width=0.2\textwidth, height=0.2\textheight, keepaspectratio]{figures/ubb.png}\\
\titlename \normalsize
Universiad del Bío Bío, Chile\\
Facultad de Ciencias Empresariales\\
Departamento de Sistemas de Información
\\[32pt]
\LARGE
\Titlename
} }
\author{Christopher Cromer y Martín Araneda Acuña} \author{Christopher Cromer y Martín Araneda Acuña}
\maketitle \maketitle
@ -122,7 +140,7 @@
\include{sections/agradecimientos.tex} \include{sections/agradecimientos.tex}
\include{sections/composicion} \include{sections/resumen.tex}
\include{sections/introduccion} \include{sections/introduccion}
@ -138,8 +156,6 @@
\include{sections/evaluacion_desempeño.tex} \include{sections/evaluacion_desempeño.tex}
\include{sections/trabajo_futuro.tex}
\include{sections/conclusion.tex} \include{sections/conclusion.tex}
\include{sections/referencias} \include{sections/referencias}

BIN
figures/normal-coin.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
figures/normal-time.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
figures/time-series.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
figures/ubb.png (Stored with Git LFS)

Binary file not shown.

View File

@ -1,15 +1,18 @@
\section*{Composición del Informe}
\addcontentsline{toc}{section}{\protect{}Composición del Informe}
El presente informe se encuentra dividido en cuatro capítulos. A continuación se describe brevemente el contenido de cada uno de ellos. El presente informe se encuentra dividido en cuatro capítulos. A continuación se describe brevemente el contenido de cada uno de ellos.
\begin{enumerate} \begin{enumerate}
\item \textbf{Introducción:} Se presentan los conceptos básicos más importantes para este proyecto, como son el Desarrollo de Videojuegos y la Inteligencia Artificial. También se explican los motivos principales y específicos para el desarrollo de la investigación.
Por último, se detalla la metodología de trabajo a aplicar.
\item \textbf{Marco Teórico:} Explicación de las herramientas a utilizar, análisis de rendimiento de software similares y descripción de conceptos abarcados en el proyecto. \item \textbf{Marco Teórico:} Explicación de las herramientas a utilizar, análisis de rendimiento de software similares y descripción de conceptos abarcados en el proyecto.
\item \textbf{Estado del Arte:} Se describen las principales ideas de trabajos de investigación similares, contrastándolo con este trabajo. Se han dividido estos en dos categorías: basado en el lenguaje de programación Prolog y GOLOG, con descripciones acerca de metodología e implementación de agentes en videojuegos \item \textbf{Estado del Arte:} Se describen las principales ideas de trabajos de investigación similares, contrastándolo con este trabajo. Se han dividido estos en dos categorías: basado en el lenguaje de programación Prolog y GOLOG, con descripciones acerca de metodología e implementación de agentes en videojuegos.
\item \textbf{Descripción del Ambiente del Software:} Se explica el software a utilizar, incluyendo la versión y el entorno de desarrollo. \item \textbf{Diseño del lenguaje:} Se define la estructura del lenguaje de programación \textit{Obelisk}, incluyendo su sintaxis y semasiología respectiva.
\item \textbf{Implementación del Lenguaje:} Se detalla el desarrollo del aspecto funcional del lenguaje, tales como el funcionamiento del compilador, base de conocimiento y librerías.
\item \textbf{Incorporación del Lenguaje en el Motor de Videojuegos:} Descripción del proceso para utilizar el lenguaje \textit{Obelisk} con software externos.
\item \textbf{Evaluación del Desempeño del Agente:} Explicación de los elementos desarrollados para medir el rendimiento del agente en el videojuego \textit{Alai}
\item \textbf{Conclusión:} Epílogo del proyecto de título. También se habla del trabajo futuro que nuestra tesis tendrá.
\end{enumerate} \end{enumerate}
Además, al final del informe se adjuntan las referencias con los artículos utilizados en el proceso de investigación. Además, al final del informe se adjuntan las referencias con los artículos utilizados en el proceso de investigación.

View File

@ -2,3 +2,13 @@
El trabajo realizado y la experiencia que tuvimos con nuestra tesis nos ha enriquecido como futuros profesionales en más de un modo, especialmente en el desarrollo de inteligencia artificial, el cual es una subrama de la programación que ha estado en constante evolución desde ya mas de 50 años. El trabajo realizado y la experiencia que tuvimos con nuestra tesis nos ha enriquecido como futuros profesionales en más de un modo, especialmente en el desarrollo de inteligencia artificial, el cual es una subrama de la programación que ha estado en constante evolución desde ya mas de 50 años.
Cabe destacar de igual forma el arduo camino de aprendizaje que recorrimos para desarrollar este proyecto, conociendo y experimentando con herramientas nuevas, desarrollo de soluciones ante problemas que no conocíamos, entre otros. Todo esto nos dejo valores y maestría necesaria para en un futuro, continuar con esta idea. Cabe destacar de igual forma el arduo camino de aprendizaje que recorrimos para desarrollar este proyecto, conociendo y experimentando con herramientas nuevas, desarrollo de soluciones ante problemas que no conocíamos, entre otros. Todo esto nos dejo valores y maestría necesaria para en un futuro, continuar con esta idea.
\subsection{Trabajo Futuro}
Dentro de este aspecto, tenemos varios elementos que proponemos desarrollar en un futuro, con la intención de complementar nuestro lenguaje de programación o su funcionalidad. Estos ya poseen una base y solo requieren su finalización.
\begin{itemize}
\item Perfeccionar nuestro lenguaje de programación para que sea \textit{Touring-complete}.
\item Análisis del comportamiento del agente dentro de cualquier software, utilizando los datos obtenidos del videojuego.
\item Pasar la lógica de consultas proveniente de la base de conocimientos y así utilizar la GPU, con librerías tales como CUDA de Nvidia.
\item Implementar lógica difusa en los hechos, reglas y acciones.
\end{itemize}

View File

@ -39,4 +39,45 @@ user & La tabla user contiene los usuarios y contraseñas de los personas que ti
\end{table} \end{table}
\subsection{Análisis} \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. Muchos tipos de análisis son posibles con los datos que recolectamos. Para facilitar el análisis utilizamos el lenguaje de programación R para calcular todas las estadísticas de los partidos. El lenguaje R se genera gráficos basados en los datos y formulas que utilizamos para ayudar entender el comportamiento del agente/jugador.
\subsubsection{Distribución Normal}
La distribución normal nos permite analizar el comportamiento de varios partidos del juego y ver la probabilidades que un evento ocurriría.
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth, height=0.6\textheight, keepaspectratio]{figures/normal-coin.png}
\caption{Distribución Normal de Densidad de Probabilidad vs. Moneda}
\label{fig:normal-coin}
\end{figure}
En la figura anterior podemos ver en el eje X la cantidad de monedas obtenidos por el agente y/o jugador. En el eje Y tenemos la densidad de probabilidad. La densidad de probabilidad se puede interpretar como la probabilidad relativa en que un valor de un variable al azar seria igual a la muestra correspondiente.
La linea verde es el valor medio representado por la formula $ \bar{X} = \frac{\Sigma_{i=1}^{n} X_{i}}{n} $ donde $ \bar{X} $ es el valor medio, $ n $ es la cantidad de partidos y $ \Sigma_{i=1}^{n} X_{i} $ es la sumatorio de los monedas en cada partido. Las lineas rojas se llaman la desviación estándar. Para obtener la desviación estándar el primer paso es obtener la varianza que es representado por la formula $ \sigma^2 = \frac{\Sigma_{i=1}^{n} (X_{i})^2}{n} $ donde $ \sigma^2 $ es la varianza. Finalmente obtenemos la desviación estándar con la formula $ \sigma = \sqrt{\sigma^2} $ donde $ \sigma $ es la desviación estándar.
De 9 partidos del juego, tuvimos un valor medio de 4 monedas representado en la linea verde. Al calcular la desviación estándar obtuvimos el valor 3, por lo tanto la primera linea roja se coloca en 1 moneda porque 4 menos 3 es 1. Y en el caso de la segunda linea roja 4 mas 3 es 7.
Si la densidad de probabilidad en un punto X es muy grande, eso significa que un valor de un variable es probablemente cerca el punto X. En el caso de la figura \ref{fig:normal-coin}, se puede interpretar eso en que es muy probable que el valor de un variable sería entre 1 a 7 acercando a 4.
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth, height=0.6\textheight, keepaspectratio]{figures/normal-time.png}
\caption{Distribución Normal de Densidad de Probabilidad vs. Tiempo}
\label{fig:normal-time}
\end{figure}
En la figura anterior analizamos 28 partidos con un valor medio de 22 segundos y un desviación estándar de 14 segundos. Podemos concluir que en un valor de un variable es muy probable ser entre 8 segundos y 36 segundos un partido, acercando a 22 segundos.
\subsubsection{Serie de Tiempo}
Utilizamos el serie de tiempo para analizar el comportamiento del agente durante un partido. Eso nos permite entender mejor sus decisiones y cuanto demoró en lograr los objetivos.
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth, height=0.6\textheight, keepaspectratio]{figures/time-series.png}
\caption{Serie de Tiempo de Monedas en un Partido}
\label{fig:serie-tiempo}
\end{figure}
En la figura \ref{fig:serie-tiempo} analizamos un partido de un jugador humano que demoró 58 segundos y recolectó 7 monedas. En el eje X tenemos el tiempo medido en segundos, y en el eje Y tenemos la cantidad de monedas que tiene el agente y/o jugador en cualquier momento.
La mejor forma de utilizar un gráfico de serie tiempo en el análisis del agente y/o jugador es compararlo con otros partidos para ver que tan cerca el gráfico es con los demás. Idealmente el agente bien desarrollado debe demorar menos tiempo en completar sus objetivos y estar similar a un partido de jugador humano por cantidad de monedas obtenidas y en el tiempo que demoró en llegar a la meta final.

View File

@ -1,10 +1,10 @@
\section{Incorporación del Lenguaje en el Motor de Videojuegos} \section{Incorporación del Lenguaje en el Motor de Videojuegos}
Para incorporar el lenguaje en un software externo, como por ejemplo nuestro videojuego, se utiliza la librería de Obelisk, que permite hacer consultas a la base de conocimientos y tomar acciones basado en ello. Para incorporar el lenguaje en un software externo, como por ejemplo nuestro videojuego \textit{Alai}, se utiliza la librería de Obelisk, la cual permite hacer consultas a la base de conocimientos y tomar acciones respectivamente.
\subsection{Toma de decisiones} \subsection{Toma de decisiones}
En cualquier software que utilice Obelisk, al ser este utilizado, se hacen consultas a la base de conocimientos, siendo la ultima compilada con anterioridad. Tomando en cuenta la utilización de un software \textit{Third-Party}, cuando uno de estos utilice el idioma \textit{Obelisk}, se hacen consultas a la base de conocimientos, la cual maneja la lógica proveniente de las palabras claves implementadas. Es importante mencionar que la base de conocimientos es compilada antes de ejecutar cualquier consulta a esta.
Después de esto, son dos los posibles resultados que pueden tener las consultas, siendo estos la acción que debe tomar el agente o un valor numérico que representa su resultado y que se puede interpretarse en el software externo. Después de esto, son dos los posibles resultados que pueden tener las consultas, los cuales son las acciones que debe tomar el agente o un valor numérico que represente su resultado y que se puede interpretarse en el software externo.
\subsection{Puesta en marcha} \subsection{Puesta en marcha}
Basado en las decisiones elegidas en relación a la consulta de la base de conocimiento, es la responsabilidad del software poner la acción en marcha. Esto se puede llevar a cabo utilizando varias técnicas de inteligencia artificial tales como A*, maquina de estado, planificación de acciones orientados a metas, etc. Basado en las decisiones elegidas en relación a la consulta de la base de conocimiento, es la responsabilidad del software poner la acción en marcha. Esto se puede llevar a cabo utilizando varias técnicas de inteligencia artificial tales como A*, máquina de estado, planificación de acciones orientados a metas, etc.

View File

@ -8,7 +8,8 @@ En el campo del desarrollo de videojuegos, la I.A. ha tenido mucha presencia. Po
Dado lo anterior, tendrá un gran beneficio implementar una I.A. empleando un lenguaje declarativo ya que no indicamos el cómo se debe computar, solo indicamos el qué se quiere computar. Esto último es importante ya que conseguimos que la tarea de programación se aproxime a la lógica humana y el programador pueda implementar el comportamiento de los agentes de una forma más intuitiva y empleando reglas simples. En este sentido, uno de los lenguajes declarativos más importantes ha sido Prolog demostrando sus buenas propiedades en este ámbito. Por lo tanto, vamos a crear un lenguaje declarativo inspirado en Prolog que se pueda utilizar para programar el comportamiento de los personajes de un videojuego que tienen, al menos, que realizar las siguientes acciones: i) superar obstáculos, con la opción de saltar con velocidad; ii) recoger items que se agregan a la puntuación final; iii) evitar enemigos. Dado lo anterior, tendrá un gran beneficio implementar una I.A. empleando un lenguaje declarativo ya que no indicamos el cómo se debe computar, solo indicamos el qué se quiere computar. Esto último es importante ya que conseguimos que la tarea de programación se aproxime a la lógica humana y el programador pueda implementar el comportamiento de los agentes de una forma más intuitiva y empleando reglas simples. En este sentido, uno de los lenguajes declarativos más importantes ha sido Prolog demostrando sus buenas propiedades en este ámbito. Por lo tanto, vamos a crear un lenguaje declarativo inspirado en Prolog que se pueda utilizar para programar el comportamiento de los personajes de un videojuego que tienen, al menos, que realizar las siguientes acciones: i) superar obstáculos, con la opción de saltar con velocidad; ii) recoger items que se agregan a la puntuación final; iii) evitar enemigos.
Los objetivos del proyecto de investigación son los siguientes:
\input{sections/composicion.tex}
\input{sections/introduccion/objetivos} \input{sections/introduccion/objetivos}

View File

@ -1,4 +1,4 @@
\subsubsection{Objetivos Específicos} \subsubsection*{Objetivos Específicos}
\begin{enumerate} \begin{enumerate}
\item Se revisó la bibliografía sobre Prolog, el motor Godot y programación de videojuegos. \item Se revisó la bibliografía sobre Prolog, el motor Godot y programación de videojuegos.

View File

@ -1,3 +1,3 @@
\subsubsection{Objetivo General} \subsubsection*{Objetivo General}
Hemos desarrollado un lenguaje de programación de tipo declarativo inspirado en Prolog que permite modelar el comportamiento de los agentes de un videojuego empleando reglas lógicas. Hemos desarrollado un lenguaje de programación de tipo declarativo inspirado en Prolog que permite modelar el comportamiento de los agentes de un videojuego empleando reglas lógicas.

View File

@ -1,13 +1,13 @@
\phantomsection \phantomsection
\printbibliography[heading=bibintoc,title={Referencias}] \printbibliography[heading=bibintoc,title={Referencias}]
\phantomsection %\phantomsection
\printbibliography[heading=subbibintoc,keyword={prolog},title={Prolog}] %\printbibliography[heading=subbibintoc,keyword={prolog},title={Prolog}]
\phantomsection %\phantomsection
\printbibliography[heading=subbibintoc,keyword={ai},title={Inteligencia Artificial}] %\printbibliography[heading=subbibintoc,keyword={ai},title={Inteligencia Artificial}]
\phantomsection %\phantomsection
\printbibliography[heading=subbibintoc,keyword={llvm},title={LLVM}] %\printbibliography[heading=subbibintoc,keyword={llvm},title={LLVM}]
\phantomsection %\phantomsection
\printbibliography[heading=subbibintoc,keyword={godot},title={Godot}] %\printbibliography[heading=subbibintoc,keyword={godot},title={Godot}]
\phantomsection %\phantomsection
\printbibliography[heading=subbibintoc,keyword={videojuegos},title={Videojuegos}] %\printbibliography[heading=subbibintoc,keyword={videojuegos},title={Videojuegos}]

17
sections/resumen.tex Normal file
View File

@ -0,0 +1,17 @@
\section*{Resumen}
\addcontentsline{toc}{section}{\protect{}Resumen}
Unas de las áreas nuevas que existen dentro de las muchas disciplinas científicas presentes en la era moderna es la Inteligencia Artificial (I.A).
La I.A. es básicamente la aptitud que puede tener una máquina para tomar decisiones, de forma independiente, en base a información proveniente del exterior.
Un área de bastante interés es la de videojuegos. El uso de esta tecnología ha permitido darle un lado más autónomo y humando a estos, así como también la posibilidad de experimentar en bastantes aspectos, dado que los videojuegos contienen muchos subgéneros y por tanto, las elecciones son incontables.
En base a esto, hemos decidido implementar una inteligencia artificial con la creación de un lenguaje de programación de tipo declarativo, que sólo indica qué procesos hacer, sin ir en detalles. Todo esto es con la finalidad de que sea más afín a la lógica del ser humano y que también contribuya a que la implementación del agente sea mas instintivo.
Para la creación del idioma, este ha sido escrito en C++ y también se utilizó LLVM, una tecnología que nos permitió generar y compilar nuestro lenguaje a uno máquina.
Por otro lado, la parte lógica del lenguaje fue construida utilizando una base de conocimientos hecha en SQLite, que almacena todas los elementos contenidos en las palabras claves implementadas, tales como acciones, hechos y reglas.
Finalmente se hizo la implementación del agente en un videojuego de estilo plataformas 2D, creado en el motor de videojuegos Godot, siendo el ultimo el más adecuado debido a su facilidad de manejo y gran compatibilidad con nuestra linea de trabajo.
\\[32pt]
\noindent\textbf{Palabras Claves:} Inteligencia Artificial, Lenguaje Lógico, Base de Conocimiento, Palabras Clave, Compilación a Lenguaje Máquina

View File

@ -1,9 +0,0 @@
\section{Trabajo Futuro}
Dentro de este aspecto, tenemos varios elementos que proponemos desarrollar en un futuro, con la intención de complementar nuestro lenguaje de programación o su funcionalidad. Estos ya poseen una base y solo requieren su finalización.
\begin{itemize}
\item Perfeccionar nuestro lenguaje de programación para que sea \textit{Touring-complete}.
\item Análisis del comportamiento del agente dentro de cualquier software, utilizando los datos obtenidos del videojuego.
\item Pasar la lógica de consultas proveniente de la base de conocimientos y así utilizar la GPU, con librerías tales como CUDA de Nvidia.
\item Implementar lógica difusa en los hechos, reglas y acciones.
\end{itemize}