%---------------------------------------------------------------------
%
%                          Capítulo 5 Estado del arte
%
%---------------------------------------------------------------------

\chapter{Estado del Arte}%TFM_JOSE_LUIS_Samper

\begin{FraseCelebre}
\begin{Frase}
Grandes descubrimientos y mejoras implican invariablemente la cooperación de muchas mentes.
\end{Frase}
\begin{Fuente}
Alexander Graham Bell.
\end{Fuente}
\end{FraseCelebre}

\begin{resumen}
...
\end{resumen}


%-------------------------------------------------------------------
\section{Robótica de enjambre}
\label{cap5:sec:robotica-de-enjambre}
%-------------------------------------------------------------------

Cuando se habla de explorar un ambiente desconocido (Zonas de desastres naturales, misiones militares, exploraci\'on planetaria, etc), una forma de explorarlo es mediante el uso de un enjambre de \RAE, estos generalmente se encuentran con varios obst\'aculos de distinta \'indole, pero uno de ellos considerado importante es el mantener comunicaci\'on confiable con la estaci\'on base, esto es debido a la falta de repetidores en el area inexplorada y limitado al alcance de la señal de los mismos robots, la estaci\'on base o por la geograf\'ia que impiden la propagaci\'on de la señal.
Para solucionar este problema se propone utilizar una \'unica cadena de robots intermediarios, llamados Routers, m\'oviles y aut\'onomos que tendr\'an \IA para poder auto-posicionarse y mantener una calidad de señal aceptable utilizando RSII (RSSI: Indicador de fuerza de Señal Recibida) como par\'ametro, entre la estaci\'on base y el Robot Explorador.
%-------------------------------------------------------------------
\section{Inteligencia Artificial}
\label{cap5:sec:inteligencia-artificial}
%-------------------------------------------------------------------
Desde hace un poco más de medio siglo nació una ciencia denominada "\IA", la cual busca simular el proceso cognitivo que realiza la naturaleza, persona o ser vivo para la resolución de problemas o dicho de una manera más formal, " Conjunto de técnicas que se aplican a la computadora con el objeto de desarrollar su capacidad para realizar funciones de aprendizaje y auto-corrección". Sus objetivos principales son:
\begin{itemize}
\item Realizar investigaciones sobre el comportamiento humano para desarrollar herramientas de apoyo que ayuden a mejorar las actividades del hombre.
\item Desarrollar y aplicar técnicas para representar un gran volumen de conocimientos, para resolver problemas complejos de una manera rápida y confiable.
\item Lograr "crear pensamiento" y poder desarrollar sistemas diferentes a los convencionales que no toman decisiones propias.
\end{itemize} 
A través de los años esta ciencias se fue dividiendo en varias ramas, tales como:
\begin{itemize}
\item Algoritmos genéticos.
\item Redes Neuronales.
\item \SVM
\item lógica Difusa.
\item Machine Learning o Aprendizaje Automático.
\item DeepLearning.
\end{itemize}
%-------------------------------------------------------------------
\subsection{Machine Learning}%http://cleverdata.io/que-es-machine-learning-big-data/ y mi informe
%-------------------------------------------------------------------
Machine Learning o Aprendizaje automático es una disciplina científica del ámbito de la \IA que crea sistemas que aprenden autonomamente. Todos los seres vivos exhiben algún tipo de comportamiento, en el sentido que realizan alguna acción como respuesta a un estímulo percibido por el ambiente en que se desenvuelven. Algunos de ellos, además, modifican su comportamiento a lo largo del tiempo, de forma que ante estimulas equivalente se comportan de forma distinta con el paso del tiempo, es por esto que decimos que estos seres vivos han aprendido un comportamiento adecuado para interactuar con su entorno en su beneficio. Esto se puede ejemplificar en la enseñanza de un perro para hacer algún truco que nosotros deseamos.
Es por esto que se generó la necesidad dedicar un estudio sobre este proceso y se dividió en tres aéreas:
\begin{itemize}
\item Aprendizaje Supervisado: Técnica para deducir una función a partir de datos de entrenamiento catalogados en correctos e incorrectos.
\item Aprendizaje No Supervisado: Modelo ajustado a las observaciones, es decir no se tiene conocimiento a priori de los datos de entrenamiento.
\item Aprendizaje por Refuerzo: Algoritmo de aprendizaje que recibe algún tipo de valoración acerca de la idoneidad de la respuesta dada. Es similar al aprendizaje supervisado, en lo referente a recibir información acerca de lo que es apropiado, pero la gran diferencia es su enfrentamiento con las respuestas erróneas, cuando el aprendiz responde de forma inadecuada el aprendizaje supervisado le dice exactamente qué hacer en ese caso, por otro lado, el aprendizaje por refuerzo solo le informa acerca de que el comportamiento ha sido inapropiado y cuanto error se ha cometido.
\end{itemize}
\medskip
Para simular el aprendizaje de sistemas biológicos reales necesitamos hacer algunas suposiciones que simplifique el comportamiento de nuestros agentes (aprendices). Esto nos permitirá tener un sistema flexible para proyectar diversas situaciones con el mismo sistema, y podremos extraer conclusiones más generales acerca de las propiedades de los algoritmos que implementen estos sistemas de aprendizaje. En general, y como primera aproximación, supondremos que los aprendices siguen en su decisión un Proceso de Decisión de Markov, es decir:
\begin{itemize} 
\item El agente percibe un conjunto finito, S, de estados distintos en su entorno, y dispone de un conjunto finito, A, de acciones para interactuar con él.
\item El tiempo avanza de forma discreta, y en cada instante de tiempo, t, el agente percibe un estado concreto, $s_{(t)}$ , selecciona una acción posible, $a_{(t)}$ , y la ejecuta, obteniendo un
nuevo estado, $s_{t+1} = a_t (s_t)$. 
\item El entorno responde a la acción del agente por medio de una recompensa, o castigo, $r(s_t , a_t )$ el cual se representara por un número, de forma que cuando mayor es, mayor es el beneficio.
\item Tanto la recompensa como el estado siguiente obtenido no tienen por qué ser conocidos a priori por el agente y dependen únicamente del estado actual y de la acción tomada. Es decir, antes de aprender, el agente no sabe qué pasará cuando toma una acción determinada en un estado particular. Precisamente, un buen aprendizaje es aquel que permite adelantarse al agente en las consecuencias de las acciones tomadas, reconociendo las acciones que sobre estados concretos le llevan a conseguir con más eficacia y mayores recompensas, sus objetivos.
\end{itemize}
%-------------------------------------------------------------------
\subsection{DeepLearning} %http://www.deeplearningbook.org/contents/intro.html
%-------------------------------------------------------------------
%Traducir lo siguiente:

%Inventors have long dreamed of creating machines that think. This desire dates back to at least the time of ancient Greece. The mythical figures Pygmalion, Daedalus, and Hephaestus may all be interpreted as legendary inventors, and Galatea, Talos, and Pandora may all be regarded as artificial life (Ovid and Martin, 2004; Sparkes, 1996; Tandy, 1997). When programmable computers were first conceived, people wondered whether such machines might become intelligent, over a hundred years before one was built (Lovelace, 1842). Today, artificial intelligence (AI) is a thriving field with many practical applications and active research topics. We look to intelligent software to automate routine labor, understand speech or images, make diagnoses in medicine and support basic scientific research. 
Los inventores durante mucho tiempo han soñado con crear máquinas que piensen. Este deseo remonta desde el tiempo de Grecia antigua. Las figuras míticas Pigmalión, Dédalo, y Hephaestus pueden ser interpretados todos como inventores legendarios, y Galatea, Talos, y Pandora pueden ser consideradas todas como vida artificial (Ovidio y Martin, 2004; Chispas, 1996; Tandy, 1997). Cuando los computadores programables fueron concebidos, la gente se preguntó si tales máquinas podrían hacerse inteligentes, más de cien años antes de que fuera construido (Lovelace, 1842). Hoy, la \IA es un campo próspero con muchos usos prácticos y asuntos de investigación activos. Contemplamos el software inteligente para automatizar el trabajo rutinario, entender el discurso o imágenes, hacer diagnósticos en la medicina y apoyar la investigación básica científica. 
%In the early days of artificial intelligence, the field rapidly tackled and solved problems that are intellectually dificult for human beings but relatively straight- forward for computers? problems that can be described by a list of formal, mathematical rules. The true challenge to artificial intelligence proved to be solving the tasks that are easy for people to perform but hard for people to describe formally? problems that we solve intuitively, that feel automatic, like recognizing spoken words or faces in images This solution is to allow computers to learn from experience and understand the world in terms of a hierarchy of concepts, with each concept defined through its relation to simpler concepts. 
En la actualidad la \IA , a abordado y solucionado los problemas que son intelectualmente dificiles para seres humanos, pero relativamente simples - para ocmputadores. Sin embargo, los problemas que pueden ser descritos por una lista formal, de reglas matem\'aticas. El desafío verdadero para la \IA demostró ser solucionar las tareas que son fáciles de solucionar para la gente, pero dificiles de describir formalmente. Los problemas que solucionamos por intuición, que se siente automático, como el reconocer palabras habladas o caras en imágenes. La solución de permitir a ordenadores aprender de la experiencia y entender el mundo en términos de una jerarquía de conceptos, con cada concepto definido a trav\'es de su relación a conceptos más simples.
%By gathering knowledge from experience, this approach avoids the need for human operators to formally specify all the knowledge that the computer needs. The hierarchy of concepts enables the computer to learn complicated concepts by building them out of simpler ones. If we draw a graph showing how these concepts are built on top of each other, the graph is deep, with many layers. For this reason, we call this approach to AI deep learning.
Por el conocimiento creciente de la experiencia, este acercamiento evita la necesidad de operadores humanos para formalmente especificar todo el conocimiento que el ordenador necesita. La jerarquía de conceptos permite al ordenador aprender conceptos complicados construyéndolos más simples. Si dibujamos un gráfico que muestra como estos conceptos son construidos sobre la cima el uno del otro, el gráfico es profundo, con muchas capas. Por esta razón, llamamos este acercamiento Deep Learning.

%insertar imagen de deep learning

Algunas de sus caracteristicas intrínsecas son: %topico 9 deep learning 2015 von zuben
\begin{itemize}
\item Aprendizaje de múltiples niveles de caractarísticas.
\item Puede ser usado con muchos paradigmas de aprendizaje:
\begin{itemize}
\item supervisado
\item no supervisado
\item semi-supervisado
\item transductivo
\item autodidacta
\item multi-tarea
\item transferencia
\end{itemize}
\item valores conservativos para una aplicación real:
\begin{itemize}
\item muchos niveles ( mayo o igual a 5)
\item Muchos parametros (mayor o igual a 10 Mil)
\end{itemize}
\item alta performance de computacion.
\item computacion distribuida.
\item algunos modelos son demasiados extensos para ser manejado por un solo sistema, pero lo más interesante es que el código final se puede ejecutar en un solo computador.
\end{itemize}
%imagen de alguna red deep learning sacada del libro
%-------------------------------------------------------------------
\section{Simulación y Software}
\label{cap5:sec:simulacion-y-software}
%-------------------------------------------------------------------
...
%-------------------------------------------------------------------
\subsection{Sistemas Operativos}
%-------------------------------------------------------------------
Un sistema operativo es un programa que controla otras partes del oredenador tanto hardware como software y permite además al usuario acceder a las facilidades que ofrece el sistema. Es por esto que para poder desarrollar una aplicación computacional de robótica se requiere algunos requisitos especificos para lograr un buen resultado, debido a esto que la elección del sistema operativo a utilizar tanto para programar como para ejecutar es de suma importancia.
%-------------------------------------------------------------------
\subsubsection{Windows}%http://conceptodefinicion.de/windows/
%-------------------------------------------------------------------
Es un sistema operativo mundialmente reconocido y utilizado por usuarios y profesionales de las distintas areas, sin embargo a nivel de desarrollador tiene algunas limitancias en relación a los permisos a los cuales se puede acceder. Por otra parte tiene una gran variedad de softwares que se pueden utilizar y el mercado cibernético está echo para cubrir cualquier necesidad a cambio de dinero.
Windows es un sistema operativo desarrollado por la empresa de software Microsoft Corporation, el cual se encuentra dotado de una interfaz gráfica de usuario basada en el prototipo de ventanas (su nombre en inglés). Una ventana representa una tarea ejecutada o en ejecución, cada una puede contener su propio menú u otros controles, y el usuario puede ampliarla o reducirla mediante un dispositivo señalador como el ratón o mouse.
%-------------------------------------------------------------------
\subsubsection{Linux}%https://bioinf.comav.upv.es/courses/linux/unix/introduccion.html
%-------------------------------------------------------------------
Linux es una familia de sistemas operativos de tipo Unix que utilizan el kernel Linux. Es multiplataforma desde teléfonos móviles hasta supercomputadores. Se compone de un gran número de piezas que son desarrolladas de forma independiente por miles de programadores y proyectos. Normalmente estas piezas son integradas por un distribuidor y Linux es suministrado como una distribución Linux. Su licencia GPL \footnote{General Public License} y actualmente hay mas de  distribuciones Linux de las cuales aproximadamente la mitad tienen un desarrollo activo. Estas distribuciones están adaptadas para usuarios o tareas específicas. Algunas de estas distribuciones están desarrolladas o apoyadas por empresas como Fedora \footnote{Red Hat} , openSUSE \footnote{Novel} y Ubuntu \footnote{Canonical}, mientras que otras son mantenidas por la propia comunidad de usuarios \footnote{Debian}.
Algunas de las distribuciones más conocidas son:
\begin{itemize}
\item Ubuntu
\item Kubuntu
\item Linux mint
\item Debian
\end{itemize}
%-------------------------------------------------------------------
\subsubsection{ROS}
%-------------------------------------------------------------------
Este middleware (buscar sinonimo español), cuyas siglas derivan de la nomenclatura anglosajona "Robot Operating System", tiene como propósito aportar un marco de trabajo común sobre el que articular una plataforma para robótica. De analizar sus principales características, se extrae que ROS puede aportar un gran número de ventajas:
\begin{itemize}
\item abstracción del hardware.
\item gestión de las comunicaciones de forma transparente al usuario.
\item gran número de herramientas(simuladores, Visualizadores de datos, depuradores,etc).
\item librerías para robótica(matemáticas, geométricas, integración con visión por comutador,etc).
\end{itemize}
Por último, señalar que existe una versión Industrial que se comenzo a trabajar desde el 2013.
%-------------------------------------------------------------------
\subsection{Matlab}%http://nereida.deioc.ull.es/~pcgull/ihiu01/cdrom/matlab/contenido/node2.html  y ftp://ftp.unicauca.edu.co/Facultades/FIET/DEIC/Materias/Identificacion/matlab_seminar/docs/Matlab6xConatec.pdf
%-------------------------------------------------------------------
Matlab es un software privado y mundialmente conocido por la comunidad investigadora en la diferentes áreas existentes. Matlab es un lenguajes de alto desempeño diseñado para realizar cálculos técnicos. Integra el cálculo, la visualización y la programación en un ambiente fácil de utilizar donde los problemas y las soluciones se expresan en una notación matemática.
\medskip
Es un sistema interactivo cuyo elemento básico de datos es una matriz que no requiere dimensionamiento. Esto permite resolver muchos problemas numéricos en una fracción del tiempo que llevaría hacerlo en lenguajes como C, BASIC o FORTRAN. Este software ha evolucionado en los últimos años a partir de la colaboración de muchos usuarios. En entornos universitarios se ha convertido en la herramienta de enseñanza estándar para cursos de introducción en álgebra lineal aplicada, así como cursos avanzados en otras áreas. En la industria, MATLAB se utiliza para investigación y para resolver problemas prácticos de ingeniería y matemáticas, con un gran énfasis en aplicaciones de control y procesamiento de señales. MATLAB también proporciona una serie de soluciones específicas denominadas TOOLBOXES. Estas son muy importantes para la mayoría de los usuarios y son conjuntos de funciones que extienden el entorno para resolver clases particulares de problemas como:
\begin{itemize}
\item Procesamiento de señales.
\item Diseño de sistemas de control.
\item Simulación de sistemas dinámicos.
\item Identificación de sistemas.
\item Redes Neuronales.
\end{itemize}
Probablemente la característica más importante de MATLAB es su capacidad de crecimiento. Esto permite convertir al usuario en un autor contribuyente, creando sus propias aplicaciones. En resumen, las prestaciones más importantes de son:
\begin{itemize}
\item Escritura del programa en leguaje matemático.
\item Implementación de matrices como elemento básico del lenguaje, permitiendo una gran reducción de código.
\item Implementación de aritmética compleja.
\item Un gran contenido de órdenes específicas, agupadas en TOOLBOXES.
\item Posibilidad de ampliar y adaptar el lenguaje, mediantes ficheros de script y funciones".m".
\end{itemize}

%-------------------------------------------------------------------
\subsection{Gazebo, V-rep, Blender, Inventor, Meshlab}
%-------------------------------------------------------------------
\begin{itemize}
\item \verb|Gazebo|: Software de simulación Open-Source, que ofrece la posibilidad de simular con precisión y eficiencia una grna cantidad de robots en entornos complejos. Incluye una funcionalidad en el motor de física que permite simular, entre otros, entornos acuáticos en los que los robots son influidos por corrientes y demás propiedades fluiodo-mecánicas. Una característica relevante de este simulador es que tiene la capacidad de otorgar al desarrollador añadir plugins de físicas que afecten a una parte focalizada del entorno simulado, como puede ser un robot modificiando su comportamiento ante ciertos eventos ( a modo de ejemplo, podría recrearse un mundo con gravedad en el que un robot no esté afectado por ella).
\item \verb|V-rep|: Software con licencia gratuita y una comercial este simulador de robots tiene un entorno de desarrollo integrado basado en una arquitetura de control distribuido : cada objeto/modelo puede controlarse individualmente a través de un script incrustado, un complemento, un nodo ROS o Bluezero, un cliente API remoto o un sistema personalizado. Esto hace que sea muy versátil e ideal para aplicaciones multi-*robot. Los controladores se puden escribir en C/C++, Python, Java, Lua, Matlab u Octave.
\item \verb|Blender|: Software Open-Source destinado, en primera instancia, al modelado 3D de objetos. Incorpora la posibilidad de dar texturas, definir materiales, iluminar la escena, crear simulaciones. Destaca por sus capacidades para la creación de mallas y animaciones.
\medskip
Más aún, despunta al permitir que la comunidad de usuarios amplíe sus funcionalidades y características mediante scripts y plugins, desarrolladores principalmente en Python. En segundo término, Blender maneja una gran cantidad de formatos de entrada y salida, entre los que se encuentra el conocido DAE o COLLADA con el que se definen las geometrías de Gazebo. Por último, mencionar que permite generar, simplificar, combinar y modificar Point Clouds de forma relativamente sencilla.
\item \verb|Inventor|: Software privado que proporciona un conjunto de herramientas profesionales para diseño mecánico, documentación y simulación de productos en 3D. Al igual que toda la familia de productos AutoDesk dispone de licencias educacionales fáciles de adquirir por estudiantes y entidades dedicadas a la enseñanza.
\item \verb|Meshlab|:Programa avanzado para trabajar con mallas tridimensionales, ampliamente conocido en el campo técnico del desarrollo 3D y manejo de datos. Esta herramienta destaca por su capacidad multiplataforma y su carácter Open Source, amparado bajo la licencia GNU (General Public License). 
En contraste con Blender, Meshlab entrega una gran cantidad de información estructural acerca de la malla cargada: número de vértices y aristas, conjunto de componentes normales a superficies, vértices... Además, posee una gran cantidad de herramientas y filtros con los que simplificar las mallas, reconstruir superficies, modificar el número de puntos que las conforman, sin alterar su estructura, y un largo etcétera.
\end{itemize}
%-------------------------------------------------------------------
\section{Justificaciones}
%-------------------------------------------------------------------
En esta sección se dará a conocer la explicaciones técnicas por las cuales se escojeran los Sistemas Operativos y Softwares utilizados en este trabajo de título.
%-------------------------------------------------------------------
\subsection{Ubuntu}
%-------------------------------------------------------------------
Como sistema Operativo principal de programación y ejecución del código se utilizará la distribución Ubuntu(basado en Debian) debido a la compatibilidad que ofrece para los softwares de código abierto, ya que, es una de las más utilizadas y se actualiza constantemente. En resumen a través de dos motivos:
\begin{itemize}
\item Comodidad para la programación e integración de proyectos de investigación aplicada.
\item ROS se articula y construye en torno al núcleo de Ubuntu.
\end{itemize}
%imagen ubuntu LTS 16.04
-------------------------------------------------------------------
\subsection{ROS}
%------------------------------------------------------------------
Debido a que la aplicación es especificamente para Robots y para facilitar el manejo en el mismo agente se utilizará ROS a traves del lenguaje de programacion c++ debido a su exactitud a bajo nivel en comparación con python que es de alto nivel. Cabe mencionar que gran parte de la Comunidad Investigadora acepta este SO. Además es escalable a la industria con su version ROS-Industrial\footnote{https://rosindustrial.org/}.
%-------------------------------------------------------------------
\subsection{Gazebo}
%-------------------------------------------------------------------
Se utilizará este software libre debido a su nulo gasto de inversión( en comparación a los otros mencionados) y la compatibilidad excelente con ROS y Ubuntu, ademas tiene las siguientes cualidades:
\begin{itemize}
\item Todas sus funcionalidades y características se centran y dedican únicamente al sector de la robótica permitiendo desde la sintonización de controladores hasta la detección de colisiones.
\item Es multiplataforma, pudiendo ser utilizados por otros investigadores que prefieren utilizar otros sistemas operativos.
\item Dispone de un motor de fícias renovado con el que simular incluso comportamientos fluido-mecánicos. En este aspeto, es sencillo encontrar simulaciones con drones(insertar referencia, submarinos(insertar referencia) e incluso estrategias de despegue de aviones(insertar referencia).
\item Contempla la comunicación con un amplio espectro de interfaces como:
\begin{itemize}
\item \verb|Matlab|
\item \verb|Octave|
\item \verb|C++|
\item \verb|C#|
\item Programas de realimentación de fuerzas para telemanipulación como Open Haptrix (Insertar referencia).
\end{itemize}
Tanto es así, que ofrece la posibilidad de crear la simulación como si de un servidor se tratase y conectarlo al IoT("internet of Things")(insertar referencia) mediante esquemas basados en Javascript, como NodeJs y WebGL.(Insertar referencias)
\end{itemize}
%-------------------------------------------------------------------
\subsection{Machine Learning}
%-------------------------------------------------------------------
Como la aplicación para la cual se utilizará \IA  es de caracter de exploración, es decir, no se conoce el lugar, se debe utilizar un algoritmo que este en constante aprendizaje y esa es la definición de Machine Learning, y especificamente se utilizará un código probado por un estudiante de la Universidad del Bio Bio(insertar referencia), por su simplesa y efectividad demostrada en Matlab, que se describirá a continuación.
%-------------------------------------------------------------------
\subsubsection{Q-Learning}
%-------------------------------------------------------------------
Básicamente con este algoritmo el agente aprende a asignar valores de bondad a los pares (estado, acción).
Para continuar con el entendimiento de este algoritmo se necesita conocer las siguientes definiciones:
\begin{itemize}
\item Recompensa a largo plazo: recompensa que esperamos acumular a la larga si en cada estado realizamos la mejor acción posible.
\item Recompensa directa: recompensa que se genera en una acción inmediata.
\item Recompensa mixta: es una combinación de la recompensa a largo plazo con la recompensa directa, y se calcula de forma voraz (greedy).
\item Experiencia: incluye un estado, la acción realizada, la recompensa recibida, y como novedad, el estado siguiente tras realizar esta acción.
\item Velocidad de aprendizaje (learning rate): es un valor entre 0 y 1 que indica cuanto podemos aprender de cada experiencia:
\begin{itemize}
\item 0: no aprendo de la experiencia nueva.
\item 1: olvidamos todo lo que sabíamos hasta ahora y nos fiamos de la nueva experiencia completamente.
\end{itemize}
\item Factor de Descuento (Discount Factor): es un valor entre 0 y 1 que indica cuán importante es el largo plazo:
\begin{itemize}
\item 0: indica los refuerzos inmediatos son importantes.
\item 1: indica que los refuerzos inmediatos no son importantes, solo importa el largo plazo.
\end{itemize}
\item Política: Objetivo de aprendizaje esperado.
\item Problema MDP: cumple con los siguientes atributos:
\begin{itemize}
\item S: conjunto de estados.
\item A: conjunto de acciones.
\item Estado inicial $S_0$.
\item modelo de transiciones: $\sigma*(s,a,s')$.
\item Función de recompensa. R(s).
\end{itemize}
\end{itemize}
\medskip
Comencemos por lo que es verdad en el mundo. Si un agente está en un determinado estado y toma una acción concreta, estamos interesados en la recompensa inmediata que recibe, pero también en las recompensas futuras que se obtendrán por pasar a otros estados donde se pueden tomar otras acciones, que seguirán una política particular. En el algoritmo Q learning, el valor Q de una par (estado, acción) contiene la suma de todas estas posibles recompensas. El problema es que esta suma podría ser infinita en caso de que no haya un estado terminal que alcanzar, además, es posible que no queramos dar el mismo peso a las recompensas futuras, en cuyo caso se hace uso de un refuerzo acumulado con factor de descuento. El agente al comienzo no tiene información, por lo que su primer objetivo es aproximar lo mejor posible esta asignación de valores Q, como estos dependen de recompensas futuras y actuales, se proporciona un método capaz de calcular el valor final a partir de valores inmediatos y locales. Para ello:
\begin{itemize}
\item Si una acción en un estado determinado causa un resultado no deseado, hay que aprender a no aplicar esa acción en ese estado. Si una acción en un estado determinado causa un resultado sí deseado hay que aprender a aplicar esa acción en ese estado.
\item Si todas las acciones que se pueden tomar desde un estado determinado dan resultado negativo, es conveniente aprender a evitar ese estado. Es decir, no tomar acciones desde otros estados que nos lleven a él.
\item Si cualquier acción en un deeterminado estado da un resultado positivo, se debe aprender que es conveniente llegar a él. Este hecho es lo que permite propagar la recompensa de par(estado, acción) a los pares de estados adyacentes.
\end{itemize}
Esto se modela matemáticamente de la siguiente manera:
$$Q(s_t , a_t ) = r(s_t , a_t ) + \gamma max_{a_{t+1}} Q(s_t+1 , a_t+1 )$$
Esto es, el valor de Q óptimo para un par (estado, acción) es la suma de la recompensa recibida cuando se aplica la acción junto al valor descontado del mejor valor Q que se puede conseguir desde el estado alcanzado al aplicar esa acción. Para aproximar este cálculo, al principio del prendizaje los valores Q se establecen a un valor fijo (puede ser aleatorio), a continuación el agente va tomando pares de (estado, acción) y anota cuánta recompensa recibe en ellos, entonces, actualiza el valor almacenado del valor Q de cada par considerando como ciertas las anotaciones tomadas de los otros pares (algunas de las cuales habrán sido aproximadas en pasos anteriores).\\
Una variante de la ecuación anterior podría ser la siguiente:
$$Q'(s_t ,a_t )=( 1 - v)Q(s_t ,a_t ) + v*[r( s_t , a_t ) + \gamma max_{a_{t+1}} Q( s_t+1 , a_t+1 )]$$

Esta segunda ecuación intenta que la actualización de la función sea más gradual, no
permitiendo cambios en una determinada dirección de forma tan brusca, para ello, introduce
un factor de aprendizaje, ?, que controla la variación de Q. El nuevo valor de Q es la
combinación ponderada del antiguo valor de Q y la nueva información que el agente debe
creer.
Un aspecto importante del aprendizaje por refuerzo es la restricción de que solo se actualizan los valores Q de acciones que se ejecutan sobre estados por los que se pasa, no se aprende nada de acciones que no se intentan. Pero puede ser interesante que, sobre todo al principio del aprendizaje, el agente intente una gama más amplia de acciones, para hacerse una idea de lo que funciona y lo que no. Más concretamente, en cualquier momento el agente puede elegir:
\begin{itemize}
\item seleccionar una acción con el valor Q más alto para ese estado (explotación)
\item seleccionar una acción al azar (exploración). Vamos a formalizar este proceso de decisión en términos de probabilidades.
\end{itemize}
La posibilidad más simple es elegir completamente al azar entre una opción y otra, pero usaremos una opción un poco más inteligente y asignaremos una probabilidad a cada acción en función del valor Q asociado, de forma que cuanto mayor sea el valor Q de esa acción, mayor será la probabilidad de ser elegida. De esta forma, incluso las acciones con valores Q más bajos tendrán opciones de ser elegidas. También tiene sentido hacer que la probabilidad de exploración dependa del tiempo que el agente lleva aprendiendo, T , de tal forma que al principio se favorece la exploración porque lo que el agente haya aprendido todvía no es confiable y porque todavía quedan muchas opciones que no han sido consideradas, y más tarde se potencia la explotación, porque la experiencia del agente hace que su conocimiento sea más confiable. Así, la ecuación de la probabilidad de seleccionar la acción at sería:
$$P(a_t) = \frac{e^{E*T*Q(s_t , a_t)}}{\sum_{v_{t}} e^{E*T*Q( s_t, v_t)}}$$
Donde E es una constante de explotación, y vt representa todas las posibles acciones que se pueden tomaºr desde st. Gracias a la función exponencial, a medida que T(temperatura) aumenta, las acciones que tengan un valor Q más alto se hacen mucho mas grac1ºçndes, por lo que tendrán mas probabilidades de serán elegidas.
En caso de que el espacio de estados sea una cantidad finita y manipulable, no es necesario realizar toda la segunda parte de selección de acciones para equilibrar la exploración con la explotación, basta realizar un recorrido completo de todos los posibles pares e ir actualizando el v lor de Q. La convergencia del método asegura que obtendremos el resultado deseado.
%-------------------------------------------------------------------
\subsubsection{Algoritmos de programación}
%-------------------------------------------------------------------
En definitiva el algoritmo general de aprendizaje por refuerzo es:\\
\textbf{for all} $(s,a)$ \textbf{do}\\
$Q(s,a) \leftarrow inicializar$ //$Q(a,b)$ es la estimaci\'on inicial de $Q*(s,a)$\\
\textbf{end for}\\
$s \leftarrow Observar estado entorno$\\
$a \leftarrow seleccionar acción$  //pol\'itica de selecci\'on de acciones\\
\textbf{while} $s !=$ estado terminal \textbf{do}\\
$ejecutar a$\\
$r \leftarrow reward$\\
$s' \leftarrow nuevo estado$\\
$a' \leftarrow seleccionar siguiente acción$ //varias formas de actualizar $Q(s,a)$\\
$Q(s,a) \leftarrow  actualizar$
$s \leftarrow s'$
$a \leftarrow a'$
\textbf{end while}
\\
\\
El Algoritmo Q-learning para entornos deterministas es:\\
\textbf{for all} $(s,a)$ \textbf{do}\\
$Q(s,a) \leftarrow inicializar$ //$Q(a,b)$ es la estimaci\'on inicial de $Q*(s,a)$\\
\textbf{end for}\\
$s \leftarrow Observar estado entorno$\\
$a \leftarrow seleccionar acción$  //pol\'itica de selecci\'on de acciones\\
\textbf{while} $s !=$ estado terminal \textbf{do}\\
ejecutar a\\
$r \leftarrow reward$\\
$s' \leftarrow nuevo estado$\\
$a' \leftarrow seleccionar siguiente acción$\\
$Q(s,a) \leftarrow r + y * max_b Q(s',b)$\\
$s \leftarrow s'$\\
$a \leftarrow a'$\\
\textbf{end while}
\\
\\
El Algoritmo Q-learning para entornos No deterministas es:\\
\textbf{for all} $(s,a)$ \textbf{do}\\
$Q(s,a) \leftarrow inicializar$ //$Q(s,a)$ es la estimación inicial de $Q*(s,a)$\\
\textbf{end for}\\
$s \leftarrow Observar estado entorno$\\
$a \leftarrow seleccionar acción$\\ // politica de selección de acciones\\
\textbf{while} $s !=$ estado terminal \textbf{do}\\
ejecutar a\\
$r \leftarrow reward$\\
$s' \leftarrow nuevo estado$\\
$a' \leftarrow seleccionar siguiente acción$\\
$Q(s,a) \leftarrow Q(s,a) + alpha * [r+ y * max b Q(s',b) - Q(s,a)]$\\
$s \leftarrow s'$ // $0 < alpha < 1:$ learning step\\
$a \leftarrow a'$
\textbf{end while}
\\
\\
y en general esta demostrado en el esquema de la figura xx.
%imagen action reward state

%-------------------------------------------------------------------
\section*{\ProximoCapitulo}
%-------------------------------------------------------------------
\TocProximoCapitulo

...

% Variable local para emacs, para  que encuentre el fichero maestro de
% compilación y funcionen mejor algunas teclas rápidas de AucTeX
%%%
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../Tesis.tex"
%%% End:
