**SVRAI $2025$-$26$** Síntesis, Verificación y Razonamiento de Agentes Inteligentes Máster Universitario en Lógica, Computación e Inteligencia Artificial (MULCIA), $2025/2026$ Dpto. Ciencias de la Computación e Inteligencia Artificial - Universidad de Sevilla
!!!att:Dos Cursos en Uno En este curso aprovecharemos la presencia de **Nataliya Gulayeva**, experta en Algoritmos Evolutivos, para hacer una división de temas en dos bloques que se impartirán de forma consecutiva: 1. **Agentes Inteligentes**: Profesor: Fernando Sancho Caparrini | Duración: $20$ h | Fechas: $7$ oct - $6$ nov. 2. **[Algoritmos Evolutivos](https://uses0-my.sharepoint.com/:f:/g/personal/nhulaieva_us_es/Elzr59xUs3NJv5rVQa4HrbQBz0gaxi_aiXn6mjj_-C7aCw?e=HLUjgR)**: Profesora: Nataliya Gulayeva | Duración: $10$ h | Fechas: $11$ nov - $25$ nov. En este sitio web puedes encontrar el material correspondiente al primer bloque.
!!!def: ① Agentes y Sistemas Multiagente 1. [Agentes Inteligentes](.\Temas\MAS_Agentes\) 1. [Modelado MAS/ABM con NetLogo](.\Temas\MAS_NetLogo) 1. [Modelado MAS/ABM y ML](.\Temas\MAS_modelado) 1. [Satisfacción de Restricciones Distribuida](.\Temas\DAI_CSP\) !!!def: ② Deliberación 1. [Agentes Deliberativos](.\Temas\AD_Agentes\) 1. [Deliberación con modelos deterministas](.\Temas\AD_Deterministas\) 1. [Métodos de Refinamiento de Acciones](.\Temas\AD_Refinamientos\) ⛔ 1. [Deliberación con modelos temporales](.\Temas\AD_Temporales\) ⛔ !!!def: ③ Toma de Decisiones bajo Incertidumbre 1. [Introducción](.\Temas\TDI_Intro) 1. [Utilidad y Racionalidad](.\Temas\TDI_Utilidad\) 1. [Procesos de Decisión de Markov](.\Temas\TDI_MDP\) 1. [MonteCarlo Tree Search](.\Temas\TDI_MCTS\) ⛔ 1. [Aprendizaje por Refuerzo](.\Temas\TDI_Refuerzo\) $\quad$ !!!def: ④ Teoría de Juegos 1. [Juegos Estratégicos](.\Temas\TJ_Juegos_Estrategicos\) 1. [Coordinación](.\Temas\TJ_Coordinacion\) ⛔ 1. [Conocimiento Común](.\Temas\TJ_Conocimiento_Comun\) ⛔ 1. [Comunicación](.\Temas\TJ_Comunicacion\) ⛔ 1. [Teoría de Juegos Evolutivos](.\Temas\TJ_Evolutivos\) !!!def: ⑤ Lógica Modal 1. [Introducción a la Lógica Modal](.\Temas\LM_Logica_Modal\) ⛔ 1. [Aplicación a Juegos Estratégicos](.\Temas\LM_Juegos_Estrategicos\) ⛔ 1. [Lógica de Coaliciones](.\Temas\LM_Logica_Coaliciones\) ⛔ !!!alg: Material complementario 1. [Computación Científica con Julia](./Temas/JuliaSC/) 1. [IA: Una Ciencia empírica](https://www.cs.us.es/~fsancho/Blog/posts/IA_una_ciencia_empirica.md.html) 1. [Modelos Fundacionales](https://www.cs.us.es/~fsancho/Blog/posts/Modelos_Fundacionales/) 1. [¿Pueden los LLMs razonar y planificar?](.\Temas\Pueden_Razonar_Planificar_LLM\) 1. [Agentes LLM](https://www.cs.us.es/~fsancho/Blog/posts/LLMAgentes.md.html)
!!!code: Modelos y Códigos 1. Toma de Decisiones bajo Incertidumbre: [MDP](./modelos/MDP.nlogo) (NetLogo), [MDP+RL](./modelos/MDPRL.jl) (Julia). 2. Teoría de Juegos: [Game Theory Demo](./modelos/GT_demo.ipynb) (notebook Jupyter en Julia). 3. Modelado Multiagente (Julia): [Schelling](./modelos/Schelling.jl), [Flocking](./modelos/flocking.jl), [Piedra-Papel-Tijera](./modelos/ppt.jl). 4. [Agent Based Evolutionary Dynamics](https://luis-r-izquierdo.github.io/abed/) (modelos NetLogo). 5. [_An introduction to ABED_](./modelos/ABED-open.pdf) (paper), L.R. Izquierdo, S.S. Izquierdo, W.H. Sandholm (2019). 5. [Agent-Based Evolutionary Game Dynamics](https://wisc.pb.unizin.org/agent-based-evolutionary-game-dynamics/) (book), L.R. Izquierdo, S.S. Izquierdo, W.H. Sandholm (2024). 5. [Imitación en Redes](./modelos/ImitacionRedes.nlogo) (NetLogo). [.](./examen/examen1.html)
Este curso trata de los métodos y técnicas que puede utilizar un agente computacional para **planificar y actuar de forma inteligente** (es decir, para decidir tanto qué acciones emprender como la forma de llevarlas a cabo) con el fin de alcanzar algún objetivo. El estudio de la agencia inteligente responde tanto a motivaciones científicas como ingenieriles. Desde el punto de vista científico, comprender y mejorar la toma de decisiones es un objetivo central en las ciencias cognitivas. En Inteligencia Artificial, este reto se aborda modelando la deliberación mediante enfoques computacionales que permitan provocar y explicar dicho proceso. Por otro lado, las capacidades investigadas se comprenden y evalúan mejor cuando los conceptos y teorías se implementan en sistemas y experimentos diseñados para probar, medir y validar empíricamente los modelos propuestos. La motivación ingenieril para estudiar la toma de decisiones es (1) construir sistemas que exhiban capacidades inteligentes y, (2) desarrollar tecnologías que respondan a necesidades socialmente útiles. Se necesitan estas capacidades si se requiere realizar de forma autónoma un conjunto de tareas demasiado diversas -o en entornos demasiado diversos- como para diseñar esas tareas como comportamientos innatos. La autonomía y la diversidad de tareas y entornos es una característica crítica en muchas aplicaciones: robótica (por ejemplo, robots de servicio y personales; robots de rescate y exploración; estaciones, satélites o vehículos espaciales autónomos), sistemas de simulación social complejos (por ejemplo, tutoría, formación o entretenimiento) o gestión de infraestructuras complejas (por ejemplo, plantas industriales o energéticas, redes de transporte, instalaciones urbanas). La **planificación automática** es un campo técnico muy rico, que se beneficia del trabajo de una comunidad investigadora activa y que ha estado en constante crecimiento. Algunas áreas de este campo han sido ampliamente exploradas y corresponden a una serie de técnicas ya maduras. Sin embargo, hay otros ámbitos en los que es imprescindible seguir investigando para obtener mayor repercusión en un conjunto más amplio de aplicaciones. Podemos destacar algunas líneas que precisan un desarrollo urgente: la integración de la planificación y la actuación; planificación y actuación bajo incertidumbre; y planificación en agentes basados en LLM. En este curso intentaremos introducir (no hay tiempo a más) distintos tipos de modelos y enfoques para el modelado de sistemas de agentes inteligentes y, para cada uno de ellos, presentaremos brevemente las técnicas disponibles. En el panorama más clásico de la IA se suelen priorizar técnicas que produzcan respuestas rápidas al problema de la toma de decisiones y actuación 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 solo 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**. Es interesante observar, sin embargo, que las aplicaciones más necesarias imponen situaciones que precisan técnicas de resolución de IA aplicables cuando estas suposiciones no se pueden confirmar, algo muy común cuando estamos construyendo agentes inteligentes que deben tomar decisiones bajo contextos complejos e interactivos. Daremos por supuesto que el alumno del curso tiene 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 que veremos aquí, ya que examinaremos aproximaciones que nacieron por la incapacidad de los métodos tradicionales para resolver problemas en los que ciertos supuestos no están garantizados. Concretamente, se espera que el alumno tenga conocimientos de un curso inicial de IA y conozca 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**. !!!att En la pestaña **Prerrequisitos** puedes encontrar material para unificar y establecer los mínimos imprescindibles en esta tarea. Asimismo, se espera que el alumno tenga un conocimiento básico de **Espacios de Probabilidad** para poder modelar, por ejemplo, el concepto de incertidumbre, y conocimientos de **programación** que le permitan leer y escribir algoritmos a nivel medio (no necesariamente en alguno de los lenguajes elegidos para este curso). Frente a la aproximación más habitual de la IA, basada en la generación de algoritmos que se ejecutan de forma centralizada, aquí proponemos una aproximación transversal a diversos temas desde un punto de vista **distribuido**. En la práctica, la **Inteligencia Artificial Distribuida** está asociada al uso de *Agentes* (denominados *Inteligentes* cuando verifican algunas propiedades específicas) que abordan de forma no centralizada (por medio de capacidades como la *comunicación*, *cooperación*, *negociación*, *sincronización*, etc.) la resolución de problemas. El curso hace uso de metodologías concretas de representación y resolución general de problemas para motivar e introducir principios y técnicas fundamentales en los sistemas de agentes inteligentes. Los temas que se verán incluyen conceptos de *Teoría de la Decisión*, *Teoría de Juegos*, *Diseño de Procedimientos*, *Razonamiento con Restricciones*, *Aprendizaje Automático*, *Sistemas Multiagente Distribuidos* y *Sistemas Basados en Agentes Sociales*.
| | | |-----------------------------|----------------------------------------------------------------------------------------------------------------------| |**Profesores** | [Fernando Sancho Caparrini](http://www.cs.us.es/~fsancho)| |**Contacto** | fsancho@us.es, Despacho H1.48 | |**Aula** | H0.10 | |**Horario** | Martes: 15:30-17:30 y Jueves: 17:30-19:30 | |**Calendario** | 7 oct 2025 - 6 nov 2025 |
Como corresponde a un Máster, esta asignatura tiene un marcado carácter de motivación del descubrimiento. Para ello, intentar cubrir nuestros objetivos impone algunos condicionantes que deben ser reconocidos y asumidos por parte de profesor y alumnos: 1. Todo el **contenido está disponible de forma abierta** en este mismo sitio web con antelación suficiente para que el alumno lo pueda revisar antes de las sesiones presenciales (una versión inicial de todo el contenido está disponible desde el primer día de clase, pero podrá sufrir ligeras modificaciones durante la ejecución del curso). 1. Se proporciona más contenido del que se puede cubrir en las sesiones presenciales, de forma que el alumno pueda **elegir qué temas le interesan más** y profundizar en ellos. 1. El alumno ha de ser capaz de **prever y seguir una planificación adecuada** del esfuerzo a realizar en el curso para llevar un ritmo constante pero sin sobresaltos, teniendo en cuenta que presenta un **formato temporal más concentrado** que otras asignaturas del mismo máster. 2. El contenido se articula alrededor de una serie de sesiones (teórico-prácticas) que marcan un ritmo continuo y común al conjunto de la clase. 3. Siguiendo el sistema de créditos ECTS, las sesiones tendrán un desarrollo paralelo (e imprescindible) tanto dentro del aula (explicaciones y trabajo colaborativo) como fuera de ella (lecturas y trabajo personal).
El curso está programado para el **Primer Cuatrimestre del Máster Universitario en Lógica, Computación e Inteligencia Artificial** de la Universidad de Sevilla y, por tanto, hace uso de los conocimientos que los alumnos han debido adquirir en los grados que le han dado acceso y que, idealmente, deben incluir conocimientos como: Álgebra Lineal y Numérica, Cálculo Infinitesimal y Numérico, Estadística, Matemática Discreta, Análisis y Diseño de Datos y Algoritmos, y Fundamentos de Programación (es importante destacar el amplio contenido matemático en el que se basa). Aunque muchos de los conceptos necesarios pueden ser superficialmente recordados durante la exposición del contenido del curso, el objetivo no es explicarlos de nuevo aquí, sino destacar su importancia para los resultados que proporcionan en esta área y ponerlos en el contexto adecuado para su correcta aplicación. En consecuencia, es responsabilidad del alumno nivelarse adecuadamente y realizar un repaso de aquellos contenidos de los que haremos uso a lo largo de este curso. Muy especialmente, debe quedar claro que **no es responsabilidad de esta asignatura enseñar a programar en ningún lenguaje de programación**, y que se entiende que el nivel que se requiere para la comprensión y resolución de las aproximaciones que veremos está ya disponible entre las capacidades del alumno, independientemente de si el lenguaje de programación del curso coincide o no con los conocimientos previos del alumno. Con el fin de unificar y nivelar los conocimientos fundamentales que se requieren, se incluyen a continuación algunos temas introducitorios que pueden servir de recordatorio para los alumnos que lo necesiten: !!!def: ⓪ Fundamentos * [Teoría de la Probabilidad](./Temas/Pre_Probabilidad/) * [Lógica (Proposicional y de Primer Orden)](./Temas/Pre_Logica/) * Inteligencia Artificial: * [Introducción a la IA](./Temas/Pre_Introduccion_a_la_IA/) * [Historia de la IA](./Temas/Pre_Historia_de_la_IA/) * [Metaheurísticas](./Temas/Pre_Metaheuristicas) * [Satisfacción de Restricciones (CSP)](./Temas/Pre_Satisfaccion_de_Restricciones) * [Espacios de Estados](./Temas/Pre_Espacios_de_Estados) * [Planificación](./Temas/Pre_Planificacion) * [Fundamentos de Machine Learning](./Temas/Pre_Fundamentos_de_ML) * Programación: * Estructuras de Datos * Fundamentos de Algoritmia
Junto a los contenidos de carácter teórico, puntualmente presentaremos implementaciones de experimentos, estructuras y métodos para facilitar la adquisición de nuevos conocimientos. Para ello, se han buscado lenguajes de alto nivel, de orientación científica y que tenga una sintaxis clara y cercana a la formalización matemática que se está usando. Siguiendo estas directrices, se propone una combinación de **Julia** y **NetLogo** (dependiendo de la unidad en la que estemos trabajando y los objetivos de la implementación), ya que presentan características propias muy interesantes y diferenciadas que cuadran muy bien con nuestros objetivos. Para las soluciones por parte del alumno también se permiten otras opciones, como **Python**, **Haskell** o **Javascript**.
!!!note: NetLogo y los MAS ![](img/netlogo.png align="right" width="150px") Entre las variadas razones por las que [NetLogo](https://www.netlogo.org/) ha sido elegido para este curso podemos destacar las siguientes: * Proporciona de forma nativa y natural un sistema de **modelado basado en agentes**. * El **tiempo de desarrollo** de modelos es **extremadamente reducido**, lo que permite que en unos minutos se pongan en práctica ideas acerca de cómo aplicar soluciones teóricas a problemas concretos. * Gracias a sus **capacidades gráficas**, las soluciones se presentan de una forma visual que facilita la comprensión de los conceptos subyacentes. * Ofrece un **lenguaje de programación y entorno de trabajo simplificados**. * Está basado en un **paradigma de programación declarativo y con tintes funcionales**. * Tiene una **amplia comunidad de usuarios** y proporciona **cientos de ejemplos de modelado** que facilitan una primera aproximación al modelado de problemas. A pesar de todas las ventajas, no debe olvidarse que tiene algunas limitaciones. El objetivo de NetLogo es proporcionar una **herramienta de prototipado y desarrollo rápido de modelos de simulación**, no de aplicaciones finales, por lo que está más cerca de una herramienta de exploración científica que de un lenguaje de programación estándar (algo que también puede verse como una ventaja en nuestro caso). Estas limitaciones se traducen, por ejemplo, en: * **No genera aplicaciones independientes**, sino que los modelos creados deben ser ejecutados dentro del mismo entorno de desarrollo de NetLogo (o por línea de comandos desde la versión no gráfica). Actualmente, hay un subconjunto (casi completo) del lenguaje que puede ejecutarse en navegadores web (con javascript) y en dispositivos móviles (iOS y android). * La generación de **proyectos de cierta envergadura** es una tarea **incómoda**, porque proporciona herramientas muy básicas para la división de código en módulos independientes. Normalmente, los proyectos que acometeremos serán limitados a ejemplos de una o dos técnicas concretas. * El usuario (ya programador) ha de superar una pequeña barrera inicial para resolver problemas con NetLogo, porque al estar orientado a agentes presenta algunas **características conceptuales** que lo **diferencian** ligeramente de los lenguajes de programación más comunes... aunque esto no puede verse como una limitación de NetLogo, sino de la formación habitual recibida en programación. En todo caso, en esta asignatura no necesitaremos habilidades de modelado específicas que dificulten nuestra aproximación. Los conocimientos mínimos de NetLogo que el alumno debe adquirir para poder seguir la asignatura con comodidad contienen (pero no se limitan a): * **Estructuras de datos básicas**: *listas*, *cadenas*, *arrays*, *matrices*, *diccionarios*, *agentes*, ... * **Estructuras de programación**: `repeat`, `while`, `if`, `ifelse`, `ask` (`with`), ... * **Funciones** y **procedimientos** más habituales: `min`, `max`, `list`, `remove`, ... * **Funciones de orden superior**: `map`, `reduce`, `filter`, `foreach`. * **Procedimientos y funciones** de usuario: `to ... end`, `to-report ... end`, funciones anónimas. * **Agentes**: tipos, procedimientos, contextos, especies, propiedades, interacción, ... !!!ejemplo: Julia y la Programación Científica ![](img/logo.svg align="right" width="150px")[**Julia**](https://julialang.org/) es un lenguaje de programación **homoicónico** (palabra rebuscada para decir que 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** (se adapta al estilo del usuario y la necesidad del problema, pudiendo mostrar características de programación funcional, imperativa, declarativa, etc.), de **tipado dinámico** (aunque puede pasarse a un tipado estático si se considera más adecuado), 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 con ejecución principalmente en modo **JIT** (Just in Time), mecanismos para la ejecución paralela 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, proporcionando librerías para el álgebra lineal, álgebra abstracta, cálculo real, generación de números aleatorios, procesamiento de señales, aprendizaje automático, ciencia de datos, procesamiento de cadenas, programación paralela, etc. Adicionalmente, la comunidad de desarrolladores de Julia contribuye con la creación y distribución de paquetes externos a un paso acelerado a través del [gestor de paquetes](https://juliapackages.com/) integrado en Julia. En particular, para este curso pueden ser especialmente interesantes algunas librerías que abordan diversos temas que se tocan con diferentes profundidades: * [POMDP.jl](https://juliapomdp.github.io/POMDPs.jl): Una interfaz Julia para definir, resolver y simular procesos de decisión de Markov parcialmente observables y sus homólogos totalmente observables. * [GameTheory.jl](https://github.com/QuantEcon/GameTheory.jl): Librería que proporciona algoritmos y estructuras de datos específicas para el tratamiento de Teoría de Juegos en Julia. * [Agents.jl](https://juliadynamics.github.io/Agents.jl): Se trata de un framework puro de Julia para el modelado basado en agentes (ABM). * [SoleLogics](https://aclai-lab.github.io/SoleLogics.jl): Una librería de Julia para trabajar con diversas Lógicas, entre ellas, Lógicas Modales. 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/JupyterLab](https://jupyter.org/), y [Pluto](https://www.juliapackages.com/p/pluto)) o entornos interactivos como [IJulia](https://juliapackages.com/p/ijulia).
La evaluación de esta parte del curso se realizará por medio de un examen presencial en la fecha publicada en las convocatorias oficiales. Esta nota supone 2/3 de la nota final del curso. El 1/3 restante se obtendrá por medio del sistema de evaluación propuesto en la otra parte del curso.