131
INTRODUCCION 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 específico. Antes de la aparición del ordenador, el hombre ya se preguntaba si se le arrebataría 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 también son conocidos como Sistemas Basados en Conocimiento, los cuales permiten la creación de máquinas que razonan como el hombre, restringiéndose a un espacio de conocimientos limitado. En teoría pueden razonar siguiendo los pasos que seguiría un experto humano (médico, analista, empresario, etc.) para resolver un problema concreto. Este tipo de modelos de conocimiento por ordenador ofrece un extenso campo de posibilidades en resolución de problemas y en aprendizaje. Su uso se extenderá ampliamente en el futuro, debido a su importante impacto sobre los negocios y la industria.

Sistemas Expertos Con Visual Prolog

Embed Size (px)

Citation preview

Page 1: Sistemas Expertos Con Visual Prolog

INTRODUCCION

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 específico.

Antes de la aparición del ordenador, el hombre ya se preguntaba si se le arrebataría 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 también son conocidos como Sistemas Basados en Conocimiento, los cuales permiten la creación de máquinas que razonan como el hombre, restringiéndose a un espacio de conocimientos limitado.

En teoría pueden razonar siguiendo los pasos que seguiría un experto humano (médico, analista, empresario, etc.) para resolver un problema concreto. Este tipo de modelos de conocimiento por ordenador ofrece un extenso campo de posibilidades en resolución de problemas y en aprendizaje. Su uso se extenderá ampliamente en el futuro, debido a su importante impacto sobre los negocios y la industria.

Page 2: Sistemas Expertos Con Visual Prolog

QUE ES UN SISTEMA EXPERTO

Existen varias formas de definirlos. Aquí listamos algunas de ellas:

1. Es un software que imita el comportamiento de un experto humano en la solución de un problema. Pueden almacenar conocimientos de expertos para un campo determinado y solucionar un problema mediante deducción lógica de conclusiones.

2. Programas que se realizan haciendo explicito el conocimiento en ellos, que tienen información específica de un dominio concreto y que realizan una tarea relativa a este dominio.

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

4. Programas que manipulan conocimiento codificado para resolver problemas en un dominio especializado en un dominio que generalmente requiere de experiencia humana.

5. Software que incorpora conocimiento de experto sobre un dominio de aplicación 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 simbólico

Arquitectura básica 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 clásica de representar el conocimiento en un sistema experto son las reglas.

Una regla es una estructura condicional que relaciona lógicamente la información contenida en la parte del antecedente con otra información contenida en la parte del consecuente.

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 información del problema actual en la base de hechos. El sistema empareja esta información con el conocimiento disponible en la base de conocimientos para deducir nuevos hechos.

Page 3: Sistemas Expertos Con Visual Prolog

Motor de inferencia. El sistema experto modela el proceso de razonamiento humano con un módulo conocido como el motor de inferencia. Dicho motor de inferencia trabaja con la información 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.

Subsistema de explicación. Una característica de los sistemas expertos es su habilidad para explicar su razonamiento. Usando el módulo del subsistema de explicación, un sistema experto puede proporcionar una explicación al usuario de por qué está haciendo una pregunta y cómo ha llegado a una conclusión. Este módulo proporciona beneficios tanto al diseñador del sistema como al usuario. El diseñador puede usarlo para detectar errores y el usuario se beneficia de la transparencia del sistema.

Interfaz de usuario. La interacción entre un sistema experto y un usuario se realiza en lenguaje natural. También es altamente interactiva y sigue el patrón de la conversación entre seres humanos. Para conducir este proceso de manera aceptable para el usuario es especialmente importante el diseño del interfaz de usuario. Un requerimiento básico del interfaz es la habilidad de hacer preguntas. Para obtener información fiable del usuario hay que poner especial cuidado en el diseño de las cuestiones.

Page 4: Sistemas Expertos Con Visual Prolog

LOGICA PROPOSICIONAL

La lógica de primer orden o lógica 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 través de los cuales puede relacionar estas proposiciones son la conjunción (y), la disyunción (o) y la implicación (si).

El lenguaje formal de la lógica proposicional es el Lenguaje de Primer Orden (LPO).

Los enunciados más básicos de LPO son los enunciados atómicos. Se corresponden a los enunciados más simples del español, los que consisten en algunos nombres conectados por algún predicado. Ejemplos de este tipo son Juan corrió, Juan vio a Ana y Ana regaló flores a Juan. En LPO, los enunciados atómicos son formados también combinando nombres (o constantes individuales, tal como suelen llamarse) y predicados.

Constantes individuales

Las constantes individuales son simplemente símbolos (nombres) que se usan para referir a algún objeto individual fijo. Por ejemplo, podríamos usar Juan como una constante individual para denotar una persona particular, o un 1 como una constante individual para denotar un número particular. En ambos casos, funcionan exactamente como los nombres funcionan en español.

Símbolos de predicado

Los símbolos de predicado son utilizados para denotar alguna propiedad de objetos o alguna relación entre objetos. Como en español, son expresiones que combinadas con nombres, forman enunciados atómicos. Pero no corresponden exactamente a los predicados de la gramática española. Consideremos en español :

Juan es padre de Ana.

En la gramática española esto es analizado como una oración 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 afirmación que involucra dos sujetos lógicos; los nombres Juan y Ana (que son constantes individuales) y un predicado, es padre de, que expresa una relación entre los referentes de los nombres.

Page 5: Sistemas Expertos Con Visual Prolog

Los enunciados del LPO tienen a veces dos o más sujetos lógicos, y el predicado es, por así decirlo, lo demás. Los sujetos lógicos son llamados los argumentos del predicado.

En este ejemplo se dice que el predicado es binario, puesto que toma dos argumentos.

En español, 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 número fijo de argumentos, una aridad fija. La aridad es un número que indica cuántas constantes individuales necesita el símbolo de predicado para formar una oración.

Si la aridad de un símbolo 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 afirmación.

Por ejemplo, podríamos utilizar el siguiente símbolo de predicado unario:

Mujer

para denotar la propiedad de ser mujer. Podríamos posteriormente combinar esto con el nombre

Ana

para lograr la expresión

Mujer(Ana),

En donde afirmamos que Ana es mujer.

Si la aridad de un predicado es 2 o más, entonces este predicado será utilizado para representar una relación entre sus argumentos, como :

Mayor(Juan, Ana)

para expresar una afirmación acerca de Juan y Ana, por ejemplo la afirmación de que Juan es más viejo que Ana. En LPO podemos tener símbolos de predicado con cualquier aridad

Page 6: Sistemas Expertos Con Visual Prolog

Enunciados atómicos

En LPO, las clases más simples de afirmaciones son aquellas que son realizadas con un predicado simple y el número apropiado de constantes individuales. Por ejemplo :

Mujer(Ana)

Mayor(Juan, Ana)

son enunciados atómicos, siempre que los nombres y símbolos de predicados en cuestión sean parte del vocabulario de nuestro lenguaje.

Como vemos, en los predicados utilizamos notación prefija: el predicado precede a los argumentos.

El orden de los nombres en un enunciado atómico es importante.

Así como María es mayor que Juan significa algo diferente de Juan es mayor que María, en LPO Mayor(María, Juan) también tiene un significado diferente que Mayor(Juan, María).

Enunciados atómicos 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 Pájaro se puede decir, de manera informal, que los siguientes son expresiones verdaderas :

Plumas (Albatros)

Pájaro (Albatros)

Evidentemente, Albatros es un símbolo 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)

Page 7: Sistemas Expertos Con Visual Prolog

Sin embargo, existe una forma más tradicional de expresar esta idea. Simplemente se combinan la primera expresión y la segunda y se dice que la combinación es verdadera.

Vuela (Albatros) y Pone_Huevos (albatros)

Sin embargo, en lógica se utiliza una notación 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 lógica es el concepto de consecuencia lógica. ¿Cuándo una oración, enunciado o afirmación se sigue lógicamente de otras? En realidad, una de las principales motivaciones en el LPO fue hacer la relación de consecuencia lógica tan clara como sea posible. Evitando la complejidad y la ambigüedad del lenguaje ordinario, esperamos que las consecuencias de nuestras afirmaciones sean más fácilmente reconocibles. ¿Qué queremos decir con consecuencia lógica? Unos pocos ejemplos ayudarán.

Un argumento es cualquier serie de enunciados en el que uno (llamado conclusión) se sigue o es apoyado por otros (llamados premisas o consecuentes). Ejm:

Todos los hombres son mortales. Sócrates es un hombre. Por consiguiente Sócrates es mortal.

Otro ejemplo, esta vez expresado en LPO, podría ser:

Mujer(A) y A=B.

Entonces ciertamente se sigue que Mujer(B).

Esto también podría 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 conclusión sea también verdadera. Nótese que podemos reconocer que este último enunciado es una consecuencia de los dos primeros sin saber que las premisas son en realidad, como cuestión de hecho, verdaderas. Pues la observación crucial es que si las premisas son verdaderas entonces la conclusión debe ser también verdadera.

Page 8: Sistemas Expertos Con Visual Prolog

INTRODUCCIÓN AL VISUAL PROLOG

¿Qué es Prolog?

Prolog es un lenguaje de programación declarativo basado en la lógica de primer orden, particularmente en una restricción de la forma clausal de la lógica. Fue desarrollado por Alain Colmerauer en 1972 en la Universidad de Marseille, Francia. Usa como regla de inferencia el “principio de resolución” propuesto por Robinson en 1965. La representación del dominio se realiza a través de hechos y reglas.

Decimos que es declarativo porque no es imperativo. Es decir, cada “línea de programa” Prolog es una declaración, no una orden. Se tiene así un conjunto de aseveraciones simbólicas, que expresan conocimientos de una situación real o ficticia. Para esto se usa la lógica 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 cómo resolver un problema dado paso a paso.

En otros términos, el programador debe saber resolver el problema antes de que la computadora pueda hacerlo.

Lenguaje Prolog

El programador de Prolog, por otro lado, sólo necesita proporcionar una descripción del problema y aterrizar las reglas para resolverlo. De allí, Prolog determina cómo encontrar una solución.

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 programación de un motor de inferencia de fácil uso.

Secciones:

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 minúsculas.

Page 9: Sistemas Expertos Con Visual Prolog

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 símbolos :

1. Una secuencia de letras, números o caracteres de subrayado en la cual la primera letra es minúscula. Ej. : tiene_lindas_piernas.

2. Una secuencia de caracteres encerrados por comillas dobles (“) usada en el caso que el símbolo contenga espacios o no comience con minúsculas. Ej. :

“Una persona es trabajadora”.

char : Acepta cualquier carácter, se representa encerrado entre comillas simples (‘) y consta de un solo carácter, por ejemplo ‘A’, ‘2’, ‘/’.

integer : Acepta números enteros en el rango de -32768 al 32767.

real : Acepta números reales, pueden contener signo, punto decimal y varios

dígitos decimales. También pueden tener una parte exponencial, pudiendo abarcar números desde +1e-307 a +1e+308, por ejemplo : 427054, -25000, 86.25, - 8.525e-203 o - 8411.25658545.

string : Acepta una secuencia de caracteres encerrados entre comillas dobles (“), por ejemplo : “esto también es un string”.

La diferencia entre el tipo symbol en 2, y los strings es la forma de representación interna de cada uno. El almacenamiento de los símbolos está implementado de tal manera que su búsqueda en las tablas de memoria es más rápida.

Además, los símbolos, tienen problemas para hacer inserciones en tiempo de ejecución. Su uso estará determinado por el tipo de aplicación que se realice.

Page 10: Sistemas Expertos Con Visual Prolog

PREDICATES (predicados) : En esta sección se definen como serán las relaciones entre los objetos del dominio (domains) y el valor que se les asignará en las cláusulas (clauses).

En una relación 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”.

También podemos definir un predicado solo con relacionar tipos predefinidos, como por ejemplo :

predicates

factorial (integer, real)

GOAL (meta u objetivo a buscar) : En esta sección es donde se indica explícitamente cuál es el objetivo o propósito del programa. Hay dos formas básicas de trabajar en VPI:

Goal interno : Especificando en el programa en su sección “Goal” un hecho a verificar. En este caso el mecanismo de búsqueda se detiene al encontrar el primer valor que lo cumpla, necesitando una indicación explícita de impresión en pantalla para su representación o visualización, si no está esa indicación, responde sólo con un mensaje de “True” o “False”, o no imprime mensajes.

Goal externo : Trabajando a través de la ventana de diálogo sin la sección “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 búsqueda se detendrá sólo al agotarse las cláusulas pertinentes. No necesita de órdenes especiales para visualizar los valores de variables hallados.

Trabajando de cualquiera de las dos formas los objetivos podrán ser tan complicados como información se tenga en las cláusulas.

Si el objetivo es encontrar una persona que trabaja, siendo X persona de acuerdo al criterio de determinación en la sección Clauses entonces:

trabaja (X) and write (“La persona que trabaja es”, X) and nl

Page 11: Sistemas Expertos Con Visual Prolog

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 idéntica instrucción en Pascal o el “print” de BASIC :

imprime un texto en la pantalla.

nl imprime solamente una secuencia de fin de línea.

El propósito de todo el conjunto es evaluar “trabaja (X)” e imprimir el resultado de ello con el mensaje entre comillas.

Las respuestas se darán a través de la ventana de diálogos o se deberá armar una interfaz diferente.

CLAUSES (Cláusulas 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 Diálogos. Poniendo en castellano qué valores asignamos a los predicados de nuestro ejemplo :

José sabe Ana sabe trabaja el que sabe y en turbo prolog :

clauses

sabe (José) %hecho.

sabe (Ana) %hecho.

trabaja (X) :- sabe (X). %regla

Donde % es un comentario

Nuestros primeros programas

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 edición de texto. Al grabarlo debemos ponerle la extensión .pro).

Para ejecutar vaya al menú Project-Test Goal (Probar meta).

Ejemplo 1

Page 12: Sistemas Expertos Con Visual Prolog

• 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 tratarán. (nondeterm significa que tiene más de una solución)

• 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 aplicación que ejecute algunas consultas a la BDC.

Page 13: Sistemas Expertos Con Visual Prolog

Ejemplo 2

• Se trata de calcular la densidad poblacional de X paises.

• Tenemos datos symbol y reales

• Tenemos predicados poblacion, area y densidad

• Como cláusulas poblacion y area son hechos con el mismo datos symbol y diferente dato numérico; 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 población 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 países.

Page 14: Sistemas Expertos Con Visual Prolog

Ejemplo 3

Domains

nino = symbol

Predicatesnondeterm nino(symbol)nondeterm juegan(nino,nino)

Clausesnino(a).nino(b).nino(c).juegan(X,Y):-nino(X),nino(Y),

X<>Y,write(X," juega vs. ",Y), nl,fail.

Goaljuegan(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 línea

write

Escribe la expresión del interior de la función

Ejemplo 4

Domainsnombre,direccion,telefono=stringedad=integer

Predicatesimprime nondeterm persona(nombre,direccion,telefono,edad)

Clausesimprime:-persona(X,Y,Z,E),

write(X),nl,

Page 15: Sistemas Expertos Con Visual Prolog

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).

Goalimprime.

Ejemplo 5

domains c = charpredicates imprimir(c)clauses imprimir('N'):- write("FIN"). imprimir('S'):- write("HOLA PROLOG"),nl, write("\nDESEA CONTINUAR S/N = "), readchar(X), imprimir(X).goalimprimir('S').

Ejemplo 6

domains r = realpredicates nondeterm evaluar(r)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(_).

Page 16: Sistemas Expertos Con Visual Prolog

BACKTRACKING Y CORTE

Buscando las soluciones

Hasta ahora hemos venido manejando sólo objetos constantes, representados por sus nombres (pejerrey, pollo_asado, etc.). Sin embargo, la estructura que Prolog maneja más 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 jerárquicamente, y de manejo sencillo, tanto desde un punto de vista algebraico como desde un punto de vista informático.

Si representamos en forma de árbol un ejemplo básico como, es_padre_de(pablo, juan) que indica que Pablo es padre de Juan, tendríamos algo como:

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

Trabajaremos con el siguiente programa y sus reglas. Hemos omitido los dominios y las declaraciones formales de las secciones.

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).calorias(bife_chorizo,62).

Page 17: Sistemas Expertos Con Visual Prolog

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.

El control en Prolog

Por control se entiende la forma en que el lenguaje busca las respuestas a las cláusulas 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 cláusula objetivo o goal posee más de una regla unidas por conjunciones o disyunciones, éstas se toman de izquierda a derecha para ser resueltas de a una, mediante la aplicación 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 cláusula objetivo.La segunda de las normas enunciadas más 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 están 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 escomida(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 cláusula que la satisfaga (si la hay), que en este caso sería: entrada(antipasto).

con lo que E asume un primer valor tentativo (antipasto) que puede ser o no válido, dependiendo de todas las otras partes del goal. A la forma en que se van realizando los reemplazos la veremos con mayor detalle a continuación, y es la técnica conocida como backtracking o 'vuelta atrás'.

Page 18: Sistemas Expertos Con Visual Prolog

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 cláusulas dentro de la base de datos de hechos y reglas.

El BacktrackingPara obtener las soluciones a las cláusulas objetivo solicitadas, Prolog utiliza una técnica 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 búsqueda de datos de Prolog, totalmente invisible para el usuario.

De esta forma se verifica si existe cierto hecho determinado o si se cumple algún goal. Este mecanismo consiste en recorrer reiteradamente las cláusulas, 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 definición de plato_principal), y realizamos la pregunta

:- P, Q, R.

Prolog busca la solución, aplicando el borrado de las submetas, respetando las dos normas del control indicadas más 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 continúa 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 contradicción. De este modo, se borraría p1, luego p2, y así hasta terminar.

Sin embargo, todavía quedan posibilidades abiertas que no fueron tenidas en cuenta durante el proceso, como ser la segunda definición de P. Entonces se vuelve atrás, se reconsidera la última elección y se intenta borrar el término en cuestión de otra manera para tratar de obtener otra respuesta a la pregunta. Entonces, se toma la segunda definición de la regla P de la base de reglas (P :- a1, a2,..., an.) obteniendo, en este caso,

Page 19: Sistemas Expertos Con Visual Prolog

:- a1, a2,..., an, Q, R.

para borrar luego nuevamente todas las submetas del nuevo objetivo, incluyendo Q y R. Se continúa así hasta que no quede ningún punto de elección sin tener en cuenta.

Es importante observar que en el momento en que se efectúa una nueva elección intentar borrar una submeta, se deshacen todas las asignaciones y modificaciones realizadas a las demás submetas, entre la elección anterior y el momento actual. Esta vuelta atrás o retroceso es lo que se denomina backtracking. Para comprender más 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 sólo se agregan para numerar las reglas, y realizaremos la siguiente pregunta (conjunto inicial de metas):

:- plato_principal(P), P<>milanesa.

que equivale a decir cuáles 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 conjunción (y).

El proceso de resolución 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.

Page 20: Sistemas Expertos Con Visual Prolog

Esta rama es la que queda formada apenas Prolog comienza el análisis de la pregunta. Lo primero que se hace es, partiendo desde el nodo de más arriba hacia abajo, borrar plato_principal(P), reemplazándolo 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 definición 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 restricción, ya que la cláusula R1 asigna a la variable P el valor milanesa. En este nodo nos queda la nueva cláusula objetivo

:- P<>milanesa.

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 restricción ya indicada. Entonces, respetando dicha restricción, P toma el valor milanesa y obtenemos:

:- milanesa<>milanesa.

abreviado en el gráfico como mil<>mil, que al borrarse (solucionarse) produce un fallo.

Page 21: Sistemas Expertos Con Visual Prolog

Esto es lo que ocurre al realizarse los borrados de las submetas. Sin embargo, todavía no se consideraron otras reglas que podían reemplazar a las submetas borradas, ya que la base posee dos cláusulas 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 válidos. Estos valores serán los que Prolog nos irá mostrando en la ventana de resultados, de la siguiente manera:

P = bife_de_chorizoP = pollo_asado

Después 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 definición de plato_principal( ) para realizar el backtracking. Así se amplía el árbol para llegar finalmente a :

Page 22: Sistemas Expertos Con Visual Prolog

En esta nueva rama, se utiliza R7 para borrar la primer submeta de la cláusula objetivo original, y se borra la nueva submeta de las dos maneras posibles (R4 y R5).

Hemos encontrado así, a través de esta técnica, las cuatro soluciones posibles que se verán como

P = bife_de_chorizoP = pollo_asadoP = congrioP = 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 cláusula objetivo del nodo actual está vacía. En este caso nos encontramos frente a un éxito y la respuesta es la restricción actual C.

- · Se llega a alguna situación 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 pararía 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

Page 23: Sistemas Expertos Con Visual Prolog

donde, al borrar la meta bife_de_chorizo<>milanesa, nos queda el goal vacío, siendo esto un éxito cuya solución es la restricción C. Como ejemplo para el segundo caso podemos tomar el nodo

El Corte (!)Hemos visto que el borrado de un término del goal se hace en forma no determinista. Esto significa que se tienen en reserva en todo momento los diversos puntos de elección que se superaron para un posible retroceso posterior. La introducción del corte (representado en Turbo Prolog por un !) en una regla permite suprimir algunos de estos puntos de elección, 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 elección, para poder realizar los retrocesos.

- El borrado de la meta del corte “!' ” devuelve verdadero y suprime todos los puntos de elección que estaban almacenados, impidiendo el retroceso de las submetas anteriores a su aparición.

Por ejemplo, si encerramos entre corchetes los puntos de elección que vamos superando y al lado de éstos colocamos la lista de metas actual, al caso ya visto lo podemos modificar agregándole 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 elección y otra submeta

[plato_principal(P)] carne(P), P<>milanesa, !.

Page 24: Sistemas Expertos Con Visual Prolog

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 elección precedente, quitándoselo 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 sólo

[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 elección que había, no es posible realizar ningún retroceso. Por consiguiente, el árbol anterior se convierte en :

Page 25: Sistemas Expertos Con Visual Prolog

El borrado del ! tiene el efecto de suprimir todas las elecciones en espera, por lo que no se produce más 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 tendría la siguiente forma:

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

Page 26: Sistemas Expertos Con Visual Prolog

SISTEMAS EXPERTOS BASADOS EN REGLAS

Características de los Sistemas Expertos Basados en Reglas:Razonamiento guiado por las metas y encadenamiento hacia atrás. Una técnica de inferencia que usa las reglas IF-THEN para descomponer las metas en submetas más fáciles de probar.

Manejo de incertidumbre. La habilidad del SE para trabajar con reglas y datos que no son conocidos con precisión.

Razonamiento guiado por los datos y encadenamiento hacia adelante. Una técnica de inferencia que usa las reglas IF-THEN para deducir soluciones a un problema a partir de los datos iniciales disponibles.

Representación de datos. La forma en que los datos específicos a un problema dado, son almacenados y accesados por el SE.

Interfaz del usuario. La parte del SE que se usa para una interacción más amigable con el usuario.

Explicación. La habilidad del SE para explicar sus procesos de razonamiento y su uso en el cómputo de recomendaciones.

ReglasLas reglas de un SE normalmente toman el siguiente formato:

1 IF primera premisa AND3 segunda premisa AND4 ...5 THEN6 conclusión

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:

conclusión :- primera premisa, segunda premisa,….

Esto puede ser confuso pués la regla en prolog dice más THEN-IF que IF-THEN.

Si queremos representar en Prolog la regla:

1 IF2 familia es albatros AND3 color es blanco4 THEN

Page 27: Sistemas Expertos Con Visual Prolog

5 ave es albatros laysan

Tendríamos que escribir:ave(albatros_laysan) :-familia(albatros), color(blanco).Las siguientes reglas distinguen entre dos tipos de albatros y cisne. Todas son cláusulas 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_negrasYes

Observen que aún 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.

ImplementarLos días de la semana son:Lunes, martes, miercoles, jueves, viernes, sabado, domingoel tiempo puede ser

lluvioso, nublado, soleado, templadola temperatura puede ser

menor o igual a 24 o mayor a 24Si es de lunes a viernes

vamos al trabajoSi es sabado o domingo

si es lluvioso, nubladonos quedamos en casa

si es soleado, templado Si temperatura menor o igual a 24

vamos al parqueSi temperatura mayor a 24

vamos a la playa

Page 28: Sistemas Expertos Con Visual Prolog

Árbol de Deducción

Ejemplo previo de findall y buscar en listas

Solución de la Implementación de los días de la semana

Page 29: Sistemas Expertos Con Visual Prolog

Ejercicio

Page 30: Sistemas Expertos Con Visual Prolog

RECURSIVIDAD

Prolog es un lenguaje de programación para computación simbólica, no numérica, Especialmente adecuado para resolver problemas que involucran objetos y relaciones entre ellos.

Desarrollo de un Árbol de trabajo

progenitor(pilar,belen). progenitor(tomas,belen).progenitor(pilar,lucia).progenitor(belen,ana). progenitor(belen,pedro).progenitor(pedro,jose).progenitor(pedro,maria).

Progenitor es una relación§ pilar, belen son argumentos§ pilar es progenitor de belen§ Este programa consta de 7cláusulas§ Cada cláusula declara un hechosobre la relación progenitor§ progenitor(pilar,belen) es una instancia de la relación progenitor (arg1,arg2)

Definiendo relaciones mediante hechos:

?-progenitor(pilar,belen).yes?-progenitor(pilar,tomas).

Page 31: Sistemas Expertos Con Visual Prolog

no?-progenitor(X,pedro).X=belen?-progenitor(belen,X).X=pedroX=ana?progenitor(X,Y).X=pilarY=lucia;X=tomasY=belen;X=pilarY=belen;

Conclusiones- Una relación se define estableciendo las n-tuplas de objetos que satisfacen

la relación.- Un programa en Prolog consiste de cláusulas (terminan con un punto), que

implementan un predicado- Los argumentos de las relaciones pueden ser:- – Objetos concretos: pilar, tomas (átomos, constantes atómicas, constantes

individuales, etc)o Objetos genéricos: X, Y (variables)

- Las cuestiones (metas, goal) consisten en uno o más objetivos.- progenitor(X,ana),progenitor(X,pedro) es la conjunción 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- ¿Cómo extender nuestro programa “progenitor”?- p.e. la relación “descendencia”:

o añadir hecho: descendencia(lucia,pilar). óo 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 condición se

satisface. descendiente(Y,X):- progenitor(X,Y). consecuente antecedente

¿Cómo emplea Prolog las reglas?1. Formular pregunta: ?-descendiente(lucia,pilar)

Page 32: Sistemas Expertos Con Visual Prolog

2. ¿Existe algún 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 = pilar4. Obtenemos un caso particular de la regla:

descendiente(lucia,pilar):-progenitor(pilar,lucia)5. El objetivo inicial descendiente(lucia,pilar) ha sido sustituido por el objetivo progenitor(pilar,lucia)6. ¿Existe hecho que satisfaga el objetivo?: si conclusión de la regla es cierta.7. Respuesta: si

Extensiones a un programaContinuemos 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 YX es madre de Y siX es progenitor de Y yX es mujer

Conclusiones- Un programa Prolog puede ser extendido añadiendo nuevas cláusulas.- Tres tipos de cláusulas: hechos, reglas y consultas (cuestiones).- Los hechos declaran cosas que son siempre incondicionalmente ciertas.- Las reglas declaran cosas que son ciertas dependiendo de una condición

dada. Ambas implementan predicados.- Mediante cuestiones un usuario puede preguntar al programa Prolog qué

cosas son ciertas.- Una claúsula en Prolog consta de encabezamiento y cuerpo.

o El cuerpo es una lista de objetivos separadas por comas.o Las comas se entienden como conjunciones o disyunciones.

- Los hechos son cláusulas que poseen un encabezamiento (conclusión) y el cuerpo (condición) vacío. Las cuestiones sólo poseen cuerpo. Las reglas tienen encabezado y cuerpo no vacío.

- 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 sólo en el cuerpo, existen lecturas alternativas:- tienehijo(X):- progenitor(X,Y)

Para todo X e Ysi X es progenitor de Y entonces

Page 33: Sistemas Expertos Con Visual Prolog

X tiene hijoPara todo X

X tiene hijo sihay algún Y tal que X es progenitor de Y

Aplicando la Recursividad- Intentemos añadir la relación “antepasado” a nuestro programa ejemplo.- La relación consta de dos reglas:

o 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 además de limitado es extenso.- Necesitamos definir una regla que defina el antepasado a cualquier nivel de

profundidad.- Solución: definir la relación antepasado en términos de si misma.

Para todo X y Z,X es antepasado de Z siexiste Y tal que

(1) X es antepasado de Y e(2) Y es antepasado de Z.

La relación “antepasado” consiste así de dos reglas:antepasado(X,Z):- progenitor(X,Z).antepasado(X,Z):-padre(X,Y), antepasado(Y,Z).

Page 34: Sistemas Expertos Con Visual Prolog

Sistema de Menu

Pequeño ejemplo para comprender

Un Ejemplo más trabajado

RECURSIVIDAD

Page 35: Sistemas Expertos Con Visual Prolog

Explicación1. Usamos un dominio de tipo char aún cuanto pudo haber sido symbol o

string.2. El predicado menu implementado en la cláusula 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 carácter. Enviamos dicho carácter a la cláusula tarea.

3. tarea evalúa el contenido valor enviado en Opcion y ejecuta una tarea.4. Se invoca a la claúsula repite que se llama a si misma. Solo salimos cuando

pulsamos 3.

Cláusulas

Page 36: Sistemas Expertos Con Visual Prolog
Page 37: Sistemas Expertos Con Visual Prolog
Page 38: Sistemas Expertos Con Visual Prolog

Ejercicio: BDC con Sistema de Menu

Page 39: Sistemas Expertos Con Visual Prolog

Como debe verse el programa

Page 40: Sistemas Expertos Con Visual Prolog

FACTS Y DATABASE

sección FACTS - DATABASE Los hechos que se declaran aquí son dinámicos y pueden ser actualizados en tiempo de ejecución.FORMATO[GLOBAL] {FACTS | DATABASE} [- nombre de la base de datos][nocopy][{nondeterm|determ|single}] hecho_1[([Lista_Args_hecho_1])]...FACTSpadre(string, string)PREDICATESabuelo(string, string)CLAUSESpadre(juan, pepe).padre(juan, luis).padre(pepe, manolo).abuelo(X, Y):-padre(X, Z), padre(Z, Y).GOALassert(padre(pepe, beatriz)), assertz(padre(pepe, carlos)), asserta(padre(pepe, maria)), abuelo(juan, Y).

Ejemplo con Facts

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.

Page 41: Sistemas Expertos Con Visual Prolog

Ejemplo de un Diccionario hecho con DATABASE

ExplicaciónNuestra pequeña BDC es:

Page 42: Sistemas Expertos Con Visual Prolog

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 traducción al inglés; 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 traducción al ingles para guardarlo.

Usamos assert para ello y almacena en memoria no en físico. Para ello usamos otro predicado.

Page 43: Sistemas Expertos Con Visual Prolog
Page 44: Sistemas Expertos Con Visual Prolog

Otro Ejemplo: Un árbol Genealógico

Page 45: Sistemas Expertos Con Visual Prolog
Page 46: Sistemas Expertos Con Visual Prolog
Page 47: Sistemas Expertos Con Visual Prolog

INTRODUCCIÓN A LA PROGRAMACIÓN VISUAL

Instrucciones• Las aplicaciones visuales pueden ser de simple documento (SDI) o de

múltiple documento (MDI).• En ambas se pueden usar múltiples ventanas pero en la segunda están

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

Page 48: Sistemas Expertos Con Visual Prolog

Application expert – ficha general

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

Page 49: Sistemas Expertos Con Visual Prolog

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.

Page 50: Sistemas Expertos Con Visual Prolog

Se crea un archivo .PRO

Haga click en Window

Page 51: Sistemas Expertos Con Visual Prolog

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 diseño, para poner controles y para alinearlos.

Page 52: Sistemas Expertos Con Visual Prolog

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:

Page 53: Sistemas Expertos Con Visual Prolog

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:

Page 54: Sistemas Expertos Con Visual Prolog

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

Page 55: Sistemas Expertos Con Visual Prolog

EjecutarDebemos ejecutar para que se generen los controles.

Añadir códigoHacer click en el CODE EXPERT

Page 56: Sistemas Expertos Con Visual Prolog

Code expert1. Seleccionar en Event Type la opción CONTROL2. En Event or Item buscar IDC_CALCULAR3. Click en Add Clause para los 3 botones

El botón Add Clause cambia por Edit Clause. Haga click en él

Ventana de código – idc_calcular

1

2

3

Page 57: Sistemas Expertos Con Visual Prolog

Todo son clausulas; el cursor se ubica en la clausula que queríamos editar, el resto está hacia arriba. Ubicar el cursor a la derecha de la como indicada y pulsar ENTER.Añada el código que se indica.

idc_limpiar

Page 58: Sistemas Expertos Con Visual Prolog

idc_salir

DesarrollarHaga un programa que permita ingresar 3 números, los compare y muestre el mayor de los 3.

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

Dominios, predicados, clausulas

Page 59: Sistemas Expertos Con Visual Prolog

Se pudo usar , en lugar de and y ; en lugar de or Entre al archivo .PRO y añada lo que se indica. La sección entre llaves no se debe tocar ni modificar. Cierre y grabe añada la cláusula para el botón COMPARAR.

idc_comparar

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

Page 60: Sistemas Expertos Con Visual Prolog

OBJETOS DE LISTA

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 tamaño, sobretodo a

los ListButton

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 añaden, eliminan, cuentan, etc. elementos.

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

Forma de usoLos elementos se pueden añadir de uno en uno a un manejador de lbox:

lbox_add(MANEJADOR, “Suma”).

Los elementos se pueden añadir a partir de una lista (estructura de datos): Sea:

L=[“Suma”,”Resta”,”Multiplicación”,División”] 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 añadir a partir de un conjunto de cláusulas de un predicado empleando findall(X,Y)

Page 61: Sistemas Expertos Con Visual Prolog

Cargar predicado en Lista

La idea es llenar el ListBox llamado id_blanca con el contenido de una cláusula desde la creación de componentes de forma que cuando se ejecute la lista se vea llena

Código

1. Dominio de tipo symbol2. Predicado blanca con un objeto de tipo symbol

Id_blanca

1

2

3

4

Page 62: Sistemas Expertos Con Visual Prolog

3. Implementación de cláusulas blanca con artefactos de línea blanca como contenido

4. Uso de findall en la sección de creación de componentes.

Buscar en Predicado el contenido de Listas

id_licor e idc_resultado son ListBox. En el primero se verán 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 mostrarán en idc_resultado.

id_licor

id_resultado

Idc_buscar

Page 63: Sistemas Expertos Con Visual Prolog

Código

1. Predicado gusta con dos objetos symbol2. Cláusula que implementa el predicado gusta con nombres y el licor de su

agrado3. 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 través del predicado getSelIndex; Item “coge” el elemento de texto del manejador que se indica en función del Index de la selección 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 añade al ListBox idc_resultado.

1

2

3

4

Page 64: Sistemas Expertos Con Visual Prolog

Llenar Listas Dinámicamente

En este ejercicio lo importante es que el ListButton llamado idc_opc2 se llenará con una lista distinta de elementos en función de la elección 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”.

Código

idc_opc1 idc_opc2

idc_elegir

1

2

3

4

Page 65: Sistemas Expertos Con Visual Prolog

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

2. Se implementa el predicado llenar con dos cláusulas: 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 código se escribe en la sección de creación 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 cláusula llenar pasándole el valor de la variable no sin anteponer el hecho de que dicha cláusula maneja un control (WINDOW)

Aplicación 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.

Page 66: Sistemas Expertos Con Visual Prolog

Una vez diseñado ejecute la aplicación para que se añadan los controles en el código y puede escribir en la sección de creación de controles.

Dominios y predicados

idc_pais

idc_area

idc_pob

idc_densidad

idc_mostrar

Page 67: Sistemas Expertos Con Visual Prolog

Llenar ListButton• Cuando escriba este código cópielo en el block de notas por previsión.

Cualquier pequeña modificación en el tamaño o posición de los componentes reescribirá la sección de creación de componentes y se borrará el código que ha añadido.

• No cambie el tamaño del ListButton. Recuerde que esta es una versión no comercial con restricciones.

Código

Cláusulas

Por cambios en la versión, el código a partir de List mejor colocarlo después de endef y antes de !

Page 68: Sistemas Expertos Con Visual Prolog

Cláusula del botón mostrar

Cláusula del botón mostrar

Aplicación 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 añadirlas Ud. para lograr más claridad.

Page 69: Sistemas Expertos Con Visual Prolog

Dominios, predicados y cláusulas

Page 70: Sistemas Expertos Con Visual Prolog

Llenar ListButton

No olvide que la posición correcta del código es donde está indicando la flecha

Código para el botón Calcular

Ejercicio

Desarrolle en modo visual el programa de restaurant usado en el capítulo de BackTraking

Page 71: Sistemas Expertos Con Visual Prolog

Detalles

Los ListBox muestran Entradas, platos principales y postres de una BDC de 4 predicados: entrada, carne, pescado, postre. Al elegir una opción de cada ListBox se verá por debajo su precio y su valor calórico (usamos el evento selchange).

El segundo listBox muestra carnes y pescado.

Si hacemos click en Mostrar aparecen el costo total y el total de calorías del “combo” pedido.

Page 72: Sistemas Expertos Con Visual Prolog

Base de Conocimientos

tipo_plato(plato,precio,caloria)

El contenido de las cláusulas de tipo hechos es plato, precio, calorías.

Optimizar Árbol

Los días de la semana son:Lunes, martes, miercoles, jueves, viernes, sabado, domingoel tiempo puede ser

lluvioso, nublado, soleado, templadola temperatura puede ser

menor o igual a 24 o mayor a 24Si es de lunes a viernes

vamos al trabajoSi es sabado o domingo

si es lluvioso, nubladonos quedamos en casa

si es soleado, templado Si temperatura menor o igual a 24

vamos al parqueSi temperatura mayor a 24

vamos a la playa

Page 73: Sistemas Expertos Con Visual Prolog

Árbol de Deducción (evaluar index)

Árbol de Solución

Page 74: Sistemas Expertos Con Visual Prolog

idc_opciones

idc_solucion

Page 75: Sistemas Expertos Con Visual Prolog
Page 76: Sistemas Expertos Con Visual Prolog
Page 77: Sistemas Expertos Con Visual Prolog

LECTURA Y ESCRITURA DE FICHEROS EN VISUAL PROLOG

Escritura de clausulas en ficheros

Requerimientos• Hacer la interface• Ejecutarla para “construir” el código de los componentes.• Colocar el fichero “personas.txt” en la carpeta EXE del proyecto (puede

estar vacio)• Predicado para leer fichero: CONSULT• Predicado para grabar en fichero: SAVE

Dominios y Predicado de datos

Esto va al inicio, sección de dominios (a crearse)

idc_nombre

idc_edad

Idc_guardar

Los 2 objetos debajo son EDIT

Page 78: Sistemas Expertos Con Visual Prolog

Esto va en la sección de creación de componentes.

Leer fichero al ejecutar proyectoLuego del código de construcción de los componentes (asumir este predicado como el evento load de otras aplicaciones), colocar la siguiente línea:

consult("PERSONAS.TXT",datos),

Que indica que los datos de dicha base de conocimientos se almacenaran en la BC de memoria llamada datos

Código del botón Guardar

Page 79: Sistemas Expertos Con Visual Prolog

Eliminar clausulas en ficheros

Requerimientos• Hacer la interface• Ejecutarla para “construir” el código 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

En la sección de creación de componentes

id_lista (ListBox)

id_borrar

Page 80: Sistemas Expertos Con Visual Prolog

Código del botón Borrar

Explicacióndatabase-datos

persona(s,s) %nombre,edad

Persona es un predicado que podrá cambiar dinámicamente usando assert para añadir 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 añaden 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

Page 81: Sistemas Expertos Con Visual Prolog

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 hipótesis de independencia, utilizadas para reducir la complejidad de los cálculos. Como resultado, en las primeras etapas de los sistemas expertos, la probabilidad fue considerada como una medida de incertidumbre poco práctica.

La mayoría de las críticas a los métodos probabilísticos se basaban en el altísimo número de parámetros necesarios, la imposibilidad de una asignación o estimación precisa de los mismos, o las hipótesis poco realistas de independencia.

Problema Probabilístico• El problema siguiente muestra un análisis histórico de 200 días sobre el

número de consultas diarias realizadas a un sistema de información empresarial (EIS) residente en un servidor central.

• Se sabe que el número de consultas diarias va de 0 a 5 por lo que las frecuencias relativas serían A días de 0 consultas/total de días, B días de 1 consulta/total de días ….. F días de 5 consultas/total de días.

• Por ejemplo:

CONSULTAS DIAS FREL FACUM

0 10 0,05 0,05

1 25 0,125 0,175

2 50 0,25 0,425

3 50 0,25 0,675

4 40 0,2 0,875

5 25 0,125 1

200

Page 82: Sistemas Expertos Con Visual Prolog

Esta función de probabilidad la creamos en Prolog de la siguiente forma: domainsi=integerr=real predicatesiniciofuncion(i,i,i,i,i,i,r) clausesinicio:-write("Ingrese la cantidad de días con 0 solicitudes : "),readreal(A),nl,write("Ingrese la cantidad de días con 1 solicitudes : "),readreal(B),nl,write("Ingrese la cantidad de días con 2 solicitudes : "),readreal(C),nl,write("Ingrese la cantidad de días con 3 solicitudes : "),readreal(D),nl,write("Ingrese la cantidad de días con 4 solicitudes : "),readreal(E),nl,write("Ingrese la cantidad de días con 5 solicitudes : "),readreal(F),nl,funcion(A,B,C,D,E,F,Prob),write("El número 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. goalinicio.

ProbabilidadesEl concepto de probabilidad resulta familiar a cualquier profesional. Sin embargo, una definición precisa exige considerar la naturaleza matemática de dicho concepto. La probabilidad de ocurrencia de un determinado suceso podría definirse como la proporción de veces que ocurriría dicho suceso si se repitiese un experimento o una observación en un número grande de ocasiones bajo condiciones similares. Por definición, entonces, la probabilidad se mide por un número entre cero y uno: si un suceso no ocurre nunca, su probabilidad asociada es cero, mientras que si ocurriese siempre su probabilidad sería igual a uno. Así, las probabilidades suelen venir expresadas como decimales, fracciones o porcentajes.

La definición anterior de probabilidad corresponde a la conocida como definición frecuentista. Así, a partir de una población con N elementos, de los cuales k presentan una característica A, se estimará la probabilidad de la característica A como (A) = k/N. Así, por ejemplo, en una población de 100 pacientes, 5 de los cuales son diabéticos, la probabilidad de padecer diabetes p(Diabetes) se estimará como el cociente 5/100= 0.05.

Page 83: Sistemas Expertos Con Visual Prolog

Es conveniente conocer algunas de las propiedades básicas del cálculo 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 fenómeno determinado tiene dos posibles resultados A y B mutuamente excluyentes (es decir, que no pueden darse de forma simultánea, 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 extensión de la ley aditiva anterior al caso de más de dos sucesos mutuamente excluyentes A, B, C… indica que:

Consideremos, como ejemplo, un servicio de urología en el que el 38,2% de los pacientes a los que se les practica una biopsia prostática presentan una hiperplasia benigna (HB), el 18,2% prostatitis (PR) y en un 43,6% el diagnóstico es de cáncer (C). La probabilidad de que en un paciente que se somete a una biopsia de próstata no se confirme el diagnóstico de cáncer prostático será igual a:

Es decir, en un 56,4% de los casos se logra descartar un diagnóstico maligno. De modo equivalente, la probabilidad anterior podría haberse calculado como la probabilidad del suceso contrario al del diagnóstico de cáncer

Page 84: Sistemas Expertos Con Visual Prolog

Nótese la importancia del hecho de que los sucesos anteriores sean mutuamente excluyentes. Sin esta condición, la ley de adición no será válida. 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 infección adquirida en el exterior, mientras que el 13,7% adquieren una infección durante su estancia en el hospital. Se conoce además que el 1,5% de los enfermos ingresados en dicha unidad presentan una infección de ambos tipos.

¿Cuál será entonces la probabilidad de que un determinado paciente presente una infección de cualquier tipo en UCI? Para realizar el cálculo, si se suman simplemente las probabilidades individuales (0,069+0,137) la probabilidad de un suceso doble (infección comunitaria y nosocomial) se estará evaluando dos veces, la primera como parte de la probabilidad de padecer una infección comunitaria y la segunda como parte de la probabilidad de adquirir una infección en la UCI.

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

Por lo tanto, si dos o más 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 común.

Es decir, 19 de cada 100 enfermos registrará alguna infección (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 fenómeno puede hacer más o menos probable la aparición 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 simultáneamente es igual a:

Page 85: Sistemas Expertos Con Visual Prolog

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

Desarrollo de 1 casoSupongamos, 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 población. 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 población de estudio es:

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

Y un no fumador:

Page 86: Sistemas Expertos Con Visual Prolog

En el ejemplo, se constata por lo tanto que la incidencia de la enfermedad es diferente en la población 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 población de estudio ?

EjercicioDesarrolle una aplicación en Visual prolog que satisfaga la tabla 1. Los datos Fumadores – Enfermos / Fumadores – Sanos y No Fumadores – Enfermos / No Fumadores Sanos deberán ingresarse al programa.El programa calculará las 3 funciones expresadas en la diapositiva 10 así como la función de la pregunta que se hace al final de dicha dispositiva

Los botones y las etiquetas pueden tener cualquier nombre. Al hacer click en calcular hace las sumatorias en los Edit que son de sólo lectura. Cuando selecciona una opción del ListBox se muestra la probabilidad en el Edit de porcentaje.

Idc_n1 Idc_n2

Idc_n3 Idc_n4

Idc_t1

Idc_t2

Idc_t3 Idc_t4 Idc_total

Idc_resultado

Idc_opcion

Page 87: Sistemas Expertos Con Visual Prolog

Dominios y predicados

Clausulas

Page 88: Sistemas Expertos Con Visual Prolog

Sección de creación de componentes

Evento selchange del ListBox

Page 89: Sistemas Expertos Con Visual Prolog

Botón calcular

Sucesos excluyentes e independientes

Sucesos mutuamente excluyentes

Excluir significa “dejar fuera”, de manera que dos sucesos serán excluyentes o mutuamente excluyentes si ellos no tienen elementos comunes (es decir uno excluye al otro. Asumamos que existe en una urna 5 bolas azules, 4 rojas y 3 verdes. Supongamos que se elige una bolita al azar, entonces hay tres tipos de sucesos que son de interés

Page 90: Sistemas Expertos Con Visual Prolog

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

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

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

Ahora bien, nos preguntamos ¿cuál es la probabilidad de sacar una bolita roja o una bolita azul?

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

Sucesos independientesNos 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 reposición. Esto significa que sacamos la primera bolita, anotamos su color, y la regresamos a la urna, y luego hacemos la segunda extracción.

Page 91: Sistemas Expertos Con Visual Prolog

Definamos el suceso “la primera bolita extraída fue de color azul, que llamaremos suceso A1; y definamos el suceso “la segunda bolita extraída fue de color azul”, que llamaremos A2.

Queremos calcular la probabilidad del siguiente suceso “la primera bolita sea azul y la segunda bolita también sea azul”.

En términos de nuestra notación 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 extracción.

12 12 = 144

Ahora vamos a calcular las formas diferentes de obtener una bola azul en la primera extracción y una bola azul en la segunda extracción:

5 5 = 25

Luego la probabilidad de obtener dos bolitas azules de dos extracciones con reposición (con reemplazo) es

Por otro lado, la probabilidad de que en la primera extracción la bolita sea azul, esto es

Una vez repuesta la bolita, la probabilidad de sacar en la segunda extracción una bolita azul, esto es

Page 92: Sistemas Expertos Con Visual Prolog

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

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 reposición (sin reemplazo). Esto significa que una vez que hagamos la primera extracción, la bolita no es devuelta a la urna, o sea que en la segunda extracción 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, ¿cómo la calculamos?

Como antes, utilicemos nuestros cuadraditos para saber todos los posibles resultados de estas dos extracciones sin reposición

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

5 4 = 20Luego la probabilidad de A1 y R2 es

Con el ejemplo anterior queremos decir que cualquier suceso que dependa de la primera extracción afectará a cualquier otro suceso que dependa de la segunda extracción, y por lo tanto ellos no serán independientes (se dice que son dependientes)

Page 93: Sistemas Expertos Con Visual Prolog

A modo de ejemplo, calcular la probabilidad de que (siempre sin reemplazo) en la primera extracción salga bolita verde (V1) y en la segunda extracción salga bolita verde (V2)

EjercicioHaga un programa de menú que permita tener 3 formularios y en cada uno ingresar N bolas rojas, verdes y azules (3 edit) y muestreFormulario 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 reposición.Formulario 3: La probabilidad de que sea de X color la primera e Y color la segunda sin reposición.

Sistema de Diagnóstico

El sistema lo hemos hecho en Excel para tener una idea de lo que queremos y luego lo hemos resuelto de 2 formas usando Visual Basic para aplicaciones como una forma de mostrar que los Sistemas Expertos se pueden desarrollar con cualquier lenguaje siempre que se cumpla con la forma lógica proposicional.

Base de Conocimientos

Page 94: Sistemas Expertos Con Visual Prolog

Se tienen 3 enfermedades que tienen 10 síntomas, algunos de los cuales son comunes a 2 o más enfermedades. Dado un paciente que presenta algunos de estos síntomas, ¿Cuál es la probabilidad de padecer cualquiera de las enfermedades?. Nótese que en la parte inferior se suma la cantidad de síntomas de cada enfermedad.

Datos de Entrada

A la derecha se coloca con una “X” los síntomas del paciente.

Motor de Inferencia

ES la parte del sistema que “piensa” la solución. En este caso hemos usado la función SI de Excel. Abajo contamos las coincidencias y calculamos la probabilidad.

Page 95: Sistemas Expertos Con Visual Prolog

Solución hecha en Visual Basic para Aplicaciones

Para comparar los resultados se han ingresado los mismos síntomas que en el ejemplo con Excel, pero pudiera ingresarse con una “X” cualquier otro síntoma.

Page 96: Sistemas Expertos Con Visual Prolog

En el código los valores de los cuadros de texto se almacenarán en variables “a”, “b”. etc. Tal como se muestra en la imagen.

Se crea una función por cada enfermedad en un módulo, para tomar las “X” que coindicen.

a

b

c

d

e

f

g

h

i

j

Page 97: Sistemas Expertos Con Visual Prolog
Page 98: Sistemas Expertos Con Visual Prolog

Se crean funciones para calcular la probabilidad en función del número de síntomas de cada enfermedad.

Y el código del botón para enviar los datos a las funciones y mostrar los resultados

Page 99: Sistemas Expertos Con Visual Prolog

EjercicioHacer el programa en Visual Prolog.

Page 100: Sistemas Expertos Con Visual Prolog

PROBABILIDAD CONDICIONAL

Probabilidad Condicional

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=10A^B=2A+B+C=20

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

EjemploDe 300 estudiantes de Ciencias Económicas, 100 cursan Estadística y 80 cursan Historia Económica. Estas cifras incluyen 30 estudiantes que cursan ambas materias.

Diseño Inicial

Rellenando

Page 101: Sistemas Expertos Con Visual Prolog

a) ¿Cuál es la probabilidad de que un estudiante elegido aleatoriamente curse Estadística o Historia Económica 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 Económica I, dado que cursa Estadística?d) ¿Qué probabilidad hay de que al elegir un estudiante al azar curse Estadística, dado que cursa Historia Económica I?

a) ¿Cuál es la probabilidad de que un estudiante elegido aleatoriamente curse Estadística o Historia Económica 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,333P(HE) = 80/300 = 0,267P(E ^ HE) = 30/300 = 0,100P(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,667P(~HE) = 220/300 = 0,733P(~E ^ HE) = 270/300 = 0,900P(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 Económica I, dado que cursa Estadística?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 Estadística, dado que cursa Historia Económica I?Se pide P(E/HE).P(E/HE) = P(E ^ HE)/P(HE) = 0,100/0,267 = 0,3745 Arboles de solución- Ejemplo

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

Page 102: Sistemas Expertos Con Visual Prolog

P(chica)=P(I)*P(chica)+P(F)*P(chica)=0.9*0.3+0.1*0.6=0.69

Problema Resuelto en Visual Prolog

Dominios y predicados

Page 103: Sistemas Expertos Con Visual Prolog

Clausulas

Page 104: Sistemas Expertos Con Visual Prolog

Botón Calcular

Page 105: Sistemas Expertos Con Visual Prolog

BIBLIOGRAFIA

Adarraga, Pablo. Zaccagnini José Luis. "Psicología e Inteligencia Artificial". Editorial Trotta. 1994.

Randall Scott. A Guide to Artificial Intelligence with Visual Prolog. Outskirts Press (19 de enero de 2010)

Visual Prolog Version 5.x Language Tutorial (c) Copyright 1986-2001 Prolog Development Center A/S H.J. Holst Vej 3-5C, DK - 2605 Broendby, Copenhagen Denmark

Artificial Intelligence through Prolog by Neil C. Rowe Artificial Intelligence through Prolog by Neil C. Rowe Prentice-Hall, 1988,

ALVARADO CALLE, Hamyl Aurelio; ORDINOLA CASTRO, Samuel. Universidad César Vallejo Facultad de Ingeniería Escuela de Ingeniería de Sistemas “sistema experto vía web para mejorar las consultas y diagnóstico de infecciones de transmisión sexual del consultorio médico de la universidad césar vallejo” tesis profesional. TRUJILLO – PERU, 2008.