Sunteți pe pagina 1din 373

Sistemas Expertos

Ing. Walter Gil Astete

Introduccin
Se considera a alguien un experto en un problema cuando este individuo tiene conocimiento especializado sobre dicho problema. En el rea de los SE a este tipo de conocimiento se le llama conocimiento sobre el dominio. La palabra dominio se usa para enfatizar que el conocimiento pertenece a un problema especfico.

Introduccin
Antes de la aparicin del ordenador, el hombre ya se preguntaba si se le arrebatara el privilegio de razonar y pensar. En la actualidad existe un campo dentro de la inteligencia artificial al que se le atribuye esa facultad: el de los SE. Estos sistemas tambin son conocidos como Sistemas Basados en Conocimiento, los cuales permiten la creacin de mquinas que razonan como el hombre, restringindose a un espacio de conocimientos limitado.

Introduccin
En teora pueden razonar siguiendo los pasos que seguira un experto humano (mdico, analista, empresario, etc.) para resolver un problema concreto. Este tipo de modelos de conocimiento por ordenador ofrece un extenso campo de posibilidades en resolucin de problemas y en aprendizaje. Su uso se extender ampliamente en el futuro, debido a su importante impacto sobre los negocios y la industria.

Definiciones
Es un software que imita el comportamiento de un experto humano en la solucin de un problema. Pueden almacenar conocimientos de expertos para un campo determinado y solucionar un problema mediante deduccin lgica de conclusiones. Programas que se realizan haciendo explicito el conocimiento en ellos, que tienen informacin especfica de un dominio concreto y que realizan una tarea relativa a este dominio.

Definiciones
Programas que contienen tanto conocimiento declarativo (hechos a cerca de objetos, eventos y/o situaciones) como conocimiento de control (informacin a cerca de los cursos de una accin), para emular el proceso de razonamiento de los expertos humanos en un dominio en particular y/o rea de experiencia.

Definiciones
Programas que manipulan conocimiento codificado para resolver problemas en un dominio especializado en un dominio que generalmente requiere de experiencia humana. Software que incorpora conocimiento de experto sobre un dominio de aplicacin dado, de manera que es capaz de resolver problemas de relativa dificultad y apoyar la toma de decisiones inteligentes en base a un proceso de razonamiento simblico.

Arquitectura bsica de los SE


1.Base de conocimientos 2.Base de hechos 3.Motor de inferencia 4.Subsistema de explicacin 5.Interfaz de usuario

Arquitectura bsica de los SE


Base de conocimientos. Es la parte del sistema experto que contiene el conocimiento sobre el dominio. hay que obtener el conocimiento del experto y codificarlo en la base de conocimientos. Una forma clsica de representar el conocimiento en un sistema experto son las reglas. Una regla es una estructura condicional que relaciona lgicamente la informacin contenida en la parte del antecedente con otra informacin contenida en la parte del consecuente.

Arquitectura bsica de los SE


Base de hechos. (Memoria de trabajo). Contiene los hechos sobre un problema que se ha descubierto durante una consulta. Durante una consulta con el sistema experto, el usuario introduce la informacin del problema actual en la base de hechos. El sistema empareja esta informacin con el conocimiento disponible en la base de conocimientos para deducir nuevos hechos.

Arquitectura bsica de los SE


Motor de inferencia. El sistema experto modela el proceso de razonamiento humano con un mdulo conocido como el motor de inferencia. Dicho motor de inferencia trabaja con la informacin contenida en la base de conocimientos y la base de hechos para deducir nuevos hechos. Contrasta los hechos particulares de la base de hechos con el conocimiento contenido en la base de conocimientos para obtener conclusiones acerca del problema.

Arquitectura bsica de los SE


Subsistema de explicacin. Una caracterstica de los sistemas expertos es su habilidad para explicar su razonamiento. Usando el mdulo del subsistema de explicacin, un sistema experto puede proporcionar una explicacin al usuario de por qu est haciendo una pregunta y cmo ha llegado a una conclusin. Este mdulo proporciona beneficios tanto al diseador del sistema como al usuario. El diseador puede usarlo para detectar errores y el usuario se beneficia de la transparencia del sistema.

Arquitectura bsica de los SE


Interfaz de usuario. La interaccin entre un sistema experto y un usuario se realiza en lenguaje natural. Tambin es altamente interactiva y sigue el patrn de la conversacin entre seres humanos. Para conducir este proceso de manera aceptable para el usuario es especialmente importante el diseo del interfaz de usuario. Un requerimiento bsico del interfaz es la habilidad de hacer preguntas. Para obtener informacin fiable del usuario hay que poner especial cuidado en el diseo de las cuestiones.

Construccin de un Sistema Experto (SE)


Ing. Walter Gil Astete

Sistemas con BDC

Programa Tradicional vs. Sistema Experto

Caractersticas de 1 SE

Etapas de los SE

Criterios de Aplicabilidad

Arquitectura Bsica

Base de Conocimientos

Ejemplos

Motor de Inferencia

Motor de Inferencia

Memoria de Trabajo

Ciclo de Vida del SE

LOGICA PROPOSICIONAL
Ing. Walter Gil Astete

La lgica de primer orden o lgica proposicional es la que utiliza proposiciones y nexos entre stas para expresar sus verdades. Las proposiciones equivalen a frases u oraciones del lenguaje hablado, mientras que los nexos a travs de los cuales puede relacionar estas proposiciones son la conjuncin (y), la disyuncin (o) y la implicacin (si).

El lenguaje formal de la lgica proposicional es el Lenguaje de Primer Orden (LPO). Los enunciados ms bsicos de LPO son los enunciados atmicos. Se corresponden a los enunciados ms simples del espaol, los que consisten en algunos nombres conectados por algn predicado. Ejemplos de este tipo son Juan corri, Juan vio a Ana y Ana regal flores a Juan. En LPO, los enunciados atmicos son formados tambin combinando nombres (o constantes individuales, tal como suelen llamarse) y predicados.

CONSTANTES INDIVIDUALES
Las constantes individuales son simplemente smbolos (nombres) que se usan para referir a algn objeto individual fijo. Por ejemplo, podramos usar Juan como una constante individual para denotar una persona particular, o un 1 como una constante individual para denotar un nmero particular. En ambos casos, funcionan exactamente como los nombres funcionan en espaol.

SIMBOLOS DE PREDICADO
Los smbolos de predicado son utilizados para denotar alguna propiedad de objetos o alguna relacin entre objetos. Como en espaol, son expresiones que combinadas con nombres, forman enunciados atmicos. Pero no corresponden exactamente a los predicados de la gramtica espaola. Consideremos en espaol :
Juan es padre de Ana.

En la gramtica espaola esto es analizado como una oracin sujeto-predicado; consiste del sujeto Juan seguido del predicado es padre de Ana. En el lenguaje de primer orden, por contraste, vemos a esto como una afirmacin que involucra dos sujetos lgicos; los nombres Juan y Ana (que son constantes individuales) y un predicado, es padre de, que expresa una relacin entre los referentes de los nombres.

Los enunciados del LPO tienen a veces dos o ms sujetos lgicos, y el predicado es, por as decirlo, lo dems. Los sujetos lgicos son llamados los argumentos del predicado. En este ejemplo se dice que el predicado es binario, puesto que toma dos argumentos. En espaol, algunos predicados tienen argumentos opcionales. En este sentido podemos decir Ana regal, Ana regal flores, o Ana regal flores a Juan.

Aqu el predicado regal toma uno, dos y tres argumentos respectivamente. Pero en LPO, cada predicado tiene un nmero fijo de argumentos, una aridad fija. La aridad es un nmero que indica cuntas constantes individuales necesita el smbolo de predicado para formar una oracin. Si la aridad de un smbolo de predicado es 1, entonces ese predicado se usar para denotar algunas propiedades de los objetos, y requerir por consiguiente exactamente un argumento (un nombre) para hacer una afirmacin.

Por ejemplo, podramos utilizar el siguiente smbolo de predicado unario: Mujer


para denotar la propiedad de ser mujer. Podramos posteriormente combinar esto con el nombre Ana

para lograr la expresin Mujer(Ana), En donde afirmamos que Ana es mujer.

Si la aridad de un predicado es 2 o ms, entonces este predicado ser utilizado para representar una relacin entre sus argumentos, como : Mayor(Juan, Ana) para expresar una afirmacin acerca de Juan y Ana, por ejemplo la afirmacin de que Juan es ms viejo que Ana. En LPO podemos tener smbolos de predicado con cualquier aridad

ENUNCIADOS ATOMICOS
En LPO, las clases ms simples de afirmaciones son aquellas que son realizadas con un predicado simple y el nmero apropiado de constantes individuales. Por ejemplo : Mujer(Ana) Mayor(Juan, Ana) son enunciados atmicos, siempre que los nombres y smbolos de predicados en cuestin sean parte del vocabulario de nuestro lenguaje.

Como vemos, en los predicados utilizamos notacin prefija: el predicado precede a los argumentos. El orden de los nombres en un enunciado atmico es importante. As como Mara es mayor que Juan significa algo diferente de Juan es mayor que Mara, en LPO Mayor(Mara, Juan) tambin tiene un significado diferente que Mayor(Juan, Mara).

ENUNCIADOS ATOMICOS COMBINADOS


Los predicados constituyen funciones que transforman los argumentos de objeto (constantes individuales) en valores verdaderos o falsos. Por ejemplo, con la forma normal de interpretar el objeto Albatros y los predicados Plumas y Pjaro se puede decir, de manera informal, que los siguientes son expresiones verdaderas : Plumas (Albatros) Pjaro (Albatros)

Evidentemente, Albatros es un smbolo que denota algo que tiene plumas, lo que restringe las posibilidades de lo que ste puede ser, ya que Albatros satisface el predicado Plumas. Se puede expresar otras restricciones con otros predicados, como Vuela y Pone_Huevos. De hecho, es posible limitar los objetos que Albatros puede designar a aquellos objetos que satisfacen ambos predicados al mismo tiempo, al afirmar que las dos expresiones siguientes son verdaderas :

Vuela (Albatros) Pone_Huevos (Albatros) Sin embargo, existe una forma ms tradicional de expresar esta idea. Simplemente se combinan la primera expresin y la segunda y se dice que la combinacin es verdadera. Vuela (Albatros) y Pone_Huevos (albatros) Sin embargo, en lgica se utiliza una notacin diferente. Se escribe y como & y la o como (|| en algunos lenguajes). Vuela (Albatros) & Pone_Huevos (Albatros) Vuela (Albatros) Pone_Huevos (Albatros)

PREDICADOS CON CONSECUENTE


Una de las mayores preocupaciones de la lgica es el concepto de consecuencia lgica. Cundo una oracin, enunciado o afirmacin se sigue lgicamente de otras? En realidad, una de las principales motivaciones en el LPO fue hacer la relacin de consecuencia lgica tan clara como sea posible. Evitando la complejidad y la ambigedad del lenguaje ordinario, esperamos que las consecuencias de nuestras afirmaciones sean ms fcilmente reconocibles.

Qu queremos decir con consecuencia lgica? Unos pocos ejemplos ayudarn. Un argumento es cualquier serie de enunciados en el que uno (llamado conclusin) se sigue o es apoyado por otros (llamados premisas o consecuentes). Ejm: Todos los hombres son mortales. Scrates es un hombre. Por consiguiente Scrates es mortal. Otro ejemplo, esta vez expresado en LPO, podra ser: Mujer(A) y A=B. Entonces ciertamente se sigue que

Esto tambin podra escribirse como Mujer(B) si Mujer(A) y A=B. Por qu? Porque no hay modo de que las premisas sean verdaderas -que A sea Mujer y que B sea el mismo objeto que A- sin que la conclusin sea tambin verdadera. Ntese que podemos reconocer que este ltimo enunciado es una consecuencia de los dos primeros sin saber que las premisas son en realidad, como cuestin de hecho, verdaderas. Pues la observacin crucial es que si las premisas son verdaderas entonces la conclusin debe ser tambin verdadera.

Introduccin al Visual Prolog (MODO TEXTO)


Ing. Walter Gil Astete

Qu es Prolog?
Prolog es un lenguaje de programacin declarativo basado en la lgica de primer orden, particularmente en una restriccin de la forma clausal de la lgica. Fue desarrollado por Alain Colmerauer en 1972 en la Universidad de Marseille, Francia. Usa como regla de inferencia el principio de resolucin propuesto por Robinson en 1965. La representacin del dominio se realiza a travs de hechos y reglas.

Decimos que es declarativo porque no es imperativo. Es decir, cada lnea de programa Prolog es una declaracin, no una orden. Se tiene as un conjunto de aseveraciones simblicas, que expresan conocimientos de una situacin real o ficticia. Para esto se usa la lgica de predicados de primer orden que se expuso anteriormente.

Existen varias versiones o dialectos comerciales de Prolog: desde Turbo Prolog de Borland y el Arity Prolog hasta el PDC Visual Prolog. En un idioma procedural, el programador debe proporcionar instrucciones que dicen exactamente a la computadora cmo resolver un problema dado paso a paso. En otros trminos, el programador debe saber resolver el problema antes de que la computadora pueda hacerlo.

Lenguaje Prolog
El programador de Prolog, por otro lado, slo necesita proporcionar una descripcin del problema y aterrizar las reglas para resolverlo. De all, Prolog determina cmo encontrar una solucin. El Prolog de PDC satisface particularmente bien para tipos de tareas similares a las bases de datos tradicionales, porque el Visual Prolog tiene entre sus capacidades, la programacin de un motor de inferencia de fcil uso.

Estructura de un Lenguaje Prolog


1) Dominios 2) Predicados

3) Clausulas

4) Objetivo

Secciones: Dominios
Un programa en Visual Prolog consta de cuatro secciones: domains, predicates, goal y clauses. Cabe aclarar que todas estas son palabras reservadas, y que toda otra palabra menos las variables deben escribirse en minsculas. DOMAINS (dominio) : Aqu se definen los objetos y los tipos de datos correspondientes que usaremos en las definiciones posteriores:

domains objeto = tipo de dato Por ejemplo : domains persona = symbol %persona es un objeto de tipo symbol.

Tipos de datos : Existen cinco tipos predefinidos :

symbol : Hay dos tipos de smbolos : 1. Una secuencia de letras, nmeros o caracteres de subrayado en la cual la primera letra es minscula. Ej. : tiene_lindas_piernas. 2. Una secuencia de caracteres encerrados por comillas dobles () usada en el caso que el smbolo contenga espacios o no comience con minsculas. Ej. : Una persona es trabajadora.

char : Acepta cualquier carcter, se representa encerrado entre comillas simples () y consta de un solo carcter, por ejemplo A, 2, /. integer : Acepta nmeros enteros en el rango de -32768 al 32767. real : Acepta nmeros reales, pueden contener signo, punto decimal y varios dgitos decimales. Tambin pueden tener una parte exponencial, pudiendo abarcar nmeros desde +1e-307 a +1e+308, por ejemplo : 427054, -25000, 86.25, - 8.525e203 o - 8411.25658545.

string : Acepta una secuencia de caracteres encerrados entre comillas dobles (), por ejemplo : esto tambin es un string. La diferencia entre el tipo symbol en 2, y los strings es la forma de representacin interna de cada uno. El almacenamiento de los smbolos est implementado de tal manera que su bsqueda en las tablas de memoria es ms rpida. Adems, los smbolos, tienen problemas para hacer inserciones en tiempo de ejecucin. Su uso estar determinado por el tipo de aplicacin que se realice.

Secciones: Predicados
PREDICATES (predicados) : En esta seccin se definen como sern las relaciones entre los objetos del dominio (domains) y el valor que se les asignar en las clusulas (clauses).
En una relacin no se puede poner nada que no sea del tipo definido para ella, pues el compilador Turbo Prolog dar error al comprobar tipos distintos. Por ejemplo :

predicates sabe (persona) Aqu especificamos que el predicado sabe tiene un argumento: persona, que a su vez en el dominio est declarado como symbol. Tambin podemos definir un predicado solo con relacionar tipos predefinidos, como por ejemplo : predicates factorial (integer, real)

Secciones: Clusulas
CLAUSES (Clusulas o definiciones de reglas y hechos) : Aqu se definen las reglas y hechos que evaluar Turbo Prolog para encontrar las soluciones que se piden en Goal o por la ventana de Dilogos. Poniendo en castellano qu valores asignamos a los predicados de nuestro ejemplo : Jos sabe, Ana sabe, trabaja el que sabe. En Turbo Prolog :

clauses sabe (Jos) %hecho. sabe (Ana) %hecho. trabaja (X) :- sabe (X). %regla

Donde % es un comentario

Secciones: Metas
GOAL (meta u objetivo a buscar) : En esta seccin es donde se indica explcitamente cul es el objetivo o propsito del programa. Hay dos formas bsicas de trabajar en VPI: Goal interno : Especificando en el programa en su seccin Goal un hecho a verificar. En este caso el mecanismo de bsqueda se detiene al encontrar el primer valor que lo cumpla, necesitando una indicacin explcita de impresin en pantalla para su representacin o visualizacin, si no est esa indicacin, responde slo con un mensaje de True o False, o no imprime mensajes.

Goal externo : Trabajando a travs de la ventana de dilogo sin la seccin Goal en el programa, verificando y consultando hechos en forma interactiva. En este caso el mecanismo entrega todos los valores que lo verifiquen, y la bsqueda se detendr slo al agotarse las clusulas pertinentes. No necesita de rdenes especiales para visualizar los valores de variables hallados.
Trabajando de cualquiera de las dos formas los objetivos podrn ser tan complicados como informacin se tenga en las clusulas.

Si el objetivo es encontrar una persona que trabaja, siendo X persona de acuerdo al criterio de determinacin en la seccin Clauses entonces:
trabaja (X) and write (La persona que trabaja es, X) and nl Aqu vemos que hay algunos predicados que nosotros no definimos, como write y nl. Ambos pertenecen a los llamados predicados predefinidos y son propios del lenguaje Prolog.

write hace lo mismo que la idntica instruccin en Pascal o el print de Basic: imprime un texto en la pantalla. nl imprime solamente una secuencia de fin de lnea. El propsito de todo el conjunto es evaluar trabaja (X) e imprimir el resultado de ello con el mensaje entre comillas. Las respuestas se darn a travs de la ventana de dilogos o se deber armar una interfaz diferente.

Entonces.
Domains son los tipos de datos con los que se van a trabajar. Predicates es la definicin de los dominios usados por los predicados. Clauses es la definicin de lo que hacen los predicados. Goal es la meta que el programa debe alcanzar. Dominios posibles: symbol, string, integer, real, symbol* (lista de smbolos), integer* (lista de enteros).

Como funciona Prolog


Ing. Walter Gil Astete

Prolog forma su lenguaje a partir de un alfabeto que contiene slo dos tipos de smbolos: 1. smbolos lgicos, entre los que se encuentran los smbolos de constantes proposicionales true y false (verdadero y falso); los smbolos para la negacin, la conjuncin, la disyuncin y la implicacin (que en Prolog se denota con los caracteres :-); los smbolos de cuantificadores; y los smbolos auxiliares de escritura como corchetes [,], parntesis (,) y coma.

2. smbolos no lgicos, agrupados en el conjunto de smbolos constantes; el conjunto de smbolos de variables individuales (identificadores); el conjunto de smbolos de relaciones n-arias; y el conjunto de smbolos de funciones n-arias. A partir de estos smbolos se construyen las expresiones vlidas en el LPO de Prolog: los trminos (nombres) y las frmulas (predicados).

En Prolog de Edimburgo, versin de Prolog diseada por David Warren que se ha convertido en estndar, un trmino es cualquiera de las tres expresiones siguientes: una constante, como el nmero "100"; la palabra "antonio" y la letra "c"; o una variable, por ejemplo "X" (notar que los identificadores que comienzan con mayscula representan, siempre, variables). En cambio, un predicado atmico o elemental es una expresin de la forma "R(a1, a2,..., an)" donde R es un smbolo de predicado n-ario que como vimos, denota alguna relacin entre objetos o alguna propiedad de un objeto, y a1, a2,..., an son trminos funcionando como argumentos.

CALCULO DE RELACIONES
La programacin lgica trabaja ms con relaciones que con funciones. Se basa en la premisa de que programar con relaciones es ms flexible que programar con funciones, debido a que las relaciones tratan de forma uniforme a los argumentos y a los resultados. De manera informal, las relaciones no tienen sentido de direccin ni prejuicio alguno acerca de qu se calcula a partir de qu.

En Prolog se utiliza slo un tipo determinado de reglas para definir relaciones, llamadas clusulas de Horn, llamadas as en honor al lgico Alfred Horn, quien las estudi. Estas reglas estn compuestas por dos partes: el consecuente y el antecedente. El consecuente, que es la primera parte de la clusula, es lo que se quiere probar, la conclusin de la regla. El antecedente es la condicin que determinar en qu casos el consecuente es verdadero o falso.

RELACIONES
Resumiendo, el conjunto de reglas que define las relaciones y las propiedades de los objetos es el programa en Prolog. Por ejemplo, segn vimos cuando decimos "Juan es padre de Pablo" no estamos haciendo ms que afirmar que una relacin (ser padre) liga dos objetos (designados por sus nombres: Juan y Pablo), y esta relacin se puede escribir como: es_padre_de (pablo, juan)

No debemos olvidar que cuando se define una relacin entre objetos, el orden que se da a estos es relevante: es_padre_de (pablo, juan) puede significar que "Pablo es padre de Juan" o que "Juan es padre de Pablo", ya que la relacin tiene un solo sentido. Es el programador el que ha de decidir cul de las dos es la interpretacin a usar. Ahora bien, una vez elegida la interpretacin, sta es definitiva.

RELACIONES EN PROLOG

Nuestro primer programa


Vamos a trabajar algunos programitas en modo texto (lo cual no es estrictamente indispensable, pero lo considero necesario). Ejecute VPI, Men File-New (Se generar un documento de edicin de texto. Al grabarlo debemos ponerle la extensin .pro). Para ejecutar vaya al men Project-Test Goal (Probar meta).

Ejemplo 1

domains s=symbol predicates nondeterm hombre(s) nondeterm mujer(s) nondeterm casarse(s,s) gusta(s,s) clauses hombre(victor). hombre(pedro). mujer(sofia). mujer(marina). mujer(olga). gusta(victor,sofia). gusta(pedro,olga). gusta(pedro,marina). casarse(X,Y):-hombre(X),mujer(Y),gusta(X,Y). goal %hombre(victor). %mujer(maria). %hombre(X). %gusta(victor,X). %casarse(victor,olga). %casarse(X,Y).

Cdigo

Explicacin
En Domains definimos s como un tipo symbol, lo que significa que usaremos solo datos de tipo symbol (caracteres sin comillas) En Predicates declaramos la existencia de hombre, mujer y casarse as como los tipos con los que tratarn. (nondeterm significa que tiene ms de una solucin) En Clauses le damos comportamiento y/o contenido a nuestros predicados. Son hechos que victor y pedro son hombres (hombre(victor) se lee victor es hombre). Es una regla casarse(X,Y) por la presencia del operador :- (si y solo si). Se lee un X puede casarse con un Y si y solo si X es hombre e Y es mujer y X gusta de Y. En goal se le pide a la aplicacin que ejecute algunas consultas a la BDC.

Ejemplo 2

Domains s=symbol r=real Predicates nondeterm poblacion(s,r) nondeterm area(s,r) nondeterm densidad(s,r) Clauses poblacion(peru,26). poblacion(argentina,34). poblacion(ecuador,13). area(peru,1.2). area(argentina,1.7). area(ecuador,0.7). densidad(X,D):-poblacion(X,P), area(X,A), D=P/A. Goal densidad(X,Y).

Cdigo

Explicacin
Se trata de calcular la densidad poblacional de X paises. Tenemos datos symbol y reales Tenemos predicados poblacion, area y densidad Como clusulas poblacion y area son hechos con el mismo datos symbol y diferente dato numrico; densidad es una regla Es una regla densidad por la existencia del operador :- que significa Existe una densidad D para un X si y solo si X tiene una poblacin P (es decir X existe en poblacion) y X tiene un rea A, y D sea igual a P/A. El goal densidad(X,Y) hace que muestre la densidad de todos los pases.

Ejemplo 3
Domains nino = symbol Predicates nondeterm nino(symbol) nondeterm juegan(nino,nino)
Clauses nino(a). nino(b). nino(c). juegan(X,Y):-nino(X),nino(Y), X<>Y,write(X," juega vs. ",Y), nl,fail. Goal juegan(X,Y).

Explicaciones adicionales
Fail "fail" es un predicado que siempre falla. Con esto se obliga a Prolog a buscar una nueva meta. Con ello se evita el tener que poner un punto y coma (;) para pedir que se busque una nueva meta. nl Hace un salto de lnea write Escribe la expresin del interior de la funcin

Domains nombre,direccion,telefono=string edad=integer Predicates imprime nondeterm persona(nombre,direccion,telefono,edad) Clauses imprime:-persona(X,Y,Z,E), write(X),nl, write(Y),nl, write(Z),nl, write(E),nl, write("---------"),nl,fail. persona("Rosa","Las Brisas 123","2454545",23). persona("Pedro","Las Lluvia 343","2312323",24). persona("Juan","Los vientos 232","3431231",20). Goal imprime.

Ejemplo 4

Ejemplo 5
domains c = char predicates imprimir(c) clauses imprimir('N'):- write("FIN"). imprimir('S'):- write("HOLA PROLOG"),nl, write("\nDESEA CONTINUAR S/N = "), readchar(X), imprimir(X). goal imprimir('S').

domains r = real predicates nondeterm evaluar(r)

Ejemplo 6

clauses evaluar(I):- I < 20,write("DELGADO"),!. evaluar(I):- I>=20, I<=25, write("NORMAL"),!. evaluar(_):- write("SOBRE PESO"),!. goal write("INGRESE PESO = "), readreal(P), write("INGRESE TALLA = "), readreal(T), I = P / (T * T), evaluar(I), readln(_).

BACKTRACKING Y CORTE
Ing. Walter Gil Astete

entrada(antipasto). entrada(sopa). entrada(quesos). carne(milanesa). carne(bife_de_chorizo). carne(pollo_asado). pescado(congrio). pescado(pejerrey). postre(flan). postre(helado). postre(fruta). calorias(antipasto,2). calorias(sopa,5). calorias(quesos,20). calorias(milanesa,50).

BDC

calorias(bife_chorizo,62). calorias(pollo_asado,55). calorias(congrio,6). calorias(pejerrey,4). calorias(flan,22). calorias(helado,38). calorias(fruta,3). plato_principal(P) :- carne(P); pescado(P). comida(E,P,D) :- entrada(E), plato_principal(P), postre(D). valor(E,P,D,V) :- comida(E,P,D),calorias(E,X), calorias(P,Y), calorias(D,Z), V= X+Y+Z.

Para profundizar nuestro estudio de la forma de trabajo de Prolog, vamos a comenzar viendo un ejemplo que describe la carta de un restaurante. Los objetos que interesan aqu son los platos que se pueden consumir y una primer serie de relaciones que clasifica estos platos en entradas, platos a base de carne o de pescado (plato fuerte) y postres. Este men es un pequeo banco de datos que se expresa de la siguiente manera:

Se podra decir que esto ya es un programa en Prolog (slo falta la estructuracin por secciones). Este programa est compuesto por un conjunto de predicados unarios que definen caractersticas de los objetos que poseen como argumentos y los clasifican. Por ejemplo: entrada(antipasto). Indica que antipasto es una entrada y nada ms.

En realidad este primer tipo de regla se reduce a enunciar los hechos o declaraciones simples. Cuando se tienen estas clusulas, se pueden hacer preguntas sobre ellas. Una pregunta como: es una entrada el antipasto?
en Prolog se hara de la siguiente manera: entrada(antipasto).

Se busca entonces si esta afirmacin forma parte de las conocidas, la respuesta es True (Verdadero), respuesta que indica que s es verdadera esa afirmacin. Sin embargo, entrada(ensalada). recibir una respuesta negativa (False o Falso), ya que esta entrada no se encuentra entre las declaraciones de la base. Estas dos preguntas que realizamos tambin son llamadas consultas de existencia, porque slo verifican la existencia de hechos y/o relaciones que satisfagan la pregunta formulada.

Si ahora queremos saber cules son las entradas que se pueden consumir y no se desea preguntar por separado por las infinitas entradas posibles, esperando una respuesta afirmativa (True) o negativa (False) en cada caso, entonces podemos preguntar:

Cules son las entradas?


o lo que es mejor: Cules son los objetos X que son entradas?

sin conocer al efectuar la pregunta qu objetos representa la X. El smbolo X no designa un objeto en particular, sino todo objeto perteneciente al conjunto (posiblemente vaco) de los que poseen la propiedad de ser una entrada y que se pide sea definido por el programa. En este caso se dice que la X es una variable. La pregunta del ejemplo se hara de la siguiente manera: entrada(X).

Ante esta pregunta Prolog responder en la pantalla: X=antipasto X=sopa X=quesos que es el conjunto de objetos que designa la variable X para que la declaracin pregunta se verifique. Desde el punto de vista sintctico, una pregunta es una secuencia de uno o ms trminos (metas u objetivos) que representa una conjuncin de relaciones a satisfacer.

Las respuestas a esta pregunta son las restricciones sobre las variables que aparecen en la secuencia de metas y que satisfacen las relaciones consideradas. Se debe tener en cuenta que en Prolog la variables siempre comienzan con una letra mayscula, mientras que los predicados y los literales deben comenzar con minsculas. Entonces, las variables son un conjunto de una o ms letras, nmeros y guiones bajos (_), que comienzan con una letra mayscula.

En cambio, los predicados y cadenas de literales deben comenzar con una letra minscula, pudiendo contener, adems de letras, nmeros y guiones bajos (_). A partir de las relaciones que constituyen la base de datos inicial, se pueden construir relaciones ms complejas y generales. Por ejemplo, a partir de las relaciones carne y pescado, que indican que su argumento es un objeto que es un plato de carne o un plato de pescado, se puede definir la relacin plato_principal, que indicar que "un plato_principal es un plato de carne o un plato de pescado" y que se formula:

plato_principal(P) :- carne(P). plato_principal(P) :- pescado(P). Aqu aparecen las clusulas de Horn completas, con antecedente y consecuente, que son llamadas reglas. Estas reglas se interpretan as: P es un plato_principal si P es un plato de carne. P es un plato_principal si P es un plato de pescado. lo que indica que un objeto es plato_principal, si es un plato de carne o si es un plato de pescado. Debido a esto, el par de reglas se podra escribir de la siguiente manera

plato_principal(P) :- carne(P); pescado(P).


aunque continuaremos utilizando la definicin inicial en pos de una mayor sencillez. En estas clusulas se utiliza la variable P para designar el conjunto de todos los platos de carne, en la primera regla, y todos los platos de pescado, en la segunda. El mbito de una variable se limita a la regla en la que est definida, por lo que la variable P de la primera regla de la definicin de plato_principal no tiene nada que ver con la variable P de la segunda.

En este ejemplo, la pregunta " Cules son los platos principales?" formulada como: plato_principal(P).

produce las respuestas


P = milanesa P = bife_de_chorizo P = pollo_asado P = congrio P = pejerrey

Tratamos a continuacin la composicin de una comida completa. Como es habitual, una comida consta de una entrada, de un plato fuerte (carne o pescado) y de un postre. Una comida es, por tanto, una terna: E,P,D, donde E es una entrada, P un plato y D un postre. Esto se expresa de forma natural por la regla: comida(E,P,D):-entrada(E),plato_principal(P), postre(D). que se interpreta as: E,P,D satisfacen la relacin comida si E satisface la relacin entrada, si P satisface la relacin plato_principal y D satisface la relacin postre.

A la pregunta "Qu comidas formulada como: comida(E,P,D). responde: E=antipasto, P=milanesa, D=flan E=antipasto, P=milanesa, D=helado ..... E=sopa, P=milanesa, D=fruta E=sopa, P=bife_de_chorizo, D=flan ..... E=quesos, P=congrio, D=flan E=quesos, P=congrio, D=helado ..... E=quesos, P=pejerrey, D=fruta

hay?", Prolog

que es la lista de las 54 combinaciones posibles. Teniendo el mismo conjunto de relaciones definidas, se propone una pregunta un poco ms precisa: se desea conocer las comidas que contienen un plato de pescado. Esta pregunta se formula as:
comida(E,P,D), pescado(P). que expresa la conjuncin de las dos condiciones que se quieren verificar. Prolog calcular los valores de las variables E,P,D para los que la primera condicin comida(E,P,D) se verifica.

Se observa que antes de la evaluacin de la relacin comida, las variables E,P,D no han recibido todava ningn valor, lo que no ocurre despus de la evaluacin. En el momento en el que E,P,D han recibido ciertos valores, por ejemplo: E = antipasto P = milanesa D = flan se procede a evaluar la segunda parte de la pregunta, pescado(P) con el valor asignado a la variable P, entonces, esta seleccin se ha convertido en: pescado(milanesa)

Al no contener la base ninguna declaracin como sta, el juego de valores propuesto para E,P,D no satisface la pregunta: es un fallo y se intenta con la solucin siguiente para comida. Finalmente, el programa imprime las 18 soluciones posibles: E=antipasto, P=congrio, D=flan E=antipasto, P=congrio, D=helado ..... E=sopa, P=congrio, D=flan E=sopa, P=congrio, D=helado ..... E=quesos, P=pejerrey, D=fruta

Para tener en cuenta: Para satisfacer una conjuncin de relaciones, se examinan de izquierda a derecha. Durante la ejecucin, ciertas variables pueden recibir un valor. Si una variable recibe un valor, todas sus apariciones (o ms precisamente sus ocurrencias) toman el mismo valor. Las variables son locales a la regla en la que aparecen. Cada vez que se utiliza una regla, se tiene una nueva instancia de sus variables, exactamente igual como se hace para las variables locales en los lenguajes clsicos de programacin. En este caso, se dice que las variables de la regla han sido renombradas.

En una relacin no hay distincin entre argumentos de entrada y argumentos de salida. Por tanto, una misma relacin puede tratarse de diversas formas: si todos sus argumentos son conocidos slo hay que verificar si la relacin se satisface o no; si algunos de sus argumentos son desconocidos (representados por variables), se calcula el conjunto de valores que se puede asignar a estos argumentos para satisfacer la relacin. La ejecucin es no determinista: se calculan todos los juegos de valores de argumentos que satisfacen la relacin.

Este men podra completarse con la informacin calrica de cada racin de cada plato, con un predicado que podra tener la siguiente forma: calorias(<comida>, <valor calrico>). que se interpreta como: "la racin de <comida> aporta <valor calrico> caloras". As, deber escribirse un hecho para todos y cada uno de los distintos platos que posee el men (antipasto, sopa, milanesa, pejerrey, flan, etc.), indicando cuntas caloras contiene cada uno, lo que queda de ejercicio para el lector.

Con esto se podr averiguar el valor calrico total de una comida completa. Para esto ltimo se puede definir la relacin: valor(E,P,D,V):calorias(E,X),calorias(P,Y), calorias(D,Z), V is X+Y+Z. donde V es la suma de las caloras de los componentes de una comida. Para conocer estos valores se pregunta: comida(E,P,D), valor(E,P,D,V).

Buscando las soluciones


Hasta ahora hemos venido manejando slo objetos constantes, representados por sus nombres (pejerrey, pollo_asado, etc.). Sin embargo, la estructura que Prolog maneja ms naturalmente es el rbol. Las relaciones y sus argumentos se tratan como rboles, debido a que es una estructura suficientemente poderosa para representar informaciones complejas, organizadas jerrquicamente, y de manejo sencillo, tanto desde un punto de vista algebraico como desde un punto de vista informtico.

Si representamos en forma de rbol un ejemplo bsico como, es_padre_de(pablo, juan) que indica que Pablo es padre de Juan, tendramos algo como:

Esta estructura, como veremos, es tambin utilizada a la hora de buscar las soluciones a los goals de un programa.

El control en Prolog
Por control se entiende la forma en que el lenguaje busca las respuestas a las clusulas objetivos. En Prolog, el control respeta dos normas: 1. Orden de metas. Escoger la meta del extremo izquierdo. 2. Orden de reglas. Seleccionar la primera regla aplicable. Qu significa esto?

La primera de las normas nos indica que, cuando la clusula objetivo o goal posee ms de una regla unidas por conjunciones o disyunciones, stas se toman de izquierda a derecha para ser resueltas de a una, mediante la aplicacin de reglas. Entonces, si volvemos al ejemplo del men de un restaurante, para resolver :- comida(E,P,D), pescado(P).

Prolog toma en primer lugar la meta del extremo izquierdo (que es comida(E,P,D)) y la resuelve, para tomar luego la segunda de izquierda a derecha (que es pescado(P)) y resolverla, y as sucesivamente hasta terminar con todas las submetas de la clusula objetivo. La segunda de las normas enunciadas ms arriba quiere decir que, para resolver cada una de las submetas, stas son reemplazadas por todas y cada una de las reglas de la base de datos que las satisfagan, teniendo en cuenta el orden en que estn escritas.

por ejemplo, la primera de las submetas que Prolog toma (comida(E,P,D)), es reemplazada por el consecuente de la primer regla que la satisface, que es comida(E,P,D) :- entrada(E), plato_principal(P), postre(D).

y sobre sta se vuelven a aplicar ambas normas, o sea que se toma entrada(E) y luego se la reemplaza por la primer clusula que la satisfaga (si la hay), que en este caso sera: entrada(antipasto).

con lo que E asume un primer valor tentativo (antipasto) que puede ser o no vlido, dependiendo de todas las otras partes del goal. A la forma en que se van realizando los reemplazos la veremos con mayor detalle a continuacin, y es la tcnica conocida como backtracking o 'vuelta atrs'. Concluyendo, podemos decir que si se tienen en cuenta las dos normas con que se maneja Prolog para encontrar las soluciones, se advierte que la respuesta a una pregunta se ve afectada por el orden de las metas dentro de la consulta y por el orden de las clusulas dentro de la base de datos de hechos y reglas.

El Backtracking
Para obtener las soluciones a las clusulas objetivo solicitadas, Prolog utiliza una tcnica de borrado que consiste en reemplazar cada submeta por los consecuentes de todas las reglas de la base que la satisfacen. Para poder hacer esto utiliza el backtracking, que es el mecanismo para la bsqueda de datos de Prolog, totalmente invisible para el usuario.

De esta forma se verifica si existe cierto hecho determinado o si se cumple algn goal. Este mecanismo consiste en recorrer reiteradamente las clusulas, tratando de establecer si el objetivo actual puede considerarse como verdadero o falso.

Entonces, si poseemos tres reglas P, Q y R, que son de la siguiente manera: P :- p1, p2,..., pm. P :- a1, a2,..., an. Q :- q1, q2,..., qs. R :- r1, r2,..., rt. donde P est definida de dos formas (recordar la definicin de plato_principal), y realizamos la pregunta :- P, Q, R. Prolog busca la solucin, aplicando el borrado de las submetas, respetando las dos normas del control indicadas ms arriba. As, toma la primera submeta de la izquierda (P) y la borra, esto quiere decir que la reemplaza por la primera regla de la base que la satisfaga, con lo que nuestra pregunta original ser ahora: :- p1, p2,..., pm, Q, R.

Con esto se borra P, y se contina realizando lo mismo con las submetas del nuevo objetivo, hasta que no quede nada para borrar o hasta que se llegue a algo que no puede ser borrado. Esto ocurre cuando se llega a un hecho o cuando se alcanza una contradiccin. De este modo, se borrara p1, luego p2, y as hasta terminar. Sin embargo, todava quedan posibilidades abiertas que no fueron tenidas en cuenta durante el proceso, como ser la segunda definicin de P. Entonces se vuelve atrs, se reconsidera la ltima eleccin y se intenta borrar el trmino en cuestin de otra manera para tratar de obtener otra respuesta a la pregunta. Entonces, se toma la segunda definicin de la regla P de la base de reglas (P :- a1, a2,..., an.) obteniendo, en este caso, :- a1, a2,..., an, Q, R. para borrar luego nuevamente todas las submetas del nuevo objetivo, incluyendo Q y R. Se contina as hasta que no quede ningn punto de eleccin sin tener en cuenta.

Es importante observar que en el momento en que se efecta una nueva eleccin intentar borrar una submeta, se deshacen todas las asignaciones y modificaciones realizadas a las dems submetas, entre la eleccin anterior y el momento actual. Esta vuelta atrs o retroceso es lo que se denomina backtracking. Para comprender ms claramente este funcionamiento, veremos un ejemplo. Retomaremos el caso del men del restaurante donde poseemos, entre otras, las siguientes reglas: R1 carne(milanesa). R2 carne(bife_de_chorizo). R3 carne(pollo_asado). R4 pescado(congrio). R5 pescado(pejerrey). R6 plato_principal(P) :- carne(P). R7 plato_principal(P) :- pescado(P).

donde R1,..., R7 slo se agregan para numerar las reglas, y realizaremos la siguiente pregunta (conjunto inicial de metas): :- plato_principal(P), P<>milanesa. que equivale a decir cules son los platos_principales que no son milanesa. Se debe tener en cuenta que Prolog trata a todos los operadores (incluyendo a <> -distinto a-) como reglas comunes, por lo que este goal posee dos reglas unidas por una conjuncin (y). El proceso de resolucin ser representado mediante un rbol, en el cual: A cada nodo se le asocia el conjunto actual de las metas a borrar y el conjunto de restricciones actuales C; A cada rama se le asocia la regla elegida para borrar la primer submeta del nodo superior; Los sucesores de un nodo son los nuevos conjuntos de objetivos generados por el borrado del primero de ellos de la lista asociada al nodo considerado.

Esta rama es la que queda formada apenas Prolog comienza el anlisis de la pregunta. Lo primero que se hace es, partiendo desde el nodo de ms arriba hacia abajo, borrar plato_principal(P), reemplazndolo por el consecuente de la primera regla que lo satisface, que es la regla R6. O sea que se permuta el antecedente plato_principal(P) por su definicin relacional: carne(P) Este borrado de la primer submeta cambia nuestra pregunta inicial, que es lo que vemos en el segundo nodo, siendo ahora el objetivo: :- carne(P), P<>milanesa. Ahora debe borrarse nuevamente la primer submeta de este nuevo goal. Entonces se reemplaza carne(P) por la regla R1, que es la primera que la satisface. Llegamos as al tercer nodo donde se presenta una restriccin, ya que la clusula R1 asigna a la variable P el valor milanesa. En este nodo nos queda la nueva clusula objetivo

En esta nueva meta vemos que ya no aparece nada de la primer submeta que hemos borrado, como sucedi al pasar del nodo inicial al segundo nodo por la rama R6. Esto se debe a que llegamos a un hecho (R1) que se borra dejando nicamente la restriccin ya indicada. Entonces, respetando dicha restriccin, P toma el valor milanesa y obtenemos: :- milanesa<>milanesa. abreviado en el grfico como mil<>mil, que al borrarse (solucionarse) produce un fallo. Esto es lo que ocurre al realizarse los borrados de las submetas. Sin embargo, todava no se consideraron otras reglas que podan reemplazar a las submetas borradas, ya que la base posee dos clusulas que definen el plato principal y tres que definen el plato de carne. Aqu es donde aparece el backtracking (retroceso).

Como la ltima regla que se borr, teniendo otras posibilidades, fue carne(P), se realiza el retroceso subiendo un nodo desde el tercero y se vuelve a borrar esta submeta utilizando las otras opciones. En prime ra instancia se toma R2 que es la regla que sigue en la base, para luego repetir el proceso tomando R3. Estos borrados nos determinan el siguiente rbol:

Este segundo rbol es el que queda luego de hacer el backtracking para todas las diferentes definiciones del predicado carne( ). Aqu observamos que se presentaron dos xitos, dos valores de P que son vlidos. Estos valores sern los que Prolog nos ir mostrando en la ventana de resultados, de la siguiente manera: P = bife_de_chorizo P = pollo_asado Despus de este retroceso, Prolog intenta borrar de una manera diferente todas las submetas borradas en pasos anteriores. En este ejemplo, se puede utilizar la segunda definicin de plato_principal( ) para realizar el backtracking. As se ampla el rbol para llegar finalmente a :

En esta nueva rama, se utiliza R7 para borrar la primer submeta de la clusula objetivo original, y se borra la nueva submeta de las dos maneras posibles (R4 y R5). Hemos encontrado as, a travs de esta tcnica, las cuatro soluciones posibles que se vern como P = bife_de_chorizo P = pollo_asado P = congrio P = pejerrey Para finalizar, se debe decir que cada rama del rbol se sigue extendiendo hacia abajo hasta que ocurre alguna de las siguientes cosas: La clusula objetivo del nodo actual est vaca. En este caso nos encontramos frente a un xito y la respuesta es la restriccin actual C. Se llega a alguna situacin donde una submeta no puede ser borrada (solucionada), por no existir una regla que lo permita. Esto es un fracaso.

Ante ninguna de estas situaciones se parara el proceso ya que ste se detiene nicamente cuando se han revisado todas las opciones posibles de borrado. Lo nico que provocan es el abandono de la rama donde se present dicha circunstancia, con un xito o un fallo, y el intento de abrir otra rama mediante el backtracking. Un ejemplo del primero de estos casos es el nodo

donde, al borrar la meta bife_de_chorizo<>milanesa, nos queda el goal vaco, siendo esto un xito cuya solucin es la restriccin C. Como ejemplo para el segundo caso podemos tomar el nodo

El Corte (!)
Hemos visto que el borrado de un trmino del goal se hace en forma no determinista. Esto significa que se tienen en reserva en todo momento los diversos puntos de eleccin que se superaron para un posible retroceso posterior. La introduccin del corte (representado en Turbo Prolog por un !) en una regla permite suprimir algunos de estos puntos de eleccin, e incluso, hacer un programa enteramente determinista. Para comprender esto se deben tener en cuenta dos puntos: - Cada vez que se borra una meta, sta se coloca en la secuencia de puntos de eleccin, para poder realizar los retrocesos. - El borrado de la meta del corte !' devuelve verdadero y suprime todos los puntos de eleccin que estaban almacenados, impidiendo el retroceso de las submetas anteriores a su aparicin.

Por ejemplo, si encerramos entre corchetes los puntos de eleccin que vamos superando y al lado de stos colocamos la lista de metas actual, al caso ya visto lo podemos modificar agregndole un corte como ltima meta :- plato_principal(P), P<>milanesa, !. cuya secuencia de elecciones y metas a borrar ser [] plato_principal(P), P<>milanesa, !. borrando la primer submeta por medio de R6 obtenemos un punto de eleccin y otra submeta [plato_principal(P)] carne(P), P<>milanesa, !. por medio de R1 borramos carne(P) y obtenemos [plato_principal(P) carne(P)] milanesa<>milanesa, !. lo que provoca un fallo y se retrocede al punto de eleccin precedente, quitndoselo de la lista [plato_principal(P)] carne(P), P<>milanesa, !.

se vuelve a borrar carne(P), esta vez por medio de R2, obteniendo [plato_principal(P) carne(P)] bife_de_chorizo<>milanesa, !. ahora se borra el operador <> sin introducir nuevas elecciones, quedando slo [plato_principal(P), carne(P)] !. El ! se borra suprimiendo todas las elecciones en espera, no queda nada para borrar y, por haberse eliminado todos los puntos de eleccin que haba, no es posible realizar ningn retroceso. Por consiguiente, el rbol anterior se convierte en :

El borrado del ! tiene el efecto de suprimir todas las elecciones en espera, por lo que no se produce ms de una respuesta a la pregunta, que es la primera obtenida. Si el corte en vez de ponerse al final se hubiera ubicado en otro lugar, por ejemplo
:- plato_principal(P), !, P<>milanesa.

el rbol tendra la siguiente forma:

Cuando se llega al ! se eliminan todos los puntos de eleccin que se almacenaban para poder hacer los retrocesos, por lo que no se pueden buscar ms soluciones y no se encuentra ninguna respuesta que satisfaga la pregunta. El resultado devuelto por esta consulta ser False (Falso).

Sistemas Expertos basados en Reglas


Ing. Walter Gil Astete

Caractersticas de los SE
Razonamiento guiado por las metas y encadenamiento hacia atrs. Una tcnica de inferencia que usa las reglas IF-THEN para descomponer las metas en submetas ms fciles de probar. Manejo de incertidumbre. La habilidad del SE para trabajar con reglas y datos que no son conocidos con precisin. Razonamiento guiado por los datos y encadenamiento hacia adelante. Una tcnica de inferencia que usa las reglas IF-THEN para deducir soluciones a un problema a partir de los datos iniciales disponibles.

Representacin de datos. La forma en que los datos especficos a un problema dado, son almacenados y accesados por el SE. Interfaz del usuario. La parte del SE que se usa para una interaccin ms amigable con el usuario. Explicacin. La habilidad del SE para explicar sus procesos de razonamiento y su uso en el cmputo de recomendaciones.

Razonamiento basado en metas


El razonamiento basado en metas, es una forma eficiente de resolver problemas que pueden ser modelados como casos de seleccin estructurada; donde la meta del SE es elegir la mejor opcin de entre varias posibilidades enumeradas. Por ejemplo, los problemas de identificacin caen en esta categora. Los problemas de diagnstico tambin caben aqu, pues se trata de elegir el diagnstico adecuado. El conocimiento se codifica en reglas que describen como es que cada caso posible podra ser seleccionado. La regla rompe el problema en sub-problemas. Por ejemplo, las siguientes reglas formaran parte de un SE para identificar aves.

Ejemplo
1 IF 2 familia es albatros AND 3 color es blanco 4 THEN 5 ave es albatros laysan. 6 7 IF 8 familia es albatros AND 9 color es negro 10 THEN 11 ave es albatros de pies negros.

El sistema puede usar otras reglas para resolver las submetas planteadas por las reglas de alto nivel, por ejemplo: 1 IF 2 orden es tubonasales AND 3 tamao es grande AND 4 alas es grandes anguladas 5 THEN 6 familia es albatros.

Reglas
Las reglas de un SE normalmente toman el siguiente formato: 1 IF primera premisa AND 3 segunda premisa AND 4 ... 5 THEN 6 conclusin La parte IF de la regla se conoce con el lado izquierdo de la regla (LHS), y la parte del THEN se conoce como el lado derecho de la regla (RHS). Esto es equivalente a la semantica de la regla Prolog: conclusin :primera premisa, segunda premisa,.

Esto puede ser confuso pus la regla en prolog dice ms THEN-IF que IF-THEN. Retomemos los ejemplos anteriores, si queremos representar en Prolog la regla: 1 IF 2 familia es albatros AND 3 color es blanco 4 THEN 5 ave es albatros laysan

Tendramos que escribir:


ave(albatros_laysan) :-familia(albatros), color(blanco).

Las siguientes reglas distinguen entre dos tipos de albatros y cisne. Todas son clusulas del predicado ave/1:
ave(albatros_laysan) :- familia(albatros), color(blanco). ave(albatros_patas_negras):-familia(albatros), color(obscuro). ave(cisne_silbador) :-familia(cisne), voz(suave_musical). ave(cisne_trompetero) :- famila(cisne), voz(alta_trompeta).

Para que estas reglas tengan xito al distinguir un ave, necesitamos almacenar hechos acerca del ave que deseamos identificar con el SE. Por ejemplo, si agregamos estos hechos al programa: familia(albatros). color(obscuro). Ahora podemos usar la pregunta siguiente: ?- ave(X). X = albatros_patas_negras Yes

Observen que an en esta etapa temprana tenemos un SE completo, donde la experticia consiste en distinguir entre cuatro aves. La interfaz con el usuario es implementada por Prolog y los datos de entrada se almacenan directamente en el programa.

Implementar
Los das de la semana son: Lunes, martes, miercoles, jueves, viernes, sabado, domingo
el tiempo puede ser lluvioso, nublado, soleado, templado

la temperatura puede ser menor o igual a 24 o mayor a 24


Si es de lunes a viernes vamos al trabajo Si es sabado o domingo si es lluvioso, nublado nos quedamos en casa si es soleado, templado Si temperatura menor o igual a 24 vamos al parque Si temperatura mayor a 24 vamos a la playa

rbol de Deduccin
Ir al Trabajo Lunes Martes Mircoles Jueves Viernes Sbado Domingo Y Lluvioso Nublado <=24 grados

S1 Qu hacer los das de la semana S2 S3 S4

Quedarse en casa Ir al parque

Soleado Y Templado >24 grados Ir a la playa

Explicacin findall

Ejercicio
Funciona
No hay accin requerida

Bombilla de Luz

Funciona

Cambiar bombilla

No Funciona

Otras luces en la Habitacin

Funciona

Revisar corto circuito

No Funciona

Otras luces en la casa

No Funciona

Llamar a la compaa de Luz

Sistema de Men
Ing. Walter Gil Astete

Programa

Programa de Restaurant

Explicacin
1. Usamos un dominio de tipo char an cuanto pudo haber sido symbol o string. 2. El predicado menu implementado en la clusula respectiva es el que contiene la lista de opciones que se muestra con los write. readchar se usa para leer la entrada desde teclado de un carcter. Enviamos dicho carcter a la clusula tarea. 3. tarea evala el contenido valor enviado en Opcion y ejecuta una tarea. 4. Se invoca a la clasula repite que se llama a si misma. Solo salimos cuando pulsamos 3.

Clusulas

Metas

Ejercicio: BDC

Programa

Prolog y Recursividad
Ing. Walter Gil Astete

Introduccin
Prolog es un lenguaje de programacin para computacin simblica, no numrica. Especialmente adecuado para resolver problemas que involucran objetos y relaciones entre ellos.

rbol de trabajo progenitor(pilar,belen).


pilar lucia tomas belen progenitor(tomas,belen). progenitor(pilar,lucia). progenitor(belen,ana). progenitor(belen,pedro). progenitor(pedro,jose). progenitor(pedro,maria). Progenitor es una relacin pilar, belen son argumentos pilar es progenitor de belen Este programa consta de 7 clusulas Cada clusula declara un hecho sobre la relacin progenitor progenitor(pilar,belen) es una instancia de la relacin progenitor (arg1,arg2)

pedro
jose maria

ana

Definiendo relaciones mediante hechos


?-progenitor(pilar,belen). yes ?-progenitor(pilar,tomas). no ?-progenitor(X,pedro). X=belen ?-progenitor(belen,X). X=pedro X=ana ?progenitor(X,Y). X=pilar Y=lucia; X=tomas Y=belen; X=pilar Y=belen;
pilar lucia tomas belen pedro jose maria ana

Conclusiones
Una relacin se define estableciendo las n-tuplas de objetos que satisfacen la relacin. Un programa en Prolog consiste de clusulas (terminan con un punto), que implementan un predicado Los argumentos de las relaciones pueden ser: Objetos concretos: pilar, tomas (tomos, constantes atmicas, constantes individuales, etc) Objetos genricos: X, Y (variables) Las cuestiones (metas, goal) consisten en uno o ms objetivos. progenitor(X,ana),progenitor(X,pedro) es la conjuncin de los objetivos: X es progenitor de ana y X es progenitor de pedro Prolog acepta cuestiones como objetivos que han de ser satisfechos

Definiendo relaciones mediante reglas


Cmo extender nuestro programa progenitor? p.e. la relacin descendencia: aadir hecho: descendencia(lucia,pilar). emplear hechos existentes + razonamiento: regla Para todo X e Y, Y es un descendiente de X si X es progenitor de Y. regla hecho Un hecho es siempre cierto. Una regla especifica algo cierto si alguna condicin se satisface. descendiente(Y,X):- progenitor(X,Y). consecuente antecedente

Cmo emplea Prolog las reglas?


1. Formular pregunta: ?-descendiente(lucia,pilar) 2. Existe algn hecho que satisfaga el objetivo?: aplicar reglas: descendiente(Y,X):-progenitor(X,Y) 3. Para aplicar la regla a lucia y pilar, instanciamos las variables: X = lucia, Y = pilar 4. Obtenemos un caso particular de la regla: descendiente(lucia,pilar):-progenitor(pilar,lucia) 4. El objetivo inicial descendiente(lucia,pilar) ha sido sustituido por el objetivo progenitor(pilar,lucia) 5. Existe hecho que satisfaga el objetivo?: si conclusin de la regla es cierta. 6. Respuesta: si

Extensiones a un programa
Continuemos extendiendo nuestro programa ejemplo mediante hechos: mujer(pilar). mujer(belen). mujer(lucia). mujer(ana). mujer(maria). hombre(tomas). hombre(pedro). hombre(jose). Estas son relaciones unarias: declaran una propiedad si/no simple de un objeto. Mediante reglas: madre(X,Y):-progenitor(X,Y),mujer(X). Para todo X e Y X es madre de Y si X es progenitor de Y y X es mujer

Conclusiones
Un programa Prolog puede ser extendido aadiendo nuevas clusulas. Tres tipos de clusulas: hechos, reglas y consultas (cuestiones). Los hechos declaran cosas que son siempre incondicionalmente ciertas. Las reglas declaran cosas que son ciertas dependiendo de una condicin dada. Ambas implementan predicados. Mediante cuestiones un usuario puede preguntar al programa Prolog qu cosas son ciertas. Una clasula en Prolog consta de encabezamiento y cuerpo. El cuerpo es una lista de objetivos separadas por comas. Las comas se entienden como conjunciones o disyunciones.

Los hechos son clusulas que poseen un encabezamiento (conclusin) y el cuerpo (condicin) vaco. Las cuestiones slo poseen cuerpo. Las reglas tienen encabezado y cuerpo no vaco. En el transcurso del programa, una variable puede ser sustituida por otro objeto. Decimos as que la variable es instanciada. Las variables son universalmente cuantificadas y se leen para todo. Si la variable aparece slo en el cuerpo, existen lecturas alternativas: tienehijo(X):- progenitor(X,Y)

Para todo X e Y si X es progenitor de Y entonces X tiene hijo Para todo X X tiene hijo si hay algn Y tal que X es progenitor de Y

Recursividad
Intentemos aadir la relacin antepasado a nuestro programa ejemplo. La relacin consta de dos reglas: la primera define el antepasado directo: Para todo X y Z X es un antepasado de Z si X es progenitor de Z. antepasado(X,Z):- progenitor(X,Z).

y la segunda los antepasados indirectos: antepasado(X,Z):- padre(X,Y), padre(Y,Z). y antepasado(X,Z):padre(X,Y1),padre(Y1,Y2), padre(Y2,Z). y antepasado(X,Z):padre(X,Y1),padre(Y1,Y2), padre(Y2,Y3), padre(Y3,Z). ...

Reglas recursivas
La segunda regla solo trabaja hasta la profundidad definida por el cuerpo de la regla y el programa adems de limitado es extenso. Necesitamos definir una regla que defina el antepasado a cualquier nivel de profundidad. Solucin: definir la relacin antepasado en trminos de si misma.

Para todo X y Z, X es antepasado de Z si existe Y tal que (1) X es antepasado de Y e (2) Y es antepasado de Z. La relacin antepasado consiste as de dos reglas: antepasado(X,Z):- progenitor(X,Z). antepasado(X,Z):-padre(X,Y), antepasado(Y,Z).

Objetos Compuestos
Ing. Walter Gil Astete

area,pob,capital son functores. pais puede contener cualquiera de ellos. Las consultas abajo nos muestran el uso de dichos functores.

El programa es similar al anterior pero con mejor salida.

Otra solucin.

El programa es similar al anterior pero con mejor salida.

Otro Ejemplo
Digamos que tenemos lectores que leen libros o revistas, la BDC debe mostrar el nombre del lector y lo que lee independientemente que sea un libro o una revista. Debiera tener un dominio del tipo lectura que sea libro o revista, ms o menos como sigue en la siguiente diapositiva.

Digamos por ejemplo que lo que quisiera mostrar sea el nombre de aquellos que leen libros editorializados por anaya

La meta sera: lectores(lee(X,libro(_,_,anaya))). Nos interesa el nombre del lector por eso enviamos una variable, pero no nos interesa el nombre del autor, ni el libro en cuestin y sabemos que el criterio de bsqueda es anaya. Ahora convirtamos dicha consulta en una regla de una sola variable.

Ejercicio 1
Ud. Tiene los siguientes nombres:

Haga un programa que tenga clausulas persona con functores nombre, paterno, materno. -Consulte los datos de todas las personas -Consulte los datos de la persona 1 -Muestre los datos de aquellos cuyo apellido paterno es Andrade -Liste los datos tal como se ven en la muestra superior -Modifquelo de forma que tenga clausulas persona con 1 functor que contenga los 3 functores nombre, paterno y materno.

Ejercicio 2
Dada la siguiente BDC
familia(esposo(nombre(antonio,garcia,fernandez), profesion(arquitecto), salario(300000)), esposa(nombre(ana,ruiz,lopez), profesion(docente), salario(120000)), domicilio(piura)). familia( esposo(nombre(luis,alvarez,garcia), profesion(arquitecto), salario(400000)), esposa(nombre(maria,romero,soler), profesion(sus_labores), salario(0)), domicilio(piura)).

familia( esposo(nombre(bernardo,bueno,martinez), profesion(docente), salario(1200)), esposa(nombre(laura,rodriguez,millan), profesion(medico), salario(2500)), domicilio(lima)). familia( esposo(nombre(miguel,gonzalez,ruiz), profesion(empresario), salario(4000)), esposa(nombre(belen,salguero,cuevas), profesion(sus_labores), salario(0)), domicilio(cuzco)).

Haga las reglas para las siguientes consultas: % (1) Definir un predicado que muestre la profesion de cualquier X % (2) Definir un predicado que muestre el primer apellido de cualquier X % (3) Determinar el nombre de todas las personas que viven en piura % (4) Definir un predicado que muestre los ingresos familiares. % (5) Definir un predicado que muestre las parejas por sus nombres de pila. % (6) Definir un predicado que muestre el sueldo y el nombre.

Facts y DataBase
Ing. Walter Gil Astete

seccin FACTS - DATABASE Los hechos que se declaran aqu son dinmicos y pueden ser actualizados en tiempo de ejecucin. FORMATO [GLOBAL] {FACTS | DATABASE} [- nombre de la base de datos] [nocopy][{nondeterm|determ|single}] hecho_1[([Lista_Args_hecho_1])] ...
FACTS padre(string, string) PREDICATES abuelo(string, string)

CLAUSES
padre(juan, pepe). padre(juan, luis). padre(pepe, manolo). abuelo(X, Y):-padre(X, Z), padre(Z, Y). GOAL assert(padre(pepe, beatriz)), assertz(padre(pepe, carlos)), asserta(padre(pepe, maria)), abuelo(juan, Y).

Base de Datos internas


Tipo de predicado que permite almacenar en memoria conjuntos de hechos. Forma parte de la memoria de trabajo. Se declara como cualquier predicado de tipo hecho con la cabecera DATABASE El siguiente ejemplo muestra un almacenamiento sencillo de palabras para un diccionario ingles-castellano y viceversa.

Ejecucin

Explicacin
Nuestra pequea BDC es:

Donde palabra es un DATABASE. Cuando hacemos la consulta buscar como X la palabra a la izquierda asumiendo que es castellano y debe mostrar la traduccin al ingls; sino la encuentra lo hace al reves. Para ello usaremos predicados traduce(X)

1 para ingles castellano otro para castellano ingles y otro por si no encuentra la palabra. Si no encuentra X entonces nos pide la palabra en castellano primero y luego su traduccin al ingles para guardarlo. Usamos assert para ello y almacena en memoria no en fsico. Para ello usamos otro predicado.

Familia

Introduccin a la Programacin Visual


Ing. Walter Gil Astete

Instrucciones
Las aplicaciones visuales pueden ser de simple documento (SDI) o de mltiple documento (MDI). En ambas se pueden usar mltiples ventanas pero en la segunda estn embebidas en una ventana (tipo MDIForm en .NET). Un proyecto Visual Prolog 5.x no reconoce carpetas con nombres con espacios en blanco.

PROJECT NEW PROJECT

APPLICATION EXPERT ficha General


nombre Se genera nombre del VPR Crear carpeta para el proyecto

Escribe el nombre del proyecto; hace click en el cuadro de NAME OF VPR FILE. Note que se genera un nombre de slo 8 caracteres. En BASE DIRECTORY escribe: c:\Operaciones u otro nombre. Eso significa que no se crea una carpeta del proyecto por defecto.

Ficha Target

Mantener todos los valores por defecto.

VPI Option

Note que a la derecha se ha quitado el check a 3 opciones. Haga click en CREATE.

Se crea un archivo .PRO Haga click en Window

Doble click en Task Window

El Task Window es una ventana superior sobre la que tenemos poco control. Las ventanas en la parte inferior de la imagen son de diseo, para poner controles y para alinearlos.

De izquierda a derecha y de arriba abajo: PushButton (Button), CheckBox, RadioButton (OptionBox), StaticText (Label), Edit (TextBox), ListBox, ListButton (ComboBox), ListEdit, ScrollBars (ambos), Group Box (Frame), Icon (PictureBox), Custom

Definir Etiquetas
Seleccionamos un Static Text y hacemos click sobre el Task Window. Escribimos un nombre en Text. Al hacer click en constant inmediatamente se genera un nombre de constante para el control con prefijo idct. Este nombre de constante es un ID de ventana.

Haga lo mismo para que se vea como sigue:

Los nombres en los text de las etiquetas son los que se muestran

Definir cuadros de Texto


Seleccionamos un Edit y hacemos click sobre el Task Window. Limpiamos la propiedad Text. Escribimos en constant un nombre de constante para el control con prefijo idc. Este nombre de constante es un ID de ventana. No es obligatorio usar idc pero es una buena costumbre.

Haga lo mismo para que se vea como sigue:

Los nombres de constante son: idc_nro1, idc_nro2, idc_suma, idc_resta, idc_multip, idc_divi

Definir Botones
Seleccionamos un Push Button y hacemos click sobre el Task Window. Escribimos un nombre en Text. Al hacer click en constant inmediatamente se genera un nombre de constante para el control con prefijo idc. Este nombre de constante es un ID de ventana.

Haga lo mismo para que se vea como sigue:

Los nombres en los text de los botones son los que se muestran

Ejecutar
Debemos ejecutar para que se generen los controles.

Aadir cdigo
Hacer click en el CODE EXPERT

CODE EXPERT
1. Seleccionar en Event Type la opcin CONTROL 2. En Event or Item buscar IDC_CALCULAR 3. Click en Add Clause para los 3 botones
Seleccione por ltimo idc_calcular y haga click en EDIT CLAUSE
1 2 3

Ventana de cdigo idc_calcular

Todo son clausulas; el cursor se ubica en la clausula que queramos editar, el resto est hacia arriba. Ubicar el cursor a la derecha de la como indicada y pulsar ENTER. Aada el cdigo que se indica.

idc_limpiar

idc_salir

Desarrollar

Los EDIT: idc_num1, idc_num2, idc_num3, idc_mayor; El Button idc_comparar

Dominios, predicados, clausulas

Se pudo usar , y ; Entre al archivo .PRO y aada lo que se indica. La seccin entre llaves no se debe tocar ni modificar. Cierre y grabe aada la clausula para el botn COMPARAR.

idc_comparar

Ejercicio
Haga un programa que convierta una cantidad ingresada en metros en: Cm (x100), Pulgada=Cm/2.54, Pies=Pulgada/12,Yardas=Pies/3.

Uso de ListButton - ListBox


Ing. Walter Gil Astete

Generalidades
No use el escritorio para grabar sus proyectos. No use su puerto para guardar sus proyectos Use siempre una carpeta en un disco duro (c:\;d:\) Cuando coloque los controles trate de no cambiarles el tamao, sobretodo a los ListButton

Objetos de Lista
Los objetos de lista son: ListBox, ListButton y ListEdit, todos ellos pertencen a la clase ListBox por eso sus predicados nativos (procedimientos definidos) se prefijan con lbox_ en la forma: lbox_procedimiento A los lbox se le aaden, eliminan, cuentan, etc. elementos.

Predicados de lbox
lbox_Add/2 lbox_Add/3 lbox_Clear/1 lbox_CountAll/1 lbox_Delete/2 lbox_GetAll/1 lbox_GetItem/2 lbox_GetSel/3 lbox_GetSelIndex/1 lbox_IsSel/2 lbox_Resume/1 lbox_SetColumnWidth/2 lbox_SetSel/3 lbox_SetTabStops/2 lbox_SetTopIndex/2 lbox_Suspend/1

Los elementos se pueden aadir de uno en uno a un manejador de lbox: lbox_add(MANEJADOR, Suma). Los elementos se pueden aadir a partir de una lista (estructura de datos): Sea: L=[Suma,Resta,Multiplicacin,Divisin] lbox_add(MANEJADOR,L). Pd: para que se vean en el orden indicado quitar el check en SORT al definir el List Los elementos se pueden aadir a partir de un conjunto de clusulas de un predicado empleando findall(X,Y)

Forma de uso

Llenar Listas Dinmicamente


idc_opc1 idc_opc2 idc_elegir

En este ejercicio lo importante es que el ListButton llamado idc_opc2 se llenar con una lista distinta de elementos en funcin de la eleccin en idc_opc1. Idc_opc1 muestra las palabras SI y NO. Al elegir SI se ver en idc_opc2 Per, Argentina, Chile, Venezuela. Al elegir NO se ver en idc_opc2 Bolivia, Colombia, Brasil, Paraguay.

Cdigo
1

Explicacin
1. Como requerimos clusulas que hagan referencia al contenido de un componente, la forma del predicado respectivo ser nombre(WINDOW,dominio), como llenar(WINDOW, string) para implementar la clusula llenar(_win,SI). Es nondeterm por que tendremos una clusula para SI y otra para NO

2. Se implementa el predicado llenar con dos clusulas: una para cuando el valor que se eligi en idc_opc1 es SI y otra cuando es NO. Se define una lista (ListA), con 4 expresiones de cadena, se implementa un manejador para idc_opc2 (H), limpiamos dicho manejador para que no se llene constantemente (lbox_clear(Manejador)) y llenamos el manejador con la lista definida (lbox_add(Manejador,Lista)).

3. Se define una lista (L), un manejador (H), y se llena el manejador. Este cdigo se escribe en la seccin de creacin de componentes del task_window 4. Se implementa un manejador para el ListButton icd_opc1, una variable que contenga el texto de dicho manejador (Opcion) y se invoca a la clusula llenar pasndole el valor de la variable no sin anteponer el hecho de que dicha clusula maneja un control (WINDOW)

Buscar en Predicado el contenido de Listas.


id_licor

id_resultado

Idc_buscar

id_licor e idc_resultado son ListBox. En el primero se vern 2 tipos de licor (cerveza,vino). Al elegir uno de ellos y hacer click en buscar se har una consulta a un predicado donde aparecen aquellos que le gusta cada uno de los licores mencionados y se mostrarn en idc_resultado.

Cdigo
1

Explicacin
1. Predicado gusta con dos objetos symbol 2. Clusula que implementa el predicado gusta con nombres y el licor de su agrado 3. Llenamos el ListBox superior con el tipo de licor. 4. Manejadores para ambos ListBox, limpiamos el ListBox de salida (idc_resultado)

Index es una variable que coge el ndice del elemento seleccionado en idc_licor a travs del predicado getSelIndex. Item coge el elemento de texto del manejador que se indica en funcin del Index de la seleccin con el predicado getItem. Predicado findAll que busca todos los X en el predicado gusta que coincida con el valor de Item. Cada coincidencia se pasa a la lista L, que se aade al ListBox idc_resultado.

Cargar predicado en Lista

Id_blanca

La idea es llenar el ListBox llamado id_blanca con el contenido de una clusula desde la creacin de componentes de forma que cuando se ejecute la lista se vea llena

Cdigo
1 2

Explicacin
1. Dominio de tipo symbol 2. Predicado blanca con un objeto de tipo symbol 3. Implementacin de clusulas blanca con artefactos de lnea blanca como contenido 4. Uso de findall en la seccin de creacin de componentes.

Aplicacin de Ejemplo I
Cree un proyecto llamado DenPob. Cree una carpeta DenPob para guardarlo. Debe ser un proyecto SDI. Cree el formulario que aparece en la diapositiva siguiente. Los identificadores deben ser los que se indican. El identificador de las etiquetas puede ser cualquiera.

idc_pais idc_area idc_pob idc_densidad

idc_mostrar Una vez diseado ejecute la aplicacin para que se aadan los controles en el cdigo y puede escribir en la seccin de creacin de controles.

Dominios y predicados

Llenar ListButton
Cuando escriba este cdigo cpielo en el block de notas por previsin. Cualquier pequea modificacin en el tamao o posicin de los componentes reescribir la seccin de creacin de componentes y se borrar el cdigo que ha aadido. No cambie el tamao del ListButton. Recuerde que esta es una versin no comercial con restricciones.

Cdigo

Esta es la seccin de creacin de controles. La crea Prolog cuando se ejecuta la aplicacin luego los controles. Lo El cdigo a partirde detener List mejor que est en el crculo es lo que colocarlo despus de endef y escribe. Si cambia tamao o posicin de controles la antes de ! seccin se reescribe y el cdigo aadido se borra

Clusulas

Clusula del botn mostrar

Aplicacin de Ejemplo II
Cree un proyecto llamado Operar. Cree una carpeta Operar para guardarlo. Debe ser un proyecto SDI. Cree el formulario que aparece en la diapositiva siguiente. Los identificadores deben ser los que se indican. No hay etiquetas pero puede aadirlas Ud. para lograr ms claridad.

Dominios, predicados y clusulas

Llenar ListButton

No olvide que la posicin correcta del cdigo es donde est indicando la flecha

Cdigo para el botn Calcular

Ejercicio

Detalles
Los ListBox muestran Entradas, platos principales y postres de una BDC de 4 predicados: entrada, carne, pescado, postre. Al elegir una opcin de cada ListBox se ver por debajo su precio y su valor calrico (usamos el evento selchange). El segundo listBox muestra carnes y pescado. Si hacemos click en Mostrar aparecen el costo total y el total de caloras del combo pedido.

Base de Conocimientos

tipo_plato(plato,precio,caloria) El contenido de las clusulas de tipo hechos es plato, precio, caloras.

Optimizar rbol
Ing. Walter Gil Astete

Implementar
Los das de la semana son: Lunes, martes, miercoles, jueves, viernes, sabado, domingo
el tiempo puede ser lluvioso, nublado, soleado, templado la temperatura puede ser menor o igual a 24 o mayor a 24 Si es de lunes a viernes vamos al trabajo

Si es sabado o domingo si es lluvioso, nublado nos quedamos en casa si es soleado, templado Si temperatura menor o igual a 24 vamos al parque Si temperatura mayor a 24 vamos a la playa

rbol de Deduccin (evaluar index)


Ir al Trabajo Lunes Martes Mircoles Jueves Viernes Sbado Domingo Y Lluvioso Nublado <=24 grados

S1 Qu hacer los das de la semana S2 S3 S4

Quedarse en casa Ir al parque Y >24 grados

Soleado Templado

Ir a la playa

rbol de Solucin
<5 7 evaluarDa >=5

Ir al trabajo
Llenar ListBox con tiempos

Llenar ListBox con Dias de la semana

ContarElementos En ListBox

evaluarTiempo

<2 >=2

Quedarse en casa Llenar ListBox con temperaturas Ir al Parque Ir a la Playa

evaluarTiempo

0 1

idc_opciones

idc_solucion

Lectura y Escritura de Ficheros en Visual Prolog


Ing. Walter Gil Astete

Los 2 objetos debajo son EDIT

Interface
Idc_guardar

idc_nombre

idc_edad

Requerimientos
Hacer la interface Ejecutarla para construir el cdigo de los componentes. Colocar el fichero personas.txt en la carpeta EXE del proyecto Predicado para leer fichero: CONSULT Predicado para grabar en fichero: SAVE

Dominios y Predicado de datos

Leer fichero al ejecutar proyecto


Luego del cdigo de construccin de los componentes (asumir este predicado como el evento load de otras aplicaciones), colocar la siguiente lnea: consult("PERSONAS.TXT",datos), Que indica que los datos de dicha base de conocimientos se almacenaran en la BC de memoria llamada datos

Cdigo del botn Guardar

Eliminar predicado
id_lista (ListBox)

id_borrar

Requerimientos
Hacer la interface Ejecutarla para construir el cdigo de los componentes. Colocar el fichero personas.txt en la carpeta EXE del proyecto Predicado para leer fichero: CONSULT Predicado para eliminar predicado: RETRACT - RETRACTALL

Dominios y Predicado de datos

Cdigo del botn Borrar

Explicacin
database-datos persona(s,s) %nombre,edad

Persona es un predicado que podr cambiar dinmicamente usando assert para aadir elementos y retract para eliminar elementos; datos es la BD en memoria que administrar el conjunto de elementos

Al hacer uso de assert o retract se aaden o eliminan elementos en la BD interna (en memoria). Con Consult lo que hacemos es poner en memoria un conjunto de elementos y colocarlo en la BD interna llamada datos. Con Save lo que hacemos es chancar lo que hay en el fichero con el conjunto de elementos de la BD interna llamada datos

Probabilidades
Ing. Walter Gil Astete

SISTEMAS EXPERTOS BASADOS EN PROBABILIDADES


En los primeros sistemas expertos, se eligi la probabilidad como medida para tratar la incertidumbre pero, desgraciadamente, muy pronto se encontraron algunos problemas, debidos al uso incorrecto de algunas hiptesis de independencia, utilizadas para reducir la complejidad de los clculos. Como resultado, en las primeras etapas de los sistemas expertos, la probabilidad fue considerada como una medida de incertidumbre poco prctica.

La mayora de las crticas a los mtodos probabilsticos se basaban en el altsimo nmero de parmetros necesarios, la imposibilidad de una asignacin o estimacin precisa de los mismos, o las hiptesis poco realistas de independencia.

Problema Probabilstico
El problema siguiente muestra un anlisis histrico de 200 das sobre el nmero de consultas diarias realizadas a un sistema de informacin empresarial (EIS) residente en un servidor central. Se sabe que el nmero de consultas diarias va de 0 a 5 por lo que las frecuencias relativas seran A das de 0 consultas/total de das, B das de 1 consulta/total de das .. F das de 5 consultas/total de das. Por ejemplo:

CONSULTAS 0 1 2 3 4 5

DIAS 10 25 50 50 40 25

FREL 0,05 0,125 0,25 0,25 0,2 0,125

FACUM 0,05 0,175 0,425 0,675 0,875 1

200

Esta funcin de probabilidad la creamos en Prolog de la siguiente forma: domains i=integer r=real predicates inicio funcion(i,i,i,i,i,i,r) clauses inicio:write("Ingrese la cantidad de das con 0 solicitudes : "),readreal(A),nl, write("Ingrese la cantidad de das con 1 solicitudes : "),readreal(B),nl, write("Ingrese la cantidad de das con 2 solicitudes : "),readreal(C),nl, write("Ingrese la cantidad de das con 3 solicitudes : "),readreal(D),nl, write("Ingrese la cantidad de das con 4 solicitudes : "),readreal(E),nl, write("Ingrese la cantidad de das con 5 solicitudes : "),readreal(F),nl, funcion(A,B,C,D,E,F,Prob), write("El nmero de solicitudes probables es de ", Prob),nl. funcion(A,B,C,D,E,F,Prob):Suma=A+B+C+D+E+F,A1=A/Suma,B1=B/Suma,C1=C/Suma,D1=D/Suma,E1=E/Suma,F1=F/Suma, Prob=A1*0+B1*1+C1*2+D1*3+E1*4+F1*5. goal inicio.

El concepto de probabilidad resulta familiar a cualquier profesional. Sin embargo, una definicin precisa exige considerar la naturaleza matemtica de dicho concepto. La probabilidad de ocurrencia de un determinado suceso podra definirse como la proporcin de veces que ocurrira dicho suceso si se repitiese un experimento o una observacin en un nmero grande de ocasiones bajo condiciones similares. Por definicin, entonces, la probabilidad se mide por un nmero entre cero y uno: si un suceso no ocurre nunca, su probabilidad asociada es cero, mientras que si ocurriese siempre su probabilidad sera igual a uno. As, las probabilidades suelen venir expresadas como decimales, fracciones o porcentajes.

La definicin anterior de probabilidad corresponde a la conocida como definicin frecuentista. As, a partir de una poblacin con N elementos, de los cuales k presentan una caracterstica A, se estimar la probabilidad de la caracterstica A como (A) = k/N. As, por ejemplo, en una poblacin de 100 pacientes, 5 de los cuales son diabticos, la probabilidad de padecer diabetes p(Diabetes) se estimar como el cociente 5/100= 0.05. Es conveniente conocer algunas de las propiedades bsicas del clculo de probabilidades: Para un suceso A, la probabilidad de que suceda su complementario (o equivalentemente, de que no suceda A) es igual a uno menos la probabilidad de A.

Si un fenmeno determinado tiene dos posibles resultados A y B mutuamente excluyentes (es decir, que no pueden darse de forma simultnea, como ocurre en el lanzamiento de una moneda al aire), la probabilidad de que una de esas dos posibilidades ocurra se calcula como la suma de las dos probabilidades individuales.

La extensin de la ley aditiva anterior al caso de ms de dos sucesos mutuamente excluyentes A, B, C indica que:

Consideremos, como ejemplo, un servicio de urologa en el que el 38,2% de los pacientes a los que se les practica una biopsia prosttica presentan una hiperplasia benigna (HB), el 18,2% prostatitis (PR) y en un 43,6% el diagnstico es de cncer (C). La probabilidad de que en un paciente que se somete a una biopsia de prstata no se confirme el diagnstico de cncer prosttico ser igual a:

Es decir, en un 56,4% de los casos se logra descartar un diagnstico maligno. De modo equivalente, la probabilidad anterior podra haberse calculado como la probabilidad del suceso contrario al del diagnstico de cncer:

Ntese la importancia del hecho de que los sucesos anteriores sean mutuamente excluyentes. Sin esta condicin, la ley de adicin no ser vlida. Por ejemplo, se sabe que en una determinada Unidad de Cuidados Intensivos (UCI) el 6,9% de los pacientes que ingresan lo hacen con una infeccin adquirida en el exterior, mientras que el 13,7% adquieren una infeccin durante su estancia en el hospital. Se conoce adems que el 1,5% de los enfermos ingresados en dicha unidad presentan una infeccin de ambos tipos. Cul ser entonces la probabilidad de que un determinado paciente presente una infeccin de cualquier tipo en UCI? Para realizar el clculo, si se suman simplemente las probabilidades individuales (0,069+0,137) la probabilidad de un suceso doble (infeccin comunitaria y nosocomial) se estar evaluando dos veces, la primera como parte de la probabilidad de padecer una infeccin comunitaria y la segunda como parte de la probabilidad de adquirir una infeccin en la UCI.

Para obtener la respuesta correcta se debe restar la probabilidad del doble suceso. As si un fenmeno determinado tiene dos posibles resultados A y B, la probabilidad de que una de esas dos posibilidades ocurra viene dada, en general, por la expresin:

Por lo tanto, si dos o ms sucesos no son mutuamente excluyentes, la probabilidad de que ocurra uno de ellos o ambos se calcula sumando las probabilidades individuales de que ocurra una de esas circunstancia, pero restando la probabilidad de que ocurra la comn. Es decir, 19 de cada 100 enfermos registrar alguna infeccin (ya sea de tipo comunitario o nosocomial) durante su ingreso en la citada unidad.

A veces, la probabilidad de que un determinado suceso tenga lugar depende de que otro suceso se haya producido o no con anterioridad. Esto es, en ocasiones el hecho de que se produzca un determinado fenmeno puede hacer ms o menos probable la aparicin de otro. Este tipo de probabilidades se denominan probabilidades condicionadas, y se denotar por P(A/B) a la probabilidad condicionada del suceso A suponiendo que el suceso B haya ocurrido ya. La ley multiplicativa de probabilidades indica que la probabilidad de que dos sucesos A y B ocurran simultneamente es igual a:

La ley multiplicativa anterior se utiliza tambin con el fin de determinar una probabilidad condicional P(A/B) a partir de los valores de P(A y B) y P(B):

Supongamos, por ejemplo, que queremos estudiar la incidencia del hecho de ser fumador como factor de riesgo en el desarrollo de una enfermedad en una determinada poblacin. Para ello se dise un estudio prospectivo y, tras seleccionar una muestra de 180 sujetos, los resultados son los que se muestran en la Tabla 1.

la probabilidad de desarrollar la enfermedad (E) en la poblacin de estudio es:

Mientras que la probabilidad de padecer la enfermedad un fumador (F) es:

Y un no fumador:

En el ejemplo, se constata por lo tanto que la incidencia de la enfermedad es diferente en la poblacin fumadora que en la no fumadora (85,7% vs 18,2%). As pues, la probabilidad de desarrollar la enfermedad depende de si se es o no fumador.
Cual es la probabilidad de no desarrollar la enfermedad en la poblacin de estudio ?

Ejercicio
Desarrolle una aplicacin en Visual prolog que satisfaga la tabla 1. Los datos Fumadores Enfermos / Fumadores Sanos y No Fumadores Enfermos / No Fumadores Sanos debern ingresarse al programa. El programa calcular las 3 funciones expresadas en la diapositiva 10 as como la funcin de la pregunta que se hace al final de dicha dispositiva

Sucesos excluyentes e independientes


Ing. Walter Gil Astete

Probabilidades
Vamos a estudiar los conceptos de:
Sucesos excluyentes Sucesos independientes

Empecemos por sucesos excluyentes o mutuamente excluyentes

Sucesos mutuamente excluyentes


Excluir significa dejar fuera, de manera que dos sucesos sern excluyentes o mutuamente excluyentes si ellos no tienen elementos comunes (es decir uno excluye al otro) Observe cuidadosamente la siguiente urna

Esta urna tiene bolitas rojas, bolitas azules y bolitas verdes.

Supongamos que se elige una bolita al azar, entonces hay tres tipos de sucesos que son de inters

El suceso que la bolita sea azul que lo denotamos por la letra A El suceso que la bolita sea roja que lo denotamos por la letra R El suceso que la bolita sea verde que lo denotamos por la letra V Observe que ninguno de estos sucesos tienen elementos comunes, de manera que entre ellos son mutuamente excluyentes. Podemos calcular la probabilidad de obtener una bolita azul, esto es

5 Pr( A) 12

De igual forma podemos calcular la probabilidad de sacar una bolita roja, esto es

4 Pr( R) 12

Y la probabilidad de obtener una bolita verde, que es

3 Pr(V ) 12
Ahora bien, nos preguntamos cul es la probabilidad de sacar una bolita roja o una bolita azul?

Es decir, estamos preguntando con que probabilidad puede ocurrir el suceso R (sacar bolita roja) o A (sacar bolita azul)?

Pr( R o A) Pr( R) Pr( A)

4 5 9 12 12 12

Es decir, cuando los sucesos son mutuamente excluyentes, la probabilidad de la ocurrencia de uno de ellos es simplemente la suma de cada una de las probabilidades

Cul es la probabilidad de obtener una bola roja o una bola verde?

Los sucesos bola roja, R, y bola verde, V, son mutuamente excluyentes, de modo que la probabilidad de que ocurra uno de ellos es

4 3 7 Pr( R o V ) Pr( R) Pr(V ) 12 12 12

Veamos ahora el concepto de sucesos independientes... Nos vamos a apoyar en la urna anterior con las bolitas de color roja, azul y verde

Pero ahora sacaremos dos bolitas, una tras otra y con reposicin. Esto significa que sacamos la primera bolita, anotamos su color, y la regresamos a la urna, y luego hacemos la segunda extraccin. Definamos el suceso la primera bolita extrada fue de color azul, que llamaremos suceso A1; y definamos el suceso la segunda bolita extrada fue de color azul, que llamaremos A2.

Sucesos independientes

Queremos calcular la probabilidad del siguiente suceso la primera bolita sea azul y la segunda bolita tambin sea azul. En trminos de nuestra notacin de sucesos, queremos calcular la probabilidad de que ocurra el suceso A1 y que ocurra el suceso A2. Mire cuidadosamente los siguiente cuadritos, el primer cuadro denotar las formas de obtener una bola cualquiera y el segundo cuadro las formas de obtener una bola cualquiera de la segunda extraccin 12 12 = 144 formas diferentes

Ahora vamos a calcular las formas diferentes de obtener una bola azul en la primera extraccin y una bola azul en la segunda extraccin: 5 5 = 25 formas diferentes

Luego la probabilidad de obtener dos bolitas azules de dos extracciones con reposicin (con reemplazo) es

25 144

Por otro lado, la probabilidad de que en la primera extraccin la bolita sea azul, esto es

5 Pr( A1) 12
Una vez repuesta la bolita, la probabilidad de sacar en la segunda extraccin una bolita azul, esto es

5 Pr( A2) 12

De manera que podemos ver que la probabilidad de obtener A1 y A2, es igual al producto de la probabilidad de A1 por la probabilidad de A2, esto es

Pr( A1 y A2) Pr( A1) Pr( A2)


Y cuando esto ocurre, se dice que los sucesos A1 y A2 son independientes.

De otra forma A y B dos sucesos son independientes cuando la ocurrencia de uno en nada altera la ocurrencia del otro.

Con la misma urna, nuevamente sacaremos dos bolitas, pero esta vez lo haremos sin reposicin (sin reemplazo). Esto significa que una vez que hagamos la primera extraccin, la bolita no es devuelta a la urna, o sea que en la segunda extraccin tendremos una bolita menos. Sea el suceso la primera bolita es azul, que denotaremos por A1 Sea el suceso la segunda bolita es roja, que denotaremos por R2

Queremos calcular la probabilidad de que la primera bolita sea azul y la segunda bolita sea roja, cmo la calculamos?

Como antes, utilicemos nuestros cuadraditos para saber todos los posibles resultados de estas dos extracciones sin reposicin 12 11 = 132 formas diferentes
(una bolita menos, la que no fue reemplazada)

Luego, vamos a ver nuestros resultados para que la primera sea azul, y la segunda sea roja (sin reemplazo)

= 20

Luego la probabilidad de A1 y R2 es

20 132

Con el ejemplo anterior queremos decir que cualquier suceso que dependa de la primera extraccin afectar a cualquier otro suceso que dependa de la segunda extraccin, y por lo tanto ellos no sern independientes (se dice que son dependientes) A modo de ejemplo, calcular la probabilidad de que (siempre sin reemplazo) en la primera extraccin salga bolita verde (V1) y en la segunda extraccin salga bolita verde (V2)

3 2 6 12 11 132

Haga un programa de men que permita tener 3 formularios y en cada uno ingresar N bolas rojas, verdes y azules (3 edit) y muestre Formulario 1: La probabilidad de que sea de X color la primera bola que saquemos. Formulario 2: La probabilidad de que sea de X color la primera e Y color la segunda con reposicin. Formulario 3: La probabilidad de que sea de X color la primera e Y color la segunda sin reposicin.

Sistema de Diagnstico
Ing. Walter Gil Astete

Base de Conocimientos

Datos de Entrada

Motor de Inferencia

El Programa

Programa 1

a b c d e f g h i j

Programa 2

En N1 y N3 aparece SI y NO que llenan el ListBox y en RowSource de la ventana de propiedades le mandamos a leer dicho rango.

Diseo

Donde aparece el 1 es la etiqueta Label1 y donde dice Label2 es la etiqueta respectiva. Las otras son de arriba-abajo Label3, Label4 y Label5. Los Textos son TextBox1, 2 y 3 de arriba-abajo. El botn aceptar es CommandButton1 y se usa luego de marcar SI NO del Label2. El botn Diagnstico es CommandButton2 y se usa al final luego de la pregunta 10.

HACER AMBAS PROPUESTAS EN VISUAL PROLOG

Probabilidad Condicional
Ing. Walter Gil Astete

Definicin
Para dos eventos A y B cualesquiera con P(B) > 0, la probabilidad condicional de A dado que B ha ocurrido est dada por: P(A/B) = P(A ^ B)/P(B)
A=8 B=10 A^B=2 A+B+C=20 8 2 10

P(A/B) = (2/20)/(10/20) P(A/B) =0.2

Ejemplo
De 300 estudiantes de Ciencias Econmicas, 100 cursan Estadstica y 80 cursan Historia Econmica. Estas cifras incluyen 30 estudiantes que cursan ambas materias.

Diseo Inicial
HE
E 30

~HE
100

~E
80 220

200
300

Rellenando
HE
E 30

~HE
70 100

~E

50
80

150
220

200
300

a) Cul es la probabilidad de que un estudiante elegido aleatoriamente curse Estadstica o Historia Econmica I? b) Idem anterior pero que no curse ninguna de esas dos materias. c) Qu probabilidad hay de que al elegir un estudiante al azar curse Historia Econmica I, dado que cursa Estadstica? d) Qu probabilidad hay de que al elegir un estudiante al azar curse Estadstica, dado que cursa Historia Econmica I?

a) Cul es la probabilidad de que un estudiante elegido aleatoriamente curse Estadstica o Historia Econmica I? Se pide P(E) o P(HE), es decir P(E U HE). P(E U HE) = P(E) + P(HE) - P(E ^ HE) P(E) = 100/300 = 0,333 P(HE) = 80/300 = 0,267 P(E ^ HE) = 30/300 = 0,100 P(E U HE) = 0,333 + 0,267 - 0,100 = 0,500

b) Idem anterior pero que no curse ninguna de esas dos materias. Se pide P(~E U ~HE). P(~E U ~HE) = P(~E) + P(~HE) - P(E ^ HE) P(~E) = 200/300 = 0,667 P(~HE) = 220/300 = 0,733 P(~E ^ HE) = 270/300 = 0,900 P(E U HE) = 0,667 + 0,733 - 0,900 = 0,500

c) Qu probabilidad hay de que al elegir un estudiante al azar curse Historia Econmica I, dado que cursa Estadstica?
Se pide P(HE/E). P(HE/E) = P(E ^ HE)/P(E) = 0,100/0,333 = 0,300

d) Qu probabilidad hay de que al elegir un estudiante al azar curse Estadstica, dado que cursa Historia Econmica I? Se pide P(E/HE). P(E/HE) = P(E ^ HE)/P(HE) = 0,100/0,267 = 0,3745

Ejemplo
El total de la poblacin infantil de un pas se distribuye en tres regiones de la siguiente manera: en la regin A se encuentra el 50% de la poblacin, en la regin B el 30% y en la regin C el 20%. Se sabe que la probabilidad de encontrar un nio con caries en cada una de dichas regiones es, respectivamente, 0,4, 0,5 y 0,6. Si se toma al azar un nio de la poblacin, calcular: a) la probabilidad de que tenga caries. b) la probabilidad de que, teniendo caries, provenga de la regin B.

Solucin
X: caries. A = 50% B = 30% C = 20% P(A) = 0,5 P(B) = 0,3 P(C) = 0,2 P(XA) = 0,4 P(XB) = 0,5 P(XC) = 0,6

a) la probabilidad de que tenga caries.


P(X) = P(A).P(XA) + P(B).P(XB) + P(C).P(XC)

P(X) = 0,5.0,4 + 0,3.0,5 + 0,2.0,6 P(X) = 0,2 + 0,15 + 0,12 P(X) = 0,47

b) la probabilidad de que, teniendo caries, provenga de la regin B. P(B/X) = P(B).P(XB)/P(X) P(B/X) = 0,3.0,5/0,47 P(B/X) = 0,31915

Arboles de solucin- Ejemplo


En un centro escolar los alumnos pueden optar por cursar como lengua extranjera ingls o francs. En un determinado curso, el 90% de los alumnos estudia ingls y el resto francs. El 30% de los que estudian ingls son chicos y de los que estudian francs son chicos el 40%. Si se ha elegido un alumno al azar, cul es la probabilidad de que sea chica?

P(chica)=P(I)*P(chica)+P(F)*P(chica)=0.9*0.3+0.1*0.6=0 .69

Programa Resuelto

Ejercicio 1
Una clase consta de seis nias y 10 nios. Si se escoge un comit de tres al azar, hallar la probabilidad de: Seleccionar tres nios. Seleccionar dos nios y una nia Seleccionar por lo menos un nio. Seleccionar dos nias y un nio

Solucin 1
El rbol muestra las probabilidades de todas las posibles soluciones considerando hasta 3 extracciones.

Ejercicio 2
Una caja contiene tres monedas. Una moneda es corriente, otra tiene dos caras y la otra est cargada de modo que la probabilidad de obtener cara es de 1/3. Se selecciona una moneda lanzar y se lanza al aire. Hallar la probabilidad de que salga cara.

Ejercicio 3
Un estudiante cuenta, para un examen con la ayuda de un despertador, el cual consigue despertarlo en un 80% de los casos. Si oye el despertador, la probabilidad de que realiza el examen es 0.9 y, en caso contrario, de 0.5.
Si va a realizar el examen, cul es la probabilidad de que haya odo el despertador? Si no realiza el examen, cul es la probabilidad de que no haya odo el despertador?

Ejercicio 4
Se selecciono un grupo de personas de las cuales 200 eran socias de 2 equipos de futbol (Universitario y Alianza). La intencin era medir la probabilidad de permanencia de dichos socios en el tiempo con sus equipos. Esto fue lo que se encontr.

Universitario

Alianza

Haga un sistema experto que refleje este rbol y muestre las probabilidades y permita modificar los datos iniciales.

Solucin 1
Probabilidad de tomar 3 nios

Probabilidad de tomar 2 nios y 1 nia

Seleccionar por lo menos un nio

Seleccionar exactamente dos nias y un nio

Solucin 2

Solucin 3

Si va a realizar el examen, cul es la probabilidad de que haya odo el despertador?

Si no realiza el examen, cul es la probabilidad de que no haya odo el despertador?

Solucin 4

Universitario

Alianza

Haga un sistema experto que refleje este rbol y muestre las probabilidades y permita modificar los datos iniciales.

Universitario

Alianza

S-ar putea să vă placă și