Cursos: Inteligencia Artificial
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
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, pero recuerda que los modelos pueden ir actualizándose, así como aparecer nuevos modelos y ejemplos de uso.
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:
- Agentes: patches, tortugas, links.
- Estructuras de datos básicas: listas, arrays, matrices, diccionarios, ...
- 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.
- Procedimientos anónimos (funciones lambda).
En este otro curso de estas mismas páginas puedes encontrar los fundamentos de este lenguaje de programación necesarios para entender los detalles técnicos de los modelos que se ofrecen aquí.
Recursos Digitales
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):
Russell, S. y Norvig, P. Artificial Intelligence (A Modern Approach), 3rd. ed. Prentice Hall International, 2010.
- Russell, S. y Norvig, P. Inteligencia Artificial (Un Enfoque Moderno), Segunda ed. Prentice-Hall International, 2004. (Traducción al español de la segunda edición del anterior).
- Nilsson, N.J. Inteligencia artificial (Una nueva síntesis). McGraw-Hill, 2001.
- Millington, I. y Funge, J. Artificial Intelligence for Games. Elsevier Inc., 2006.
- Teahan, W. J. Artificial Intelligence - Agents and Environment / Agent Behaviour. William John Teahan & Ventus Publishing ApS, 2010.
- Marsland, S. Machine Learning: An Algortihmic Perspective. Chapman & Hall/Crc Machine Learning & Pattern Recognition, 2009.
- Mitchell, T. Machine Learning. McGraw Hill, 1997.
- García Vázquez, J.C. y Sancho Caparrini, F. NetLogo: Una herramienta de Modelado. 2016.