**IAIC** Inteligencia Artificial - Ingeniería de Computadores Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla
**Objetivos** El objetivo general del curso es **introducir al estudiante en técnicas avanzadas de Inteligencia Artificial** (**IA**), realizando un recorrido desde las técnicas más clásicas hasta las más novedosas, con el fin de que el alumno sea capaz de explicarlas, analizarlas e implementarlas en sus proyectos futuros, ya sean profesionales o académicos. Sin embargo, y por encima de las técnicas individuales que podamos ver, se espera que el alumno adquiera una visión en conjunto de qué es la IA, cuáles son sus principales características, y por qué se está convirtiendo en una de las áreas fundamentales de la Computación y, en general, de la Ciencia y la Ingeniería del S. XXI. Tras haber realizado este curso con aprovechamiento, el estudiante *ideal* debería ser capaz de: * **Describir y reconocer** un buen número de las principales técnicas de IA, tanto en términos generales como en detalle. * **Comparar y evaluar** la idoneidad de varias técnicas de IA para resolver problemas concretos. * **Representar formalmente** un problema para poder ser abordado por técnicas de IA. * **Aplicar técnicas** concretas de IA a problemas concretos. * **Combinar** diferentes técnicas de IA, tanto desde un punto de vista teórico como práctico. * **Reconocer las dificultades** generales y los errores más habituales en el uso práctico de diversas técnicas de IA. * **Explorar la literatura** relevante de proyectos de IA específicos de manera independiente. * **Implementar** técnicas no triviales de IA en un sistema de computación. * **Escribir informes científico-técnicos** con la documentación relativa a sistemas de IA, tanto de sus implementaciones como de las teorías sobre las que se soporta. * **Definir y lanzar experimentos** que pongan a prueba las distintas implementaciones existentes.
**Generalidades** A continuación se muestra la información práctica del desarrollo del curso: | | | |-----------------------------|----------------------------------------------------------------------------------------------------------------------| |**Profesores** | [Pedro Almagro Blanco](https://www.cs.us.es/~palmagro) $||$ [Fernando Sancho Caparrini](http://www.cs.us.es/~fsancho)| |**Contacto** | palmagro@us.es $||$ fsancho@us.es | |**Aula Teoría** | H1.10 | |**Aulas Práctica** | A4.30, A4.32 (Pedro Almagro y Fernando Sancho) | |**Horario** | Lunes y Miércoles: 10:30-12:30 | |**Calendario** | 11/09/2023 a 22/12/2023 | La asignatura tiene un marcado carácter práctico y de motivación del descubrimiento. Para ello, a pesar de las limitaciones reales que el sistema educativo español impone (como el tamaño de los grupos, o la mala distribución de la carga de trabajo de las asignaturas), intentar cubrir nuestros objetivos impone algunos condicionantes que deben ser reconocidos, y asumidos, previamente por parte del profesorado y del alumnado: 1. Todo el **contenido estará 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. 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 (es un área que lleva muy mal los esfuerzos puntuales y recompensa el trabajo continuo). 2. El [contenido](#Contenido) se articula alrededor de una serie de sesiones (teóricas y prácticas) que están detalladas en esta misma página, y que marca un ritmo común al conjunto de la clase. 3. Una **sesión teórica** estándar consta de: un **breve resumen del contenido** (centrado en los puntos principales del mismo, sin entrar en detalles que ya han estado a disposición del alumno), **resolución de dudas concretas** planteadas por los alumnos (que pueden realizar en ese momento, o plantear previamente por los medios disponibles), y el **planteamiento y resolución de problemas relacionados** con el contenido que ayuden a aclarar los conceptos fundamentales y a mostrar las características particulares de las distintas técnicas analizadas. 4. Una **sesión práctica** estándar consta de: **análisis de ejemplos resueltos** y **resolución personal** de problemas representativos del tema correspondiente. La parte de ejemplos resueltos se podrá seguir a modo de tutoriales que guíen a los alumnos en los métodos de resolución planteados (representación y algoritmos que intervienen). 5. Siguiendo la estructura estándar del sistema de créditos ECTS, tanto las sesiones teóricas como las prácticas tendrán un desarrollo paralelo (e imprescindible) tanto dentro del aula (en forma de trabajo cooperativo con el resto de participantes del curso) como fuera de ella (como trabajo personal).
**Prerrequisitos** El curso está programado para el **primer cuatrimestre** del curso 3º del Grado de _Ingeniería Informática - Ingeniería de Computadores_ y, por tanto, hace uso de los conocimientos que los alumnos han debido adquirir en asignaturas de cursos anteriores, entre las que se incluyen: Á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 (obsérvese el amplio contenido matemático en el que se basa). Aunque muchos de los conceptos necesarios de estas otras asignaturas pueden ser superficialmente recordados durante la exposición del contenido de Inteligencia Artificial, debe quedar claro que el objetivo que se persigue 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 realizar un repaso de aquellos contenidos aprendidos en asignaturas previas y de los que haremos uso a lo largo de la asignatura. Muy especialmente, debe quedar claro que no es responsabilidad de esta asignatura enseñar a programar en el lenguaje de implementación seleccionado, y que se entiende que el nivel que se requiere para la comprensión y resolución de las aproximaciones que aquí veremos se ha adquirido con creces en los cursos anteriores, independientemente de si el lenguaje de programación coincide o no con los usados en las asignaturas cursadas.
**Sistema de Implementación** !!! note: El lenguaje Julia y la Programación Científica Aunque los contenidos estudiados son de un carácter fundamentalmente teórico, veremos la implementación real de la mayoría de las estructuras y métodos que usaremos, lo que nos facilitará el trabajo con algunos de los resultados desde un punto de vista aplicado. Para ello, se ha buscado un lenguaje de alto nivel, de orientación científica y que tenga una estructura muy clara y cercana a la formalización matemática... y, siguiendo estas directrices, se ha elegido Julia como lenguaje de programación por defecto (aunque pueda añadirse algún otro lenguaje adicional para fines concretos si se consideran adecuados e interesantes para la formación del alumno). ![](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 la 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 (**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, etc. 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 en 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/JupyterLab](https://jupyter.org/), y [Pluto](https://www.juliapackages.com/p/pluto)) o entornos interactivos como [IJulia](https://juliapackages.com/p/ijulia). A continuación, se muestran documentos a modo de pequeñas guías relacionadas con la instalación, mantenimiento y uso de Julia, así como de diversos ecosistemas para su uso: !!!Tip: Recursos de Julia * [Instalación y Ecosistema de Julia con `juliaup`](Practicas\installJulia.md.html). * [Manual Rápido de Programación](Practicas\Julia.md.html). * [Manual Breve de Makie](Practicas\Makie.md.html). * [Colección de implementaciones: Beautiful Algorithms](https://github.com/mossr/BeautifulAlgorithms.jl). * [Paquetes y Entornos de Julia](Practicas\PkgEnv.md.html)
**Evaluación** Como la asignatura tiene un marcado carácter práctico, todo el contenido teórico (aquel que tenga sentido) va acompañado de implementaciones de las técnicas estudiadas que se pueden utilizar para resolver los ejercicios propuestos y las sesiones prácticas. Como es habitual en la mayoría de las asignaturas de la Universidad de Sevilla, el alumno tiene dos vías para poder superar la asignatura: la **Evaluación Continua**, y las diversas **Convocatorias Oficiales** del curso académico. La **Evaluación Continua** del curso está regida por las siguientes condiciones: 1. El contenido evaluable se divide en dos **Bloques** del mismo peso. 1. Cada bloque recibe dos evaluaciones: **Evaluación Práctica** ($P_1$ y $P_2$) y **Evaluación Teoría** ($T_1$ y $T_2$). 1. Para superar la asignatura en la Evaluación Continua debe verificarse: * La media obtenida entre las $4$ pruebas debe superar los $5$ puntos (sobre $10$): $(T_1+P_1+T_2+P_2)/4\geq 5$. * La evaluación de cada prueba debe superar los $3$ puntos (sobre $10$): $T_1,\ P_1,\ T_2,\ P_2\geq 3$. 1. La nota obtenida por el alumno en la **Evaluación Continua** será la media de las $4$ pruebas. Las pruebas correspondientes al primer bloque se realizarán tras haber completado su contenido, en fecha que será comunicada con suficiente antelación, durante las horas asignadas a la asignatura (teoría y práctica). Las pruebas correspondientes al segundo bloque se realizarán la última semana lectiva del cuatrimestre, también durante las horas asignadas a la asignatura (teoría y práctica). Como es habitual, las **Convocatorias Oficiales** (diciembre, enero y julio) son independientes, y la prueba constará de un examen que se realizará en la fecha acordada para cada convocatoria, y que es publicada con suficiente antelación por la E.T.S.I.I. A estas pruebas solo podrán presentarse los alumnos que no hayan superado la Evaluación Continua y, excepcionalmente, alumnos que quieran subir nota (tras haber recibido el visto bueno por parte del profesorado de la asignatura).
**Contenido** |Unidad| Título | Lecturas | Prácticas | |:----:|:-------------:|------------------------------------------------------------------------|:----------------------------------:| | 1 |Introducción | [Presentación](.\Temas\Introduccion_a_la_IA\) | | | | | [Historia de la IA](.\Temas\Historia_de_la_IA\) | [Práctica 0](.\Practicas\Intro\) | | 2 |Representación | [Satisfacción de Restricciones](.\Temas\Satisfaccion_de_Restricciones\)| [Práctica 1](.\Practicas\CSP\) | | | | [Lógica](.\Temas\Logica\) | [Práctica 2](.\Practicas\Logica\) | | | | [Espacios de Estados](.\Temas\Espacios_de_Estados\) | [Práctica 3](.\Practicas\Search\) | | 3 |Búsquedas | [Búsquedas](.\Temas\Busquedas_Clasicas\) | | | 4 |Planificación | [Planificación](.\Temas\Planificacion\) | [Práctica 4](.\Practicas\Plan\) | | 5 |Optimización | [Global](.\Temas\Optimizacion\) | [Práctica 5](.\Practicas\Opt\) | | 6 |Ap. Automático | [Fundamentos ML](.\Temas\Fundamentos_de_ML\) | | | | | [Redes Neuronales](.\Temas\Redes_Neuronales\) | [Práctica 6](.\Practicas\NN\) | | | | [Clustering](.\Temas\Clustering\) | [Práctica 7](.\Practicas\Clust\) | | | | [Árboles de Decisión](.\Temas\Arboles_de_Decision\) | | |Lecturas complementarias| |------------------------| |[¿Pueden los LLMs razonar y planificar?](.\Compl\Pueden_Razonar_Planificar_LLM\)| |[Ejemplos resueltos de formalización LP](https://www.cs.us.es/cursos/liti-2023/FormalizacionLP.md.html) (del curso de Lógica Informática)| |[Ejercicios de Representación Propuestos](.\Compl\Ejercicios)| |[Videos de Redes Neuronales](https://www.youtube.com/playlist?list=PLIb_io8a5NB0CP5ktJE9qaLd6GOfh1Z9m) (usando MNIST)| |[Ejercicios de Aprendizaje Automático](.\Practicas\Problemas\)|
**Calendario** | Nº | Fechas | Tema | Bq | | |:--:|--------------|------------------|:--:|:--:| | ① |11 - 13 Sep | Intro | | ✅ | | ② |18 - 20 Sep | CSP | Ⅰ | ✅ | | ③ |25 - 27 Sep | Lógica | Ⅰ | ✅ | | ④ |02 - 04 Oct | EE+Búsquedas I | Ⅰ | ✅ | | ⑤ |09 - 11 Oct | EE+Búsquedas II | Ⅰ | ✅ | | ⑥ |16 - 18 Oct | Planificación | Ⅰ | ✅ | | ⑦ |23 - 25 Oct | Optimización | Ⅰ | ✅ | | ⑧ |30 Oct | Fund. ML | Ⅱ | ✅ | | ⑨ |06 - 08 Nov | Ex. T1 + Ex. P1 | | ✅ | | ⑩ |13 - 15 Nov | NN I | Ⅱ | ✅ | | ⑪ |20 - 22 Nov | NN II | Ⅱ | ✅ | | ⑫ |27 - 29 Nov | Clustering | Ⅱ | ✅ | | ⑬ |04 Dic | Árboles Decisión | Ⅱ | ❌ | | ⑭ |11 - 13 Dic | ... | Ⅱ | ❌ | | ⑮ |18 - 20 Dic | Examen T2 + P2 | | ❌ |