Sei sulla pagina 1di 19

INTELIGENCIA ARTIFICIAL

Integrantes: Arana Lpez,Liz Yguabil Quispe,Renso Tarazona Chicmana,Manuel Zarate Aliaga, Manuel 07200056 01115087 07200117 03200134

Ciudad Universitaria, 21 de julio del 2010 | CICLO 2010-I

CONTENIDO GENERAL
I. CAPTULO 1
Fundamento Terico Desarrollo del Sistema Experto Explicacin Detallada del Problema Cdigo fuente Corrida paso a paso del cdigo

II. CAPTULO 2
Fundamento Terico Desarrollo del Sistema Experto Mdico y de Platillos Explicacin Detallada del Problema Cdigo fuente Corrida paso a paso del cdigo

CONTENIDO
I. PARTE TERICA
1.1 Introduccin Qu es un sistema basado en el conocimiento? Historia de los Lenguajes Basados en Conocimiento Lenguajes y generadores de sistemas basados en el conocimiento

1.2 Prolog Qu es Prolog? Historia de Prolog Programacin en Prolog

II. PARTE PRCTICA


2.1 Ejemplo prctico de un Sistema Experto Descripcin del problema Explicacin a detalle de la Solucin o Cuadro de enfermedades con sus respectivos sntomas. o Cuadro de enfermedades con sus respectivos medicamentos. o Cuadro de Pacientes con sus respectivos sntomas. o Cdigo Fuente. o Grafo. o Explicacin del Cdigo Fuente:

I. PARTE TERICA

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.

HISTORIA DE LOS LENGUAJES BASADOS EN CONOCIMIENTO


Sistemas de primera generacin: Los sistemas basados en el conocimiento desarrollados hasta hace poco constituyen la cuya caracterstica comn reside en la superficialidad del conocimiento que se incluye en el mismo. Los ingenieros de conocimiento (desarrolladores de los sistemas basados en el conocimiento) se limitan a incorporar en los sistemas la experiencia y criterios de los especialistas sin buscar las razones ltimas en las que se basan. Sistemas de Segunda Generacin: Actualmente, existen sistemas ms avanzados en la que el conocimiento se estructura en dos niveles. El primer nivel, de control (se suele aludir a l como metaconocimiento y las reglas que lo constituyen reciben el nombre de metarreglas), sirve para determinar la forma de utilizar el segundo nivel que es el que contiene el conocimiento de los expertos.

LENGUAJES BASADOS EN CONOCIMIENTO Para el desarrollo de sistemas basados en el conocimiento se han venido utilizando tanto lenguajes de programacin especficos de la inteligencia artificial (LISP y PROLOG) como de propsito general (C, PASCAL, etc.). El lenguaje LISP es uno de los ms utilizados desde los comienzos de la I.A.

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

II. PARTE PRCTICA

2.1 Ejemplo prctico de un sistema experto


DESCRIPCIN DEL PROBLEMA
Realizar un sistema experto basado en conocimientos, dicho sistema debe considerar pacientes, enfermedades, platos (platillos de los departamentos), Departamentos y especialistas que tratan la enfermedad. Asimismo el sistema experto debe responder todo tipo de preguntas al respecto.

EXPLICACIN DE LA SOLUCIN Cdigo Fuente:


El siguiente es el cdigo de un sistema experto que identifica los platos que una persona debe comer segn la enfermedad que tiene as como los departamentos del cual son oriundos los platos como tambin los especialistas que tratan las enfermedades.
% ************************************************************ %%%%%%%%%%%%----------BASE DE CONOCIMIENTO-------%%%%%%%%%%%%% % ************************************************************ % % %%departamentos departamento(sanMartin). departamento(junin). departamento(cuzco). departamento(ancash). departamento(ucayali). departamento(arequipa).

%%platos que hay plato(rocoto_relleno). plato(picante_de_caracol). plato(ensalada_pan_arbol). plato(ensalada_de_quinua). plato(garabamba). plato(cebiche_serrano). plato(picante_de_cuy). plato(mazamorra_de_tocosh). plato(mazamorra_de_kiwicha). plato(patarashka). plato(locro_de_zapallo). plato(ajiaco_de_olluco). plato(caigua_rellena).

plato(sancochado). plato(parihuela). plato(sopa_seca). plato(dulce_de_higo). plato(agua_de_manzana). plato(coctel_de_algarrobina). plato(cau_cau).

%%plato por departamentos %pertenece_a(plato,departamento) pertenece_a(rocoto_relleno,arequipa). pertenece_a(picante_de_caracol,ucayali). pertenece_a(ensalada_pan_arbol,ucayali). pertenece_a(ensalada_de_quinua,junin). pertenece_a(garabamba,cuzco). pertenece_a(mazamorra_de_kiwicha,cuzco). pertenece_a(patarashka,sanMartin). pertenece_a(cebiche_serrano,ancash). pertenece_a(picante_de_cuy,ancash). pertenece_a(mazamorra_de_tocosh,ancash).

%%%ingredientes que hay ingrediente(aceite). ingrediente(arroz). ingrediente(pollo). ingrediente(arverja). ingrediente(zanahoria). ingrediente(culandro). ingrediente(sal). ingrediente(fideo). ingrediente(tomate). ingrediente(carne). ingrediente(pescado). ingrediente(ajos). ingrediente(cebolla). ingrediente(limon). ingrediente(rocoto). ingrediente(papa). ingrediente(queso). ingrediente(perejil). ingrediente(caracol). ingrediente(aji_panca). ingrediente(aceite_oliva). ingrediente(pan_arbol). ingrediente(oregano). ingrediente(lechuga). ingrediente(quinua). ingrediente(pimenton). ingrediente(apio). ingrediente(trigo). ingrediente(mote). ingrediente(habas). ingrediente(patita_de_chancho). ingrediente(tarwi). ingrediente(maiz). ingrediente(cuy). ingrediente(mani).

ingrediente(tocosh). ingrediente(canela). ingrediente(aji). ingrediente(kiwicha). ingrediente(guindones). ingrediente(pasas). ingrediente(azucar). ingrediente(naranja). ingrediente(coco). ingrediente(pescado).

%%%contenido de cada plato %contiene(plato,ingrediente) %1%Rocoto Relleno% contiene(rocoto_relleno,carne). contiene(rocoto_relleno,rocoto). contiene(rocoto_relleno,papa). contiene(rocoto_relleno,queso). contiene(rocoto_relleno,perejil). contiene(rocoto_relleno,sal). %2%Picante de Caracol% contiene(picante_de_caracol,caracol). contiene(picante_de_caracol,aji_panca). contiene(picante_de_caracol,ajos). contiene(picante_de_caracol,cebolla). contiene(picante_de_caracol,tomate). contiene(picante_de_caracol,aceite_oliva). contiene(picante_de_caracol,culandro). contiene(picante_de_caracol,sal).

%3%Ensalada de Pan Arbol% contiene(ensalada_pan_arbol,pan_arbol). contiene(ensalada_pan_arbol,aceite_oliva). contiene(ensalada_pan_arbol,cebolla). contiene(ensalada_pan_arbol,culandro). contiene(ensalada_pan_arbol,limon). contiene(ensalada_pan_arbol,oregano).

%4%Ensalada de Quinua% contiene(ensalada_de_quinua,quinua). contiene(ensalada_de_quinua,cebolla). contiene(ensalada_de_quinua,ajos). contiene(ensalada_de_quinua,pimenton). contiene(ensalada_de_quinua,apio). contiene(ensalada_de_quinua,tomate). contiene(ensalada_de_quinua,culandro). contiene(ensalada_de_quinua,limon). %5%Garabamba% contiene(garabamba,trigo). contiene(garabamba,arverja). contiene(garabamba,mote). contiene(garabamba,habas). contiene(garabamba,patita_de_chancho).

contiene(garabamba,perejil). %6%Cebiche Serrano% contiene(cebiche_serrano,tarwi). contiene(cebiche_serrano,maiz). contiene(cebiche_serrano,cebolla). contiene(cebiche_serrano,perejil). contiene(cebiche_serrano,limon). contiene(cebiche_serrano,tomate). contiene(cebiche_serrano,ajos). %7%Picante de Cuy% contiene(picante_de_cuy,cuy). contiene(picante_de_cuy,ajos). contiene(picante_de_cuy,mani). contiene(picante_de_cuy,papa). contiene(picante_de_cuy,aji).

%8%Mazamora de Tocosh% contiene(mazamorra_de_tocosh,tocosh). contiene(mazamorra_de_tocosh,canela).

%9%Patarashka% contiene(patarashka,pescado). contiene(patarashka,sal). contiene(patarashka,cebolla). contiene(patarashka,ajos). contiene(patarashka,culandro). contiene(patarashka,aceite_oliva).

%10%Mazamora de Kiwicha% contiene(mazamorra_de_kiwicha,kiwicha). contiene(mazamorra_de_kiwicha,guindones). contiene(mazamorra_de_kiwicha,pasas). contiene(mazamorra_de_kiwicha,azucar). contiene(mazamorra_de_kiwicha,naranja). contiene(mazamorra_de_kiwicha,coco). %11%Locro de Zapallo contiene(locro_de_zapallo,zapallo). contiene(locro_de_zapallo,queso). contiene(locro_de_zapallo,papa). contiene(locro_de_zapallo,choclo). contiene(locro_de_zapallo,cebolla). contiene(locro_de_zapallo,leche). %12%Ajiaco de olluco contiene(ajiaco_de_olluco,olluco). contiene(ajiaco_de_olluco,tomate). contiene(ajiaco_de_olluco,cebolla). contiene(ajiaco_de_olluco,ajos). contiene(ajiaco_de_olluco,queso). contiene(ajiaco_de_olluco,aceite). %13%Caiguas Rellenas contiene(caiguas_rellenas,caigua).

contiene(caiguas_rellenas,cebolla). contiene(caiguas_rellenas,tomate). contiene(caiguas_rellenas,carne). contiene(caiguas_rellenas,pasas). contiene(caiguas_rellenas,aceituna). %14%Sancochado contiene(sancochado,carne). contiene(sancochado,papa). contiene(sancochado,yuca). contiene(sancochado,arroz). contiene(sancochado,zanahoria). contiene(sancochado,col). contiene(sancochado,apio). contiene(sancochado,nabo). %15%Parihuela contiene(parihuela,ajos). contiene(parihuela,cebolla). contiene(parihuela,vino). contiene(parihuela,choros). contiene(parihuela,camarones). contiene(parihuela,langostinos). contiene(parihuela,aji). contiene(parihuela,pescado). %16%Sopa Seca contiene(sopa_seca,cebolla). contiene(sopa_seca,ajos). contiene(sopa_seca,albahaca). contiene(sopa_seca,tomate). contiene(sopa_seca,zanahoria). contiene(sopa_seca,pollo). contiene(sopa_seca,huevo). contiene(sopa_seca,sal). %17%Dulce de higo contiene(dulce_de_higo,higo). contiene(dulce_de_higo,azucar). contiene(dulce_de_higo,miel). %18%Agua de Manzana contiene(agua_de_manzana,manzana). contiene(agua_de_manzana,azucar). contiene(agua_de_manzana,canela). %19%Coctel de Algarrobina contiene(coctel_de_algarrobina,pisco). contiene(coctel_de_algarrobina,algarrobina). contiene(coctel_de_algarrobina,huevo). contiene(coctel_de_algarrobina,azucar). contiene(coctel_de_algarrobina,canela). %20%Cau-Cau contiene(cau_cau,mondongo). contiene(cau_cau,papa). contiene(cau_cau,cebolla). contiene(cau_cau,ajos). contiene(cau_cau,aceite). contiene(cau_cau,arverja).

%%%enfermedades que hay enfermedad(colesterol). enfermedad(vista). enfermedad(osteoporosis). enfermedad(hepatitis). enfermedad(insuficiencia_renal). enfermedad(artritis). enfermedad(colon_irritable). enfermedad(gastritis). enfermedad(estreimiento). enfermedad(hipertension).

%aumentamos neumonia por la pregunta enfermedad(neumonia).

%ingrediente que producen una enfermedad producido_por(colesterol,queso). producido_por(colesterol,carne). producido_por(osteoporosis,sal). producido_por(hepatitis,queso). producido_por(hepatitis,carne). producido_por(insuficiencia_renal,sal). producido_por(artritis,limon). producido_por(artritis,tomate). producido_por(colon_irritable,aji_panca). producido_por(colon_irritable,rocoto). producido_por(colon_irritable,aji). producido_por(gastritis,aji). producido_por(gastritis,aji_panca). producido_por(gastritis,rocoto). producido_por(gastritis,limon). producido_por(gastritis,habas). producido_por(gastritis,naranja).

%ingrediente que previenen una enfermedad prevenido_por(vista,zanahoria). prevenido_por(vista,tomate). prevenido_por(anemia,pollo). prevenido_por(anemia,carne). prevenido_por(anemia,pescado). prevenido_por(anemia,ajos). prevenido_por(gripe,ajos). prevenido_por(gripe,cebolla). prevenido_por(gripe,limon). prevenido_por(osteoporosis,queso). prevenido_por(osteoporosis,perejil). prevenido_por(osteoporosis,culandro). prevenido_por(osteoporosis,quinua). prevenido_por(hepatitis,cebolla). prevenido_por(hepatitis,aceite_oliva).

prevenido_por(insuficiencia_renal,quinua). prevenido_por(insuficiencia_renal,trigo). prevenido_por(insuficiencia_renal,papa). prevenido_por(insuficiencia_renal,queso). prevenido_por(artritis,trigo). prevenido_por(artritis,arverja). prevenido_por(artritis,perejil). prevenido_por(artritis,tarwi). prevenido_por(artritis,pan_arbol). prevenido_por(artritis,culandro). prevenido_por(colon_irritable,cuy). prevenido_por(colon_irritable,tarwi). prevenido_por(colesterol,tarwi). prevenido_por(colesterol,cebolla). prevenido_por(colesterol,ajos). prevenido_por(colesterol,quinua). prevenido_por(colesterol,aceite_oliva). prevenido_por(colesterol,cuy). prevenido_por(colesterol,mani). prevenido_por(gastritis,tocosh). prevenido_por(gastritis,canela). prevenido_por(estreimiento,limon). prevenido_por(estreimiento,naranja). prevenido_por(estreimiento,guindones). prevenido_por(estreimiento,pasas). prevenido_por(estreimiento,coco). %agremamos lo que previene a neumonia prevenido_por(neumonia,limon). prevenido_por(neumonia,apio). %%%especialidades medicas especialidad(hepatologo). especialidad(traumatologo). especialidad(nefrologo). especialidad(reumatologo). especialidad(endocrinologo). especialidad(coloproctologo). especialidad(gastroenterologo). %agregamos la especialidad para prevenir la neumonia especialidad(neumologo). %especialista que atiende la enfermedad atiende(gastroenterologo,gastritis). atiende(coloproctologo,estreimiento). atiende(coloproctologo,colon_irritable). atiende(reumatologo,artritis). atiende(nefrologo,insuficiencia_renal). atiende(traumatologo,artritis). atiende(reumatologo,osteoporosis). atiende(hepatologo,hepatitis). %agregamos especialista que trata la enfermedad atiende(neumologo,neumonia).

%pacientes que tenemos con su enfermedad que tienen tiene(renso,gastritis). tiene(tomas,osteoporosis). tiene(tomas,estreimiento). tiene(melissa,artritis). tiene(juan,colon_irritable). tiene(yeny,hepatitis). tiene(jose,insuficiencia_renal). %agregamos la enfermedad que tiene periquita tiene(periquita,neumonia).

% ************************************************************************* % %%%%%%%%----------------------REGLAS----------------------%%%%%%%%%%%%%%% % ************************************************************************* % % /************************************************************************************/ %Preg1%que plato debe comer?-ok %plato debe comer(persona,lista sin repetidos) plato_debe_comer(Per,L):- platos_deberia_comer(Per,Lpla),elim_repet(Lpla,L). %devuelve la lista repetida de platos que puede comer %platos_deberia_comer(persona,lista con repeticion) platos_deberia_comer(Per,L):findall(Pla,(plato_puede_comer(Per,Pla),tiene(Per,Enf),contiene(Pla,Ing),prevenido_por(Enf,Ing)),L). /************************************************************************************/

%Preg2%que plato puede comer-ok %platos_puede_comer(persona,lista de platos) comida_puede_comer(Per,L):- findall(Pla,plato_puede_comer(Per,Pla),L). %plato_puede_comer(persona,plato que puede comer) plato_puede_comer(Per,Pla):- lista_enfer(Per,Lenf),plato(Pla),enfer_plato(Lenf,Pla). %recorre y verifica cada enfermedad de la persona con el plato %enfer_plato(lista de enfermedades,plato) enfer_plato([],_):-!. enfer_plato([Enf|Lenf],Pla):- veri_ingre_plato(Enf,Pla),enfer_plato(Lenf,Pla). % obtengo la lista ingredientes del plato y con la enfermedad % veri_ingre_plato(enfermedad,plato) veri_ingre_plato(Enf,Pla):- lista_ingre(Pla,Ling),enfer_ingre(Enf,Ling). %recorre y verifica cada ingrediente con la enfermedad %enfer_ingre(enfermedad,lista de ingredientes) enfer_ingre(_,[]):-!. enfer_ingre(Enf,[Ing|Ling]):-not(producido_por(Enf,Ing)),enfer_ingre(Enf,Ling). /************************************************************************************/

%Preg3%que comida no puede comer-ok %comidas_no_debe_comer(persona,lista de platos) comidas_no_debe_comer(Per,Lpla):- findall(Pla,comida_no_debe_comer(Per,Pla),Lpla).

%comida_no_debe_comer(persona,plato que no debe comer) comida_no_debe_comer(Per,Pla) :- tiene(Per,Enf),producido_por(Enf,Ing),contiene(Pla,Ing). /************************************************************************************/

%Preg4%Qu ingredientes puede comer-ok %ingredientes_puede_comer(persona,lista de ingredientes) ingredientes_puede_comer(Per,Ling):- findall(Ing,ingre_puede_comer(Per,Ing),Ling). %ingre_puede_comer(persona,ingrediente que puede comer) ingre_puede_comer(Per,Ing):- lista_enfer(Per,Lenf),ingrediente(Ing),ingre_enfer(Ing,Lenf). %recorre y verifica los ingredientes con cada enfermedad %ingre_enfer(ingrediente,lista de enfermedades) ingre_enfer(_,[]):-!. ingre_enfer(Ing,[Enf|Lenf]):- not(producido_por(Enf,Ing)),ingre_enfer(Ing,Lenf). /************************************************************************************/

%%Preg5%Que ingredientes no puede comer-ok %ingredientes_no_puede_comer(persona,lista de ingredientes q no come) ingredientes_no_puede_comer(Per,Ling):-findall(Ing,no_puede_comer(Per,Ing),Ling). %no_puede_comer(persona,ingrediente) no_puede_comer(Per,Ing):- tiene(Per,Enf),ingrediente(Ing),producido_por(Enf,Ing). /************************************************************************************/

%Preg6%Que comidas debe recetar el especialista-ok %comidas_debe_recetar(especialista,lista de platos sin repetir) comidas_debe_recetar(Esp,L):-comidas_deberia_recetar(Esp,Lpla),elim_repet(Lpla,L). %comidas_deberia_recetar(especialista,lista de platos repetidos) comidas_deberia_recetar(Esp,Lpla):- findall(Pla,comida_debe_recetar(Esp,Pla),Lpla). %comida_debe_recetar(especialista,plato). comida_debe_recetar(Esp,Pla) :- atiende(Esp,Enf),prevenido_por(Enf,Ing),contiene(Pla,Ing). /************************************************************************************/

%Preg7%Que comidas no debe recetar el especialista-ok %comidas_debe_recetar(especialista,lista de platos sin repetir) comidas_no_debe_recetar(Esp,L):-comidas_no_deberia_recetar(Esp,Lpla),elim_repet(Lpla,L). %comidas_deberia_recetar(especialista,lista de platos repetidos) comidas_no_deberia_recetar(Esp,Lpla):- findall(Pla,comida_no_debe_recetar(Esp,Pla),Lpla). %comida_debe_recetar(especialista,plato). comida_no_debe_recetar(Esp,Pla) :- atiende(Esp,Enf),producido_por(Enf,Ing),contiene(Pla,Ing).

/************************************************************************************/

%%Preg8%Qu departamento(s) debe visitar ?-ok.........................

%departamento_debe_visitar(persona,lista de departamentos) departamento_debe_visitar(Per,LDep):-findall(Dep,debe_visitar(Per,Dep),LDep). %debe_visitar(persona,departamento) debe_visitar(Per,Dep):- plato_puede_comer(Per,Pla),pertenece_a(Pla,Dep). /************************************************************************************/

%%Preg9%Qu departamento(s) no debe visitar ?-ok %departamento_debe_visitar(persona,lista de departamentos) departamento_no_debe_visitar(Per,LDep):-findall(Dep,no_debe_visitar(Per,Dep),LDep). %no_debe_visitar(persona,departamento) no_debe_visitar(Per,Dep):- tiene(Per,Enf),producido_por(Enf,Ing),contiene(Pla,Ing),pertenece_a(Pla,Dep). /************************************************************************************/

% Preg10%porcentaje de ingredientes beneficioso que hay x plato segun % enfermedad-ok porcentaje(persona) % porcentaje(Per):plato_puede_comer(Per,Pla),numero_ingredientes(Pla,Ni),ingredientes_recomendables(Per,Pla,Nir),Por 100*Nir/Ni,write(Pla),write('-->'),write(Por),write('%'). %numero de ingredientes x plato que previenen la enfermedad-ok %ingrediente(persona , platos , numero de ingredientes que debe comer) ingredientes_recomendables(Per,Pla,Nir):tiene(Per,Enf),findall(Ing,(contiene(Pla,Ing),prevenido_por(Enf,Ing)),L),longitud(L,Nir),write(Enf),write('-->'). /************************************************************************************/ %Preg11Que platos provienen de un Departamento platos_por_departamento(Dep,Lpla):-findall(Pla,pertenece_a(Pla,Dep),Lpla). /************************************************************************************/ %Preg12Que ingredientes contiene el plato %lista de ingredientes de un plato-ok %lista_ingre(plato,lista de ingredientes del plato) lista_ingre(Pla,Ling):- findall(Ing,contiene(Pla,Ing),Ling). /************************************************************************************/ %Preg13%Que enfermedades tiene una persona %lista de enfermedades que tiene-ok %lista_enfer(persona,lista de enfermedades que tiene) lista_enfer(Per,Lenf):- findall(Enf,tiene(Per,Enf),Lenf).

is

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% %% PREGUNTAS QUE RESPONDIMOS AL PROFESOR %%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%

%si tengo meumonia que platos de ucayali debo comer

consulta(Per,Pla):- tiene(Per,Enf),prevenido_por(Enf,Ing),contiene(Pla,Ing),pertenece_a(Pla,ucayali). %que medico debe tratar a periquita consultar_especialista(Per,Esp):- tiene(Per,Enf),atiende(Esp,Enf). %que platos "debe" comer periquita plato_debe_comer(Per,L):- platos_deberia_comer(Per,Lpla),elim_repet(Lpla,L).

%que platos "puede" comer periquita comida_puede_comer(Per,L):- findall(Pla,plato_puede_comer(Per,Pla),L).

%%% OBS: la diferencia esta en que "debe" come platos que le hace bien a %%% su enfermedad, en cambio en "puede" come platos que le hace bien y %%% paltos que no le hace bien ni mal a su enfermedad %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%

%************************************************************** % Funciones Varios %************************************************************

%cantidad de ingredientes por plato-ok %numero_ingredientes(plato,numero de ingredientes del plato) numero_ingredientes(Pla,Ni) :- findall(Ing,contiene(Pla,Ing),L),longitud(L,Ni).

%Elimina los elementos repetidos que est n en una lista*/ elim_repet([],[]):-!. elim_repet([X|M],S):-not(lista(X)), elimina_x(M,X,T),elim_repet(T,Y), concatenar([X],Y,S). elim_repet([X|M],S):-lista(X), elim_l1_de_l2(X,M,T),elim_repet(X,Y), elim_repet(T,J),concatenar([Y],J,S). %Determina si lo que recibe es una lista*/ lista([]):-!. lista([_|Y]):-lista(Y). /*------------------------------------------------------------------*/ /*Elimina todos los elementos de la lista 1 que est n en la 2*/ elim_l1_de_l2([],L,L):-!. elim_l1_de_l2([X|M],L,S):-elimina_x(L,X,T),elim_l1_de_l2(M,T,S). /*------------------------------------------------------------------*/ /*Concatena dos listas*/ concatenar([],L,L). concatenar([X|M],L,[X|Z]):-concatenar(M,L,Z). /*------------------------------------------------------------------*/

/*Elimina el elemento x de la lista en todos los niveles*/ elimina_x([],_,[]):-!. elimina_x([X],X,[]):-!. elimina_x([X|M],X,S):-elimina_x(M,X,S),!. elimina_x([R|M],X,S):-lista(R), elimina_x(R,X,T), elimina_x(M,X,P), concatenar([T],P,S). elimina_x([R|M],X,S):-elimina_x(M,X,T), concatenar([R],T,S). /*------------------------------------------------------------------*/

%longitud normal de una lista-ok %longitud(lista,longitud de la lista) longitud([],0). longitud([_|Y],S) :- longitud(Y,T), S is T + 1.

Explicacin de las reglas bsicas del Cdigo Fuente:

Reglas:
Plato_debe_comer(persona,X): Nos mostrar los platos que debe comer (que le hacen bien) el paciente. comida_puede_comer(Per,L): Nos mostrar los platos que puede comer (que no le hacen bien ni mal) el paciente. comidas_no_debe_comer(Per,Lpla) Nos mostrar los platos que no debe comer (que le mal hacen bien) el paciente. ingredientes_puede_comer(Per,Ling) Nos mostrar los ingredientes que debe comer (que le hacen bien) el paciente. ingredientes_no_puede_comer(Per,Ling) Nos mostrar los ingredientes que no debe comer (que le hacen dao) el paciente. comidas_debe_recetar(Esp,L) Nos mostrara la lista de comidas que el especialista debe recetar para que el paciente se cure. comidas_no_debe_recetar(Esp,L) Nos mostrara la lista de comidas que el especialista no debe recetar al paciente. departamento_debe_visitar(Per,LDep) Nos mostrara los departamento(s) que debe visitar el paciente, ya que en ese departamento sus platillos usan ingrediente que le hacen bien.

departamento_no_debe_visitar(Per,LDep) Nos mostrara los departamento(s) que no debe visitar el paciente, ya que en ese departamento sus platillos usan ingrediente que le hacen dao.

porcentaje(Per) nos mostrara el porcentaje de ingredientes beneficioso que hay x plato segn enfermedad

platos_por_departamento(Dep,Lpla) nos mostrara la lista de platos que hay por departamento.

lista_ingre(Pla,Ling) Nos mostrara la lista de ingredientes por cada plato

lista_enfer(Per,Lenf) nos mostrara las enfermedades que tiene cada paciente.

Potrebbero piacerti anche