Docencia: Inteligencia Artificial 2021-22

Modificado el 15 de Octubre de 2021

Ficha Técnica

Grado: Ingeniería de Computadores

Aula: H1.12

Horario: X (17:40 - 19:30) y V (15:30 - 17:20)

Tutorias: Acordar cita con el profesor

Sistema de Implementación: NetLogo

Profesor: Fernando Sancho Caparrini

Despacho: H1.48

Objetivos

El objetivo general del curso es introducir al estudiante en técnicas avanzadas de Inteligencia Artificial (IA), desde las más clásicas hasta las más novedosas, con el fin de que sea capaz de explicar, analizar e implementar dichas técnicas en sus proyectos futuros, ya sean profesionales o académicos. Sin embargo, y por encima de las técnicas individuales, se espera que el alumno tenga un visión en conjunto de qué es la IA, cuáles son sus principales características, y porqué es una de las áreas fundamentales de la Computación.

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.
  • 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íficos con la documentación relativa a sistemas de IA, tanto de sus implementaciones como de las teorías sobre las que se soporta.

Metodología

La asignatura tiene un marcado carécter práctico y de descubrimiento, por lo que usaremos una metodología que se puede englobar en lo que hoy en día se conoce como Aula invertida:

Un enfoque pedagógico en el que la instrucción directa se desplaza del grupo al individuo, reutilizando los espacios grupales restantes (las clases en el sentido clásico) en un ambiente de aprendizaje dinámico e interactivo en el que el profesor guía a los estudiantes en la aplicación de los conceptos y en su involucramiento creativo con el contenido del curso.

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 previamente:

  1. Todo el contenido teórico está disponible de forma abierta en este mismo sitio web. Aquellas actividades que requieran de necesidades específicas (entregas de tareas, clases online, etc.) se harán usando las herramientas disponibles (correo electrónico, Plataforma de Enseñanza Virtual de la Universidad de Sevilla, etc.).
  2. El curso está diseñado como una serie de sesiones cuyo contenido debe ser abordado por el alumno por adelantado, y que será explicitado en el diario de clase en esta misma página.
  3. Una sesión estándar constará 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), planteamiento y resolución de problemas relacionados con el contenido, y ocasionalmente una última sección para la consulta del material correspondiente a la siguiente sesión (con el fin de facilitar el trabajo individual posterior).
     

Contenido

El contenido que se muestra aquí es orientativo, y podrá ser adaptado durante la ejecución del curso, tanto por condicionantes externos (por ejemplo, cambios en las medidas sanitarias y administrativas) como internos al curso:

Introducción: Generalidades 
Sobre la IA...
Breve Historia de la IA
   
NetLogo (NetLogo QuickGuide)  
Representación del Conocimiento
Pensando y Resolviendo por Modelos

Sistemas Multiagente y Simulación
   
Parte I: IA Clásica      
Sistemas Lógicos:


Resolución de Problemas:
Estrategias de Búsqueda: Aplicaciones a la Planificación


Búsquedas con Adversario e Incertidumbre:
Resumen Librería IA NetLogo Parte I     
Parte II: Inteligencia Computacional      
Inteligencia Colectiva 
Sistemas Complejos
Redes Complejas (Complex Networks Toolbox)
Page Rank y el Surfista Aleatorio

Fractales
Autómatas Celulares (Modelado con NetLogo)
Simulación Social

Algoritmos Genéticos (AG) 
Optimización por Enjambres de Partículas (PSO)
Algoritmos de Colonias de Hormigas (ACO)
Resolviendo PSR con ACO
Optimización en el Espacio de Parámetros de un Modelo
 
Resumen Librería IA NetLogo Parte II    
Parte III: Aprendizaje Automático      
Introducción al Aprendizaje Automático
   
Aprendizaje Supervisado y No Supervisado
Algoritmos de Clustering    
Fundamentos Matemáticos del Aprendizaje Automático
Teoría de la Probabilidad (lo mínimo)
   
Aprendizaje Inductivo: Árboles de Decisión - ID3
Medir la eficacia de un aprendizaje
Metodología Aprendizaje Automático
Métodos Combinados de Aprendizaje
   
Aprendizaje Topológico:
Redes Neuronales Artificiales (Artificial Neural Networks in NetLogo)
Entrenamiento de Redes Neuronales: mejorando GD
Aprendizaje por Refuerzo: Algoritmo Q Learning    
Otros temas:    
Resumen Librería IA NetLogo Parte III    

La tabla anterior muestra el contenido del curso dividido en secciones conceptuales y unidades. En la columna de la derecha de cada unidad (o bloque de unidades) se ofrecen los enlaces a las distintas implementaciones y ejemplos en NetLogo de los métodos vistos en el tema (disponibles como proyecto de Github), así como un enlace a la sección correspondiente de los ejercicios propuestos. 

Colección de Problemas Propuestos

Cada unidad (o en su defecto, un bloque de unidades temáticamente relacionadas) dispone de un conjunto de ejercicios propuestos que son de realización indispensable para una correcta asimilación de los conceptos teóricos introducidos, así como de sus aplicaciones prácticas. Debe destacarse que la mayoría de los problemas admiten una solución práctica en NetLogo haciendo uso de las librerías diseñadas al efecto.

Criterios de Evaluación

La asignatura tiene un marcado carácter práctico, lo que significa que todos los contenidos teóricos (aquellos que tengan sentido) van acompañados de implementaciones de los algoritmos estudiados que se pueden reutilizar de forma directa para la resolución de muchos de los ejercicios propuestos y de las diversas pruebas de evaluación.

  Evaluación Continua Convocatorias Oficiales
  Ex.1
Ex.2
Trabajo Diciembre
Febrero
Septiembre
Peso 33% 33% 33% 100% 100% 100%
Mínimo 3/10 3/10 3/10 5/10 5/10 5/10
Fecha -- 14/01/22 17/01/22 02/12/21 31/01/22 15/09/22

La evaluación continua se puede aprobar por medio de la realización de 2 exámenes escritos y 1 trabajo práctico que pesan lo mismo y que necesitan de, al menos, una nota de 3 sobre 10 para poder hacer media.

Como es habitual, las convocatorias de Diciembre, Febrero y Septiembre son independientes, de ahí que sus pesos sean del 100%. En las convocatorias oficiales la prueba a superar será de un examen escrito a realizar en la fecha acordada para cada convocatoria.

Las fechas de entrega de los trabajos y exámenes de las evaluación continua se publicarán con suficiente antelación.

Algunas notas importantes a tener en cuenta son:

  • En la evaluación continua, junto a la corrección del trabajo, el profesor puede acordar con el alumno una entrevista personal para determinar los conocimientos y autoría del trabajo.
  • Excepcionalmente, si un alumno ha aprobado dos de las tres pruebas, el profesor podrá darle la opción voluntaria de cambiar el examen de la convocatoria oficial de Febrero por la recuperación de la prueba no superada. En este caso, las condiciones serán las mismas que en la evaluación continua.
  • El punto anterior solo es válido para la convocatoria de Febrero, no se guarda ninguna prueba para las convocatorias oficiales de septiembre y diciembre, donde el alumno que no haya superado la asignatura tendrá que presentarse a un examen escrito que cubre toda la materia del curso.
  • Los exámenes escritos pueden tener preguntas prácticas a resolver con el sistema de implementación (NetLogo) usado para el curso.

Anuncios y Sesiones

Aquí se irán publicando anuncios relevantes relativos al desarrollo del curso (en rojo), así como el contenido de las diferentes sesiones que se irán planificando (en azul). Las publicaciones serán en orden temporal inverso (arriba las más recientes):

Sistema de Implementación

IMPORTANTE: El libro de NetLogo disponible en este sitio web NO ES NECESARIO para el desarrollo de la asignatura. Los conocimientos necesarios sobre NetLogo para seguir el contenido de esta asignatura se ofrecen de forma abierta y gratuita por medio de los recursos que se ofrecen aquí y el trabajo personal del alumno. El libro está pensado para adquirir destrezas adicionales en el modelado de sistemas multiagente con NetLogo, no para aprender los fundamentos de Inteligencia Artificial.

El sistema de implementación seleccionado para todos los bloques del curso ha sido NetLogo (excepcionalmente, y a modo de demostración, es posible que se use algún otro software para alguna de las partes 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. El proyecto, iniciado por Uri Wilensky como un proyecto propietario, pero gratuito, dentro del Center for Connected Learning de la Universidad de Northwestern, se ha convertido desde hace unos años en un proyecto Open Source mantenido por una comunidad de desarrollo en Github.

Entre las variadas razones por las que ha sido elegido NetLogo para un curso de Inteligencia Artificial queremos destacar las siguientes:

  • El tiempo de desarrollo de modelos es extremadamente reducido, lo que facilita que en cuestión de minutos se puedan poner en práctica ideas acerca de cómo aplicar soluciones teóricas a problemas concretos.
  • Gracias a las capacidades gráficas que proporciona, las soluciones a los problemas se presentan de una forma visual que mejora la comprensión de los conceptos subyacentes.
  • Presenta un lenguaje de programación y entorno de trabajo sencillo, por lo que no se emplea un tiempo excesivo en su aprendizaje y se puede dedicar la mayoría del tiempo disponible en la asignatura a conceptos propios de su contenido, no a resolver dificultades técnicas de implementación.
  • Proporciona de forma nativa y natural un sistema de modelado basado en agentes, algo especialmente adecuado a un enfoque moderno de Inteligencia Artificial.
  • Es capaz de cubrir diversas áreas de Inteligencia Artificial de manera uniforme y sin el uso de extensiones del lenguaje o librerías externas, algo que con otros lenguajes de programación requeriría mayor esfuerzo.
  • Está basado en un paradigma de programación declarativo y con tintes funcionales, algo que, por sí solo, ya supone una razón suficientemente fuerte para ser incluído en el 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.

Los conocimientos mínimos de NetLogo que el alumno debe adquirir para poder seguir la asignatura con comodidad contienen (pero no se limitan a) la siguiente lista:

  • Estructuras de datos básicas (incluyendo los agentes): listas, cadenas, patches, tortugas, links, ...
  • Estructuras de programación: repeat, while, if, ifelse, ask (with), ...
  • Funciones y procedimientos más habituales: minmaxlistremove, ...
  • Cómo crear procedimientos y funciones.
  • Contextos de ejecución y procedimientos específicos de agentes por tipo.
  • Cómo crear especies de agentes y propiedades específicas por especie.
  • Manipulación, comunicación y modificación entre agentes.
  • Funciones de orden superior: map, reduce, filter, foreach.

Recursos Digitales

NetLogo se puede descargar gratuitamente en sus versiones para Linux, Mac o Windows, así como su reciente versión web (todavía no es 100% funcional): Minicurso de NetLogo que cubre los conocimientos mínimos necesarios sobre el lenguaje de programación para la realización de este curso: Repositorio Github con códigos fuente de las librerías y modelos/ejemplos vistos en clase, donde además se explica el uso de cada una de las librerías:
  Plataforma de Enseñanza Virtual de la Universidad de Sevilla  
 
 

Bibliografía

En cada una de las unidades se proporciona un conjunto de enlaces que sirven de referencia específica y ampliación al contenido asociado a la unidad.

Además, junto a esta bilbiografía específica se propone la siguiente bibliografía general que puede usarse de forma transversal al curso (algunas podrán servir para todos los bloques, y otras solo para algunos de ellos):