Professional Documents
Culture Documents
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.
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
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.
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).
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)
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.
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.
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.
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).
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
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').
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:
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
En este ejemplo, la pregunta " Cules son los platos principales?" formulada como: plato_principal(P).
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).
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.
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).
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.
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
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
rbol de Deduccin
Ir al Trabajo Lunes Martes Mircoles Jueves Viernes Sbado Domingo Y Lluvioso Nublado <=24 grados
Explicacin findall
Ejercicio
Funciona
No hay accin requerida
Bombilla de Luz
Funciona
Cambiar bombilla
No Funciona
Funciona
No Funciona
No Funciona
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.
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
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.
Otra solucin.
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).
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
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.
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
VPI Option
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.
Los nombres en los text de las etiquetas son los que se muestran
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.
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
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
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.
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
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)
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.
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_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
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.
Llenar ListButton
No olvide que la posicin correcta del cdigo es donde est indicando la flecha
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
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
Soleado Templado
Ir a la playa
rbol de Solucin
<5 7 evaluarDa >=5
Ir al trabajo
Llenar ListBox con tiempos
ContarElementos En ListBox
evaluarTiempo
<2 >=2
evaluarTiempo
0 1
idc_opciones
idc_solucion
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
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
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
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
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.
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
Probabilidades
Vamos a estudiar los conceptos de:
Sucesos excluyentes Sucesos independientes
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
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)?
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
Los sucesos bola roja, R, y bola verde, V, son mutuamente excluyentes, de modo que la probabilidad de que ocurra uno de ellos es
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
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.
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
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
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
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
Solucin 2
Solucin 3
Solucin 4
Universitario
Alianza
Haga un sistema experto que refleje este rbol y muestre las probabilidades y permita modificar los datos iniciales.
Universitario
Alianza