Departamento de Sistemas de Información Desarrollo de Videojuegos 2D en Java con técnicas de Inteligencia Artificial Libro de texto creado para la asignatura Escrito por: Dr. Clemente Rubio Manzano Prologo por Michio Kaku. Algunas personas piensan que la inteligencia es el gran logro de la evolución. Pues bien, si esto es así, entonces deberían haber existido muchas más especies inteligentes sobre el planeta Tierra. Pero, por lo que sabemos, somos los únicos. Los dinosaurios, que estuvieron en el planeta durante más de doscientos millones de años, no llegaron a ser inteligentes. Los humanos modernos, han estado en la Tierra aproximadamente ciento de miles de años, una pequeña fracción de la edad de la Tierra, que se estima en 4.5 billones de años. Por tanto podríamos sacar una primero conclusión, la inteligencia no es realmente necesaria para la vida. La madre naturaleza se las ha ingeniado bastante bien sin criaturas inteligentes. Pero, ¿Cómo nos hicimos inteligentes? ¿Qué nos diferencia de los animales? Hay tres ingredientes básicos. Uno es el pulgar oponible que nos permite manipular el entorno. Así que, este es uno de los ingredientes secretos, ser capaces de cambiar el mundo que nos rodea. El segundo ingrediente es la visión. Pero no cualquier visión, una visión de depredador. Tenemos ojos en la frontal de nuestra cabeza, no a los lados y ¿por qué?, porque los animales con ojos en la parte frontal son depredadores (leones, tigres, zorros). Los animales con ojos a los lados son presas y no son inteligentes, como por ejemplo un conejo. Un depredador tiene que aprender a cazar y acechar, aprender a predecir los movimientos de la presa, si no, no podrá comer. Si tú eres un conejo lo único que debes hacer es correr. El tercer ingrediente es el lenguaje porque debes poder comunicarte para que tu conocimiento adquirido durante tu vida pase de generación en generación y por lo que sabemos los animales aunque se comunican no permiten la transmisión de conocimiento, salvo algunas señales primitivas. Los animales no tienen cultura, en el sentido más amplio de la palabra, nosotros sí y somos capaces de transmitirla de forma eficaz. Así se supone que el cerebro evolucionó. Tenemos pulgar oponible, tenemos un lenguaje de entre cinco a diez mil palabras y tenemos la visión de un depredador. Por tanto, quizás la razón por la que ninguna criatura consiguió ser inteligente es que no cuenta con estos tres ingredientes. Entonces, la siguiente pregunta si podemos crear seres inteligentes. ¿Podemos hacer que un chimpancé sea inteligente como ocurrió en el planeta de los simios?. Pues lo creas o no, la respuesta podría ser que sí. Somos iguales a ellos en un 98.5 por ciento. Por tanto, en el futuro mediante una terapia genética podríamos crear seres inteligentes. Pero la pregunta y la controversia, por qué manipular un chimpancé para que sea más y más humano, si ya conocemos el resultado, nosotros. Capítulo 1 Introducción a la Inteligencia Artificial La Inteligencia Artificial (IA o AI de sus siglas en inglés Artificial Intelligence) es una disciplina científica relativamente nueva cuyo objetivo es el diseño e implementación de sistemas artificiales que permitan simular la inteligencia del ser humano, y con ello estar en disposición de realizar la mayoría de nuestras habilidades cognitivas y motoras. Hoy día, la IA está aún lejos de conseguir este reto, no se ha podido alcanzar aún las promesas iniciales, ni los increíbles predicciones de la industria cinematográficas. Seguimos esperando a Terminator, al niño de IA o al sistema operativo romántico de Her; si es que alguna vez llegan, porque parece que el par Hombre-Máquina es mucho más prometedor que el par MáquinaHombre. Parece más cercano conseguir hombres mejorados tecnológica y genéticamente que máquinas que sean tan inteligentes como los hombres. Porque si ya tenemos una gran máquina con un súper diseño, como es el ser humano, por qué diseñar máquinas que nos imite en todos nuestros aspectos. ¿Tendría sentido crear máquinas que sufran o sientan dolor?. Este interesante dilema estará fuera del alcance de este texto. Sin embargo, la IA ha conseguido algunos hitos importantes: se ha desarrollado un software capaz de jugar a los videojuegos de Atari y superar a los humanos en puntos; existen pacientes que han renunciado a sus manos humanas dañadas por manos biónicas, se han creado poemas por computador que han conseguido engañar a los editores de revistas. Además de los famosos casos con gran repercusión mediática como la victoria del supercomputador de IMB frente al campeón mundial de ajedrez o los campeones del concurso Jeopardy de EEUU. O más recientemente, la victoria de una red neuronal creada por la empresa DeepMind, propiedad de Google, consiguió ganar al campeón del mundo del juego GO. Tras este pequeño paréntesis nos toca hablar de la IA como asignatura de Universidad, que es el tema que nos ocupa. La IA es una asignatura multidisciplinar, que podría cubrir una carrera en si misma, pues abarca áreas tan diversas como la robótica o la biomecánica, las ciencias de la computación, la algorítmica, el análisis numérico. Pasando por las Ciencias de la 3 Cognición, hasta llegar a la filosofía o la antropología. Si existiera una llamada Ingeniero en Inteligencia Artificial, algunos de los ramos junto a sus profesores deberían ser: 1. Lógica y sentido común (John McCarthy). 2. Ciencias de la cognición e IA (Marvin Misky). 3. Resolución de problemas y Planificación (Nils J. Nilsson) 4. Computación con percepciones (Lofti Zadeh) 5. Probabilidad y Causalidad (Judea Pearl) 6. Computación Lingüística (Noam Chomsky) 7. Ingeniería del Conocimiento (Edward Feigenbaum) Nosotros como ingenieros informáticos podríamos estar interesados en cualquiera de ellas, pero en un curso de Introducción a la IA y por ser la programación una de las competencias fundamentales de egreso, debemos centrar nuestra atención en las técnicas de programación que permitan crear programas informáticos que muestren un comportamiento autónomo e inteligente, es decir, crearemos sistemas software inteligentes. Y esto lo realizaremos desde una perspectiva novedosa, seremos los creadores de nuestro propio mundo, dotaremos de movimiento a nuestras entidades y las programaremos para que realicen las funciones deseadas. La técnica con la que trabajaremos a lo largo del curso será la Resolución de Problemas y la Planificación de rutas. 1.1. Nuestro concepto de inteligencia La inteligencia es un concepto con mucha controversia y sin una definición consensuada clara. Para definirla con cierto rigor y claridad necesitamos acotarla. Para ello, vamos a crear un mundo artificial (virtual), lo más simple o complejo que queramos, con los medios que dispongamos -y el tiempo, por supuesto, con el que contemos, 4 meses en nuestro caso-. En este mundo virtual habrá entidades, actores, con movimiento, sin movimiento que interactúan unos con otros. Un humano podría interactuar con ese mundo virtual y se le podría encomendar una tarea o problema, capturar recompensas distribuidas por un espacio 2D, por ejemplo. Éste sería capaz de resolverlo, con algo de entrenamiento, llegando incluso a obtener gran habilidad en ese proceso con el transcurso del tiempo. La inteligencia es, en este contexto, la habilidad del humano para capturar de la mejor forma posible las recompensas distribuidas por el escenario. Si las recompensas cambian de posición o, incluso, si surgen nuevos elementos, un humano, tú mismo, sería capaz de adaptarse a ese nuevo escenario, cambiar su comportamiento y volver a resolver el problema de la misma forma. La adaptación es, por tanto, como se ha determinado en la literatura especializada, unas de las cualidades más importantes de los humanos y de su inteligencia, y continua, hoy día, siendo la principal limitación de la IA (conocido desde sus inicios como FRAME PROBLEM). Hoy día, ningún sistema que se haya sido creado por el hombre ha sido capaz de adaptarse de igual forma que un humano, porque cuando crea un robot para patinar difícilmente éste podrá escalar una montaña, requerirá un nuevo diseño, no solo cambiar su programación, también cambiar sus piezas, su aparato locomotor artificial. Por lo tanto, acotando, la IA será para nosotros la creación de un entorno virtual y de unos agentes software que permitan simular a un humano, es decir, sustituirlo para la resolución de problemas en este entorno. Por ejemplo, en el caso que nos ocupa la capacidad de recoger las recompensas distribuidas por el mundo virtual sin ser capturados por adversarios y esquivando los obstáculos. Por tanto el concepto de agente será fundamental para nosotros. 1.2. Diseño basado en agentes El diseño basado en agentes hace uso de un conjunto de algoritmos de persecución y escape, búsqueda de rutas, planificación, toma de decisión para poder implementarlos en un entorno virtual. Los agentes se relacionan directamente con el concepto de NPC (Non-player character), por tanto, en este sentido, los videojuegos y los entornos virtuales se pueden considerar sistemas multiagente. Por tanto, nuestro objetivo es estudiar cómo usar estos agentes para que puedan emplearse en la construcción de entornos virtuales. Existen, al menos, dos metodologías: diseño de agentes basados en comportamiento y diseño de agentes basados en objetivos. Un agente es una entidad que recibe como entrada percepciones y devuelve acciones. Desde el punto de vista de la implementación un agente es un programa que se instala sobre un entorno o arquitectura (mundo virtual). Los entornos con los que vamos a trabajar son entornos totalmente observables, deterministas y discretos. Los agentes se pueden programar en función de sus comportamientos (e.g. atacar, huir). Para realizar una programación basada en comportamientos se deben seguir los siguientes pasos: 1. Estudiar el entorno. Definirlo formalmente mediante parámetros adecuados. 2. Analizar qué es lo qué debe ser capaz de hacer el agente (e.g. moverse, esquivar obstáculos y oponentes, capturar recompensas. 3. Estudiar cuáles son los comportamientos diseñados y cuándo ocurren en función del entorno 4. Asociar a cada comportamiento una funcionalidad. Establecer qué es lo que debe ocurrir como acción asociada a cada comportamiento Las técnicas habituales de implementación son las Máquinas de Estados Finitas para implementar las transiciones de comportamiento y los algoritmos de búsqueda para implementar su funcionalidad asociada. Por ejemplo, en el caso del comecocos podríamos tener 3 comportamientos para los fantasmas: inactivo, persiguiendo y huyendo. Se pasa del estado inactivo al persiguiendo cuando han pasado dos segundos, del persiguiendo al huyendo si el comecocos ha comido una pastilla, del huyendo al persiguiendo cuando han pasado diez segundos, de huyendo al inactivo cuando el comemos está comiendo. Además deberíamos asociar dos funciones a cada comportamiento. la función huir() que deberá implementar la funcionalidad de este comportamiento y la función perseguir() que implementará la funcionalidad del comportamiento persiguiendo.