Inteligencia Artificial 2011
Conteste con sus palabras las siguientes preguntas: a) ¿Qué es una formula bien formada (fbf)? 1
b) ¿Qué es un axioma? 2
c) Defina con sus sus palabras el concepto de “semántica” “semántica” entendimiento de “significado de un símbolo (o signo)”
en general, asiendo hincapié en el su
3
d) Explique, con sus propias palabras, la semántica de sentencias en lógica proposicional. Idem para lógica de predicados. 4
e) ¿Qué es una regla de inferencia? 5
1
respuestas extraídas de TP3-irrutia-german.pdf respuestas extraídas de TP3-Da-Re-Lucero-Jonathan-Alejandro.pdf 3 respuestas extraídas de TP3-daniele-mariela.pdf 4 respuestas extraídas de TP3-marchetta-gaston.pdf 5 respuestas extraídas de TP3-somlay-jimena.pdf Razonamiento lógico 2
0
Inteligencia Artificial 2011
f) ¿Qué significa “S “S |- α”? (i.e. defina derivación) 6
g) ¿Qué es un teorema? 7
h) ¿Qué diferencia hay entre “|-“ y “|=”?. ¿Qúe significa “Si |- α entonces |=α”?, ¿y “Si |= α entonces |α”? 8
i) ¿Qué significa que una teoría/lógica sea decidible? 9
j) Que puede decir sobre la veracidad o falsedad de las sentencias axiomáticas, (o simplemente axiomas)? Indique bajo que condiciones el algoritmo de encadenamiento hacia adelante es completo. 10
6
respuestas extraídas de TP3-ferrero-mauricio.pdf respuestas extraídas de TP3-Paca-Jose.pdf 8 respuestas extraídas de TP3-Barraquero-Matias.pdf 9 respuestas extraídas de TP3-Da-Re-Lucero-Jonathan-Alejandro.pdf 10 respuestas extraídas de TP3-Da-Re-Lucero-Jonathan-Alejandro.pdf Razonamiento lógico 7
1
Inteligencia Artificial 2011
Demuestra para cada una de las siguientes sentencias, si es tautología, insatisfactible o ninguna de las anteriores (sólo satisfactible). Utiliza tablas de verdad y/o verdad y/o las reglas de equivalencia. equivalencia . (Describa cada paso) a) (Humo -->> Fuego) -->> (¬Humo -->> ¬Fuego) (Humo => Fuego) => (NOT Humo => NOT Fuego) p = humo
q = fuego
********************************************************************************** * p * q * NOT p * NOT q * p => q * NOT p => NOT q * (p => q) => (NOT p => NOT q) * ********************************************************************************** * F * F * V * V * V * V * V * * F * V * V * F * V * F * F * * V * F * F * V * F * V * V * * V * V * F * F * V * V * V * **********************************************************************************
Por lo tanto es Satisfactible.
b) ((Humo ∧ Calor) -->> Fuego) ⇔ ((Humo -->> Fuego) ∨ (Calor -->> Fuego)) ((Humo AND Calor) => Fuego) <=> ((Humo => Fuego) OR (Calor => Fuego)) p = humo
q = fuego
r = calor
********************************************************************************* * p * q * r * p AND r * (p AND r) => q * p => q * r => q * (p => q) OR (r => q) * ********************************************************************************* * F * F * F * F * V * V * V * V * * F * F * V * F * V * V * F * V * * F * V * F * F * V * V * V * V * * F * V * V * F * V * V * V * V * * V * F * F * F * V * F * V * V * * V * F * V * V * F * F * F * F * * V * V * F * F * V * V * V * V * * V * V * V * V * V * V * V * V * ********************************************************************************* *************************************************************************************** * (p AND r) => q * (p => q) OR (r => q) * ((p AND r) => q) <=> ((p => q) OR (r => q)) * *************************************************************************************** * V * V * V * * V * V * V * * V * V * V * * V * V * V * * V * V * V * * F * F * V * * V * V * V * * V * V * V * ***************************************************************************************
Por lo tanto es Tautología.
c) Grande ∨ Mudo ∨ (Grande -->> Mudo) Grande OR Mudo OR (Grande => Mudo) p = grande
q = mudo
************************************************ * p * q * p => q * p OR q * p OR q OR (p => q) * ************************************************ * F * F * V * F * V * * F * V * V * V * V * * V * F * F * V * V * * V * V * V * V * V * ************************************************
Por lo tanto es Tautología.
d) (Grande ∧ Mudo) ∨ ¬Mudo Grande AND Mudo) OR NOT Mudo p = grande
q = mudo
************************************************** * p * q * NOT q * p AND q * (p AND q) OR (NOT q) * ************************************************** * F * F * V * F * V * * F * V * F * F * F * * V * F * V * F * V * * V * V * F * V * V * **************************************************
Por lo tanto es Satisfactible
Razonamiento lógico
2
Inteligencia Artificial 2011
Construir la tabla de valores de verdad para: Muestre cada paso de su construcción
Pasar a Forma Normal Conjuntiva las siguientes fórmulas proposicionales. (Muestre y Describa cada paso) a)
b)
(p V (¬ p => q)) => (p V q) (p V p V q) => (p V q)...................eliminación de la implicación ¬ (p V q) V (p V q).......................eliminación de la implicación e inferencia (¬ p ^ ¬ q) V (p V q).....................de Morgan (¬ p V (p V q)) ^ (¬ q V (p V q)).......distributiva de V (¬ p V p V q) ^ (¬ q V p V q)...........asociativa de V (p v (¬q -> q)) -> (p v q) (p v (q v q)) -> (p v q) ¬(p v (q v q)) v (p v q) (¬p ^ ¬(q v q)) v (p v q) (¬p ^ ¬q ^ ¬q) v (p v q) (¬p v p) ^ (¬q v p) ^ (¬q v p) ^ (¬p v q) ^ (¬q v q) ^ (¬q v q) por ley de exclusión de termino medio V ^ (¬q v p) ^ (¬q v p) ^ (¬p v q) ^ V ^ V Ley de identidad y asociatividad ((¬q v p) ^ (¬q v p)) ^ (¬p v q) Por ley de idempotencia (¬q v p) ^ (¬p v q) (Tautología) (p V ¬ (p (¬ p (¬ p
q) => p V q) V p..............................eliminación de la implicación ^ ¬ q) V p.............................de Morgan V p) ^ (¬ q V p).....................distributiva de V
(p v q) -> p ¬(p v q) v p (¬p ^ ¬q) v p (¬p v p) ^ (¬q v p) Ley de exclusión de terminos medio V ^ (¬q v p) Ley de identidad (¬q v p) Tabla de Verdad p q ¬q V p F F V F V F V F V V V V
(NO Tautología)
Razonamiento lógico
3
Inteligencia Artificial 2011
c) (p ^ q)
V (p ^ r)
(p V (p ^ r)) ^ (q V (p ^ r)).....................distributiva de ((p V p) ^ (p V r)) ^ ((q V p) ^ (q V r)).......distributiva de (p V p) ^ (p V r) ^ (q V p) ^ (q V r)...........asociativa de ^
V V
(p ^ q) v (p ^ r)
((p ^ q) v p) ^ ((p ^ q) v r) ((p v p) ^ (q v p)) ^ ((p v r) ^ (q v r)) (p v p) ^ (q v p) ^ (p v r) ^ (q v r) Ley de idempotencia p ^ (q v p) ^ (p v r) ^ (q v r) Tabla de Verdad p q r F F F F F V F V F F V V V F F V F V V V F V V V
p ^ (q
V r) F F F F F V V V
(NO Tautología)
Explicar un ejemplo de 11FÓRMULA BIEN FORMADA (fbf) del Cálculo de Predicado qué: i) sea verdadera en todas las interpretaciones ii) sea falsa en todas las interpretaciones iii) sea verdadera en algunas interpretaciones y falsa en otras
iv) dada una interpretación particular, no sea ni verdadera, ni falsa.
11
Una f.b.f. (oración) es verdadera o falsa según los valores de verdad o falsedad de lo s símbolos que la componen
Razonamiento lógico
4
Inteligencia Artificial 2011 12
¿Qué significa que una fbf sea cerrada?¿Qué particularidad tiene las fórmulas cerradas, con respecto a su veracidad o falsedad, dada una interpretación particular?
- Una VARIABLE ESTA LIGADA si está inmediatamente luego de un cuantificador o es una ocurrencia dentro del alcance de un cuantificador. - En caso contrario, diremos que la ocurrencia se encuentra LIBRE. - Una FÓRMULA CERRADA es una fórmula que no presenta ocurrencias de variables libres. Por ejemplo, la fórmula ∀ y ∀x p(x,y) es cerrada, mientras que ∃x p(x,y) no lo es, puesto que la variable y no está cuantificada aquí. - Sea F una FÓRMULA CERRADA e I una INTERPRETACIÓN I es un modelo para F si F es verdadera según I (I satisface F) Sea ∀x ∃ y p(x,y), una fórmula de L, e I la siguiente interpretación: D = N (conjunto de todos los números naturales). Se puede observar que I es un modelo de la fórmula. En I, la fórmula toma el valor verdadero pues “para cualquier número natural x, existe otro número natural y que es mayor que x”. Sea ahora ∃ y ∀x p(x,y) otra fórmula de L, y mantenemos la interpretación anterior I. Ahora, I no es un modelo de la fórmula, pues en I la fórmula toma el valor falso, dado que “no todo natural tiene un menor, por ejemplo, el cero. - Sea F una fórmula cerrada de un lenguaje de primer orden L: F es satisfacible si existe una interpretación I tal que F es verdadera con respecto a I. F es válida si para toda interpretación I, F es verdadera con respecto a I. F es insatisfacible si existe una interpretación I tal que F es falsa con respecto a I. F es no válida si para toda interpretación I, F es falsa con respecto a I.
Llenar la siguiente planilla según el ejemplo de la primer fila.
12
respuestas extraídas de TP3-Giaquinta-Miguel.pdf Razonamiento lógico
5
Inteligencia Artificial 2011
Escribir en Lógica de Primer Orden los siguientes enunciados expresados en lenguaje natural. Identifique Predicados y Cuantificadores a) Un dragón es feliz si todas sus crías pueden volar. Los dragones verdes pueden volar. Un dragón es verde si al menos uno de sus progenitores es verde, y es rosa en cualquier otro caso. Traducción a LPO: - Predicados: dragon, feliz, crias, volar, verdes, progenitores, rosa. - Cuantificadores: un, todas, los un ∃x [(dragon(x) ∧ ∀y[crias(y,x) →volar(y)] ∧ feliz(x)] ∀x [dragon(x)→(verde(x) ∧ volar(x))] ∃x [(dragon(x) ∧ ∀y[progenitor(y,x) →verde(y)] ∧ verde(x)] b) Todos los periodistas son amigos de algún político. Algunos periodistas sólo son amigos de los políticos. Traducción a LPO: - Predicados: periodista, amigo, político - Cuantificadores: todos, algunos ∀x∃y [periodista(x) ∧ politico(y) → amigo(x,y)] ∃x∀y [periodista(x) ∧ amigo(x,y) → politico(y)]
Dadas las siguientes cláusulas:
a) ¿Cuales son cláusulas de Horn?. Indicar qué cláusulas de Horn son hechos y qué cláusulas de Horn son Objetivos, Justifique su respuesta. {P(x),¬P(x),Q(a)} {P(x),¬Q(x),¬R(x)} {¬P(x,x,z),¬Q(x,y),¬Q(y,z)} {M(1,2,x)}
No Es Es Es
es clausula clausula de clausula de clausula de
de Horn Horn Horn Horn
regla objetivo hecho
b) Representar las cláusulas de Horn en lenguaje Prolog (Revisar filminas de Prolog en Aula Virtual) {P(x),¬Q(x),¬R(x)} {¬P(x,x,z),¬Q(x,y),¬Q(y,z)} {M(1,2,x)}
p(x):- q(x),r(x). ?- p(x,x,z) q(x,y),q(y,z). m(1,2,x).
Realizar los ejercicios A, B siguiendo los siguientes pasos: a) b) c) d)
Definir DOMINIO y Definir los PREDICADOS y FUNCIONES que se consideren necesarios Escribir las sentencias en lógica de predicados de primer orden (axiomas y teorema) NEGAR EL TEOREMA y pasar todas las sentencias a cláusulas siguiendo los pasos estudiados en clase Utilizar REFUTACIÓN POR RESOLUCIÓN para llegar a la cláusula vacía, utilizando las sustituciones que sean necesarias. (pueden utilizar el árbol de resolución o armar una tabla). e) Responder a la PREGUNTA , indicando cómo se ha llegado a la respuesta
A. Sabiendo que Lanzarote ama a la reina Ginebra, Lanzarote no ama a ninguno de los amigos de Ginebra, el rey Arturo es amigo de Lanzarote, y los amigos de Lanzarote odian a quienes Lanzarote ama, ¿a quién odia Arturo?
Traducción a LPO: - Universo: amigos y amores - Predicados: amigo_de, ama_a, odia_a Cuantificadores: la, ninguno, los - Constantes: Lanzarote, Ginebra, Arturo Variables: X = amigo, Y = amor 1- ama_a(Lanzarote, Ginebra). 2- ∀x [amigo_de(x,Ginebra) → ¬ ama_a(Lanzarote,x)] 3- amigo_de(Arturo, Lanzarote). 4- ∀x {amigo_de(x, Lanzarote) ∧ ∀y [ama_a(Lanzarote,y) → odia_a(x,y) ]} Razonamiento lógico
6
Inteligencia Artificial 2011
Normalización a forma clausal: 1- ama_a(Lanzarote, Ginebra). es una cláusula (Hecho) 2- ∀x [amigo_de(x,Ginebra) → ¬ ama_a(Lanzarote,x)] ∀x [¬amigo_de(x,Ginebra) ∨ ¬ ama_a(Lanzarote,x) ] Eliminar → Eliminar ∀ ¬amigo_de(x,Ginebra) ∨ ¬ ama_a(Lanzarote,x) cláusula ¬amigo_de(x,Ginebra) ∨ ¬ ama_a(Lanzarote,x) 3- amigo_de(Arturo, Lanzarote). es una cláusula (hecho) 4- ∀x {amigo_de(x, Lanzarote) ∧ ∀y [ama_a(Lanzarote,y) → odia_a(x,y) ]} Eliminar → ∀x {amigo_de(x, Lanzarote) ∧ ∀y [¬ama_a(Lanzarote,y) ∨ odia_a(x,y) ]} ∀x ∀y {amigo_de(x, Lanzarote) ∧ (¬ama_a(Lanzarote,y) ∨ odia_a(x,y) )} ∀ hacia delante Eliminar ∀ amigo_de(x, Lanzarote) ∧ (¬ama_a(Lanzarote,y) ∨ odia_a(x,y) ) cláusula amigo_de(a, Lanzarote) cláusula ¬ama_a(Lanzarote,y) ∨ odia_a(x,y) Planteamiento del problema.
Base de conocimiento: Cláusulas ama_a(Lanzarote, Ginebra) amigo_de(X,Ginebra) ∨ ¬ ama_a(Lanzarote,X) amigo_de(Arturo, Lanzarote) amigo_de(a, Lanzarote) ¬ama_a(Lanzarote,y) ∨ odia_a(x,y)
Por demostrar: ∃z odia_a(Arturo,z) Negación: ∀z ¬ odia_a(Arturo,z) Negación de hipótesis: ¬odia_a(Arturo,Z) Solución padre 1
padre 2
unificador
resolvente
¬ odia_a(Arturo,Z) ¬ama_a(Lanzarote,Y)
¬ama_a(Lanzarote,Y) ∨ odia_a(a,Y) ama_a(Lanzarote, Ginebra)
{ Z / Y} { X / Ginebra }
¬ama_a(Lanzarote,Y) Φ (contradicción)
La consulta se cumple para Z = Y = X = Ginebra. Como respuesta sólo interesa desplegar el valor de las variables de la consulta. En este caso concreto, la respuesta es Z = Ginebra. Prolog
ama_a(Lanzarote, Ginebra). amigo_de(X,Ginebra) ←5 ama_a(Lanzarote,X). amigo_de(Arturo, Lanzarote). amigo_de(a, Lanzarote). ama_a(Lanzarote,Y)7 odia_a(a,y). ←5odia_a(Arturo,Z)
B. Todos los que ayudan a Juan viven en casa de Manolo. Antonio ayuda a todos aquellos con los que trabaja. Trabajan con Juan todos los amigos de Carlos. Antonio es amigo de Carlos. ¿Quién vive en casa de Manolo?
Traducción a LPO: • ∀x [Ayuda(x, Juan) → ViveCon(x , Manolo)] • ∀x [Trabaja(Antonio, x) → Ayuda(Antonio, x)] • ∀x [Amigo(x, Carlos) → Trabaja(x, Juan)] • Amigo(Antonio, Carlos) • demostrar ∃z [ViveCon(z,Manolo)]
Razonamiento lógico
7
Inteligencia Artificial 2011
FNC de KB and ¬Alfa: 1. ¬Ayuda(x, Juan) ∨ ViveCon(x , Manolo) 2. ¬Trabaja(Antonio, x) ∨ Ayuda(Antonio, x) 3. ¬Amigo(x, Carlos) ∨ Trabaja(x, Juan) 4. Amigo(Antonio, Carlos) 5. ¬ ViveCon(z,Manolo) Resolución: padre 1
padre 2
unificador
resolvente
¬ ViveCon(z,Manolo)
¬Ayuda(x, Juan) ∨ ViveCon(x , Manolo)
{ Z / X}
¬Ayuda(x, Juan)
¬Ayuda(x, Juan)
¬Trabaja(Antonio, x) ∨ Ayuda(Antonio, x)
{ X / Antonio, Juan/X}
¬Trabaja(Antonio, x)
¬Trabaja(Antonio, x)
¬Amigo(x, Carlos) ∨ Trabaja(x, Juan) Amigo(Antonio, Carlos)
{ Antonio/ X, X/ Juan}
¬Amigo(x, Carlos)
{ X / Antonio}
Φ (contradicción)
¬Amigo(x, Carlos)
Z = X = Antonio
Respuesta: Antonio vive con Manolo.
Suponga que tiene el siguiente conjunto de reglas. Conteste la pregunta: ¿Debería comprar una casa?. Justificar explicando el mecanismo de razonamiento por ENCADENAMIENTO, utilizado. Utilizar ENCADENAMIENTO HACIA DELANTE con el dato de inflación baja, y ENCADENAMIENTO HACIA ATRÁS con el dato de inflación alta. IF inflacion es baja THEN tasa_interes es baja ELSE tasa_interes es alta Regla 2: IF tasa_interes es alta THEN precio_viviendas es alta ELSE precio_viviendas es baja Regla 3: IF precio_viviendas es alta THEN no_comprar_casa ELSE comprar_casa Pregunta: comprar_casa? Regla 1:
a) Encadenamiento hacia adelante: Hecho: inflacion es baja Objetivo: comprar_casa
1- Se infiere que tasa_interes es baja por Regla 1. 2- Se infiere que precio_viviendas es baja por Regla 2. 3- Por Regla 3 podemos afirmar que debiera comprar una casa.
b) Encadenamiento hacia atras: Hecho: inflacion es alta Objetivo: comprar_casa 1- Por Regla 3 se infiere precio_viviendas es alta. 2- Por Regla 2 se infiere tasa_interes es alta. 3- Por Regla 1 podemos decir que inflacion es alta, con esto llegamos al hecho por lo tanto el objetivo comprar_casa es verdadero. 13a.
Hacia adelante
13
Respuesta extraída de TP3-Fratte-Daniel.pdf Razonamiento lógico
8
Inteligencia Artificial 2011
b. Hacia atrás
14
a. Hacia adelante
DEBE COMPRAR LA CASA b. Hacia atrás
14
Respuesta extraída de TP3-savio-facundo.pdf Razonamiento lógico
9
Inteligencia Artificial 2011
NO DEBE COMPRAR LA CASA
Razonamiento lógico
10
Inteligencia Artificial 2011
Problema de cañerías15 Una empresa desea diseñar un sistema de razonamiento automático para tomar decisiones sobre la canalización de las aguas a través de su red de distribución. En concreto, su red de distribución está constituida por una cantidad arbitraria de depósitos (denominados genéricamente con las letras A, B, . . . ) de los que salen canales que discurren en paralelo hasta un número igual de destinos, identificados con los números 1, 2 . . . Entre los canales, puede haber tuberías que desvían todo el agua que llega de un canal hasta otro inmediatamente adyacente, en cualquier sentido. Figura 1: Modelo de distribución de aguas entre tres depósitos y destinos
Por ejemplo, la figura 1 muestra el caso de tres canales entre tres depósitos (A, B y C), hasta tres destinos diferentes (1, 2 y 3), entre los que se han dispuesto hasta tres tuberías entre canales adyacentes. Se debe asumir que las tuberías siempre están abiertas y que, por ello, conducirán todo el caudal de agua que les llegue desde un canal hasta otro. Asimismo, solo esta abierto un único depósito al mismo tiempo. Por lo tanto, si se abriera el depósito de A, todo el agua se conduciría hasta el destino marcado con el número 2, pasando primero por la tubería que va de A a B, desde donde llegaría a C por la segunda tubería y volvería, nuevamente, a B por la última tubería; o si nada mas que se abrieran las llaves de paso del depósito C, entonces el agua llegaría únicamente hasta el destino 3; por último, el agua desde B llegaría hasta 1. Se pide: 1) Modelizar la red de canales y tuberías de la figura 1 con el uso de la LÓGICA PROPOSICIONAL , detallando los literales y reglas necesarios para ello
Los canales no tienen por qué modelizarse realmente y basta con describir secuencial mente los elementos que contienen. Puesto que el agua siempre circula en la misma dirección, puede asumirse que los canales están divididos en pasos o etapas como muestra la figura 2, numerados ascendentemente desde los depósitos hasta los destinos.
Figura 2: Los canales se modelizan en pasos o etapas
En concreto, los canales se han dividido en cuatro pasos diferentes. Los tres primeros sirven para identificar la posición en la que se han dispuesto tuberías entre canales. El último tiene un propósito diferente y sirve para determinar el punto de cada canal en el que no hay más tuberías y, por lo tanto, están directamente conectados con los destinos o salidas. Su propósito se entenderá mejor al presentar las reglas que rigen el movimiento del agua en la red de la figura 1 Por lo tanto, los LITERALES necesarios para modelizar la red son: - Depósitos Los depósitos se identificarán con el literal d X donde X representa el nombre de un depósito. , d En concreto, en la figura 1 hay hasta tres depósitos: d A B y d C. - Destinos Análogamente, cada destino se modelará con literales sY . En el caso de la figura 1 habrá hasta tres: s1, s2 y s3 . - Tuberías Las tuberías sirven para conducir el agua y, por lo tanto, su comportamiento se modelará con el uso de REGLAS. Cada tubería desde un canal i hasta otro canal adyacente, j, en el paso k, se transcribe como: pik → pj(k+1) . El hecho de que el consecuente de cada regla incremente el valor del paso sirve, precisamente, para indicar que el agua progresa en el siguiente canal. Además, puesto que el agua puede transcurrir en cada tubería en cualquier sentido (según venga por el primer o segundo canal), la misma tubería generará, además, otra regla del modo pjk → pi(k+1) 15
Examen de teoría Septiembre 2008. Inteligencia Artificial. Ingeniería Técnica en Informática de Gestión. Departamento de Informatica - Universidad Carlos III de Madrid Razonamiento lógico
11
Inteligencia Artificial 2011
En concreto, las tres tuberías de la figura 1 se representan en lógica proposicional con las SEIS REGLAS siguientes:
Sin embargo, esta modelización no es suficiente ni para mostrar cómo llega el agua hasta la red de distribución, ni cómo sale de ella. En realidad, hacen falta reglas adicionales para iniciar el movimiento del agua cuando se abre una llave en uno de los depósitos (¡y sólo uno!), y para indicar cómo el caudal se acumula en uno de los destinos o salidas: - Entrada La entrada del agua se hace, simplemente, con reglas que indican que cuando se usa un determinado depósito (identificado con un literal de la forma d X), el agua llega necesariamente al primer 16 paso en el que haya una tubería de ese mismo canal . Así, las reglas que rigen la entrada de agua en la figura 1 son:
- Salida La salida se rige, igualmente, por reglas que determinan el punto por el que saldrá el agua. Sin embargo, aquí hay un pequeño detalle que debe resolverse: si nada más se numeran los puntos en los que hay tuberías, cuando el agua llega a la última tubería no sería posible saber si es que cambiará de canal o, por el contrario, progresará por el mismo canal hacia su salida. Es precisamente por este motivo por el que, como se anticipaba antes, es preciso disponer de un paso adicional (el cuarto en el caso de la figura 2) para distinguir un caso del otro: en el paso tres, el agua cambia de canal y en el cuatro se dirige hacia la salida. Las reglas para la descripción de la salida del agua son análogas a las de la entrada y resultan ser 17 :
2) ¿Es posible deducir automáticamente hasta qué destino llegaría el agua desde el depósito B con la modelización del apartado anterior? Si es así, ¿cómo?, y si no es así, ¿ POR QUÉ ? Por supuesto que se puede. Para ello, basta con usar repetidamente el modus ponens. En concreto, si se abre la llave de paso en el depósito B, entonces dB es cierto. Usando la regla del modus ponens sobre la regla dB→pB1 , que rige la entrada de agua en todo el sistema, se concluye necesariamente que el agua llega hasta el primer paso del canal b, que es precisamente lo que indica el consecuente de la regla usada: pB1 . A continuación, la regla pB1→pA2 que modeliza la primera tubería con la que se encuentra el agua en el canal B, sirve para deducir, automáticamente (nuevamente en virtud del modus ponens), pA2 o, lo que es lo mismo, que el agua transcurre ahora por el segundo paso del canal A. Por último, la regla de salida pA2→s1 , servirá para concluir de la misma manera s1 o, equivalentemente, que todo el agua llega hasta el primer destino. 3) ¿Es razonable el uso de la lógica proposicional para la modelización de redes de distribución arbitrariamente grandes? Si o no, y ¿ POR QUÉ ?. No lo es en absoluto. Mientras que la ventaja de la lógica proposicional es que es decidible, lo cierto es que adolece de capacidad de generalización. En concreto, todas las afirmaciones sobre grandes colecciones de individuos resultan en la definición de muchos literales y reglas esencialmente repetitivos. Este problema se resolverá, precisamente, con el uso de la lógica de predicados en el siguiente punto. 16
En particular, nótese que la entrada de agua desde el depósito C se puede hacer directamente hasta el segundo paso, puesto que antes no hay ninguna tubería que desvíe el movimiento del agua 17 Como ocurriera con las entradas, nótese ahora que la salida a 1 se puede modelizar en el canal a desde el paso 2 y es que a partir de él ya no hay tuberías que desvíen el curso de su caudal 12 Razonamiento lógico
Inteligencia Artificial 2011
4) Modelizar la red de canales y tuberías de la figura 1 con el uso de la LÓGICA DE PREDICADOS , detallando los predicados y reglas necesarios para ello. Naturalmente, para la modelización con lógica de predicados, deben tenerse en cuenta los mismos elementos y comportamientos identificados en el apartado 1. Sin embargo, en vez de usar literales, ahora es preciso distinguir PREDICADOS (que describirán el qué) y sus relaciones (o el cómo), con el uso de REGLAS. En realidad, ahora el esfuerzo de modelización es un poco mayor porque es preciso hacer una descripción general de cualquier red de distribución. En concreto: - Depósitos. Los depósitos se identificarán con el predicado Deposito(x) donde x representa el nombre de un depósito. En concreto, en la figura 1 hay hasta tres depósitos: Deposito(A), Deposito(B) y Deposito(C). - Destinos. Análogamente, cada destino se modelará con predicados de la forma Destino(y). En el caso de la figura 1 habrá hasta tres: Destino(1) , Destino(2) y Destino(3) - Tuberías Como ocurriera en el caso de la lógica proposicional , las tuberías se describirán con reglas que determinarán el flujo del agua. En concreto, una tubería que progresa desde un canal i hasta otro canal j, en el paso k, se modelizará como: [agua(i,k) ∧ tuberia(i,j,k) ∧ succ(k,k′) → agua(j,k′)] , donde agua(i,k) representa la observación de que el agua ha llegado hasta el paso k del canal i, y tuberia(i,j,k) representa que hay una tubería que vincula los canales i y j precisamente en el paso k. Asimismo, es preciso observar que la lógica de predicados no tiene una representación aritmética implícita. Por lo tanto, es preciso modelar la relación de sucesión entre los números naturales (que representan las fases o etapas por las que progresa el agua) con un predicado dedicado, succ(k,k′) , que representa el hecho de que k′ es el sucesor de k. Ahora bien, en lógica de predicados es posible utilizar VARIABLES para generalizar la representación del conocimiento. Por lo tanto, en vez de tener tantas reglas como tuberías, basta con una:18 R1:∀i,j,k,k′ [agua(i,k) ∧ tuberia(i,j,k) ∧ succ(k,k′) → agua(j,k′)]
Que, sin embargo, no es suficiente para representar los dos sentidos de circulación del agua. Por ello, es preciso añadir una segunda regla: R2:∀i,j,k,k′[agua(j,k) ∧ tuberia(i,j,k) ∧ succ(k,k′) → agua(i,k′)]
Canales A diferencia del caso de la lógica proposicional , aquí es necesario describir explícitamente también los puntos en los que no hay tuberías para modificar el flujo de circulación del agua, esto es, en aquellos casos en los que agua continua transcurriendo por el mismo canal. El motivo es que mientras en el primer apartado era posible especializar cada regla para cada caso (como, por ejemplo, el hecho de que el agua desde C llega hasta el segundo paso inmediatamente), porque de hecho había que describir una regla por tubería, ahora debe hacerse una descripción generalizada. Por supuesto, podría simplemente usarse la expresión ≅tubería(i,j,k), para indicar que el agua no cambia desde el canal i hasta el canal j, pero en este caso, no sería posible resolver el siguiente apartado con el uso de la deducción hacia detrás puesto que es imperativo que todos los literales estén afirmados. Por lo tanto, se usará un predicado progreso(i,k)que indica simplemente que el agua continuará en el canal i, cuando se encuentre en el paso k. Las reglas que describen el paso del agua es, en este caso: R3:
∀i,k,k′[agua(i,k) ∧
progreso(i,k) ∧ succ(k,k′) → agua(i,k′)]
Por último, es preciso también crear reglas especiales para describir la entrada y salida del agua en la red de distribución: - Entrada Si el predicado deposito(x) sirve para identificar que se abre la llave de paso del depósito especificado, entonces la siguiente regla describe la entrada de agua desde cualquier punto: R4: ∀x[deposito(x) → agua(x,1)] - Salida Análogamente, si el predicado destino(y)representa, también, el hecho de que se recibe agua en y, entonces todas las salidas se describen simplemente como: R5:
∀x[agua(x,4) →
destino(x)]
donde el número 4 sirve simplemente para identificar el último paso de la figura 1 18
En lo sucesivo, se asume que nuestro sistema computacional está debidamente poblado de tantos predicados Succ(1, 2), Succ(2, 3), . . .como haga falta
Razonamiento lógico
13
Inteligencia Artificial 2011
5) Demostrar el uso de la DEDUCCIÓN HACIA ATRÁS para determinar el depósito del que ha salido el agua que llega hasta el destino 3, empleando para ello, la modelización del apartado anterior (d). Usar directamente las reglas que son necesarias para resolver la deducción. Antes de iniciar el proceso de deducción automática hacia detrás, es necesario determinar los contenidos iniciales de la BASE DE HECHOS con todas las observaciones iniciales. En concreto, para el caso de la figura 1, son instancias en el sistema las siguientes:19
En la demostración que sigue, se utilizarán (tal y como advertía el enunciado) directamente las reglas que sirven para probar el objetivo solicitado, y no se intentará nunca la unificación con reglas que no conducen a la solución: (a) Para probar que el destino que recibe el agua es el tercero, esto es, que es el de Co, equivalentemente, el predicado destino(C) puede usarse la regla R5 que produce precisamente este literal con la unificación σ1={x=C}
Por lo tanto, serán objetivos del modelo de inferencia ahora, las premisas o cláusulas del antecedente de la regla escogida en el paso anterior: agua(C,4) que debe leerse como que el agua llegue hasta el 4 paso del depósito C, que es el que se corresponde con el destino 3 . Para probarlo, puede usarse la regla R1 con la unificación σ2={i=B,j=C,k=3,k′=4}, que es precisamente la que modela el movimiento del agua en la última tubería que hay entre los depósitos B y C. Gracias a esta regla, la conclusión que quiere probarse será cierta, si lo es el antecedente de la regla escogida una vez que se ha practicado la unificación indicada: agua(B,3) , tubería(B,C,3) y succ(3,4) . El segundo predicado aparece, de hecho, en nuestra base de hechos original (H2), y el tercero también (ver nota a pie de página 4). Por lo tanto, queda por probar Agua(B,3). (c) Para probar que el agua llega, efectivamente, hasta el tercer paso del depósito B, es preciso que el agua fluya por la tubería que hay en el segundo paso desde C hasta B. Será precisamente la regla R2 la que nos ayude a hacerlo. Para ello, se empleará la unificación σ3={i=B,j=C,k=2,k′=3} , gracias a la cual puede concluirse que agua(B,3) será necesariamente cierto si puede probarse simultáneamente: agua (C,2), tubería(B,C,2) y succ(2,3) . El segundo predicado aparece en la base de hechos inicial (H1) y el tercero es conocido también. Por lo tanto, ahora debe probarse agua(C,2). (d) En la figura 2 resulta fácil observar que el agua llegará al segundo paso del depósito C cayendo precisamente en vertical. Este movimiento está modelado precisamente por la regla R3 que se empleará con la unificación σ4={i=C,k=1,k′=2} . De este modo, la conclusión (agua(C,2)) será cierta si son ciertas las premisas: agua(C,1), progreso(C,1) y succ(1,2) . Mientras que los dos últimos predicados son conocidos (hecho H3 ) y relación de sucesión, respectivamente, el primero debe probarse explícitamente. (e) Precisamente, la aparición del agua en el primer paso se modela explícitamente con la regla R4 que establece que el agua llegará hasta el primer paso del canal C si se abre precisamente el depósito C, si dicha regla se lee con la unificación σ={x=C}. En conclusión, si se abre el depósito C, el agua llegará hasta la tercera salida. Más aún, al contrario que como sucediera con la deducción hacia delante, la deducción hacia detrás proporciona una explicación pormenorizada del motivo por el que esto es cierto. Esto es, una explicación completa que puede leerse siguiendo ahora los pasos anteriores al revés: el agua sale del depósito C, llega hasta el segundo paso del tercer canal, desde donde fluye por la tubería que le une con B y vuelve de nuevo al canal C a lo largo de una segunda tubería desde la que cae hasta la salida del tercer depósito (b)
19
Junto con las de Succ(1, 2), Succ(2, 3), . . . como se indicó anteriormente Razonamiento lógico
14
Inteligencia Artificial 2011
Modelar con lógica proposicional el juego de piedra, papel o tijera Lógica proposicional - juego de piedra, papel o tijera 20 Las proposiciones necesarias seran: pi1: el jugador 1 saca piedra pa1: el jugador 1 saca papel ti1: el jugador saca tijera pi2: el jugador 2 saca piedra pa2: el jugador 2 saca papel ti2: el jugador 2 saca tijera e: empate g1: gana el jugador 1 g2: gana el jugador 2 Las reglas son: R1: R2: R3: R4: R: R6: R: R8: R9:
pi1 pi1 pa1 pa1 ti1 ti1 pi1 pa1 ti1
∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧
pa2 ti2 pi2 ti2 pi2 pa2 pi2 pa2 ti2
→ → → → → → → → →
gana2 gana1 gana1 gana2 gana2 gana1 e e e
Para hacer las inferencias en cada jugada se añadirá las 2 proposiciones correspondientes a la jugada de cada jugador y se aplicar el modus pones. Por ejemplo 1) 2) 3)
pi1 pa2 (Con 1, 2 y R1, por modus ponen se deduce)
gana2
20
http://galahad.plg.inf.uc3m.es/~iat/ejercicios/sol-ejercicios-modelar.pdf Razonamiento lógico
15
Inteligencia Artificial 2011
Modelar el juego de 3 en raya con lógica de predicados Lógica de predicados - juego de 3 en raya con21
Para modelar un problema con lógica de predicados hay que definir las formulas atómicas (literales o predicados y argumentos), las reglas o formulas bien formadas con implicación y las posibles inferencias (por deducción aplicando el modus pone + UNIFICACIÓ N). Para identificar las casillas, ahora es mejor utilizar coordenadas X e Y que nos permitirán hacer reglas genéricas sobre tres en raya en la misma fila y columna. Tomando como origen de coordenadas la equina superior izquierda, tal como se muestra en la figura, la modelizacion del problema sería: Predicados y argumentos
Reglas:
Inferencias. Cada vez que un jugador pone una marca se añade a los axiomas el literal correspondiente y se verifica si aplicando el modus pones con la sustitución adecuada se puede deducir que jugador gana. Por ejemplo:
21
http://galahad.plg.inf.uc3m.es/~iat/ejercicios/sol-ejercicios-modelar.pdf Razonamiento lógico
16
Inteligencia Artificial 2011
3 en raya en prolog 22
Tres en Raya en Prolog usando Algoritmo MINIMAX y Poda Alfa-Beta [Codigo en Swi-Prolog] 23
22
http://www.infor.uva.es/~calonso/IAI/PracticasProlog/Tema4/Tema 4. Estructuras de Control.pdf http://www.como-programar.com/2009/09/tres-en-raya-en-prolog-usando-algoritmo.html Razonamiento lógico 23
17
Inteligencia Artificial 2011
B. PROLOG – ESTUDIAR EL MATERIAL PUBLICADO EN EL AULA 24 Dado el siguiente programa Prolog
b) Identificar: predicados, variables, constantes, estructuras y 25funciones. - Predicado: member - Función: elim_rep - Variables: X, Y, Xs, Ys - Constante [ ] - Estructura: [X|Xs], [X|Ys], [Y|Ys], c) Determinar el resultado de las siguientes consultas: i)
ii)
iii)
iv)
v)
vi)
Analizar el efecto del cut(!)26 empleado en el siguiente programa Prolog. (a) Determinar qué respuestas se obtienen de la consulta ?- p(X,Y) .
24
Carpeta publicado en semana del 19 de abril: Apuntes Programación Logica archivo El Cálculo de Predicados trata con: Individuos que pertenecen a un dominio no vacío Funciones que definen nuevos individuos en términos de los previamente conocidos Predicados que describen un conjunto de individuos que tienen una propiedad o relación Además se trata con formas proposicionales, estructuras que aparecen como senetencias declarativas, pero que no tienen valores definidos de verdad a causa de las variables individuales 26 Ayuda: lean el apuntes que está en la carpeta llamado 02 PROGRAMACIÓN DE LÓGICA CON PROLOG.pdf 18 Razonamiento lógico 25
Inteligencia Artificial 2011 (b)
Explicar claramente por qué se obtienen esas respuestas. El operador cut(!) lo que hace es no volver en un proceso de reevaluación, en este caso toma el primer valor de q() que es a y después evalúa todos los valores de r(), y ahí quiere volver a tomar el segundo valor de q() pero como se encuentra con cut termina ahí nomás.
27
28
29
27
Respuestra extraida de TP3-Fratte-Daniel.pdf Respuestra extraida de TP3-Gumiel-Ruben.pdf 29 Respuestra extraida de TP3-Corsino-Leandro.pdf Razonamiento lógico 28
19
Inteligencia Artificial 2011
Nota: Una vez asignado un valor ese se le queda a menos que se le quite por medio de backtracking. Toda la manipulación de datos se hace por medio de unificación . El programador puede afectar la ejecución de un programa cambiando el orden de las cláusulas y de las metas. Prolog tiene un predicado especial llamado ``CUT'' (!) que puede afectar el comportamiento procedural de los programas. Con el ! podemos prevenir Backtracking. Función principal: reducir el espacio de búsqueda de soluciones cortándolo dinámicamente Puede eliminar fácilmente el sentido declarativo de los programas. Para ver su uso más fácil, consideremos una función que tiene predicados mutuamente exclusivos. e.g., una función escalón: f(X,0) :- X < 3. f(X,2) :- X >= 3, X < 6. f(X,4) :- X >= 6. Si preguntamos: ?- f(1,Y), 2 < Y. Prolog a través del backtracking trata 2 soluciones que se ven que
van a fallar Las 3 reglas son mutuamente exclusivas por lo que en el momento de que una jala, no tiene sentido en tratar con las otras 2. Esto puede hacerse con el !. f(X,0) :- X < 3, !. f(X,2) :- X >= 3, X < 6, !. f(X,4) :- X >= 6.
Todavía podemos reducir más el código: Idea: si la primera cláusula falla ya sabemos que X >= 3 (lo mismo para la primera condición de la tercera cláusula) f(X,0) :- X < 3, !. f(X,2) :- X < 6, !. f(X,4).
En principio da el mismo resultado, pero le quitamos el sentido lógico (si le quitamos los cuts nos da varias soluciones) Usos: - decirle que ya encontró una solución correcta - decirle que si llegaste ahí, entonces falla (en conjunción con fail) Que hace ! ? - poda todas las cláusulas debajo de ésta - poda todas las posibles soluciones al lado izquierdo del cut - no afecta el lado derecho Para entender más claramente la función del CUT: Meta Padre: la meta que apareó la cabeza de la cláusula que tiene el ! Cuando se encuentra el ! como meta, ésta se cumple, pero ``compromete'' al sistema a todas las opciones hechas entre la meta padre y el ! (i.e., las otras posibles opciones entre la meta padre y el ! se eliminan)
e.g., (poner árbol AND/OR) P P P A
::::-
Q, S, U, B,
R. !, T. V. P, C.
Afecta el comportamiento de ``P'' pero no de ``A''
Razonamiento lógico
20
Inteligencia Artificial 2011
Implementar30 en Prolog la versión recursiva y la versión iterativa de las siguientes funciones: Crédito extra (quedan para hacer en el Informe del Laboratorio 3). a) Fibonacci. Un ejemplo clásico es Fibonacci31: el número N de Fibonacci (excepto los 2 primeros que es 1) es = f (N -1) + f (N -2) fibo(1,1). fibo(2,1). fibo(N,F) :- N>2, N1 is N-1, fibo(N1,F1), N2 is N-2, fibo(N2,F2), F is F1+F2, asserta(fibo(N,F)). % Nuevo para guardar resultados
Otra forma de hacerlo es guardar los resultados al ir haciéndolo. Aumentar 2 argumentos mas para tener estos resultados parciales (de N - 1 y de N -2) Osea: ffibo(2,N,F-1,F-2,(F-1 + F-2)) ffibo(N,F) :- ffibo(2,N,1,1,F). ffibo(M,N,F1,F2,F2) :- M >= N. ffibo(M,N,F1,F2,F) :- M < N, M1 is M + 1, NF2 is F1 + F2,
ffibo(M1,N,F2,NF2,F).
b) Factorial. Para todo número natural n, se llama n factorial o factorial de n al producto de todos los naturales desde 1 hasta n: Que de un modo resumido se puede expresar como: Se define 0! = 1, para que la relación n! = n × (n − 1)! sea también válida para n = 1. Esta relación permite definir los factoriales por recursividad. La notación n! fue popularizada por el matemático francés Christian Kramp.
producto(X,Y,Z):- Z is X*Y. factorial(1,1). factorial(X,Y):- X>1, X1 is X-1, factorial(X1,Z), producto(X,Z,Y).
o factorial(0.1) :-!. factorial(X,Y) :- X>0 , X1 is X-1, factorial(X1,Y1), Y is X*Y1.
c) Coeficientes binomiales Los coeficientes binomiales o combinaciones son una serie de números estudiados en combinatoria que indican el número de formas en que se pueden extraer subconjuntos a partir de un conjunto dado. Sin embargo, dependiendo del enfoque que tenga la exposición, se suelen usar otras definiciones equivalentes32
Escoger k elementos a partir de un conjunto de n
factorial(0.1) :-!. factorial(X,Y) :- X>0, X1 is X-1, factorial(X1,Y1), Y is X*Y1. binomial(N,K,R):- factorial(N,NF), factorial(K,KF), L is N-K, factorial(L,LF), Y is KF*LF, R is NF/Y.
30
Ayuda: lean el apuntes que está en la carpeta llamado Ejercicios de programación declarativa con prolog.PDF http://ccc.inaoep.mx/~emorales/Cursos/Prolog/ 32 http://es.wikipedia.org/wiki/Coeficiente_binomial Razonamiento lógico 31
21
Inteligencia Artificial 2011
Avanzado. 1) Considere el siguiente algoritmo general de búsqueda:
a) En qué parte del algoritmo se determina la estrategia de búsqueda utilizada? Explique su respuesta. El predicado 33seleccionar(Nodo,Frontera,F) en el caso que cuando seleccione elija cual va a seleccionar y no lo haga en orden; o el predicado agregar(F,Vs,F1) en el caso que el seleccionar lo haga en algún orden acá cuando los agreguemos a la frontera tendríamos que ponerlos en el orden que los necesitemos. 34
35
33
Respuestra extraida de TP3-Anitori-Luis-Martin.pdf Respuestra extraida de TP3-Barraquero-Matias.pdf 35 Jorge Baier Aranda, PUC https://forja.rediris.es/docman/view.php/82/300/busqueda1.pdf Razonamiento lógico 34
22
Inteligencia Artificial 2011
Razonamiento lógico
23
Inteligencia Artificial 2011
BUSQUEDA GENERICA SIN REPETICION DE ESTADOS
Razonamiento lógico
24
Inteligencia Artificial 2011
Razonamiento lógico
25
Inteligencia Artificial 2011
b) De que forma medicaría el algoritmo para obtener la solución de la búsqueda, es decir, el camino desde el estado inicial a la meta hallada? Analice distintas formas en las que se podría obtener o reconstruir este camino.
36
37
36
Respuestra extraida de TP3-Barraquero-Matias.pdf Respuestra extraida de TP3-Corsino-Leandro.pdf Razonamiento lógico 37
26
Inteligencia Artificial 2011
Escribir un programa Prolog que represente el grafo38
a)
Suponga que cada uno de los nodos representa una ciudad y los arcos representan caminos (ida y vuelta) entre pares de ciudades. La etiqueta de cada arco representa la distancia entre ciudades. Se desea encontrar un camino desde una la ciudad a a cualquiera de las metas. Las metas son las ciudades f y g . Considere la siguiente función heurística h definida sobre cada uno de los nodos: h(a)=20, h(b)=10, h(c)=1, h(d)=, h(e)=, h(f)=h(g)=0 Siguiendo el algoritmo general de búsqueda dado en el ejercicio anterior, implementar en Prolog un algoritmo buscar(Frontera) que implemente búsqueda a lo ancho. Considerar que junto con la representación del grafo, existe un hecho esMeta/1 por cada nodo que es meta. En este caso: esMeta(f). esMeta(g).
b) Implementar el predicado de forma tal que se muestre por pantalla los nodos que son seleccionados a medida que avanza la búsqueda. (Utilizar los predicados write/1 y nl/0). c) Modificar el predicado implementado para hacer búsqueda en profundidad. Considerar que el grafo tiene ciclos, por lo tanto es necesario evitarlos en el proceso de búsqueda. Para ello se debería mantener, además de la frontera de la búsqueda, una lista con los nodos ya explorados. d) Modificar la representación del grafo adoptada en el inciso a para representar los costos de los arcos y el valor de la función heurística en cada nodo. e) Utilizando la representación del ejercicio anterior, definir un predicado que implemente el algoritmo de búsqueda heurística A*. Para almacenar los nodos de la frontera y los nodos ya explorados, mantener, respectivamente, un conjunto de hechos dinámicos de la forma: open(Nodo). closed(Nodo).
Donde, Nodo es un término Prolog que representa toda la información que debe mantenerse en un nodo para llevar adelante la búsqueda: etiqueta (estado), heurística, camino desde el estado inicial, etc. En el proceso de búsqueda, al generar los vecinos de un nodo N, se debe agregar dinámicamente un hecho de la forma open(V), por cada vecino V de N que haya sido generado. Cuando un nodo N termina de ser explorado (i.e. sus vecinos han sido generados) dicho nodo debe ser eliminado de la frontera. Para ello, se eliminaría dinámicamente el hecho open(N) y se agregaría el hecho dinámico closed(N) para indicar que dicho nodo ya ha sido explorado. Importante: La implementación del predicado debe tener en cuenta que, durante la búsqueda, un nodo ya generado o ya explorado podría ser descubierto nuevamente sobre un camino más promisorio. En ese caso, el nodo debe ser explorado nuevamente.
38
http://cs.uns.edu.ar/~grs/InteligenciaArtificial/ Razonamiento lógico
27
Inteligencia Artificial 2011 39
a) esMeta(f). esMeta(g). vecinos(a,[b,c,d]). vecinos(b,[a,c,d,e,g]). vecinos(c,[a,b]). vecinos(d,[a,b,f]). vecinos(e,[d,f,g]). vecinos(f,[d,e]). vecinos(g,[b,e]). agregarAlFinal(F,Vs,F1), buscarEn(F1,Resultado). agregar(F,[],[F]). agregar(F,[X|Vs],[X|F1]):-agregar(F,Vs,F1). agregarAlFinal(F,[],F). agregarAlFinal(F,[X|Xs],F1):-agregar(X,F,L2), agregarAlFinal(L2,Xs,F1). seleccionar(N,F,F1):- primero(F,N), resto(F,F1). primero([X|_],X). resto([_|L],L). buscarEn(Frontera, [Nodo]) :- seleccionar(Nodo,Frontera,F), esMeta(Nodo) , !. buscarEn(Frontera, [Nodo|Resultado]) :- seleccionar(Nodo,Frontera,F), vecinos(Nodo,Vs), // Resultado devuelve una lista con todos los nodo s que se van visitando de esta forma: ?- buscarEn([a],X). X = [a, b, c, d, a, c, d, e, g]
b) esMeta(f). esMeta(g). vecinos(a,[b,c,d]). vecinos(b,[a,c,d,e,g]). vecinos(c,[a,b]). vecinos(d,[a,b,f]). vecinos(e,[d,f,g]). vecinos(f,[d,e]). vecinos(g,[b,e]). primero([X|_],X). resto([_|L],L). agregar(F,[],[F]). agregar(F,[X|Vs],[X|F1]):-agregar(F,Vs,F1). agregarAlFinal(F,[],F). agregarAlFinal(F,[X|Xs],F1):-agregar(X,F,L2), agregarAlFinal(L2,Xs,F1). seleccionar(N,F,F1):- primero(F,N), resto(F,F1). buscarEn(Frontera, [Nodo]) :- seleccionar(Nodo,Frontera,F), esMeta(Nodo) , !, write('El objetivo alcanzado es: ' ), write(Nodo). buscarEn(Frontera, [Nodo|Resultado]) :- seleccionar(Nodo,Frontera,F), write(Nodo), nl, vecinos(Nodo,Vs), agregarAlFinal(F,Vs,F1), buscarEn(F1,Resultado). // Ejemplo: ?- buscarEn([a],X). a b c d a c d e El objetivo alcanzado es: g X = [a, b, c, d, a, c, d, e, g]
39
Respuestra extraida de TP3-Corsino-Leandro.pdf Razonamiento lógico
28
Inteligencia Artificial 2011 c) esMeta(f). esMeta(g). vecinos(a,[b,c,d]). vecinos(b,[a,c,d,e,g]). vecinos(c,[a,b]). vecinos(d,[a,b,f]). vecinos(e,[d,f,g]). vecinos(f,[d,e]). vecinos(g,[b,e]). primero([X|_],X). resto([_|L],L). seleccionar(N,F,F1):- primero(F,N), resto(F,F1). agregar(F,[],F). agregar(F,[X|Vs],[X|F1]):-agregar(F,Vs,F1). pertenece(X,[X|_]). pertenece(X,[_|Xs]):-pertenece(X,Xs). diferenciaListas([],_,[]). diferenciaListas([X|Xs],L,[X|Lr]):-not(pertenece(X,L)),diferenciaListas(Xs,L,Lr),!. buscarEn(Frontera, Explorados, [Nodo]) :- seleccionar(Nodo,Frontera,F), esMeta(Nodo), !, write('El objetivo alcanzado es: '), write(Nodo). buscarEn(Frontera, Explorados, [Nodo|Resultado]) :- seleccionar(Nodo,Frontera,F), write(Nodo), nl, vecinos(Nodo,Vs), diferenciaListas(Vs,Explorados,Vs1), agregar(F,Vs1,F1), buscarEn(F1,[Nodo|Explorados],Resultado). diferenciaListas([_|Xs],L,Lr):-diferenciaListas(Xs,L,Lr). /Ejemplo: ?- buscarEn([a],[],X). a b c d El objetivo alcanzado es: f X = [a, b, c, d, f]
40
% Arcos vecinos(a,[b,c,d]). vecinos(b,[a,c,d,e,g]). vecinos(c,[a,b]). vecinos(d,[a,b,f]). vecinos(e,[b,f,g]). vecinos(f,[d,e]). vecinos(g,[b,e]). % Soluciones esMeta(f). esMeta(g). % Manejo de listas estaen(E,[E|L]). estaen(E,[C|L]):- estaen(E,L). agregar(Lista,[C],Lista):- estaen(C,Lista). agregar(Lista,[C],[C|Lista]). agregar(Lista,[C|Nodos],Result):- estaen(C,Lista), agregar(Lista,Nodos,Result). agregar(Lista,[C|Nodos],[C|Result]):- agregar(Lista,Nodos,Result).
40
Respuestra extraída de TP3-Barraquero-Matias.pdf Razonamiento lógico
29
Inteligencia Artificial 2011 % costos y heurísticas g(X,Y,Z):- g(Y,X,Z). g(a,b,10). g(a,c,20). g(a,d,15). g(b,g,15). g(d,f,5). g(e,f,10). h(a,20). h(b,10). h(c,15). arco(a,c,Y,X) :- h(c,X), costo(a,c,Y). arco(a,d,Y,X) :- h(d,X), costo(a,d,Y). arco(d,b,Y,X) :- h(b,X), costo(d,b,Y). arco(b,e,Y,X) :- h(e,X), costo(b,e,Y). arco(e,g,Y,X) :- h(g,X), costo(e,g,Y).
g(b,c,5). g(b,d,5). g(b,e,5). g(e,g,2). h(d,7). h(e,5). h(f,0). arco(a,b,Y,X) :- h(b,X), costo(a,b,Y). arco(d,f,Y,X) :- h(f,X), costo(d,f,Y). arco(c,b,Y,X) :- h(b,X), costo(c,b,Y). arco(f,e,Y,X) :- h(e,X), costo(f,e,Y). arco(b,g,Y,X) :- h(g,X), costo(b,g,Y).
h(g,0).
%BPAnchura: busqueda(Soluc):- estadoInic(X), buscarEn([X],[],Soluc). buscarEn(Frontera,Soluc,[Nodo|Soluc]):- seleccionar(Nodo,Frontera,F), write(Nodo), nl, esMeta(Nodo). buscarEn(Frontera,Soluc,[Nodo|Soluc1]):- seleccionar(Nodo,Frontera,F), write(Nodo), nl, vecinos(Nodo,Vs), agregar(F,Vs,F1), buscarEn(F1,Soluc,Soluc1). seleccionar(Nodo,[Nodo],[]). seleccionar(Nodo,[C|Frontera],[C|F]):- seleccionar(Nodo,Frontera,F). %BPProfundidad en grafo: busqueda(Soluc):- estadoInic(X), buscarEn([X],[],Soluc,[]). buscarEn(Frontera,Soluc,[Nodo|Soluc],Repetidos):- seleccionar(Nodo,Frontera,F), write(Nodo), nl, esMeta(Nodo). buscarEn(Frontera,Soluc,Soluc1,Repetidos):- seleccionar(Nodo,Frontera,F), write(Nodo), nl, estaen(Nodo,Repetidos), buscarEn(F,Soluc,Soluc1,Repetidos). buscarEn(Frontera,Soluc,[Nodo|Soluc1],Repetidos):- seleccionar(Nodo,Frontera,F), write(Nodo), nl, agregar(Repetidos,[Nodo],Repetidos1), vecinos(Nodo,Vs), agregar(F,Vs,F1), buscarEn(F1,Soluc,Soluc1,Repetidos1). seleccionar(Nodo,[Nodo|Frontera],Frontera).
Algoritmo A * Es un algoritmo admisible y optimal (encuentra la solución optima). Hay que darle una ayuda en forma de función heurística f(n). Tiene que cumplir que para cualquier nodo devuelva el costo estimado del menor camino que va desde el nodo inicial hasta el nodo final y pase por el nodo n al que aplico la función. Debe asignarse a cada movida un costo c, que no puede ser infinitésimo, es decir que no tiende a cero. Entonces si me piden resolver en la menor cantidad de movidas, a cada regla le asigno costo uno y con eso al darme el menor costo, me da la menor cantidad de movidas. Costo de un camino es la sumatoria de los costos de los arcos del camino (grafo). Cuando el camino consta de ningún arco, el costo del camino es cero. La función heurística f(n) esta formada por la suma de dos funciones, g(n) que es el costo estimado del menor camino que va desde el nodo inicial hasta el nodo en que se aplico la función, y h(n) que es la función que nos da el costo estimado del mejor camino que va desde el nodo en que se aplica la función hasta el nodo final. Se cunple que: F(n)=G(n)+H(n) F(ni)=F(nf) G(ni)=0 G(nf)=F(nf) H(ni)=F(ni)=F(nf)
Razonamiento lógico
30
Inteligencia Artificial 2011 H(nf)=0 Para que el algoritmo sea A* debe cumplirse que: " n / G(n) >= G*(n) (estimación por exceso del real) (G*(n) es el costo real) " n / H(n) <= H*(n) (estimación por defecto del real) posición optimista
41
El algoritmo A * en Prolog (traducción por google)
Trata sobre la búsqueda heurística utilizando un algoritmo de Nilsson (1980). Búsqueda heurística utiliza una función heurística para ayudar a guiar la búsqueda. Cuando un nodo se expande, cada uno de sus hijos se evalúa utilizando una función de búsqueda. Cada sucesor es colocado en una lista de nodos - llamada lista abierta - Con el fin determinado por la evaluación de la función de búsqueda (valores más pequeños primero). La estimación de la función heurística se debe hacer para alcanzar una meta de el nodo en cuestión. Normalmente, la función de búsqueda f se expresa como: f (n) = g (n) + h (n) donde g (n) representa el costo (calculado, real) de llegar al nodo n a lo largo del camino desde la raiz a el nodo actual, y h es la función heurística de dicho nodo. Por lo tanto, f (n) son las estimaciones de costes o esfuerzo para conseguir con éxito de principio a fin por pasar por el nodo n (junto algún camino particular, particular). Aquí hay un pseudocódigo sencillo. 1. 2. 3. 4.
Comience con el nodo de inicio, colóquelo en la lista (previamente vacía) abierto. Sea n el primer nodo de abierto. Retire n de abierto. Fallar si abierto está vacío. Si n es el objetivo, entonces uno se ha encontrado solución. (Uno podría detenerse aquí.) Ampliar n, la obtención de todos sus hijos, y evaluar f (-) para cada uno de ellos. Inserte cada uno de estos niños en abierto, Mantener el orden en que el f más pequeño (-) los valores son lo primero. 5. Repita desde el paso 2.
Cuando un objetivo se ha alcanzado, sin duda uno le gustaría ser capaz de devolver el solución de ruta de acceso desde el inicio hasta la meta. El pseudocódigo caso omiso de esta característica, pero se incluirá como prototipo de programa Prolog se desarrolla. Un coste común función g (-) es longitud de trayectoria. El costo de obtener de la nodo inicial a un nodo actual es la longitud de la trayectoria de referencia. Esto puede ser computado de forma incremental, como se verá. Es importante darse cuenta de que este tipo de búsqueda puede seguir una contigua camino por un tiempo, hasta que algún nodo n no elegido previamente tiene la menor corriente f (-) El valor, en cuyo caso se expande este nodo n, y sus niños considerados. Ahora para el programa Prolog para la búsqueda * A.
Supongamos que Estado se refiere a una determinada descripción del estado de una búsqueda. Por ejemplo Estado podría ser una descripción de la pieza 8-puzzle para una configuración específica, como desarrollado en la siguiente sección. Un Nodo en el espacio de búsqueda (o gráfico) las necesidades para registrar la Estado, La Profundidad (O de paso de luz desde el principio), la valor de f (-) para el nodo F, Y una lista de los antepasados Un de este nodo. Vamos a utilizar la estructura temporal de Prolog Nodo = # Estado Profundidad # F # A
para un nodo. ¿Cuándo Nodo se amplía para encontrar a sus hijos ... - El estado de cada niño se computará como un movimiento desde Estado - cada uno de estos niños tendrán la profundidad Profundidad + 1, - la f (-) el valor de cada niño se calculará, y - la lista de los antepasados de un niño será la lista Prolog [plazoNodo|Un]. 41
http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/5_1.html Razonamiento lógico
31