Departamento de Informática Universidad Carlos III de Madrid Ingeniería Técnica en Informática de Gestión Inteligencia Artificial Septiembre 2011. 1 a parte Normas generales del examen El tiempo para realizar el examen es de 2 horas Sólo se responderán preguntas sobre el examen los primeros 30 minutos Si se sale del aula, no se podrá volver a entrar durante el examen No se puede presentar el examen escrito a lápiz Problema 1. (2,5 puntos Se quiere realizar un sistema de producción para que genere de forma automática el horóscopo diario de un periódico. Para ello, se dispone de una base de frases ya hechas dividas por temas y por la connotación de la frase. Los temas pueden ser tres, amor, salud y trabajo, aunque podrían cambiar por lo que el sistema debe ser lo más flexible y genérico posible. La connotación puede ser positiva o negativa, dependiendo del mensaje de la frase. El sistema de producción elegirá de forma aleatoria dos frases cualesquiera de cada uno de los temas considerados (amor, salud y trabajo para cada uno de los signos del zodiaco, de forma que no haya ninguna frase repetida en todo el horóscopo del día generado. Por ejemplo, la salida que se generaría podría ser: ARIES: Frase x1 de amor. Frase x2 de amor. Frase x3 de salud. Frase x4 de salud. Frase x5 de trabajo. Frase x6 de trabajo TAURO: Frase y1 de amor. Frase y2 de amor. Frase y3 de salud. Frase y4 de salud. Frase y5 de trabajo. Frase y6 de trabajo... PISCIS: Frase z1 de amor. Frase z2 de amor. Frase z3 de salud. Frase z4 de salud. Frase z5 de trabajo. Frase z6 de trabajo Donde las frases se han elegido de forma aleatoria de una base de frases ya fijas y no puede haber ninguna repetida. Es suficiente con que el sistema de producción muestre por pantalla la salida anterior. Se pide: 1. (1 punto Utilizando sintaxis de CLIPS, definir los marcos, plantillas, instancias y hechos necesarios para realizar el sistema de producción pedido de forma que el número de reglas necesario sea mínimo 2. (1,5 puntos Utilizando sintaxis de CLIPS, definir las reglas necesarias para implementar la funcionalidad pedida. Es obligatorio minimizar el número de reglas AYUDA: Para minimizar el número de reglas, la base de hechos inicial debe incluir la información relativa al orden a seguir para generar el horóscopo tanto por los signos del zodiaco como por los temas. Problema 2. (2,5 puntos Se quiere realizar una modificación al sistema de producción definido en el problema anterior de manera que todas las frases que constituyen el horóscopo del signo del zodiaco que coincide con el mes actual tienen connotación positiva. Para simplificar, se asume que a cada mes le corresponde un único signo de la siguiente forma: ARIES abril TAURO mayo GÉMINIS junio CÁNCER julio LEO agosto VIRGO septiembre LIBRA octubre ESCORPIÓN noviembre SAGITARIO diciembre CAPRICORNIO enero ACUARIO febrero PISCIS marzo
Para ello, se debe empezar a generar el horóscopo por el signo que corresponda al mes actual para así evitar agotar las frases con connotación positiva. Por ejemplo, si estamos en el mes de julio (corresponde al signo Cáncer el horóscopo generado sería: CÁNCER: Frase x1 de amor positiva. Frase x2 de amor positiva. Frase x3 de salud positiva. Frase x4 de salud positiva. Frase x5 de trabajo positiva. Frase x6 de trabajo positiva LEO: Frase y1 de amor. Frase y2 de amor. Frase y3 de salud. Frase y4 de salud. Frase y5 de trabajo. Frase y6 de trabajo... GÉMINIS: Frase z1 de amor. Frase z2 de amor. Frase z3 de salud. Frase z4 de salud. Frase z5 de trabajo. Frase z6 de trabajo Es decir, el horóscopo empieza por el signo CÁNCER donde todas las frases seleccionadas aleatoriamente tienen connotación positiva. El resto de frases para los otros signos pueden tener connotación positiva o negativa. Se pide: 1. (1 punto Utilizando sintaxis de CLIPS, definir los cambios que habría que hacer en la representación definida en el problema anterior para poder realizar la mejora pedida (decir los marcos, plantillas, instancias y hechos nuevos necesarios, así como los cambios a los definidos anteriormente 2. (1,5 puntos Utilizando sintaxis de CLIPS, definir los cambios y reglas nuevas que habría que hacer sobre las reglas definidas en el problema anterior para poder implementar la mejora pedida
Departamento de Informática Universidad Carlos III de Madrid Ingeniería Técnica en Informática de Gestión Inteligencia Artificial Septiembre 2011. 2 a parte Normas generales del examen El tiempo para realizar el examen es de 1,5 horas Sólo se responderán preguntas sobre el examen los primeros 30 minutos Si se sale del aula, no se podrá volver a entrar durante el examen No se puede presentar el examen escrito a lápiz Problema 3. (2 puntos Dado un problema de búsqueda ficticio con factor de ramificación 5, memoria limitada a 2K, donde cada estado ocupa 5 bits y donde se sabe que la solución mínima contiene 50 pasos. Responder de forma razonada a las siguientes preguntas. 1. (0,5 puntos Sería apropiado utilizar el algoritmo de búsqueda en amplitud para encontrar la solución?. En caso afirmativo, decir las ventajas e inconvenientes que tendría su utilización para resolver el problema 2. (0,5 puntos Sería apropiado utilizar el algoritmo de búsqueda en profundidad para encontrar la solución?. En caso afirmativo, decir las ventajas e inconvenientes que tendría su utilización para resolver el problema 3. (1 punto Suponiendo que se tiene información sobre el problema de forma que se pueden definir funciones heurísticas, qué algoritmo de búsqueda heurística utilizarías para resolverlo? (Indicar las ventajas y desventajas de cada algoritmo de búsqueda heurística que conoces si se aplicaran a este problema Problema 4. (3 puntos Un puente tendido sobre un río, en malas condiciones, soporta como máximo el peso de dos personas al mismo tiempo. En un extremo hay cuatro personas que desean cruzarlo de noche, usando para ello un único farol de aceite. Puesto que sólo disponen de uno, cada vez que una pareja llega al extremo final del puente, alguien deberá volver al extremo inicial para que otros puedan usarlo. Además, cada uno de ellos tarda un tiempo diferente en recorrerlo: el más rápido puede hacerlo en un minuto; el siguiente tarda dos minutos; el tercero, cinco minutos y el más lento de todos consume hasta diez minutos. Por supuesto, dos personas juntas tardan en cruzar el puente, el tiempo que tarde el más lento de ellos. El farol tiene una cantidad de aceite limitada, de modo que se desea encontrar la combinación óptima de movimientos que minimiza el tiempo total para dejar a las cuatro personas en el extremo final. Se pide: 1. (2 puntos Qué funciones heurísticas admisibles se te ocurren para guiar un algoritmo de búsqueda que encuentre la solución óptima a este problema? 2. (1 punto Utilizando la función heurística más informada de las definidas en el apartado anterior, desarrollar el árbol de búsqueda que genera el algoritmo A* para encontrar la solución.
1. Solución Problema 1 1.1. Cuestión 1 ;;Clase para representar las frases de la base de datos. ;;Podría ser una plantilla (defclass FRASE (is-a INITIAL-OBJECT (slot tema (type SYMBOL (allowed-values amor trabajo salud (slot connotacion (type SYMBOL (allowed-values positiva negativa (slot contenido (type STRING ;;necesario para evitar repetir frases (slot usada (type SYMBOL (allowed-values si no (default no ;;Plantilla para controlar la ejecución del sistema de producción. ;;Es suficiente con un hecho de CONTROL ;;Podría ser una clase (deftemplate CONTROL (slot signo (type SYMBOL (allowed-values Aries Tauro Geminis Cancer Leo Virgo Libra Escorpion Sagitari (slot tema (type SYMBOL (allowed-values amor trabajo salud (slot cont (type INTEGER (default 1 ;;Plantilla para controlar los cambios tanto de temas como de signo del zodiaco. ;;Hay que definir tantos hechos como posibles cambios entre temas y entre signos del zodiaco ;;Podría ser una clase (deftemplate CAMBIO (slot inicial (type SYMBOL (slot final (type SYMBOL ;;;;;;;;;;;;;;;;;;;;;INSTANCIAS y HECHOS iniciales ;;Para que la regla cambia-signo funcione no puede haber un hecho de CAMBIO cuyo valor inicial sea salud (deffacts cambio ( CAMBIO (inicial amor (final trabajo ( CAMBIO (inicial trabajo (final salud ( CAMBIO (inicial Aries (final Tauro ( CAMBIO (inicial Tauro (final Geminis ( CAMBIO (inicial Geminis (final Cancer ( CAMBIO (inicial Cancer (final Leo ( CAMBIO (inicial Leo (final Virgo ( CAMBIO (inicial Virgo (final Libra ( CAMBIO (inicial Libra (final Escorpion ( CAMBIO (inicial Escorpion (final Sagitario ( CAMBIO (inicial Sagitario (final Capricornio ( CAMBIO (inicial Capricornio (final Acuario ( CAMBIO (inicial Acuario (final Piscis (definstances frases (of FRASE (tema amor (connotacion positiva (contenido "Frase de amor positiva 1" (of FRASE (tema amor (connotacion positiva (contenido "Frase de amor positiva 2" (of FRASE (tema amor (connotacion negativa (contenido "Frase de amor negativa 1" (of FRASE (tema amor (connotacion negativa (contenido "Frase de amor negativa 2"
(of FRASE (tema salud (connotacion positiva (contenido "Frase de salud positiva 1" (of FRASE (tema salud (connotacion positiva (contenido "Frase de salud positiva 2" (of FRASE (tema salud (connotacion negativa (contenido "Frase de salud negativa 1" (of FRASE (tema salud (connotacion negativa (contenido "Frase de salud negativa 2" (of FRASE (tema trabajo (connotacion positiva (contenido "Frase de trabajo positiva 1" (of FRASE (tema trabajo (connotacion positiva (contenido "Frase de trabajo positiva 2" (of FRASE (tema trabajo (connotacion negativa (contenido "Frase de trabajo negativa 1" (of FRASE (tema trabajo (connotacion negativa (contenido "Frase de trabajo negativa 2" 1.2. Cuestión 2 ;;Regla inicial para crear el hecho de CONTROL y establecer la estrategia random (defrule init-rule (assert (CONTROL (signo Aries (tema amor (set-strategy random (printout t "Aries" crlf (defrule otra-frase?con <- (CONTROL (tema?a (cont?c&:(<?c 3?fra <- (object (is-a FRASE (usada no (tema?a (contenido?f (printout t?f ". " (modify-instance?fra (usada si (modify?con (cont (+ 1?c ;;Cuando se generan 2 frases del mismo tema hay que cambiar CONTROL con el ;;siguiente tema (defrule cambia-tema?con <- (CONTROL (tema?ti (cont 3 (CAMBIO (inicial?ti (final?tf (modify?con (tema?tf (cont 1 ;;Cuando se han generado todos los temas hay que cambiar de signo. ;;Para controlar que se han generado todos los temas se podría ;;hacer que tuviera menos prioridad que la regla anterior o utilizar ;;la precondición (not (CAMBIO (inicial?a (defrule cambia-signo?con <- (CONTROL (signo?s (tema?a (cont 3 (not (CAMBIO (inicial?a (CAMBIO (inicial?s (final?sf (modify?con (signo?sf (tema amor (cont 1 (printout t crlf?sf crlf
2. Solución Problema 2 2.1. Cuestión 1 ;;Clase nueva para representar el signo del zodiaco para saber el mes y para controlar si ya se ha ;;generado su horóscopo o no (slot hecho (defclass SIGNO (is-a INITIAL-OBJECT (slot nombre (type SYMBOL (allowed-values Aries Tauro Geminis Cancer Leo Virgo Libra Escorpion Sagitar (slot mes (type SYMBOL (slot hecho (type SYMBOL (allowed-values si no (default no ;;El resto de clases y plantillas son iguales a las anteriores ;;Igual que antes (defclass FRASE (is-a INITIAL-OBJECT (slot tema (type SYMBOL (allowed-values amor trabajo salud (slot connotacion (type SYMBOL (allowed-values positiva negativa (slot contenido (type STRING (slot usada (type SYMBOL (allowed-values si no (default no ;;Igual que antes (deftemplate CONTROL (slot signo (type SYMBOL (allowed-values Aries Tauro Geminis Cancer Leo Virgo Libra Escorpion Sagitari (slot tema (type SYMBOL (allowed-values amor trabajo salud (slot cont (type INTEGER (default 1 ;;Igual que antes (deftemplate CAMBIO (slot inicial (type SYMBOL (slot final (type SYMBOL ;;Nuevas instancias con todos los signos (definstances signos ([Aries] of SIGNO (nombre Aries (mes abril ([Tauro] of SIGNO (nombre Tauro (mes mayo ([Geminis] of SIGNO (nombre Geminis (mes junio ([Cancer] of SIGNO (nombre Cancer (mes julio ([Leo] of SIGNO (nombre Leo (mes agosto ([Virgo] of SIGNO (nombre Virgo (mes septiembre ([Libra] of SIGNO (nombre Libra (mes octubre ([Escorpion] of SIGNO (nombre Escorpion (mes noviembre ([Sagitario] of SIGNO (nombre Sagitario (mes diciembre ([Capricornio] of SIGNO (nombre Capricornio (mes enero ([Acuario] of SIGNO (nombre Acuario (mes febrero ([Piscis] of SIGNO (nombre Piscis (mes marzo ;;Se necesita un hecho para indicar el mes actual (deffacts inicial (mes-actual julio ;;Igual que antes pero hay que a~nadir un hecho más (deffacts cambio ( CAMBIO (inicial amor (final trabajo ( CAMBIO (inicial trabajo (final salud
( CAMBIO (inicial Aries (final Tauro ( CAMBIO (inicial Tauro (final Geminis ( CAMBIO (inicial Geminis (final Cancer ( CAMBIO (inicial Cancer (final Leo ( CAMBIO (inicial Leo (final Virgo ( CAMBIO (inicial Virgo (final Libra ( CAMBIO (inicial Libra (final Escorpion ( CAMBIO (inicial Escorpion (final Sagitario ( CAMBIO (inicial Sagitario (final Capricornio ( CAMBIO (inicial Capricornio (final Acuario ( CAMBIO (inicial Acuario (final Piscis ;;Se necesita un hecho más para hacerlo cíclico ( CAMBIO (inicial Piscis (final Aries ;;Iguales que en el problema anterior (definstances frases... 2.2. Cuestión 2 ;;Regla inicial cambia porque el signo de CONTROL debe ser ;;el que corresponde al mes actual (defrule elige-signo-actual (mes-actual?ma?sig <- (object (is-a SIGNO (nombre?n (mes?ma (printout t crlf?n crlf (assert (CONTROL (signo?n (tema amor ;;Regla nueva para que se elijan las frases positivas del mes actual ;;Tiene que tener mas prioridad que la siguiente (defrule otra-frase-positiva (declare (salience 100?con <- (CONTROL (signo?s (tema?a (cont?c&:(<?c 3 (mes-actual?ma?sig <- (object (is-a SIGNO (nombre?s (mes?ma (hecho no?fra <- (object (is-a FRASE (usada no (tema?a (connotacion positiva (contenido?f (printout t?f ". " (modify-instance?fra (usada si (modify?con (cont (+ 1?c ;;Igual que la del problema anterior (defrule otra-frase?con <- (CONTROL (signo?s (tema?a (cont?c&:(<?c 3?fra <- (object (is-a FRASE (usada no (tema?a (contenido?f (printout t?f ". " (modify-instance?fra (usada si (modify?con (cont (+ 1?c ;;Igual que la del problema anterior
(defrule cambia-tema?con <- (CONTROL (tema?ti (cont 3 (CAMBIO (inicial?ti (final?tf (modify?con (tema?tf (cont 1 ;;Igual que antes pero a~nadiendo las últimas precondiciones para ;;evitar que ya se haya generado el horóscopo para ese signo (defrule cambia-signo?con <- (CONTROL (signo?s (tema?a (cont 3 (not (CAMBIO (inicial?a (CAMBIO (inicial?s (final?sf (object (is-a SIGNO (nombre?sf (hecho no ;;para cambiar hecho a si porque si no se repetiria el primer signo?sig <- (object (is-a SIGNO (nombre?s (hecho no (modify?con (signo?sf (tema amor (cont 1 (printout t crlf?sf crlf (modify-instance?sig (hecho si
3. Solución Problema 3 3.1. Cuestión 1 Si asumimos que los 2K de memoria se refieren a 2048 bytes y cada byte ocupa 8 bits, el n o de bits disponible es de 16384. Teniendo en cuenta que cada nodo ocupa 5 bits hace que el sistema tenga capacidad para almacenar como mucho 3276 nodos. (Si se asume que los 2K se refieren a 2000 bits el razonamiento sería igual de válido. El factor de ramificación es 5, lo cual significa que a profundidad 6 el número de nodos que generaría el algoritmo de búsqueda en amplitud sería 5 6 = 15625. Es decir, superaría la memoria disponible y todavía estaría muy lejos de alcanzar la profundidad 50 que nos dicen es la mínima profundidad en la que se encontraría una solución. Por tanto, para este problema el algoritmo en amplitud no es apropiado porque nunca encontraría la solución, antes se quedaría sin memoria. 3.2. Cuestión 2 La ventaja del algoritmo de búsqueda en profundidad es que el consumo de memoria es proporcional a la profundidad. En nuestro caso 50, por tanto, para este problema sí sería apropiado utilizar este algoritmo. El algoritmo de búsqueda en profundidad en general tiene el inconveniente de que no es ni completo ni admisible y que la complejidad temporal es exponencial. Sin embargo, en este problema se sabe que la solución mínima tiene 50 pasos, lo cual significa que podríamos limitar la búsqueda a profundidad 50 y nos garantizaría optimalidad y completitud. 3.3. Cuestión 3 En los algoritmos de búsqueda hay 4 propiedades que hay que considerar: (1 si el algoritmo es completo, (2 si es admisible, (3 complejidad espacial y (4 complejidad temporal. Los algoritmos de búsqueda heurística A* e IDA* proporcionan la solución óptima si la heurística utilizada es admisible. Por tanto, sería recomendable utilizar alguno de ellos. Sin embargo, si la heurística no es muy buena el algoritmo A* podría consumir toda la memoria, por eso sería más apropiado utilizar el IDA* cuya complejidad espacial es lineal. La complejidad temporal de ambos algoritmos es exponencial. El algoritmo en escalada podría encontrar la solución antes de quedarse sin memoria, sin embargo, no nos garantiza que sea óptima y ni siquiera nos garantiza que la encuentre (no es ni completo ni admisible. En contrapartida, el tiempo que tardaría en encontrar la solución sería menor que lo que tardaría el IDA*. 4. Solución Problema 4 Ver la solución del ejercicio del puente publicado en la web de la asignatura: http://galahad.plg.inf.uc3m.es/ iat/ejercicios/busquedapuente.pdf