Docencia: Inteligencia Artificial 2019-20

Modificado el 8 de Diciembre de 2019

Ficha Técnica

Grado: Ingeniería de Computadores

Aula: F0.10 (Martes), A1.14 (Viernes)

Horario: Martes (10:40 - 12:30) y Viernes (8:30 - 10:30)

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.

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.

Contenido

Introducción
Sobre la IA... (24/09/19)
Breve Historia de la IA (24/09/19)
   
NetLogo (NetLogo QuickGuide)  
Parte I: IA Clásica    
Sistemas Lógicos:
Resolución de Problemas:

Estrategias de Búsqueda y Planificación:


Búsquedas con Adversario e Incertidumbre:
Problemas y Prácticas: 04/10, 11/10, 22/10, 29/10
Resumen Librería IA NetLogo Parte I
   
Parte II: Inteligencia Computacional    
Inteligencia Colectiva (5/11/19)
Algoritmos Genéticos - AG (8/11/19)
Optimización por Enjambres de Partículas - PSO (12/11/19)
Algoritmos de Colonias de Hormigas - ACO (19/11/19)
Resolviendo PSR con ACO (19/11/19)
Problemas y Prácticas: 22/11/19    
Parte III: Aprendizaje Automático    
Introducción al Aprendizaje Automático (26/11/19)    
Algoritmos Supervisados y No Supervisados (26/11/19) 
Algoritmos de Clustering (29/11/19)
Aprendizaje Inductivo: Árboles de Decisión - ID3 (03/12/19)
Medir la eficacia de un aprendizaje (03/12/19)    
Mapas Auto-Organizados (SOM in NetLogo) (10/12/19)
Redes Neuronales Artificiales (ANN in NetLogo) (13/12/19)

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, puedes bajarte la colección completa de archivos en un solo ZIP haciendo clic en el icono a la derecha de este párrafo), 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.  A lo largo del curso se destinarán algunas de las clases presenciales para la realización de ejercicios seleccionados y para responder dudas que puedan haber surgido durante su resolución y la explicación de las unidades. 

Se recomienda encarecidamente su realización como medio de preparación de la asignatura. 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.

  Evaluación Continua Convocatorias Oficiales
  Parte I
Parte II
Parte III
Diciembre
Febrero
Septiembre
Peso 1/3 1/3 1/3 1 1 1
Mínimo 3/10 3/10 3/10 5/10 5/10 5/10
Fecha 15/11/19  20/12/19  17/01/20  5/12/19 5/02/20 2/09/20

Hay dos modalidades, mutuamente excluyentes, para poder aprobar por medio de la evaluación continua:

  1. Realizando 3 exámenes parciales (uno por cada parte).
  2. Realizando 3 prácticas (una por cada parte).

En ambos casos la distribución de pesos de cada parte y condiciones son las mismas (las mostradas en la tabla). Para aprobar el curso en la Evaluación Continua es imprescindible sacar el mínimo indicado en la tabla en todas y cada una de las partes, y además la suma ponderada de todas ellas debe superar el 5 sobre 10. Como es habitual, las convocatorias de Diciembre, Febrero y Septiembre son independientes, de ahí que su peso sea 1.

Algunas características a tener en cuenta:

  • El alumno puede elegir la modalidad de evaluación continua que seguirá. La fecha límite para esta selección será el 11/10/2019.
  • Para los alumnos que elijan la modalidad 1 (exámenes), cada examen se realizará unos días después de la finalización de la parte correspondiente, durante las horas de clase (salvo que haya un consenso que especifique lo contrario entre el profesor y los alumnos) y su fecha se comunicará al alumnado con suficiente antelación y será publicada en la página de la asignatura (en la tabla anterior, en las celdas reservadas para ello).
  • Las fechas publicadas están asociadas también a las entregas de la modalidad 2 (prácticas).
  • Los alumnos que elijan la modalidad 2 (realización de prácticas) serán distribuidos en grupos para la realización de cada una de las prácticas. Esta modalidad solo podrá ser seleccionada por alumnos asistentes al curso. El tamaño de los grupos dependerá del número de alumnos que elijan esta modalidad, y los componentes de los grupos se cambiarán en cada práctica con el fin de que no haya dos alumnos que coincidan en 2 prácticas. Los grupos serán asignados por el profesor de forma aleatoria. La evaluación de la práctica se realizará a nivel de grupo, y cualquier miembro de cualquier grupo podrá ser evaluado individualmente si el profesor lo considerase necesario, siendo todos ellos responsables de la entrega en igual medida.
  • Excepcionalmente, si un alumno no ha superado el mínimo en una (y solo una) de las tres partes durante la evaluación continua (independientemente de la modalidad), entonces voluntariamente podrá usar el examen de Febrero para intentar recuperar esa parte. En este caso, las condiciones serán las mismas que en la evaluación continua, y la nota de la convocatoria oficial de Febrero será la correspondiente a la media ponderada considerando esta última nota para la parte no superada.

Anuncios

  • 27/11/2019: Actualizadas las calificaciones de la evaluación alternativa por Exámenes para mostrar los puntos conseguidos por los ejercicios evaluables de la Parte I.
  • 26/11/2019: Fijada la fecha para la realización del segundo examen (Parte II) y entrega de la segunda práctica. Será el día viernes, 20 de diciembre de 2019 en la hora de clase.
  • 25/11/2019: Publicados los Grupos de Prácticas para la Parte II, así como las propuestas para cada uno de los grupos.
  • 19/11/2019: Calificaciones de la evaluación alternativa: por Prácticas, por Exámenes. Revisión el lunes 25 a las 12:30.
  • 13/11/2019: Para la entrega de las prácticas se debe enviar un mensaje a fsancho@us.es de título "Práctica 1 del Grupo X" (donde X es el grupo asociado). En el cuerpo del mensaje se deben poner los nombres de los integrantes del grupo, se debe adjuntar un fichero comprimido (ZIP o RAR) con todos los ficheros de la entrega.
  • 30/10/2019: Añadido un enlace a la wiki del repositorio Github, donde puede encontrarse un resumen de las librerías principales desarrolladas.
  • 27/10/2019: Añadido un tema nuevo al curso de NetLogo para manejo del ratón (orientado, principalmente, a los alumnos que se examinan en la modalidad de prácticas).
  • 22/10/2019: Fijada la fecha del primer examen (Parte I). Será el día viernes, 15 de noviembre de 2019 en el aula H1.12. Se recuerda que es obligatorio traer un portátil para poder hacer la parte práctica del examen.
  • 22/10/2019: La fecha límite para la entrega de las prácticas (para los alumnos que siguen esta modalidad) es el viernes 15 de noviembre de 2019.
  • 12/10/2019: Publicados los Grupos de Prácticas para la Parte I, así como las propuestas para cada uno de los grupos.

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 uno 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 podemos 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, lo que por sí solo 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), ...
  • Cómo crear procedimientos y funciones.
  • Funciones y procedimientos más habituales: min, max, list, remove, ...
  • Contextos de ejecución y procedimientos específicos de agentes.
  • Creación de propiedades y razas de agentes.
  • 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:

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