**IAIC** Inteligencia Artificial - Ingeniería de Computadores Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla # Introducción El objetivo general del curso es **introducir al estudiante en técnicas avanzadas de Inteligencia Artificial** (**IA**), realizando un recorrido desde las más clásicas hasta las más novedosas, con el fin de que 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 un visión en conjunto de qué es la IA, cuáles son sus principales características, y porqué se está convirtiendo en una de las áreas fundamentales de la Computación y, en general, de la Ciencia y la Ingeniería. 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** de manera independiente **la literatura** relevante de proyectos de IA específicos. * **Implementar** técnicas no triviales de IA en un lenguaje de programació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 y de los experimentos que se pueden desarrollar con ellos. # 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.12 (Fernando Sancho) | |**Aulas Práctica** | I2.31, I2.35 (Pedro Almagro y Fernando Sancho) | |**Horario** | Martes: 17:30-19:30, Jueves: 17:30-19:30 | |**[Calendario](#Calendario)**| del 12/09/2022 al 22/12/2022 | La asignatura tiene un marcado carácter práctico y de motivación del descubrimiento, y para ello seguiremos una metodología inspirada libremente en lo que hoy en día se está llamando [**Aula Invertida**](https://es.wikipedia.org/wiki/Aula_invertida): !!!note: Aula Invertida Los fundamentos del aula invertida se centran principalmente en dedicar el tiempo de clase a tareas en las que el alumnado sea el protagonista del aprendizaje (**resolver problemas**, **trabajar de forma colaborativa**, etc.) y no a la realización de explicaciones teóricas que pueden realizarse en casa a través de diferentes medios tecnológicos, permitiendo así la adaptación a los diferentes ritmos de aprendizaje de los alumnos. De esta forma, en el aula invertida el objetivo es **asignar a los estudiantes textos, videos o contenidos adicionales para revisar fuera del aula**. Esta forma de trabajo impone algunos condicionantes que deben ser reconocidos y asumidos previamente: 1. Todo el contenido está disponible de forma abierta en este mismo sitio web. 2. El [contenido](#Contenido) se articula alrededor de una [serie de sesiones](#Calendario) (teóricas y prácticas) que están detallan en esta misma página. 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 finalizando con el **planteamiento y resolución de problemas relacionados** con el contenido que ayuden a aclarar los hechos fundamentales. 4. Una **sesión práctica** estándar consta de: la **presentación y resolución/implementación colaborativa** de problemas representativos del tema correspondiente, y en muchas de las sesiones se reservarán algunos minutos finales de la sesión para **resolver un problema concreto** y que formará parte de la evaluación continua del alumno (ver [Evaluación](#Evaluación)). ## Prerrequisitos El curso está programado en el primer parcial del tercer curso 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. 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 vamos a hacer uso en 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í vemos se ha adquirido con creces en los cursos anteriores, independientemente de si el lenguaje de programación coincide o no con los usados anteriormente. ## Sistema de Implementación El sistema de implementación seleccionado para todos los bloques del curso ha sido [NetLogo](https://ccl.northwestern.edu/netlogo/) (excepcionalmente, y a modo de demostración, es posible que se use algún otro software para algunas sesiones del curso, lo que se avisará con suficiente antelación): !!! *NetLogo es un entorno completo de desarrollo de modelos orientado principalmente al uso del paradigma multi-agente, y que proporciona simultáneamente un **lenguaje de programación** (que también se llama NetLogo), un **generador de interfaces** para permitir al usuario interactuar con los modelos, y un **entorno de simulación y experimentación**. En sus inicios tuvo una marcada orientación educativa pero, debido a las buenas cualidades que presenta, su uso en entornos académicos y de investigación superior lo han convertido en el paquete de programación multi-agente más extendido y que ha inspirado la creación de muchos otros sistemas de modelado multiagente. El proyecto, iniciado por Uri Wilensky como un proyecto propietario, pero gratuito, dentro del [Center for Connected Learning de la Universidad de Northwestern](https://ccl.northwestern.edu/), se ha convertido desde hace unos años en un proyecto Open Source mantenido por una [comunidad de desarrollo en Github](https://github.com/NetLogo/NetLogo).*
**Sobre NetLogo** Entre las variadas razones por las que NetLogo ha sido elegido para un curso de Inteligencia Artificial podemos destacar las siguientes: * Proporciona de forma nativa y natural un sistema de **modelado basado en agentes**, algo especialmente adecuado a un enfoque moderno de IA. * 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**, que requieren un tiempo de aprendizaje breve, por lo que la mayoría del tiempo disponible en la asignatura se puede dedicar a conceptos propios de su contenido, y no a resolver dificultades técnicas de implementación. * Puede cubrir diversas áreas de IA de manera uniforme y sin el uso de extensiones del lenguaje o librerías externas. * Está basado en un **paradigma de programación declarativo y con tintes funcionales**, algo que, por sí solo, ya supone una razón de peso para un currículo de una Ingeniería Informática. * 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. 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** en NetLogo, 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 de IA. * El usuario (ya programador) ha de superar una pequeña barrera inicial para resolver problemas con NetLogo, porque presenta algunas **características conceptuales** que lo **diferencian** ligeramente de los lenguajes de programación más comunes. Aunque esto no es una limitación de NetLogo, sino de la formación habitual recibida por los programadores. 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, ... Y, como puede verse en la planificación del curso, se dedican dos sesiones prácticas completas para introducir el lenguaje y suavizar la curva de acceso del alumno al sistema de desarrollo seleccionado.
# Contenido !!!Tip:Contenido | Semana | Bloque | Martes | Jueves | |--------|:------------------:|-----------------------------------------------------|--------------------------------------------------------| | 1 | **Introducción** | [Presentación](IIA.md.html) (T) | [NetLogo I](NetLogo.md.html) (P) | | 2 | **NetLogo** | [Breve Historia de la IA](HIA.md.html) (T) | [Práctica Semana 2](./Practicas/P2.md.html) (P) ([Sol](./Practicas/S2.md.html)) | | 3 | **Lógica** | [Introducción a la Lógica](Log.md.html) (T) | [Práctica Semana 3](./Practicas/P3.md.html) (P) | | 4 | **Búsqueda** | [Espacios de Estados](EdE.md.html) (T) | [Práctica Semana 4](./Practicas/P4.md.html) (P) ([Sol](./Practicas/S4.md.html)) | | 5 | Búsqueda | [Búsquedas ciegas e informadas](BCI.md.html) (T) | [Práctica Semana 5](./Practicas/P5.md.html) (P) ([Sol](./Practicas/S5.md.html)) | | 6 | Búsqueda | [Búsquedas locales y estocásticas](BLE.md.html) (T) | [Práctica Semana 6](./Practicas/P6.md.html) (P) ([Sol](./Practicas/S6.md.html)) | | 7 | Búsqueda | [Búsquedas con incertidumbre](BIn.md.html) (T) | [Práctica Semana 7](./Practicas/P7.md.html) (P) ([Sol](./Practicas/S7.md.html)) | | 8 | **Evaluación** | -- | Examen EC1 (E) | | 9 | **Sist. Complejos**| [Sistemas Complejos](SRC.md.html) (T) | [Práctica Semana 9](./Practicas/P9.md.html) (P) | | 10 | **Apr. Automático**| [Intr. al Aprendizaje Automático](IML.md.html) (T) | [Práctica Semana 10](./Practicas/P10.md.html) (P) ([Sol](./Practicas/S10.md.html))| | 11 | Apr. Automático | [Clustering](Clu.md.html) (T) | [Práctica Semana 11](./Practicas/P11.md.html) (P) | | 12 | Apr. Automático | [Árboles de Decisión](ID3.md.html) (T) | [Práctica Semana 12](./Practicas/P12.md.html) (P) | | 13 | Apr. Automático | [Redes Neuronales](ANN.md.html) (T) | [Práctica Semana 13](./Practicas/P13.md.html) (P) | | 14 | **Evaluación** | Repaso (T) | Examen EC2 (E) | * Las sesiones marcadas con (T) son **teóricas** y se imparten en el aula **H1.12**. * Las sesiones marcadas con (P) son **prácticas** y se imparten en las aulas **I2.31**|**I2.35**. * Las sesiones marcadas con (E) son **exámenes** y se indicará en su momento dónde se realizarán. Ver [Calendario](#Calendario) para la planificación temporal exacta. # 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: 1. la Evaluación Continua, y 2. 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** de 5 semanas (se indican los números de sesión de cada semana): $B_1=\{3,\dots,7\}$, $B_2=\{9,\dots,13\}$. En lo que sigue $i\in \{1,2\}$ indica el bloque correspondiente. 1. Para cada semana $j\in B_i$, durante la sesión práctica se propondrá un ejercicio (de valoración $P_j\leq 1$) a realizar durante los últimos $15$ minutos de la sesión, y que deberá entregarse a la terminación de la misma. 1. Cada bloque recibe dos evaluaciones: * **Evaluación Prácticas**: $EP_i=\sum_{j\in B_i} P_j$ (por tanto, $EP_i\leq 5$). * **Evaluación Teoría**: $EC_i\leq 10$ (examen escrito, las fechas se indican en el calendario). 1. Para superar la asignatura en la Evaluación Continua debe verificarse: 1. Obligación de 80% entrega prácticas: $\#\{j: P_j>0\}\geq 8$. 1. Mínimo en prácticas (en cada bloque): $EP_i\geq 2$. 1. Mínimo en teoría (en cada bloque): $EC_i\geq 3$. 1. La nota obtenida por el alumno en la **Evaluación Continua** será:$$EC= \left\{ \begin{array}{lcc} \frac{1}{3}(EC_1+EC_2+EP_1+EP_2) & \mbox{, si se verifica 4} \\ \\ \mbox{No Presentado} & \mbox{, en caso contrario} \end{array} \right.$$ 1. Adicionalmente, y de forma voluntaria, los alumnos podrán entregar con posterioridad ejercicios propuestos pero no resueltos en las diferentes prácticas para complementar la calificación obtenida en los bloques $EP_1$ y $EP_2$. Cada ejercicio entregado sumará a lo sumo $1$ punto, y se tendrá en cuenta el orden de entrega y la similitud entre ejercicios entregados por distintos alumnos. Como es habitual, las **Convocatorias Oficiales** (diciembre, enero y julio) son independientes, y la prueba constará de un examen escrito a realizar en la fecha acordada para cada convocatoria, y que es publicada con suficiente antelación por la E.T.S.I.I. # Calendario
**Detalles** La planificación temporal del curso queda establecida desde la presentación del curso de la siguiente forma: !!!Nota:Nota * Las sesiones marcadas con (T) son **teóricas** y se imparten en el aula **H1.12**. * Las sesiones marcadas con (P) son **prácticas** y se imparten en las aulas **I2.31**|**I2.35**. * Las sesiones marcadas con (E) son **exámenes** y se indicará en su momento dónde se realizarán. 13 Septiembre 2022: Semana 1 (T): [Presentación](IIA.md.html) 15 Septiembre 2022: Semana 1 (P): [NetLogo I](NetLogo.md.html) 20 Septiembre 2022: Semana 2 (T): [Breve Historia de la IA](HIA.md.html) 22 Septiembre 2022: Semana 2 (P): [Práctica Semana 2](./Practicas/P2.md.html) 27 Septiembre 2022: Semana 3 (T): [Lógica](Log.md.html) 29 Septiembre 2022: Semana 3 (P): [Práctica Semana 3](./Practicas/P3.md.html) 4 Octubre 2022: Semana 4 (T): [Espacios de Estados](EdE.md.html) 6 Octubre 2022: Semana 4 (P): [Práctica Semana 4](./Practicas/P4.md.html) 11 Octubre 2022: Semana 5 (T): [Búsquedas ciegas e informadas](BCI.md.html) 13 Octubre 2022: Semana 5 (P): [Práctica Semana 5](./Practicas/P5.md.html) 18 Octubre 2022: Semana 6 (T): [Búsquedas locales y estocásticas](BLE.md.html) 20 Octubre 2022: Semana 6 (P): [Práctica Semana 6](./Practicas/P6.md.html) 25 Octubre 2022: Semana 7 (T): [Búsquedas con incertidumbre](BIn.md.html) 27 Octubre 2022: Semana 7 (P): [Práctica Semana 7](./Practicas/P7.md.html) (1 Noviembre 2022): Fiesta 3 Noviembre 2022: Semana 8 (E): Examen EA1 8 Noviembre 2022: Semana 9 (T): [Sistemas Complejos](SRC.md.html) 10 Noviembre 2022: Semana 9 (P): [Práctica Semana 9](./Practicas/P9.md.html) 15 Noviembre 2022: Semana 10 (T): [Intr. al Aprendizaje Automático](IML.md.html) 17 Noviembre 2022: Semana 10 (P): [Práctica Semana 10](./Practicas/P10.md.html) 22 Noviembre 2022: Semana 11 (T): [Clustering](Clu.md.html) 24 Noviembre 2022: Semana 11 (P): [Práctica Semana 11](./Practicas/P11.md.html) 29 Noviembre 2022: Semana 12 (T): [Árboles de Decisión](ID3.md.html) 1 Diciembre 2022: Semana 12 (T): [Práctica Semana 12](#) (6 Diciembre 2022): Fiesta (8 Diciembre 2022): Fiesta 13 Diciembre 2022: Semana 13 (T): [Redes Neuronales](ANN.md.html) 15 Diciembre 2022: Semana 13 (P): [Práctica Semana 13](#) 20 Diciembre 2022: Semana 14 (T): Repaso 22 Diciembre 2022: Semana 14 (E): Examen EA2