Diagnóstico de enfermedades

download Diagnóstico de enfermedades

If you can't read please download the document

description

Sistemas inteligente para diagnóstico de enfermedades

Transcript of Diagnóstico de enfermedades

CODIGO FUENTE COMENTADOenfermedad(neumonia).enfermedad(tuberculosis).enfermedad(hepatitisB).enfermedad(gastritis).enfermedad(sinusitis).%-------------------------------------------------------------------- % sintoma(X,Y) = X es sintoma de Y, donde Y es enfermedad%----------------------------------------------------------------% enfermedad: Neumoniasintoma(fiebre,neumonia).sintoma(dolorTorxico , neumonia).sintoma(dolorCabeza , neumonia).sintoma(escalofrios, neumonia).sintoma(tos,neumonia).% enfermedad: Tuberculosissintoma(fiebre,tuberculosis).sintoma(cansancio,tuberculosis).sintoma(prdidaPeso,tuberculosis).sintoma(faltaApetito,tuberculosis).sintoma(tos ,tuberculosis).sintoma(sudoracion ,tuberculosis).% enfermedad: Hepatitis Bsintoma(fiebre,hepatitisB).sintoma(nauseas,hepatitisB).sintoma(dolorParteAltaAbdomen,hepatitisB).sintoma(ictericia,hepatitisB).%color amarillo de la piel y el ojosintoma(orinaColorOscuro,hepatitisB).% enfermedad: Gastritissintoma(distencionAbdominal,gastritis).sintoma(nauseas,gastritis).sintoma(dolorParteAltaAbdomen,gastritis).sintoma(faltaApetito,gastritis).sintoma(acidezEstomacal,gastritis).% enfermedad: Sinusitissintoma(fiebre,sinusitis).sintoma(congestionSecrecionNasal,sinusitis).sintoma(dolorCabeza,sinusitis).sintoma(tos,sinusitis).%-------------------------------------------------------------------- % medicamento(X,Y) = X es medicamento de Y%-------------------------------------------------------------------- % enfermedad: Neumoniamedicamento(ibuprofeno ,neumonia).medicamento(azitromicina,neumonia).medicamento(claritromicina,neumonia).medicamento(amoxicilina,neumonia).medicamento(dextrometorfano,neumonia).% enfermedad: Tuberculosismedicamento(ibuprofeno ,tuberculosis).medicamento(complejoB,tuberculosis).medicamento(pirazinamida,tuberculosis).medicamento(ribavirina,tuberculosis).medicamento(dextrometorfano,tuberculosis).% enfermedad: Hepatitis Bmedicamento(ibuprofeno,hepatitisB).medicamento(ondansetron,hepatitisB).medicamento(omeprazol ,hepatitisB).medicamento(timosina ,hepatitisB).medicamento(entecavir,hepatitisB).% enfermedad: Gastritismedicamento(almax ,gastritis).medicamento(ondansetron,gastritis).medicamento(omeprazol ,gastritis).medicamento(ribavirina_l,gastritis).medicamento(ridocaina ,gastritis).% enfermedad: Sinusitismedicamento(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(X,Y) = ingrediente X propiedad curativa para enfermedad Y%--------------------------------------------------------------------% enfermedad: Neumoniahace_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: Gastritishace_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: sinusitishace_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: tuberculosishace_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 Bhace_bien(apio,hepatitisB).hace_bien(zapallo,hepatitisB).hace_bien(zanahoria,hepatitisB).hace_bien(limon,hepatitisB).hace_bien(harinadetrigo,hepatitisB).hace_bien(mantequilla,hepatitisB).% hace_mal(X,Y) = ingrediente X propiedad negativa para enfermedad Y%-------------------------------------------------------------------hace_mal(harinadetrigo,neumonia).hace_mal(mantequilla,neumonia).hace_mal(leche,neumonia).hace_mal(leche,tuberculosis).hace_mal(papaamarilla,hepatitisB).hace_mal(leche,hepatitisB).hace_mal(aguacaliente,gastritis).hace_mal(limon,gastritis).hace_mal(mantequilla,gastritis).hace_mal(mantequilla,sinusitis).hace_mal(leche,sinusitis).%-------------------------------------------------------------------% platillo(P) = P es platillo%-------------------------------------------------------------------platillo(sopaDieta).platillo(teEucalipto).platillo(sopadeverduras).platillo(chapo).platillo(shambar).platillo(tortillakiwicha).platillo(purdepapas).platillo(pasteldelimon).platillo(empanada).%-------------------------------------------------------------------- % restaurante(R) = R es restaurante%----------------------------------------------------------------restaurante(rinconAyacuchano).restaurante(alCarbon).restaurante(surChico).%-------------------------------------------------------------------- % buscar_restaurante(P,R) = el platillo P se sirve en el restaurante R%----------------------------------------------------------------buscar_restaurante(sopaDieta,alCarbon).buscar_restaurante(teEucalipto,alCarbon).buscar_restaurante(sopadeverduras,surChico).buscar_restaurante(chapo,rinconAyacuchano).buscar_restaurante(shambar,rinconAyacuchano).buscar_restaurante(tortillakiwicha,rinconAyacuchano).buscar_restaurante(purdepapas,surChico).buscar_restaurante(pastellimon,surChico).buscar_restaurante(empanada,alCarbon).%-------------------------------------------------------------------% ingrediente(X) = X es ingrediente%-------------------------------------------------------------------ingredientePlatillo(papaamarilla).ingredientePlatillo(pollohervido).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%===================================================================%----------------------------------------------------%paciente X debe tomar la lista de medicamentos P%----------------------------------------------------debe_tomar_medicamento(X,P):- findall(Y,tiene_sintoma(X,Y),L),findall(M,buscar_medicamento(L,M),Z),sinDuplicados(Z,P).%----------------------------------------------------%elemento X no pertenece a la lista, donde [Y|Ys] es la lista%Y es la cabeza y Ys es la cola. %----------------------------------------------------noPertenece(X,[]).noPertenece(X,[Y|Ys]):-X\=Y,noPertenece(X,Ys).%----------------------------------------------------%elemento X pertenece a la lista%----------------------------------------------------pertenece(X,[X|_]).pertenece(X,[_|T]):- pertenece(X,T).%----------------------------------------------------%paciente X debe tomar la lista de medicamentos P%----------------------------------------------------sinDuplicados([],[]).sinDuplicados([X|Xs],[X|Ys]):-noPertenece(X,Xs),sinDuplicados(Xs,Ys).sinDuplicados([X|Xs],Ys):- pertenece(X,Xs),sinDuplicados(Xs,Ys).%-------------------------------------------------------------%dado una lista de sintomas se indicar que medicamentos tomar%-------------------------------------------------------------buscar_medicamento(X,M):-sintoma(X, E), medicamento(M,E).buscar_medicamento([X|Xs],M ) :- buscar_medicamento(X,M) ; buscar_medicamento(Xs,M).%-------------------------------------------------------------%el metodo buscar nos permite encontrar la enfermedad E que tenga %todos los sintomas de la lista [X,Xs]%-------------------------------------------------------------buscar([],E,0).buscar(X , E , 1) :- sintoma(X, E).buscar([X|Xs] , E ,P) :- enfermedad(E) , buscar(X , E , S1) , buscar(Xs , E ,S2) , P is S1 + S2.%------------------------------------------------------------------%nos permite saber la cantidad K de sintomas para la enfermedad E%------------------------------------------------------------------totalSintoma(E , K) :- findall(X , sintoma(X, E) , L) , length(L , K) .%------------------------------------------------------------------%dado una lista de sintomas nos permite saber las posibles enfermedades %con sus respectivos porcentajes.%------------------------------------------------------------------diagnostico([X|Xs] , E , K) :- buscar([X|Xs] , E , P) , totalSintoma(E , T) , K is P * 100 / T.% ------------------------------------------------------------------% Paciente X tiene enfermedad E con un porcentaje C%----------------------------------------------------------------- tiene_enfermedad(X,E,C):-findall(Y,tiene_sintoma(X,Y),L),diagnostico(L , E , C).% ------------------------------------------------------------------% la lista de pacientes L tiene enfermedad E %----------------------------------------------------------------- padece(L,E):-sintoma(S,E),findall(X,tiene_sintoma(X,S),L).%-----------------------------------%medicamento M alivia los sintomas S%-----------------------------------alivia_sintoma(M,S):-medicamento(M,E),sintoma(S,E).%----------------------------------------------------------------%Cantidad C de medicamentos que pueden aliviar la enfermedad E%----------------------------------------------------------------cant_medicamentos(E,C):- findall(M,medicamento(M,E),L), length(L,C).%-------------------------------------------------------------------%doctor_especialista(Y,X) = Y es el doctor especialista en enfermedad X.%-------------------------------------------------------------------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).