Ai u4

Page 1

Logic M.C. Juan Carlos Olivares Rojas jolivares@uvaq.edu.mx February, 2009


Outline Sistemas de Deducci贸n Sistemas de Reacci贸n Encadenamiento Progresivo y Regresivo Modelamiento Cognitivo Modelos para la Resoluci贸n de Problemas


Sistemas de Deducción • Los sistemas de deducción pueden variar dependiendo del problema pero en general se utiliza el método de resolución visto en la unidad pasada. • Los lenguajes utilizados en IA como LISP y PROLOG tienen su propio motor de inferencia y están sujetos a reglas muy particulares.


Sistemas de Deducción • ¿Cuál es la diferencia entre un hecho y una afirmación? • Un hecho es algo que se considera verdadero, una afirmación es una proposición afirmativa que necesita ser demostrada. • Ejemplos de reglas para identificar animales:


Sistemas de Deducción • Z1 Si X tiene pelo entonces X es mamífero • Z2 Si X da leche entonces X es mamífero • Z3 Si X tiene plumas entonces X es ave • Z4 Si X vuela y X come carne entonces es mamífero • Z5 Si X es mamífero y X come carne entonces X es carnívoro


Sistemas de Reacción • Los sistemas de reacción permite inferir conocimiento a través de una concatenación de reglas, las cuales pueden ser Progresivas o Regresivas. • Los sistemas de reacción tratar de anclar consecuentes con antecedentes de las reglas teniendo así sistemas más inteligentes. • Los

sistemas

de

reacción

implican

la


Sistemas Reacción B1 Si el paso es la verificación de la orden Papas fritas se van a empacar No se va a empacar Pepsi Entonces pregunte al cliente si no le gustarían llevar una botella de Pepsi. • Otras reglas por definir son eliminar y añadir elementos.


Encadenamiento Progresivo y Regresivo • El encadenamiento de reglas puede ser hacia adelante. En ésta, se inicia con cláusulas atómicas de la base de conocimiento. Luego se aplica el modus Ponens Generalizado hacia delante hasta que ya no se puedan obtener nuevas cláusulas atómicas. • Las inferencias realizadas son de la forma:


Encadenamiento Progresivo o Regresivo • • • •

Reglas: R1: si A entonces B. R2: si B entonces C. R3: si C entonces Z

• Hechos: • H1: A (dato de partida) • H3: Z (objetivo a alcanzar)


Encadenamiento Progresivo y Regresivo • En el encadenamiento regresivo se aplica todo lo contrario; es decir, dado un objetivo se pretende llegar al hecho para dar una solución a un problema. • El encadenamiento regresivo o backtracking permite regresar a una opción anterior en caso de que existieran varios encadenamientos de regla que no llevan a la


Modelamiento Cognitivo • Los sistemas basados en reglas pueden verse como sustratos, de esta forma se puede tener una forma de introspección del como obtuvieron la deducción; es decir, muestran como se formaron las reglas. • Los sistemas basados en reglas se les conoce como sabios idiotas, ya que sólo respondan a preguntas fáciles y carecen de muchas de las características del experto del


Modelos para la Resolución de Problemas • Los sistemas basados en reglas pueden funcionar como sistemas de producción. • Siendo sistemas de producción pueden utilizarse para generar nuevo conocimiento de las reglas ya existentes.


PROLOG • • • • • •

Hechos: las aves vuelan los pingüinos no vuelan "pichurri" es un ave "sandokan" es un perro "alegría" es un ave


PROLOG • Reglas o Restricciones: • una mascota vuela si es un ave y no es un pingüino • Preguntas • ¿ "pichurri" vuela ? • ¿ qué mascotas vuelan ?


PROLOG • Términos: constantes (a), variables (X), funciones (f(X, Y )) pepe, juan, Cliente, cliente-de(X, Y ) • Fórmulas atómicas: predicados definidos sobre términos tipo-cliente(X,bueno)


PROLOG • Fórmulas bien formadas (wff): fórmulas atómicas unidas por conectivas (^, _,!, ¬) y cuantificadas (1A universal, 1B existencial) • 1AX, 1BZ cliente(X) ^ compra(X, Z) ^ caro(Z)  tipo-cliente(X, bueno) • abuelo(X,Y) :- padre(X,Z), padre(Z,Y). • 1AX, Y 1BZ padre(X, Z) ^ padre(Z, Y)  abuelo(X, Y )


PROLOG • abuelo(X,Y) :- padre(X,Z), madre(Z,Y). • abuelo(X,Y) :- padre(X,Z), padre(Z,Y). • abuelo(X, Y) = {(pepe, juan), (pepe, ana), … , (luis, javier)} • progenitor(X, Y ) :- padre(X, Y ). • progenitor(X, Y ) :- madre(X, Y ).


PROLOG • abuelo(X,Y) :- padre(X,Z), madre(Z,Y). • abuelo(X,Y) :- padre(X,Z), padre(Z,Y). • abuelo(X,Y) :- padre(X,Z), progenitor(Z,Y). • hechos: A. (A átomo) • reglas: A :- A1, ..., An. (n>0, y A, A1, ..., An átomos)


PROLOG • Hechos: – – – – – – – – –

padece(jon, gripe). padece(jon, hepatitis). padece(ana, gripe). padece(carlos, alergia). es-síntoma(fiebre, gripe). es-síntoma(cansancio, gripe). es-síntoma(estornudos, alergia). suprime(paracetamol, fiebre). suprime(antihistamínico, estornudos).


PROLOG • Reglas: – debe-tomar(Per, Far) alivia(Far, Enf). – alivia(Far, Enf) :suprime(Far, Sin).

:-

padece(Per,

es-síntoma(Sin,

• Preguntas: – ? padece(carlos, gripe). – ? padece(jon, Z). – ? alivia(paracetamol, gripe).

Enf), Enf),


PROLOG – – – –

? alivia(X, gripe). ? debe-tomar(Y, antihistamínico). ? alivia(X, Y). ? suprime(X, fiebre), suprime(X, estornudos).

• ¿Qué devuelve resultado?

cada

pregunta

como


PROLOG • hija (*A, *B) <- mujer (*A), padre (*B, *A). • hija (*A, *B) <- mujer (*A), madre (*B, *A). • A continuación se muestra un programa completo en PROLOG: %% declaraciones padrede('juan', 'maria'). padrede('pablo', 'juan').


PROLOG padrede('pablo', 'marcela'). padrede('carlos', 'debora'). %%Reglas % A es hijo de B si B es padre de A hijode(A,B) :- padrede(B,A). abuelode(A,B) :- padrede(A,C), padrede(C,B). hermanode(A,B) :padrede(C,A) , padrede(C,B), A \== B. familiarde(A,B) :- padrede(A,B).


PROLOG familiarde(A,B) :- hijode(A,B). familiarde(A,B) :- hermanode(A,B). %% consultas % juan es hermano de marcela? ?- hermanode('juan', 'marcela'). Yes ?- hermanode('carlos', 'juan'). No ?- abuelode('pablo', 'maria'). Yes ?- abuelode('maria', 'pablo'). no


PROLOG %unificaci贸n con evaluaci贸n. ?- X is 3+5. X=8 %unificaci贸n simb贸lica ?- X = 3+5. X = 3+5


PROLOG %comparaci贸n con evaluaci贸n ?- 3+5 =:= 2+6. yes %comparaci贸n simb贸lica. ?- 3+5 == 2+6. no ?- 3+5 == 3+5. yes


PROLOG • Los programas en PROLOG se definen a través de Algoritmos, Lógica y Control. • En caso de que una consulta de más de un resultado, el prompt no aparece en la shell. Se puede utilizar el operador . Para terminar el resultado, o bien, el operador ; para continuar con los emparejamientos de resultados. • Se pueden combinar preguntas para obtener


PROLOG • • • • • • •

%Combinación de preguntas legusta(pepe, pesca). legusta(maria, bailar). legusta(ana, pesca). legusta(pepe, musica). legusta(maria, musica). legusta(ana, bailar).

• %preguntas


PROLOG • ¿Le gusta la música a Pepé y a María? • ?_ legusta(pepe,musica), legusta(maria, musica). • ¿Le gusta bailar a Pepé o le gusta la música a maria? • ?_ legusta(pepe,bailar); legusta(maria, musica). • ¿Le gusta bailar a Pepé y a maria no le gusta


PROLOG • El portal de redes sociales de la UVAQ desea diseñar un Sistema Experto para encontrar la pareja ideal de cada estudiante si es que existiere. Para lograr esto, se tienen en la base de conocimientos registrados los gustos de cada usuario (color de ojos, altura, complexión, carro, etc.). Se da un punto por cada coincidencia. Diseñar la regla o reglas que determinen la mejor pareja de cada usuario. (Se deben tener al menos 2 hombres y 2 mujeres con 5 gustos


PROLOG • Se puede aplicar recursividad en PROLOG además de que algunos programas en programación estructurada pueden ser implementados. • • • • •

%Sucesiones sucesor(1,2). sucesor(2,3). sucesor(3,4). sucesor(4,5).


PROLOG • sucesor(6,7). • suma(1,X,R):-sucesor(X,R). • suma(N,X,R):-sucesor(M,N), suma(M,X, R1), sucesor(R1, R). • %Como se crearía una consulta? • %¿Qué es lo que el programa haría?


PROLOG • Una lista es una secuencia lineal de objetos en donde todas las manipulaciones se hacen del lado izquierdo de la lista. • La lista vacía se representa []. Una lista que no es vacía debe contener al menos dos elementos, uno del lado izquierdo y otro del lado derecho. Ejemplo: [X | Y], [X, Y | Z].


PROLOG • agregar([], L, L). • agregar([A|R], L, [A|T]):-agregar(R, L, T). • %Como se realiza la consulta? • ?- agregar([1,2,3 | [] ], [1, 5,7 | [] ], R). • Dos predicados com el mismo nombre pero diferente aridad (numero de argumentos) son diferentes.


PROLOG • %Programa aridad • ama(juan). • ama(pepe, maria). • La unificación es el proceso en el cual uma variable toma un valor. • Cuando una variable tiene un valor, este no cambia.


PROLOG

• Dos términos se ejecutan cuando existe una posible ligadura en sus variables y en sus valores. Ejemplo: a(X, 3) = a(2, Y). • • • • • •

edad(luis,25). edad(hugo,32). edad(paco,29). edad(jaime,67). edad(laura,85). es_viejo(Persona) valor > 60.

:-

edad(Persona,Valor),


Ejercicio • • • • • • • • •

padre(X,Y) – X es padre de Y madre(X,Y) – X es madre de Y es_padre(X) – X es un padre es_madre(X) – X es una madre es_hijo(X) – X es un hijo (hombre) hermana(X,Y) – X es hermana de Y abuelo(X,Y) – X es abuelo (hombre) de Y tia(X,Y) – X es tía de Y primo(X,Y) – X es primo (hombre) de Y


PROLOG • Prolog tiene la característica de ser reversible; es decir, los argumentos pueden ser de entrada y salida. Si se tiene un predicado abuelo se puede saber quienes son los nietos de ese abuelo. • Esto no sucede aritméticos.

con

los

operadores

• Otro tipo de datos utilizado en Prolog es el


PROLOG • Por ejemplo: ‘Cárdenas’, 25)

persona(‘Eva’,

‘López’,

• Define a una persona teniendo como atributos su nombre, sus apellidos y su edad. Dado que los términos son anidados se pueden tener registros como: • Persona(“Helena”, edad(22), dirección(‘Miguel Hidalgo 33’, ‘Centro’,


PROLOG • Se pueden utilizar estructuras de datos recurrentes como árboles, en donde el primer elemento podría ser un nodo, el segundo el hijo izquierdo y el tercer elemento, el hijo derecho. • arbol(dato1, temp, temp) • arbol(dato1, arbol(dato2, temp, temp), temp) • En donde temp indica un campo vacío.


PROLOG • ¿Qué diferencia existe entre las siguientes listas? • L= [1, 2, 3, 4, 5], • M = [0, L]. • L = [1, 2, 3, 4, 5], • M = [0 | L]. • Las

listas

pueden

ser

de

elementos


PROLOG • El predicado member nos permite saber si un elemento existe en la lista • ?- member(3, [1,2,3,4,5,6]). %regresa true • El método append/3 sirve para concatenar listas • ?- append([1,2,3], [a, b, c], X). • Las cadenas pueden ser tratadas como listas cuando se escriben con comillas dobles.


PROLOG • Por ejemplo la cadena equivalente a X=[65, 66, 67].

X=“ABC”

es

• Los predicados utilizados para listas, también nos sirven para cadenas. • La función number_codes/2 convierte un número a cadena. • ? number_codes(12, X). % X=[49, 50].


PROLOG • La función atom_codes/2 proporciona el código equivalente de una cadena. • ?- atom_codes(juan, X). • X = [106, 117, 97, 110]. • //Comprobación de tipos • es_lista([]). • es_lista([_|B]):-es_lista(B).


PROLOG • ?- es_lista([a]). • Existen ya predicados definidos para la comprobación de tipos de datos básicos como: integer/1, float/1, number/1, atom/1, var/1, novar/1, ground/1.


PROLOG • • • • • • • • •

% Ejemplo entrada(paella). entrada(gazpacho). entrada(consome). carne(filete_de_cerdo). carne(pollo_asado). pescado(trucha). pescado(bacalao). postre(flan).


PROLOG • • • • • • • • •

postre(nueces_con_miel). postre(naranja). calorias(paella, 200). calorias(gazpacho, 150). calorias(consome, 300). calorias(filete_de_cerdo, 400). calorias(pollo_asado, 280). calorias(trucha, 160). calorias(bacalao, 300).


PROLOG • • • • •

calorias(flan, 200). calorias(nueces_con_miel, 500). calorias(naranja, 50). plato_principal(P):- carne(P); pescado(P). comida(Entrada, Principal, Postre):entrada(Entrada), plato_principal(Principal), postre(Postre). • valor(Entrada, Principal, Postre, Valor):calorias(Entrada, X), calorias(Principal, Y), calorias(Postre, Z), sumar(X, Y, Z, Valor).


PROLOG • comida_equilibrada(Entrada, Principal, Postre):- comida(Entrada, Principal, Postre), valor(Entrada, Principal, Postre, Valor), menor(Valor, 800). • sumar(X, Y, Z, Res):- Res is X + Y + Z. • menor(X, Y):- X < Y. • dif(X, Y):- X \==Y. • • Encontrar: ¿Cuántas calorías tiene la combinación paella, trucha, naranja? ¿Qué


PROLOG • Se pueden definir funciones recursivas como el factorial: • fac(0,1). • fac(N,F) :- N > 0, M is N - 1, fac(M,Fm), F is N * Fm. • ¿Cómo se expresa la serie de fibonnaci?


PROLOG • Algo sumamente importante en cualquier lenguaje de programación son las interfaces de E/S y Prolog no es la excepcion. • Se cuenta con los predicados read/1 para leer el valor de variables seguidas por un punto y get para leer carácter por carácter regresando el código ASCII correspondiente.


Prolog • Para salida estándar se cuenta con las funciones write/1 para cualquier valor, put/1 para colocar un carácter. Adicionalmente se cuenta con las relaciones nl/0 para nueva línea y display/1 para mostrar mensajes en pantalla. • A continuación se muestra el ejemplo de un programa que utiliza entrada y salida, así como un manejo estructurado de programa.


PROLOG • sumar_lista([],Parcial,Parcial). • sumar_lista([Num|Resto],Parcial,Result) :NParcial is Num+Parcial, sumar_lista(Resto,NParcial,Result). • leer_numero(Num) :number(Num).

read(Num),


PROLOG • suma :-

suma_aux([]).

• suma_aux(Lista) :leer_numero(Num), suma_aux([Num|Lista]). • suma_aux(Lista) :sumar_lista(Lista,0,Result), nl, display('LA SUMA ES : '), display(Result), nl.


Questions?


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.