Trimestre 13-I Curso: Inteligencia Artificial Prof. Gueorgi Khatchatourov Plan de la clase 25/01/2013 Tarea N°1 Entrega: 11 de febrero 2013 al ayudante Se permite desarrollo por equipos formados por 3 alumnos Contenido: Desarrollar programa que aplica método A* para "Rompecabeza de 8" Especificaciones: Operador introduce al programa un estado. El programa implementa A* demostrando cada paso de la búsqueda. Como las funciones heurísticas usar h1 y h2 (Sección 4.2, Russel and Norvig). Tema: Computación Evolutiva (CE) La búsqueda tradicional responde a la pregunta ¿Cómo debe actuar un agente para resolver un PB? Una alternativa consiste en la generación de un vasto conjunto de agentes, cuyo comportamiento para la búsqueda está basado en mismos principios, pero se varia en algunos detalles, y luego elegir de ellos aquél que tiene el mejor rendimiento. Esa idea se explora en CE de tal manera que el conjunto de agentes no se construye de una vez, sino generación tras generación mediante el principio de "sobrevivencia selectiva". Representación de programas en programación genética Los objetos de evolución son programas funcionales (functional programs) de tipo las funciones de LISP. Ellos pueden ser representados como árboles con nodos etiquetados. Nodos internos pueden ser: funciones, predicados, or acciones que tienen uno o más argumentos. Un ejemplo de cómo un programa de cálculo de 3+(54)/7 se representa como árbol, ver en archivo http://newton.uam.mx/xgeorge/Intel_Art/13_I/prog_funcional_como_arbol_25_01.pdf El problema de modelo que analizaremos en ese contexto es "Robot in grid world" (ver libro de Nilsson, N. J., "Inteligencia artificial: una nueva síntesis"). Dos ejemplos de ese tipo están archivo acaba mencionado y en otro archivo http://newton.uam.mx/xgeorge/Intel_Art/13_I/robot_en_mundo_2d_25_01.pdf Ese robot tiene tarea de moverse a norte hasta encontrar la primera frontera y luego marcharse permanentemente a lo largo de la frontera en la dirección del sentido de manecillas de reloj. Trimestre 13-I Curso: Inteligencia Artificial Prof. Gueorgi Khatchatourov El universo de los programas del robot se implementa como conjunto de los programas funcionales. Un subconjunto de ese universo se declara como generación-0 de los candidatos de ser el programa-objetivo. Luego, mediante unos operaciones sobre pares del conjunto, se construye siguiente generación, cuyos representantes deben supuestamente actuar mejor resolviendo la tarea. Esa operación se repite muchas veces en ciclo. Las funciones primitivas que se usan en el programa incluyen cuatro funciones booleanas: AND, OR, NOT, y IF, asimismo cuatro acciones norte, este, sur, oeste. Donde, como usualmente, AND(x,y)=0 if x=0; else y OR(x,y)=1 if x=1; else y NOT(x)=0 if x=1; else 1 IF(x,y, z)=y if x=1; else z Las acciones mueven robot por un paso a la dirección correspondiente. Las acciones tienen efecto, pero no regresan valores. Intentando moverse a la pared, no hay efecto. El robot tiene ocho sensores n, ne, e, se, s, sw, w, y nw los cuales regresan 0 o 1 (libre o pared). Localidades relativos a robot a las cuales se refieren los sensores ver en Fig.4.2 del archivo http://newton.uam.mx/xgeorge/Intel_Art/13_I/prog_funcional_como_arbol_25_01.pdf Un ejemplo del programa del robot que cumple con las especificaciones se presenta en http://newton.uam.mx/xgeorge/Intel_Art/13_I/prog_robot_sigue_pared_25_01.pdf. El proceso evolutivo tiene intención de construir un programa similar. Descripción del proceso evolutivo Se genera aleatoriamente una populación de programas, usando funciones, constantes, y entradas de sensores sobre los cuales pensamos que ellos podrían ser eficientes en el dominio de interés. Esos programas iniciales forman generación-0. La dimensión de generación-0 es un parámetro del proceso (5000 en el ejemplo). En el ejemplo, cada programa se produce de funciones primitivas AND, OR, NOT, y IF, las funciones sensoriales n, ne, e, se, s, sw, w, y nw, y los constantes 1 y 0. Los programas de cada generación se evalúan y una nueva generación se produce hasta producir un programa que actúa bastante bién. La evaluación del programa se hace mediante su ejecución múltiple para ver con qué calidad cumple con la tarea. (… ) La medida numérica de calidad del programa se llama fitness (valores grandes significan mejor calidad) La generación—(i+1) se construye de la manera siguiente: Trimestre 13-I Curso: Inteligencia Artificial Prof. Gueorgi Khatchatourov 1. 500 programas (10%) de la generación i se copian directamente a la i+1. Para seleccionar cuales deben ser copiados se hace un proceso de selección comparativa (tournament selection process) : siete ("siete" es parámetro del proceso) programas sean elegidos (con reemplazamiento) aleatoriamente de los 5000. Luego el programa con el mayor fitness se escoge de los siete. 2. 4500 programas (90%) de nuevos programas-hijos (child programs) se incluyen en la generación i+1. Cada programa-hijo se produce de un programa-madre y un programapadre a través de "crossover operation" (?) de la manera siguiente: madre y padre se escogen mediante de selección comparativa (como arriba). Luego aleatoriamente elegido sub-árbol de padre se re-emplaza con aleatoriamente elegido sub-árbol de madre. Un ejemplo de esa operación se presenta en archivo http://newton.uam.mx/xgeorge/Intel_Art/13_I/padres_y_su_hijo_25_01.pdf. 3. A veces operación de mutación se aplica para un porcentaje pequeño (1%) de población. En ese caso, como antes, mediante selección comparativa se escoge padre. Luego un subárbol de padre elegido aleatoriamente se sustituye con el otro generado como para la generación-0.