**SVRAI** Síntesis, Verificación y Razonamiento sobre Agentes Inteligentes Máster Universitario en Lógica, Computación e Inteligencia Artificial Dpto. Ciencias de la Computación e Inteligencia Artificial (Universidad de Sevilla) Curso 2022-2023 # Generalidades  | | | |-----------------------------|----------------------------------------------------------| |**Profesor** | [Fernando Sancho Caparrini](http://www.cs.us.es/~fsancho)| |**Correo electrónico** | fsancho@us.es | |**Aula** | H0.10 | |**Horario** | Lunes 16:30-18:30 | |**Despacho** | H1.48 | |**Calendario** | del 10/10/2022 al 30/1/2023 | # Introducción En el panorama más clásico de la Inteligencia Artificial se suele hacer uso de técnicas que pueden producir soluciones rápidamente a cambio de hacer una serie de fuertes suposiciones sobre el problema, todas ellas relacionadas con la certidumbre o no de los elementos del problema. Algunas de estas suposiciones pueden resumirse en: 1. Las acciones son **deterministas**. 2. Los entornos sólo cambian como resultado de una acción. 3. Hay un conocimiento perfecto de los eventos (**omnisciencia**). 4. Suele haber un actor único (**omnipotencia**). 5. Funcionan bajo las reglas de un **modelo conocido**. El **objetivo** de la asignatura en este curso se ha orientado a abordar algunas técnicas de resolución de IA que pretenden resolver problemas precisamente cuando estas suposiciones no se pueden confirmar, cuando existe **incertidumbre** en uno o varios de los elementos que intervienen en el modelado del problema, algo muy común cuando estamos construyendo agentes inteligentes que deben tomar decisiones bajo contextos complejos. Por ello, el contenido del curso abordará, de forma genérica, temas relacionados con el modelado y análisis de algoritmos para la toma de decisiones en agentes bajo incertidumbre, lo que nos llevará a presentar el marco formal de **Procesos de Decisión Markov**, base conceptual de gran parte de los modelados presentes en algunas áreas del aprendizaje automático, fundamentalmente del **Aprendizaje por Refuerzo**. Dependiendo de la velocidad que podamos tomar en la ejecución del curso, también podremos presentar algunas trazas de **Teoría de Juegos**, que nos aproxima al modelado de situaciones en las que hay múltiples actores (con intenciones adversarias o cooperativas) y queramos planificar las acciones de cualquiera de ellos teniendo en cuenta también la evolución que podrían tomar los demás elementos del entorno (sean agentes intencionales o simples elementos, reactivos o no). Se dará por supuesto en el alumno del curso un mínimo conocimiento de las aproximaciones clásicas porque, aunque algunas de ellas no se usen explícitamente en el curso, sí aportan una visión de conjunto que da valor y sentido a las aproximaciones alternativas que veremos aquí, ya que examinaremos métodos que nacieron por la incapacidad de los métodos tradicionales para resolver problemas en los que los supuestos anteriores no se pueden asegurar. En este sentido, se espera que el alumno haya cursado un curso inicial de Inteligencia Artificial en el que haya estudiado diversos sistemas de representación de problemas, como **Lógica Formal**, **Espacios de Estados** y **Problemas de Satisfacción de Restricciones**, así como los algoritmos más clásicos de **Búsqueda**, **Planificación** y **Optimización**. Asimismo, se espera que el alumno tenga un conocimiento básico de **Espacios de Probabilidad** para poder modelar el concepto de incertidumbre, y conocimientos de **programación** que le permitan leer y escribir algoritmos a nivel medio (no necesariamente en el lenguaje elegido para este curso). # Contenido El contenido bajo el apartado de **Fundamentos** no se explicará en el curso (o se hará de forma muy ligera), y se ofrece aquí como complemento para aquellos alumnos que necesiten de un sistema de nivelación o repaso de los conceptos básicos. !!!Tip:Contenido 0. Fundamentos: 1. [Probabilidad](Probabilidad.md.html). 2. [Lógica Clásica (Proposicional y de Primer Orden)](Logica.md.html) - [🖺](./slides/Logica.pdf). 3. Inteligencia Artificial: * [Introducción a la IA](IIA.md.html). * [Problemas de Satisfacción de Restricciones](CSP.md.html). - [🖺](./slides/CSP_SVRAI.md.html) * [Espacios de Estados](EspaciosEstados.md.html). * [Planificación](Planificacion.md.html). 4. [Agentes Inteligentes y Sistemas Multiagente](agentes.md.html). 1. [Introducción](Intro.md.html). - [🖺](./slides/IntroSD.md.html) 2. [Decisiones de un Paso](DecisionesSimples.md.html). - [🖺](./slides/DecisionesSimplesSD.md.html) 3. [Decisiones Secuenciales: MDP](MDP.md.html). - [🖺](./slides/MDPSD.md.html) 1. [Búsqueda Clásica como MDPs](Busquedas.md.html). - [🖺](./slides/BusquedasSD.md.html) 2. [Algoritmos para Decisiones Secuenciales](AlgoritmosSecuenciales.md.html). - [🖺](./slides/AlgoritmosSecuencialesSD.md.html) 3. [Métodos Aproximados](ValueApprox.md.html). - [🖺](./slides/ValueApproxSD.md.html) 4. [Planificación Online](PlanificacionOnline.md.html). - [🖺](./slides/PlanificacionOnlineSD.md.html) 5. [Trabajando con Políticas](Politicas.md.html). - [🖺](./slides/PoliticasSD.md.html) 4. [Incertidumbre en el modelo: Aprendizaje por Refuerzo](RL.md.html). 5. Sistemas Multiagente: Teoría de Juegos. 1. [Juegos No Cooperativos](TeoriaJuegosNoCoop.md.html). - [🖺](./slides/TeoriaJuegosNoCoopSD.md.html) 2. [Juegos Cooperativos](TeoriaJuegosCoop.md.html). - [🖺](./slides/TeoriaJuegosCoopSD.md.html) [**Ejercicios**](Ejercicios.md.html) ## Temas para presentación 1. Día 23 de enero: * RL y Formación de Grupos de Agentes. (Manuel Mateos Gutiérrez) * Aprendizaje por imitación. (Francisco Miguel Pérez Canales) * [Gymnasium](https://gymnasium.farama.org/). (Alberto Pérez Blasco). 2. Día 30 de enero: * MARL (MultiAgent Reinforcement Learning). (Miguel Gil Castilla) * Paquete [POMDP Julia](https://juliapomdp.github.io/POMDPs.jl/). (Laura Díaz Sánchez) * Deep RL. (Alvaro Campillos Delgado) 3. Día 9 de febrero: * A3C: Asynchronous Advantage Actor Critic. (Claudia Rodríguez) * RL y Robótica. (David Tejero Ruiz) * RL para Biorretrosíntesis. (Carlota Ortíz García) * RL y Sistemas de Recomendación. (Kenny Jesús Flores Huamán) 4. RL y Juegos. (Asmae Azirar) 3. Paquete [Reinforcement Learning Julia](https://juliareinforcementlearning.org/). 4. [RL Coach](https://intellabs.github.io/coach/). 4. ML Agents (RL en Unity). 5. [Más librerías/paquetes...](https://neptune.ai/blog/the-best-tools-for-reinforcement-learning-in-python) ## Sistema de implementación !!!note: Sobre Julia Aunque el curso es fundamentalmente teórico, veremos la implementación de algunos de los algoritmos. Por ello, se ha optado por un lenguaje de alto nivel, de orientación científica y que tuviera una estructura muy clara y cercana a la formalización matemática. Se ha elegido Julia como lenguaje de programación por defecto para este fin. [**Julia**](https://julialang.org/) es un lenguaje de programación **homoicónico** (la representación primaria de los programas escritos en Julia es también una estructura de datos en un tipo primitivo del lenguaje), **multiplataforma**, **multiparadigma**, de **tipado dinámico**, de **alto nivel** y alto desempeño para la **computación genérica, técnica y científica**, con una sintaxis similar a la de otros entornos de computación similares. Dispone de un compilador avanzado (**JIT**, Just in Time), mecanismos para la ejecución en paralelo y distribuida, además de una extensa biblioteca de funciones matemáticas. La biblioteca, desarrollada fundamentalmente en Julia, también contiene código desarrollado en C o Fortran, para el álgebra lineal, generación de números aleatorios, procesamiento de señales, aprendizaje automático, ciencia de datos y procesamiento de cadenas. Adicionalmente, la comunidad de desarrolladores de Julia contribuye con la creación y distribución de paquetes externos a través del [gestor de paquetes](https://juliapackages.com/) integrado de Julia a un paso acelerado. Además, hay muchos entornos de programación (como [VSCode](https://code.visualstudio.com/), [Atom](https://atom.io/), etc.) que proporcionan extensiones específicas para facilitar el trabajo con Julia, así como sistemas de notebooks que permiten usar Julia como lenguaje de desarrollo ([Jupyter](https://jupyter.org/) y [Pluto](https://www.juliapackages.com/p/pluto)) o entornos interactivos como [IJulia](https://juliapackages.com/p/ijulia). !!!Tip: Recursos de Julia * [Manual brevísimo](Julia.md.html). * [Colección de implementaciones: Beautiful Algorithms](https://github.com/mossr/BeautifulAlgorithms.jl). * [Instalar Julia con VSCode](https://www.juliabloggers.com/installing-julia-1-8-and-vscode/). * [Instalar paquetes en Julia](https://datatofish.com/install-package-julia/). * [Entendiendo los paquetes y entornos de Julia](https://jkrumbiegel.com/pages/2022-08-26-pkg-introduction/index.html) # Evaluación La asignatura consta de dos apartados evaluables de manera independiente y que pueden complementarse: 1. Realizando/completando implementaciones de los métodos y algoritmos estudiados en los temas del curso. Con este objetivo se ofrece el link de problemas básicos [**Ejercicios**](Ejercicios.md.html) que se muestra junto a la Tabla de Contenidos del curso, y que ofrece un pequeño número de problemas relativamente habituales que permiten una implementación como MDP sobre los que realizar pruebas de los algoritmos estudiados en el curso. No es necesario hacerlos todos de forma completa, aunque sí puede ser interesante al menos intentar hacer la parte de modelado, porque presentan características individuales distintas. Una vez realizados, la ejecución de diversos algoritmos sobre ellos dependería únicamente de la implementación de los algoritmos. 2. Entregando un **trabajo** acordado con el profesor de la asignatura. La temática del trabajo puede ser variada: profundizar en algún artículo de investigación que esté relacionado con el contenido de la asignatura; desarrollar de forma más completa algún problema en el que implementar las aproximaciones vistas (sería como una versión individual y con más profundidad que el apartado anterior); y preparar un tutorial sobre algún paquete/herramienta que facilite el modelado y ejecución del tipo de aproximaciones que hemos visto en el curso. Por supuesto, se puede proponer cualquier otra temática que no esté aquí considerada. # Bibliografía * R.S. Sutton, A.G. Barto. [**Reinforcement Learning: An Introduction**](http://incompleteideas.net/book/the-book-2nd.html), 2nd Edition, MIT Press, Cambridge, 2018. * T. Miller. [**Reinforcement Learning**](https://gibberblot.github.io/rl-notes/intro.html) (*COMP90054: AI Planning for Autonomy*), University of Melbourne, 2021). * M.J. Kochenderfer, T.A. Wheeler, K.H. Wray. [**Algorithms for Decision Making**](https://algorithmsbook.com/), MIT Press, 2022. * R. Moss. [**Decision Making Under Uncertainty with POMDPs.jl**](https://juliaacademy.com/p/decision-making-under-uncertainty-with-pomdps-jl), JuliaAcademy, 2022.