Docencia: Inteligencia Artificial 2020-21

Modificado el 22 de Octubre de 2020

Ficha Técnica

Grado: Ingeniería de Computadores

Aula: H1.12

Horario: Lunes (10:40 - 12:30) y Jueves (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. 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

Aunque este objetivo es deseable siempre, y más aún en una asignatura como Inteligencia Artificial, se hace especialmente interesante en los tiempos particulares que vivimos bajo el efecto de una pandemia que condiciona las metodologías docentes disponibles.

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 que proporciona la Plataforma de Enseñanza Virtual de la Universidad de Sevilla.
  2. El curso se establece como una serie de sesiones síncronas cuyo contenido y forma puntual se debe conocer por adelantado, y que será explicitado en forma de un diario de clase. En este diario se anotará el contenido mínimo que un alumno debe haber mirado antes de poder abordar cada sesión.
  3. Las sesiones online se harán a las horas de clase, y usando la plataforma Collaborate disponible en la Enseñanza Virtual.
  4. En cada sesión se hará: un breve resumen del contenido (sin entrar en detalles que ya han estado a disposición del alumno, y centrado en los puntos principales del mismo), resolución de dudas concretas planteadas por los alumnos (que pueden realizar en ese momento, o plantear previamente por medio de la plataforma), planteamiento y resolución de problemas relacionados con el contenido, etc.


    Para mantener el número de horas de trabajo del alumno bajo unos estándares similares a los que se seguirían en una clase presencial estándar, es posible que en algunas sesiones se emplee una última sección (nunca mayor a 30 minutos) para la consulta individualizada del material necesario para la siguiente sesión, con el fin de poder realizar una primera lectura y resolver dudas iniciales con ayuda del profesor. 

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
Sobre la IA...
Breve Historia de la IA
   
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:
Resumen Librería IA NetLogo Parte I    
Parte II: Inteligencia Computacional    
Inteligencia Colectiva
Algoritmos Genéticos - AG
Optimización por Enjambres de Partículas - PSO
Algoritmos de Colonias de Hormigas - ACO
Resolviendo PSR con ACO
Parte III: Aprendizaje Automático    
Introducción al Aprendizaje Automático    
Aprendizaje Supervisado y No Supervisado
Algoritmos de Clustering
Aprendizaje Inductivo: Árboles de Decisión - ID3
Medir la eficacia de un aprendizaje    
Mapas Auto-Organizados (SOM in NetLogo)
Redes Neuronales Artificiales (ANN in NetLogo)
Neural Network Playground
Metodología Aprendizaje Automático    

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. 

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 y de lo trabajos de evaluación.

  Evaluación Continua Convocatorias Oficiales
  Trabajo 1
Trabajo 2
Ejercicios Diciembre
Febrero
Septiembre
Peso 40% 40% 20% 100% 100% 100%
Mínimo 3/10 3/10 0 5/10 5/10 5/10
Fecha      --      

La evaluación continua se puede aprobar por medio de la realización de 2 trabajos prácticos que pesan lo mismo y que necesitan de, al menos, una nota de 3 sobre 10 para ser considerados.

Además, a lo largo del curso se dejarán propuestos ejercicios específicos que podrán ser resueltos por los alumnos y que tendrán un peso total máximo de 2 puntos en la evaluación alternativa, y que serán sumados a la media ponderada de los trabajos prácticos al final del curso para calcular la calificación resultante de cada alumno.

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 se publicará con suficiente antelación.

Algunas características a tener en cuenta:

  • En la evaluación continua, junto a la corrección de cada 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 uno de los dos trabajos, pero su media no llega al aprobado global, el profesor podrá darle la opción voluntaria de cambiar el examen de la convocatoria oficial de Febrero por un trabajo de recuperación de la parte no superada. 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.
  • El punto anterior solo es válido para la convocatoria de Febrero, no se guarda ninguno de los trabajos 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.

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 (más arriba las más recientes):

  • Jueves 29/10/20: Sesión 6.
    • Requisitos: Problemas de Búsqueda y Planificación.
    • Objetivos: Representación de problemas como Búsqueda y Planificación.
  • Lunes 26/10/20: Sesión 5.
    • Requisitos: Problemas de Satisfacción de Restricciones (PSR).
    • Objetivos: Representación de problemas como PSR.
  • Jueves 22/10/20: Sesión 4.
    • Requisitos: Sistemas Lógicos (continuación).
    • Objetivos: Representación de problemas en Sistemas Lógicos.
  • Lunes 19/10/20: Sesión 3.
    • Requisitos: Sistemas Lógicos.
    • Objetivos: Repaso de Sistemas Lógicos (LP) y ejercicios de demostración de sistemas de inferencia.
  • Jueves 15/10/20: Sesión 2.
  • Jueves 08/10/20: Sesión 1.
    • Requisitos: Instalar NetLogo. Minicurso de NetLogo (Recursos Digitales).
    • Objetivos: Dar una introducción a NetLogo, repasando los conceptos principales del lenguaje y viendo ejemplos completos de desarrollo de soluciones.
  • Lunes 05/10/20: Sesión 0. Presentación de la asignatura. Se hará una presentación presencial en el aula H1.12 haciendo uso de la división en 2 grupos que asigna la US. El objetivo de la sesión será la de explicar en detalle el método de ejecución de la asignatura. Los horarios asignados a cada grupo son:
    • Subgrupo 1: 10:40 - 11:30
    • Subgrupo 2: 11:50 - 12:30
    Se pide que los alumnos lleguen a la hora puntualmente y sigan las recomendaciones COVID para el acceso a clase (sin formar agrupaciones en el pasillo, entrada ordenada y ocupando los puestos permitidos, con mascarilla, desinfección previa de manos, etc.).
    Si tienes dudas acerca de tu subgrupo, puedes consultar la siguiente página de la Secretaría Virtual de la US (te pedirá tus credenciales de acceso): https://sevius4.us.es/index.php?escenariocovid

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 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, 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), ...
  • 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 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):