Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Marco Terico
1.1 Introduccin
QU ES UN SISTEMA BASADO EN EL CONOCIMIENTO?
Los sistemas basados en el conocimiento son el resultado de un largo proceso de
investigacin realizado por los cientficos en el rea de la Inteligencia Artificial, cuando, en
los aos setenta, comenzaron a comprender que la capacidad de un programa de ordenador
para resolver problemas no reside en la expresin formal ni en los esquemas lgicos de
inferencia que emplea sino en el conocimiento que posee.
Un experto es alguien que posee unos determinados conocimientos y experiencia en un
campo de la actividad humana y es capaz de aplicarlos con rapidez y eficiencia en la
resolucin de tareas diferentes aunque no le hayan sido encomendadas con anterioridad,
pero que caen dentro de su dominio.
As, un sistema basado en el conocimiento es un cuerpo de programas de ordenador que
intenta imitar e incluso superar en algunas situaciones a un experto humano en un mbito
concreto de su actividad. No pretende, en absoluto, reproducir el pensamiento humano, sino
simplemente la pericia de un profesional competente (tngase en cuenta que para construir
un SBC se suele contar con grandes expertos en la materia que incorporan su conocimiento
al sistema). Esta pretensin es ms sencilla ya que en algunos campos reducidos los expertos
trabajan siguiendo reglas, aunque, generalmente, no sean conscientes de ello. En aquellos
campos en los que no sea necesario aplicar la intuicin ni el sentido comn, los sistemas
basados en el conocimiento han conseguido notables xitos, consiguiendo en ocasiones ser
ms regulares y rpidos que los propios expertos.
1.2 Prolog
QU ES PROLOG?
Prolog , del Frances :Programation en Logique. Es el lenguaje declarativo, quien a partir de
los datos introducidos deduce nuevos hechos y resuelve el problema automticamente.
PROLOG tiene incluido, por tanto, un motor de inferencia que se encarga de realizar
bsquedas en su base de hechos.
HISTORIA
Se trata de un lenguaje de programacin ideado a principios de los aos 70 en la universidad
de Aix-Marseille por los profesores Alain Colmerauer y Phillipe Roussel. Inicialmente se
trataba de un lenguaje totalmente interpretado hasta que, a mediados de los 70, David H.D.
Warren desarroll un compilador capaz de traducir Prolog en un conjunto de instrucciones
de una mquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM.
Desde entonces Prolog es un lenguaje semi-interpretado.
Prolog se enmarca en el paradigma de los lenguajes lgicos, lo que lo diferencia
enormemente de otros lenguajes ms populares tales como Fortran, Pascal, C, Java.
PROGRAMACIN EN PROLOG
Los programas en Prolog se componen de clusulas de Horn que constituyen reglas del tipo
"modus ponendo ponens", es decir, "Si es verdad el antecedente, entonces es verdad el
consecuente". No obstante, la forma de escribir las clusulas de Horn es al contrario de lo
habitual. Primero se escribe el consecuente y luego el antecedente. El antecedente puede
ser una conjuncin de condiciones que se denomina secuencia de objetivos. Cada objetivo se
separa con una coma y puede considerarse similar a una instruccin o llamada a
procedimiento de los lenguajes imperativos. En Prolog no existen instrucciones de control.
Su ejecucin se basa en dos conceptos: la unificacin y el backtracking.
Gracias a la unificacin, cada objetivo determina un subconjunto de clusulas susceptibles de
ser ejecutadas. Cada una de ellas se denomina punto de eleccin. Prolog selecciona el primer
punto de eleccin y sigue ejecutando el programa hasta determinar si el objetivo es
verdadero o falso.
En caso de ser falso entra en juego el backtracking, que consiste en deshacer todo lo
ejecutado situando el programa en el mismo estado en el que estaba justo antes de llegar al
punto de eleccin. Entonces se toma el siguiente punto de eleccin que estaba pendiente y
se repite de nuevo el proceso. Todos los objetivos terminan su ejecucin bien en xito
("verdadero"), bien en fracaso ("falso").
GRAFO
sintoma(acidezEstomacal,gastritis).
% enfermedad: Sinusitis
sintoma(fiebre,sinusitis).
sintoma(congestionSecrecionNasal,sinusitis).
sintoma(dolorCabeza,sinusitis).
sintoma(tos,sinusitis).
%-------------------------------------------------------------------% medicamento(X,Y) = X es medicamento de Y
%-------------------------------------------------------------------% enfermedad: Neumonia
medicamento(ibuprofeno ,neumonia).
medicamento(azitromicina,neumonia).
medicamento(claritromicina,neumonia).
medicamento(amoxicilina,neumonia).
medicamento(dextrometorfano,neumonia).
% enfermedad: Tuberculosis
medicamento(ibuprofeno ,tuberculosis).
medicamento(complejoB,tuberculosis).
medicamento(pirazinamida,tuberculosis).
medicamento(ribavirina,tuberculosis).
medicamento(dextrometorfano,tuberculosis).
% enfermedad: Hepatitis B
medicamento(ibuprofeno,hepatitisB).
medicamento(ondansetron,hepatitisB).
medicamento(omeprazol ,hepatitisB).
medicamento(timosina ,hepatitisB).
medicamento(entecavir,hepatitisB).
% enfermedad: Gastritis
medicamento(almax ,gastritis).
medicamento(ondansetron,gastritis).
medicamento(omeprazol ,gastritis).
medicamento(ribavirina_l,gastritis).
medicamento(ridocaina ,gastritis).
% enfermedad: Sinusitis
medicamento(ibuprofeno,sinusitis).
medicamento(ampicilina,sinusitis).
medicamento(clindamicina ,sinusitis).
medicamento(amoxicilina,sinusitis).
medicamento(dextrometorfano,sinusitis).
%--------------------------------------------------------% tiene_sintoma(X,Y) = paciente X tiene sintoma de Y
%--------------------------------------------------------tiene_sintoma(juan,escalofrios).
tiene_sintoma(juan,tos).
tiene_sintoma(pedro,escalofrios).
tiene_sintoma(ana,fiebre).
tiene_sintoma(ana,tos).
tiene_sintoma(maria,ictericia).
tiene_sintoma(maria,vomitos).
tiene_sintoma(maria,cansancio).
tiene_sintoma(carlos,fiebre).
tiene_sintoma(carlos,dolorParteAltaAbdomen).
tiene_sintoma(carlos,nauseas).
% especialidad(X) = X es especialidad
% -------------------------------------------------------------------especialidad(neumologia).
especialidad(hepatologia).
especialidad(otorinolaringologia).
especialidad(gastroenterologia).
especialidad(medicinaGeneral).
%---------------------------------------------------------
% doctor(X) = X es doctor
%--------------------------------------------------------doctor(ramonMendoza).
doctor(luisPerez).
doctor(jennyCornejo).
doctor(cesarHernandez).
doctor(mariluPeralta).
doctor(jaimeParra).
doctor(marcoMollo).
doctor(rosaCasavilca).
% especialista_en(X,Y) = X es especialista en Y(especialidad)
%----------------------------------------------------------------especialista_en( ramonMendoza ,neumologia).
especialista_en( luisPerez ,hepatologia).
especialista_en( jennyCornejo ,otorinolaringologia).
especialista_en( jennyCornejo ,medicinaGeneral).
especialista_en( jennyCornejo ,gastroenterologia).
especialista_en( cesarHernandez ,gastroenterologia).
especialista_en( mariluPeralta ,medicinaGeneral).
especialista_en( jaimeParra ,otorinolaringologia).
especialista_en( marcoMollo ,neumologia).
especialista_en( rosaCasavilca ,medicinaGeneral).
especialista_en( rosaCasavilca, neumologia).
% tratado_en(X,Y) = X(enfermedad) es tratado en Y(especialidad)
%------------------------------------------------------------------tratado_en(neumonia,neumologia).
tratado_en(hepatitisB,hepatologia).
tratado_en(sinusitis,otolaringologia).
tratado_en(gastritis,gastroenterologia).
tratado_en(tuberculosis,medicinaGeneral).
tratado_en(tuberculosis,neumologia).
hace_bien(verduracocida,neumonia).
hace_bien(papaamarilla,neumonia).
hace_bien(pollohervido,neumonia).
hace_bien(aguacaliente,neumonia).
hace_bien(eucalipto,neumonia).
hace_bien(miel,neumonia).
hace_bien(apio,neumonia).
hace_bien(zapallo,neumonia).
hace_bien(zanahoria,neumonia).
% enfermedad: Gastritis
hace_bien(verduracocida,gastritis).
hace_bien(papaamarilla,gastritis).
hace_bien(pollohervido,gastritis).
hace_bien(aguacaliente,gastritis).
hace_bien(eucalipto,gastritis).
hace_bien(miel,gastritis).
hace_bien(apio,gastritis).
hace_bien(zapallo,gastritis).
hace_bien(zanahoria,gastritis).
hace_bien(mantequilla,gastritis).
hace_bien(leche,gastritis).
% enfermedad: sinusitis
hace_bien(aguacaliente,sinusitis).
hace_bien(eucalipto,sinusitis).
hace_bien(apio,sinusitis).
hace_bien(zapallo,sinusitis).
hace_bien(zanahoria,sinusitis).
hace_bien(mantequilla,sinusitis).
hace_bien(limon,sinusitis).
hace_bien(harinadetrigo,sinusitis).
% enfermedad: tuberculosis
hace_bien(verduracocida,tuberculosis).
hace_bien(papaamarilla,tuberculosis).
hace_bien(pollohervido,tuberculosis).
hace_bien(aguacaliente,tuberculosis).
hace_bien(eucalipto,tuberculosis).
hace_bien(lecheSoya,tuberculosis).
hace_bien(platano,tuberculosis).
hace_bien(zapallo,tuberculosis).
hace_bien(zanahoria,tuberculosis).
hace_bien(limon,tuberculosis).
hace_bien(harinadetrigo,tuberculosis).
hace_bien(mantequilla,tuberculosis).
% enfermedad: hepatitis B
hace_bien(apio,hepatitisB).
hace_bien(zapallo,hepatitisB).
hace_bien(zanahoria,hepatitisB).
hace_bien(limon,hepatitisB).
hace_bien(harinadetrigo,hepatitisB).
hace_bien(mantequilla,hepatitisB).
ingredientePlatillo(verduracocida).
ingredientePlatillo(aguacaliente).
ingredientePlatillo(eucalipto).
ingredientePlatillo(miel).
ingredientePlatillo(apio).
ingredientePlatillo(zapallo).
ingredientePlatillo(zanahoria).
ingredientePlatillo(platano).
ingredientePlatillo(lecheSoya).
ingredientePlatillo(trigo).
ingredientePlatillo(arverjasSecas).
ingredientePlatillo(garbanzo).
ingredientePlatillo(kiwicha).
ingredientePlatillo(huevo).
ingredientePlatillo(cebollaPicada).
ingredientePlatillo(leche).
ingredientePlatillo(limon).
ingredientePlatillo(harinadetrigo).
ingredientePlatillo(mantequilla).
ingredientePlatillo(carne).
%------------------------------------------------------------------% ingrediente(X,Y) = X es ingrediente del plato Y
%------------------------------------------------------------------ingrediente(papaamarilla,sopaDieta).
ingrediente(pollohervido,sopaDieta).
ingrediente(verduracocida,sopaDieta).
ingrediente(aguacaliente,teEucalipto).
ingrediente(eucalipto,teEucalipto).
ingrediente(miel,teEucalipto).
ingrediente(apio,sopadeverduras).
ingrediente(zapallo,sopadeverduras).
ingrediente(zanahoria,sopadeverduras).
ingrediente(platano,chapo).
ingrediente(lecheSoya,chapo).
ingrediente(aguacaliente,chapo).
ingrediente(trigo,shambar).
ingrediente(arverjasSecas,shambar).
ingrediente(garbanzo,shambar).
ingrediente(kiwicha,tortillaKiwicha).
ingrediente(huevo,tortillaKiwicha).
ingrediente(cebollaPicada,tortillaKiwicha).
ingrediente(papaamarilla,purdepapas).
ingrediente(leche,purdepapas).
ingrediente(aguacaliente,purdepapas).
ingrediente(limon,pasteldelimon).
ingrediente(harinadetrigo,pasteldelimon).
ingrediente(mantequilla,pasteldelimon).
ingrediente(cebollaPicada,empanada).
ingrediente(mantequilla,empanada).
ingrediente(harinadetrigo,empanada).
ingrediente(carne,empanada).
%===================================================================
%ESPECIFICACION DE REGLAS
%===================================================================
:-
buscar_medicamento(X,M)
doctor_especialista(Y,X) :- especialista_en(Y,Z),tratado_en(X,Z).
buscar_especialista(X,Y):-sintoma(X, E), doctor_especialista(Y,E).
buscar_especialista([X|Xs],Y ) :- buscar_especialista(X,Y) ; buscar_especialista(Xs,Y).
%------------------------------------------------------------------%paciente X puede atenderse con el medico Y
%------------------------------------------------------------------puede_atenderse(X,Y):- findall(S,tiene_sintoma(X,S),L),buscar_especialista(L,Y ).
%---------------------------------------------------------------%el medico P trata los sintomas S
%---------------------------------------------------------------trata_sintoma(P,S):-doctor_especialista(P,E),findall(Y,sintoma(Y,E),L),sinDuplicados(L,S).
%---------------------------------------------------------------%medico P receta medicamentos M
%---------------------------------------------------------------receta_medicamento(P,M):- doctor_especialista(P,E),medicamento(M,E).
%---------------------------------------------------------------%medico P trata cantidad de sntomas C
%---------------------------------------------------------------tratar_cant_sintoma(P,C):-doctor_especialista(P,E),totalSintoma(E,C).
%---------------------------------------------------------------%lista de platillos L con bueno para enfermedad E
%---------------------------------------------------------------alivia_mal1(P,E):- ingrediente(Z,P),hace_bien(Z,E).
alivia_mal(L,E):- enfermedad(E),findall(PL,alivia_mal1(PL,E),LL),sinDuplicados(LL,L).
%--------------------------------------------------------------------%enfermedad E puede encontrar platillo que le alivie en restaurante R
%--------------------------------------------------------------------%buscar_restaurante(P,R).
rest_plato([],[]).
rest_plato(K,X) :- buscar_restaurante(X,R).
rest_plato(K,[X|Xs]) :- rest_plato(K,X),rest_plato(K,Xs).
encontrar_platillo_bueno(E,K):- alivia_mal(L,E),rest_plato(K,L).
%---------------------------------------------------------------%platillo P es malo para enfermedad E
%---------------------------------------------------------------inadecuado_para_mal(P,E):- ingrediente(Z,P),hace_mal(Z,E).
%---------------------------------------------------------------%ingrediente X sirve para preparar platillo P
%---------------------------------------------------------------sirve_para_preparar([],P).
sirve_para_preparar(X,P):-ingrediente(X,P).
sirve_para_preparar([X,Xs],P):-sirve_para_preparar(X,P),sirve_para_preparar(Xs,P).
CONCLUSIONES:
Software Utilizado
SWI-Prolog (Windows)
BIBLIOGRAFIA
Material de apoyo
http://euitio.trisquelmedia.net/apuntes/viejo/primero/logica/Programacion%2
0practica%20en%20prolog.zip
http://webepcc.unex.es/agomez/prolog.htm
Gregorio Fernndez: Representacin del conocimiento en sistemas inteligentes
(Apndice A)
Transparencias de lgica bsica
Manuales de referencia