Cursos: Inteligencia Artificial

Modificado el 20 de Noviembre de 2017

IMPORTANTE: Este curso NO es el que se imparte oficialmente en el Grado de Ingeniería de Computadores, sino un superconjunto del mismo (en realidad, esa asignatura es una selección de algunos temas de este curso más amplio, que sigue en preparación). Si buscas el contenido de esa asignatura, puedes acceder a él desde el menú de Docencia.

Objetivos

El objetivo general del curso es introducir al estudiante en técnicas avanzadas de Inteligencia Artificial, desde las más clásicas hasta las más novedosas, haciendo especial énfasis en las relacionadas con sistemas multiagente, con el fin de que sea capaz de explicar, analizar e implementarlas en sus proyectos futuros, ya sean profesionales o académicos.

Tras haber realizado este curso con aprovechamiento, el estudiante debería ser capaz de:

  • Describir y reconocer un buen número de las principales técnicas de Inteligencia Artificial, tanto en términos generales como a un nivel técnico detallado.
  • Comparar y evaluar la idoneidad de varias técnicas de Inteligencia Artificial para resolver un problema concreto dado.
  • Combinar diferentes técnicas de Inteligencia Artificial tanto desde un punto de vista teórico como práctico.
  • Aplicar una técnica concreta de Inteligencia Artificial a un problema concreto dado.
  • Reconocer las dificultades generales y los errores más habituales en el uso real de técnicas de Inteligencia Artificial.
  • Explorar de manera independiente la literatura relevante de un proyecto de Inteligencia Artificial específico.
  • Implementar técnicas no triviales de Inteligencia Artificial.

Contenido

Introducción: Generalidades 
Introducción a la IA    
NetLogo (NetLogo QuickGuide) (snnipets)  
Representación del Conocimiento
Pensando y Resolviendo por Modelos

Sistemas Multiagente y Simulación
   
Parte I: IA Clásica      
Espacios de Estados
Estrategias de Búsqueda


Juegos con Adversario: Minimax
Satisfacción de Restricciones     
Introduciendo decisiones:



Parte II: Inteligencia Computacional      
Inteligencia Colectiva 
Sistemas Complejos
Redes Complejas (Complex Networks Toolbox)


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

AG: Algoritmos Genéticos 
PSO: Optimización por Enjambres de Partículas
ACO: Algoritmos de Colonias de Hormigas
Resolviendo PSR con ACO
Optimización en el Espacio de Parámetros de un Modelo
 
Parte III: Aprendizaje Automático      
Introducción al Aprendizaje Automático
   
Algoritmos Supervisados y No Supervisados
 
Fundamentos Matemáticos del Aprendizaje Automático    
Aprendizaje Inductivo: Árboles de Decisión
Métodos Combinados de Aprendizaje    
Mapas Auto-Organizados (Self Organizing Maps in NetLogo)
Redes Neuronales Artificiales (Artificial Neural Networks in NetLogo)
Entrenamiento de Redes Neuronales: mejorando GD
Aprendizaje por Refuerzo: Algoritmo Q Learning    

En las columnas de la derecha se ofrecen los enlaces a las librerías y ejemplos implementados en NetLogo de los métodos vistos en el tema (y que están disponibles como un proyecto de Github), así como un enlace a la sección correspondiente de los ejercicios propuestos. Puedes bajarte la colección completa de archivos en un solo ZIP haciendo clic en el icono de la derecha.

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. El nivel de los ejercicios es muy variado, algunos son teóricos y requieren de unos pocos pasos para resolverlos, mientras que otros requieren de la creación de modelos completos para poner a prueba la solución dada.

Sistema de Implementación

El sistema de implementación seleccionado para todos los bloques del curso ha sido NetLogo:

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 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, 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.

En este otro curso de estas mismas páginas puedes encontrar los fundamentos para entender los modelos que se ofrecen aquí.

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