Sei sulla pagina 1di 51

Reglas y Encadenamiento de Reglas

M.C. Juan Carlos Olivares Rojas

Agenda
Sistemas de Deduccin Sistemas de Reaccin Encadenamiento Progresivo y Regresivo

Modelamiento Cognitivo Modelos para la Resolucin de Problemas

Sistemas de Deduccin
Los sistemas de deduccin pueden variar dependiendo del problema pero en general se utiliza el mtodo de resolucin visto en la unidad pasada. Los lenguajes utilizados en IA como LISP y PROLOG tienen su propio motor de inferencia y estn sujetos a reglas muy particulares.

Sistemas de Deduccin
Cul es la diferencia entre un hecho y una afirmacin? Un hecho es algo que se considera verdadero, una afirmacin es una proposicin afirmativa que necesita ser demostrada. Ejemplos de reglas para identificar animales:

Sistemas de Deduccin
Z1 Si X tiene pelo entonces X es mamfero Z2 Si X da leche entonces X es mamfero Z3 Si X tiene plumas entonces X es ave Z4 Si X vuela y X come carne entonces es mamfero Z5 Si X es mamfero y X come carne entonces X es carnvoro

Sistemas de Reaccin
Los sistemas de reaccin permite inferir conocimiento a travs de una concatenacin de reglas, las cuales pueden ser Progresivas o Regresivas.
Los sistemas de reaccin tratar de anclar consecuentes con antecedentes de las reglas teniendo as sistemas ms inteligentes. Los sistemas de reaccin implican la ejecucin de acciones.

Sistemas Reaccin
B1 Si el paso es la verificacin de la orden Papas fritas se van a empacar No se va a empacar Pepsi Entonces pregunte al cliente si no le gustaran llevar una botella de Pepsi.

Otras reglas por definir son eliminar y aadir elementos.

Encadenamiento Progresivo y Regresivo


El encadenamiento de reglas puede ser hacia adelante. En sta, se inicia con clusulas atmicas de la base de conocimiento. Luego se aplica el modus Ponens Generalizado hacia delante hasta que ya no se puedan obtener nuevas clusulas atmicas.
Las inferencias realizadas son de la forma: Situacin Respuesta

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 solucin a un problema. El encadenamiento regresivo o backtracking permite regresar a una opcin anterior en caso de que existieran varios encadenamientos de regla que no llevan a la resolucin

Modelamiento Cognitivo
Los sistemas basados en reglas pueden verse como sustratos, de esta forma se puede tener una forma de introspeccin del como obtuvieron la deduccin; es decir, muestran como se formaron las reglas. Los sistemas basados en reglas se les conoce como sabios idiotas, ya que slo respondan a preguntas fciles y carecen de muchas de las caractersticas del experto del dominio.

Modelos para la Resolucin de Problemas


Los sistemas basados en reglas pueden funcionar como sistemas de produccin.
Siendo sistemas de produccin pueden utilizarse para generar nuevo conocimiento de las reglas ya existentes.

PROLOG
Hechos: las aves vuelan los pinginos no vuelan "pichurri" es un ave "sandokan" es un perro "alegra" es un ave

PROLOG
Reglas o Restricciones: una mascota vuela si es un ave y no es un pingino Preguntas "pichurri" vuela ? qu mascotas vuelan ?

PROLOG
Trminos: constantes (a), variables (X), funciones (f(X, Y )) pepe, juan, Cliente, cliente-de(X, Y ) Frmulas atmicas: predicados definidos sobre trminos tipo-cliente(X,bueno)

PROLOG
Frmulas bien formadas (wff): frmulas atmicas 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-sntoma(fiebre, gripe). es-sntoma(cansancio, gripe). es-sntoma(estornudos, alergia). suprime(paracetamol, fiebre). suprime(antihistamnico, estornudos).

PROLOG
Reglas:
debe-tomar(Per, Far) :- padece(Per, Enf), alivia(Far, Enf). alivia(Far, Enf) :- es-sntoma(Sin, Enf), suprime(Far, Sin).

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

PROLOG
? alivia(X, gripe). ? debe-tomar(Y, antihistamnico). ? alivia(X, Y). ? suprime(X, fiebre), suprime(X, estornudos).

Qu devuelve cada pregunta como resultado?

PROLOG
hija (*A, *B) <- mujer (*A), padre (*B, *A). hija (*A, *B) <- mujer (*A), madre (*B, *A).

A continuacin 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
%unificacin con evaluacin. ?- X is 3+5. X=8 %unificacin simblica ?- X = 3+5. X = 3+5

PROLOG
%comparacin con evaluacin ?- 3+5 =:= 2+6. yes %comparacin simblica. ?- 3+5 == 2+6. no ?- 3+5 == 3+5. yes

PROLOG
Los programas en PROLOG se definen a travs de Algoritmos, Lgica y Control. En caso de que una consulta de ms 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 respuestas ms exactas.

PROLOG
%Combinacin 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 msica a Pep y a Mara? ?_ legusta(pepe,musica), legusta(maria, musica). Le gusta bailar a Pep o le gusta la msica a maria? ?_ legusta(pepe,bailar); legusta(maria, musica).

Le gusta bailar a Pep y a maria no le gusta la msica? legusta(pepe,bailar), not(legusta(maria,musica)).

PROLOG
El portal de redes sociales de la UVAQ desea disear 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, complexin, carro, etc.). Se da un punto por cada coincidencia. Disear 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 c/u).

PROLOG
Se puede aplicar recursividad en PROLOG adems de que algunos programas en programacin estructurada pueden ser implementados. %Sucesiones sucesor(1,2). sucesor(2,3). sucesor(3,4). sucesor(4,5). sucesor(5,6).

PROLOG
sucesor(6,7). suma(1,X,R):-sucesor(X,R). suma(N,X,R):-sucesor(M,N), sucesor(R1, R).

suma(M,X,

R1),

%Como se creara una consulta? %Qu es lo que el programa hara?

PROLOG
Una lista es una secuencia lineal de objetos en donde todas las manipulaciones se hacen del lado izquierdo de la lista. La lista vaca se representa []. Una lista que no es vaca 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 unificacin es el proceso en el cual uma variable toma un valor. Cuando una variable tiene un valor, este no cambia.

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

PROLOG

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

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 ta de Y primo(X,Y) X es primo (hombre) de Y

PROLOG
Prolog tiene la caracterstica 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 con los operadores aritmticos. Otro tipo de datos utilizado en Prolog es el registro. El cual es una combinacin de elementos.

PROLOG
Por ejemplo: persona(Eva, Lpez, Crdenas, 25) Define a una persona teniendo como atributos su nombre, sus apellidos y su edad. Dado que los trminos son anidados se pueden tener registros como: Persona(Helena, edad(22), direccin(Miguel Hidalgo 33, Centro, Morelia))

PROLOG
Se pueden utilizar estructuras de datos recurrentes como rboles, en donde el primer elemento podra 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 vaco.

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 heterogneos como: [1, p(a), [a, b], f(g(h))]

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 mtodo 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 X=ABC es equivalente a X=[65, 66, 67]. Los predicados utilizados para listas, tambin nos sirven para cadenas.

La funcin number_codes/2 convierte un nmero a cadena. ? number_codes(12, X). % X=[49, 50].

PROLOG
La funcin atom_codes/2 proporciona el cdigo equivalente de una cadena. ?- atom_codes(juan, X). X = [106, 117, 97, 110].

//Comprobacin de tipos es_lista([]). es_lista([_|B]):-es_lista(B).

PROLOG
?- es_lista([a]). Existen ya predicados definidos para la comprobacin de tipos de datos bsicos 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: Cuntas caloras tiene la combinacin paella, trucha, naranja? Qu comida que tiene cnsome de entrada es la ms balanceada?

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. Cmo se expresa la serie de fibonnaci?

Preguntas, dudas y comentarios?

Potrebbero piacerti anche