Está en la página 1de 6

;;;============================================================================= ========================================================== ;;; Sistema Experto: Observaciones Sobre La Conducta Humana ;;; ;;; Este sistema experto diagnostica

el grado de demencia ;;; de una persona, dadas ciertas observaciones sobre la ;;; conducta humana. ;;; ;;; Autor: Ronnal Alexis Pea Buitrago ;;; Cdula: V-12631225 ;;; ;;; Shell: CLIPS 6.24 ;;; ;;; Sistema Operativo: Ubuntu 12.04 ;;; ;;; San Cristbal, Diciembre 2013 ;;; ;;; Desarrollado como prototipo del objetivo nro. 9 de la asignatura: ;;; Introduccin a la Inteligencia Artificial y Sistemas Expertos (347) ;;; ;;; Universidad Nacional Abierta ;;; Centro Local Tchira (18) ;;; Carrera: Ingeniera de Sistemas (236) ;;; ;;; Para ejecutar: ;;; 1. Cargar el programa mediante el comando (load <nombre-archivo>), ejemplo: (load /home/ronnal/Documentos/UNA/347/Codigo/Trabajo.clp) ;;; 2. Escribir el comando (reset) ;;; 3. Escribir el comando (run) ;;; 4. Ingresar el nombre de un paciente ;;; 5. Responder las preguntas, utilizando las opciones disponibles {ENTER} para que aceptar la respuesta (si/no) ;;;============================================================================= ========================================================== ;;;*************************** ;;;* Definicin de Funciones * ;;;*************************** ;;;Funcin para mostrar las preguntas para llegar al diagnstico final (deffunction hacer-pregunta (?pregunta $?allowed-values) (printout t ?pregunta) (bind ?respuesta (read)) (if (lexemep ?respuesta) then (bind ?respuesta (lowcase ?respuesta))) (while (not (member ?respuesta ?allowed-values)) do (printout t ?pregunta) (bind ?respuesta (read)) (if (lexemep ?respuesta) then (bind ?respuesta (lowcase ?respuesta)))) ?respuesta) ;;;Funcin para validar la respuesta a cada pregunta (deffunction si-o-no-p (?pregunta) (bind ?response (hacer-pregunta ?pregunta si no s n)) (if (or (eq ?response si) (eq ?response s)) then TRUE else FALSE)) ;;;********************************** ;;;* Reglas de Estado de la Memoria * ;;;**********************************

;;;Regla para determinar que el paciente no sufre de sntomas de demencia (defrule estado-de-memoria-normal-conclusion "" (declare (salience 10)) (estado-de-memoria memoria normal) => (assert (diagnostico "No hay sntomas de demencia"))) ;;;Regla para determinar que el paciente padece de Alzheimer (defrule estado-de-memoria-alzheimer-conclusion "" (declare (salience 10)) (estado-de-memoria memoria alzheimer) => (assert (diagnostico "Padece: Demencia Alzheimer"))) ;;;Regla para determinar que el paciente padece de Wernicke-Korsakoff (defrule estado-de-memoria-wernicke-conclusion "" (declare (salience 10)) (estado-de-memoria memoria wernicke) => (assert (diagnostico "Padece: Sndrome de Wernicke-Korsakoff"))) ;;;Regla para determinar que el paciente padece de problablemente Alzheimer (defrule estado-de-memoria-probable-alzheimer-conclusion "" (declare (salience 10)) (estado-de-memoria memoria probable-alzheimer) => (assert (diagnostico "Padece: Probablemente Alzheimer, se sugiere repeti r examen"))) ;;;Regla para determinar que el paciente padece de Demencia Mixta (defrule estado-de-memoria-mixta-conclusion "" (declare (salience 10)) (estado-de-memoria memoria mixta) => (assert (diagnostico "Padece: Demencia Mixta"))) ;;;Regla para determinar que el paciente padece de Demencia Fronto-Temporal (defrule estado-de-memoria-temporal-conclusion "" (declare (salience 10)) (estado-de-memoria memoria temporal) => (assert (diagnostico "Padece: Demencia Fronto-Temporal"))) ;;;Regla para determinar que el paciente padece de Demencia Vascular (defrule estado-de-memoria-vascular-conclusion "" (declare (salience 10)) (estado-de-memoria memoria vascular) => (assert (diagnostico "Padece: Demencia Vascular"))) ;;;Regla para determinar que el paciente padece de Demencia Lewy-Bodies (DLB) (defrule estado-de-memoria-lewy-conclusion "" (declare (salience 10)) (estado-de-memoria memoria lewy) => (assert (diagnostico "Padece: Demencia Lewy-Bodies (DLB)"))) ;;;Regla para determinar que el paciente padece de Demencia Parkinson (defrule estado-de-memoria-parkinson-conclusion "" (declare (salience 10))

(estado-de-memoria memoria parkinson) => (assert (diagnostico "Padece: Demencia Parkinson"))) ;;;********************** ;;;* Reglas de Consulta * ;;;********************** ;;;Regla para registrar el nombre del paciente y determinar el estado de la memo ria (defrule determinar-estado-de-memoria "" (not (nombre-paciente ?)) (not (estado-de-memoria memoria ?)) (not (diagnostico ?)) => (printout t crlf "Nombre del Paciente: ") (assert (nombre-paciente (readline))) (printout t crlf) (if (si-o-no-p "Tiene prdida de memoria (si/no)? ") then (assert (estado-de-memoria memoria tm)) else else (assert (estado-de-memoria memoria normal)))) ;;;Regla para determinar la capacidad de tomar decisiones (defrule determinar-estado-de-decisiones "" (estado-de-memoria memoria tm) (not (diagnostico ?)) => (if (si-o-no-p "Tiene incapacidad para tomar decisiones (si/no)? ") then (assert (estado-de-memoria memoria er)) else (assert (estado-de-memoria memoria cp)))) ;;;Regla para determinar la dificultad de recordar nombres/eventos recientes (defrule determinar-estado-de-eventos "" (estado-de-memoria memoria er) (not (diagnostico ?)) => (if (si-o-no-p "Tiene dificultad para recordar nombres o eventos recient es (si/no)? ") then (assert (estado-de-memoria memoria ad)) else (assert (estado-de-memoria memoria ip)))) ;;;Regla para determinar el grado de apata/depresin (defrule determinar-estado-de-depresion "" (estado-de-memoria memoria ad) (not (diagnostico ?)) => (if (si-o-no-p "Tiene apata o depresin (si/no)? ") then (assert (estado-de-memoria memoria de)) else (assert (estado-de-memoria memoria av)))) ;;;Regla para determinar el grado de desorientacin (defrule determinar-estado-de-desorientacion "" (estado-de-memoria memoria de) (not (diagnostico ?)) => (if (si-o-no-p "Sufre de desorientacin (si/no)? ") then

(assert (estado-de-memoria memoria dh)) else (assert (estado-de-memoria memoria ip)))) ;;;Regla para determinar laa dificultad para hablar, tragar, caminar (defrule determinar-estado-de-dificultad "" (estado-de-memoria memoria dh) (not (diagnostico ?)) => (if (si-o-no-p "Tiene dificultad al hablar, tragar o caminar (si/no)? ") then (assert (estado-de-memoria memoria pp)) else (assert (estado-de-memoria memoria pp)))) ;;;Regla para determinar la presencia de placas de lar en el cerebro (defrule determinar-estado-de-cerebro "" (estado-de-memoria memoria pp) (not (diagnostico ?)) => (if (si-o-no-p "Existe presencia de placas elular en el cerebro (si/no)? ") then (assert (estado-de-memoria memoria else (assert (estado-de-memoria memoria protenas beta-amyloid, dao celu

de protenas beta-amyloid, dao c alzheimer)) probable-alzheimer))))

;;;Regla para determinar si hay cambios en la personalidad (defrule determinar-estado-de-personalidad "" (estado-de-memoria memoria cp) (not (diagnostico ?)) => (if (si-o-no-p "Tiene cambios en la personalidad (si/no)? ") then (assert (estado-de-memoria memoria dl)) else (assert (estado-de-memoria memoria vb)))) ;;;Regla para determinar el grado de dificultad con el lenguaje (defrule determinar-estado-de-lenguaje "" (estado-de-memoria memoria dl) (not (diagnostico ?)) => (if (si-o-no-p "Tiene dificultad con el lenguaje (si/no)? ") then (assert (estado-de-memoria memoria cf)) else (assert (estado-de-memoria memoria er)))) ;;;Regla para determinar si hay dao en clulas cerebrales, frontales y laterales (defrule determinar-estado-de-celulas-cerebrales "" (estado-de-memoria memoria cf) (not (diagnostico ?)) => (if (si-o-no-p "Tiene dao en clulas cerebrales, frontales y laterales (si/ no)? ") then (assert (estado-de-memoria memoria temporal)) else (assert (estado-de-memoria memoria av)))) ;;;Regla para determinar si hay deficiencia de vitamina B1 (defrule determinar-estado-de-vitamina ""

(estado-de-memoria memoria vb) (not (diagnostico ?)) => (if (si-o-no-p "Tiene deficiencia de vitamina B1 (si/no)? ") then (assert (estado-de-memoria memoria ca)) else (assert (estado-de-memoria memoria rm)))) ;;;Regla para determinar si consume alcohol (defrule determinar-estado-de-alcohol "" (estado-de-memoria memoria ca) (not (diagnostico ?)) => (if (si-o-no-p "Consume alcohol (si/no)? ") then (assert (estado-de-memoria memoria wernicke)) else (assert (estado-de-memoria memoria av)))) ;;;Regla para determinar si hay incapacidad para planear pasos o para realizar t areas (defrule determinar-estado-de-tareas "" (estado-de-memoria memoria ip) (not (diagnostico ?)) => (if (si-o-no-p "Tiene incapacidad para planear pasos o para realizar tar eas (si/no)? ") then (assert (estado-de-memoria memoria lc)) else (assert (estado-de-memoria memoria cp)))) ;;;Regla para determinar si hay presencia de sangramiento o bloqueo de vasos san guneos (defrule determinar-estado-de-lesion-cerebral "" (estado-de-memoria memoria lc) (not (diagnostico ?)) => (if (si-o-no-p "Existe presencia de sangramiento o bloqueo de vasos sang uneos (si/no)? ") then (assert (estado-de-memoria memoria vascular)) else (assert (estado-de-memoria memoria rm)))) ;;;Regla para determinar si sufre de alucinaciones visuales (defrule determinar-estado-de-alucinaciones "" (estado-de-memoria memoria av) (not (diagnostico ?)) => (if (si-o-no-p "Sufre de alucinaciones visuales (si/no)? ") then (assert (estado-de-memoria memoria rm)) else (assert (estado-de-memoria memoria mixta)))) ;;;Regla para determinar si presenta rigidez muscular (defrule determinar-estado-de-rigidez-muscular "" (estado-de-memoria memoria rm) (not (diagnostico ?)) => (if (si-o-no-p "Presenta rigidez muscular (Parkinson) (si/no)? ") then (assert (estado-de-memoria memoria as)) else

(assert (estado-de-memoria memoria mixta)))) ;;;Regla para determinar si hay aglomeraciones de alfa-synuclien en cierto patro nes (defrule determinar-estado-de-aglomeraciones "" (estado-de-memoria memoria as) (not (diagnostico ?)) => (if (si-o-no-p "Existe aglomeraciones de alfa-synuclien en ciertos patro nes (si/no)? ") then (assert (estado-de-memoria memoria lewy)) else (assert (estado-de-memoria memoria parkinson)))) ;;;*********************************** ;;;* Reglas de Inicio y Diagnsticos * ;;;*********************************** ;;;Regla para mostrar el mensaje inicial (defrule system-banner "" (declare (salience 10)) => (printout t crlf crlf) (printout t "Sistema Experto Para Determinar La Conducta Humana") (printout t crlf crlf)) ;;;Regla para mostrar el nombre del paciente y el diagnstico alcanzado segn los snt omas (defrule mostrar-diagnostico "" (declare (salience 10)) (diagnostico ?item) (nombre-paciente ?nombre) => (printout t crlf) (printout t "Paciente: "?nombre) (printout t crlf crlf) (printout t "Diagnstico Alcanzado:" crlf) (format t "%s%n%n%n" ?item))

También podría gustarte