Introducción a la Inteligencia Artificial PROFESORA Ing. María José Abásolo ASIGNATURA Código 2719 Optativa de 3er. año de la carrera Informática de Gestión Curso 2000-2001, 2do. cuatrimestre Aproximadamente 15 semanas de clase EXÁMENES 12 de junio del 2001 11 de septiembre del 2001 HORARIOS Martes 10.30-12.30 hs. (Teórica Aula P9 - Práctica Aula 8) Viernes 10.30-12.30 hs. (Teórica Aula P9 - Práctica Aula 8) TUTORÍAS Lunes 10.30-13.30 hs y 14.30-17.30 OBJETIVOS En esta asignatura se pretende que el alumno se introduzca en el área de Inteligencia Artificial. Se tratan dos grandes temas de aplicaciones de IA: los juegos y el aprendizaje. En la parte práctica, se introducirá el uso del lenguaje de programación Lisp en aplicaciones de IA. Se pretende que el alumno llegue a implementar algoritmos de IA en este lenguaje, por ej. juegos, y pueda comprobar la conveniencia del mismo para aplicaciones de esta área frente a lenguajes convencionales. TEMARIO 1- INTRODUCCIÓN 1.1. Definición de Inteligencia Artificial (IA) y evolución histórica 1.2. Técnicas de resolución de problemas de IA 1.3. Criterios de éxito de la IA 1.4. Resolución de problemas de IA: 1.4.1. Definición formal del problema 1.4.2. Estrategia de control: Métodos de búsqueda 1.4.2.1. Búsqueda Breadth-First Search 1.4.2.2. Búsqueda Depth-First Search 1.4.2.3. Búsqueda Heurística 1.4.3. Análisis del problema 1.4.4. Representación del conocimiento 1.4.5. Técnicas de resolución: Métodos de búsqueda heurística 1.4.5.1. Generación y prueba 1.4.5.2. Escalada (hill climbing) 1.4.5.3. Búsqueda best-first search 1.4.5.4. Reducción del problema 1.4.5.5. Verificación de restricciones (constraint satisfaction) 1.4.5.6. Análisis de medios y fines (means-ends analysis) 2- JUEGOS 2.1. Introducción 2.2. Juegos sin adversario: algoritmo A* 2.3. Juegos con adversario : algoritmo Minimax 2.3.1. Búsqueda Minimax 2.3.2. Poda alfa-beta de la búsqueda Minimax 2.3.3. Refinamientos adicionales 2.3.3.1. Poda de inultilidades 2.3.3.2. Espera del reposo 2.3.3.3. Búsqueda secundaria 2.3.3.4. Uso de movimientos de libro 2.3.3.5. Búsqueda sesgada 2.4. Algoritmos alternativos 2.4.1. Minimax dependiente de adversario 2.4.2. Profundización iterativa 2.4.2.1. Profundización iterativa en juegos bipersonales: MINIMAX 2.4.2.2. Profundización iterativa en juegos unipersonales 3- APRENDIZAJE 3.1. Aprendizaje memorístico 3.2. Aprendizaje a través de consejos 3.3. Aprendizaje en la resolución de problemas 3.3.1. Aprendizaje por medio de ajustes de parámetros 3.3.2. Aprendizaje con macro-operadores 3.3.3. Aprendizaje mediante troceado 3.4. Aprendizaje a partir de ejemplos: inducción 3.5. Aprendizaje basado en explicaciones 3.6. Aprendizaje con redes neuronales PRÁCTICAS Tutorial de Lisp: aprender Lisp a través de un tutorial en el que se aplican conceptos de Inteligencia Artificial aplicada a la educación (ej. GREATERP de John Anderson, ELM-ART). Como ejercicios prácticos el alumno implementará juegos usando el lenguaje de programación Lisp. Explicación breve de los temas a estudiar Juegos Los juegos provocan una inexplicable fascinación y, la idea de que las computadores puedan jugar existe desde que existen las computadoras: - Siglo XIX, Babbage, arquitecto de computadoras, pensó en programar su máquina analítica para que jugara al ajedrez. - '50, Shannon describió los mecanismos que podían usarse en un programa jugara al ajedrez - '50, Turing describió un programa para jugar al ajedrez pero no lo construyó - '60, Samuel construyó el primer programa de juegos importante y operativo, el cual jugaba a las damas y podía aprender de sus errores para mejorar su comportamiento Los juegos proporcionan una tarea estructurada en la que es muy fácil medir el éxito o el fracaso. En comparación con otras aplicaciones de inteligencia artificial, por ejemplo comprensión del lenguaje, los juegos no necesitan grandes cantidades de conocimiento. En un primer momento se pensó que se podrían resolver por búsqueda exhaustiva en el árbol del juego, es decir, un árbol que contenga todos los movimientos posibles de ambos jugadores. Considerando por ejemplo el juego de ajedrez, en una partida cada jugador realiza una media de 50 movimientos, con un factor de ramificación medio de 35 posibilidades, por lo tanto para examinar el árbol de juego completamente se tendrían que examinar 35 100 posibilidades. Resulta evidente que una simple búsqueda directa no es posible de realizar en la práctica, y por lo tanto es necesario algún tipo de procedimiento de búsqueda heurística. Aprendizaje En lugar de hacer aquellas actividades para las que han sido programadas, ¿pueden las máquinas aprender cosas nuevas y adaptarse a nuevas situaciones? En 1961, Ada Augusta dijo "la máquina analítica ... puede hacer lo que sea si se le ha indicado la manera de hacerlo". Es decir, no hay nada que prohiba que a una computadora se le diga como interpretar sus entradas de modo que su rendimiento aumente gradualmente. En 1983 Simon propuso que el aprendizaje implica "cambios en el sistema que se adaptan en el sentido de que le permiten llevar a cabo la misma tarea a partir de las mismas condiciones de un modo más eficiente y eficaz a la vez". Así definido el aprendizaje cubre una amplia gama de fenómenos desde la adquisición de conocimiento hasta el perfeccionamiento de la habilidad. El simple almacenamiento de información computada conocido como aprendizaje memorístico, constituye la actividad de aprendizaje más básica. Otra forma de aprender es pidiendo consejos. Esta técnica resulta similar a la anterior, solo que puede ser necesario que los consejos de alto nivel sean primero operacionalizados para que los programas los utilicen en la resolución de problemas. También es posible aprender a través de la propia experiencia adquirida en la resolución de problemas. A partir de la estructura de un problema y los métodos que se emplearon para resolverlo, se puede generalizar el método para solucionar otros problemas relacionados de un modo más fácil. Otra forma de aprendizaje es el aprendizaje a partir de ejemplos. Esto se basa en aprender a clasificar las cosas sin haber recibido reglas explícitas. Algunos programas hacen uso de un profesor que ayuda a clasificar las cosas corrigiendo errores. Lenguaje de programación LISP La inteligencia artificial es un conjunto de métodos y filosofía, y por lo tanto no está atada a un lenguaje en particular. Los problemas de IA requieren que los programas manipulen conocimiento en lugar de números. Los investigadores desarrollaron nuevos lenguajes para atacar estos problemas. Lisp, de "List Processing", fue creado por McCarthy (MIT) en los '60. Es un lenguaje de propósito general, procedural, basado en aritmética y manipulación de símbolos. Lisp usa datos de entrada, y una función Lisp especifica como operar en los datos para obtener el resultado. La programación en términos de relaciones entre símbolos se denomina programación simbólica. Dado que el conocimiento consiste en símbolos y asociaciones entre ellos, Lisp resulta uno de los lenguajes más convenientes en aplicaciones de inteligencia artificial. En esta asignatura se realizarán prácticas en el lenguaje Lisp, y en particular se implementarán algoritmos de juegos para aplicar los conceptos aprendidos en el capítulo dedicado a este tema. Otro de los lenguajes usados en IA, en particular en sistemas expertos, es el lenguaje declarativo Prolog. Es un lenguaje de programación específico basado en lógica, que describe relaciones entre datos. Un usuario pregunta a un programa Prolog acerca de si un hecho es conocido o puede derivarse de la base de datos. BIBLIOGRAFÍA (a completar) [Rich98] Rich E., Knight K. Inteligencia Artificial. McGraw-Hill, ISBN: 84-481-18588, 1998 Winston P. Inteligencia Artificial. Addison-Wesley Iberoamericana, ISBN: 0-20151876-7, 1994 Lisp Henderson P. Functional Programming. Application and Implementation. Prentice Hall ISBN: 0-13-331579-7, 1980 Winston P., Horn B. Lisp. Addison-Wesley, ISBN: 0-201-08329-90-201-08372-8, 1981.