PRACTICA-7.TXT Máquina de inferencia regresiva. ============================================================================ Durante la clase se solucionará el problema 1. Los problemas 2 y 3 forman un ejercicio puntuable para realizar en casa, el código en Lisp de dichos ejercicios junto con la base de conocimiento inventada que se pide en el problema 3, debe ser enviada por e-mail a "fmartin@cs.us.es" antes del miércoles 8 de Mayo con el "Subject" "Ejercicio-puntuable-5". No se admitirá ningún trabajo cuya fecha de envío sea posterior a la del día 8 de Mayo. ***************************************************************************** * PROBLEMA 1: * ***************************************************************************** Simular el algoritmo de inferencia regresivo con CLIPS. Las reglas son almacenadas en hechos de la forma: (regla (si es { y es }*) (entonces es )) dentro del fichero "reglas.dat". La variable objetivo será indicada con un hecho de la forma: (objetivo ) que también se incluirá en el fichero "reglas.dat". Aplicar dicho programa a los siguientes ejemplos: - Ejemplo 1: Las reglas son R1: Si la comida es a base de carne roja entonces lo conveniente es tomar vino rojo. R2: Si la comida es a base de pescado entonces lo conveniente es tomar vino blanco. R3: Si la comida es a base de carne de ave y ésta es pavo entonces lo conveniente es tomar vino rojo. R4: Si la comida es a base de carne de ave y ésta no es pavo entonces lo conveniente es tomar vino blanco. El objetivo es determinar el tipo de vino que conviene tomar. - Ejemplo 2: Las reglas son: R1: Si el paciente tiene arterioesclerosis y calambre en las piernas cuando anda, entonces tiene estenosis arterial. R2: Si el paciente fuma y tiene más de 60 años, entonces tiene arterioesclerosis. El objetivo es diagnosticar la enfermedad del paciente. ***************************************************************************** * PROBLEMA 2: * ***************************************************************************** ************************************************************ * Este problema forma parte de un ejercicio puntuable para * * realizar en casa, el código en Lisp debe ser enviado * * por e-mail a "fmartin@cs.us.es" antes del miércoles 8 * * de Mayo con el "Subject" "Ejercicio-puntuable-5". No se * * admitirá ningún trabajo cuya fecha de envío sea * * posterior a la del día 8 de Mayo. * ************************************************************ Modificar el motor de inferencia progresivo implementado en Lisp y cuyo código se proporciona en el fichero "mir.lsp" adjunto, de forma que: - Cada variable tenga asociada una propiedad más en la que se almacene el conjunto de conflicto de dicha variable. De esta forma se evita tener que construir el conjunto de conflicto cada vez que se necesita. - Se distingan dos tipos de variables: las simples, que pueden tomar un único valor y las múltiples, que pueden tomar un conjunto de valores. ***************************************************************************** * PROBLEMA 3: * ***************************************************************************** ************************************************************ * Este problema forma parte de un ejercicio puntuable para * * realizar en casa, el código en Lisp, junto con la base * * de conocimiento inventada, debe ser enviado por e-mail a * * "fmartin@cs.us.es" antes del miércoles 8 de Mayo con * * el "Subject" "Ejercicio-puntuable-5". No se admitirá * * ningún trabajo cuya fecha de envío sea posterior a * * la del día 8 de Mayo. * ************************************************************ Dada una base de conocimiento, se define el árbol de dependencia de reglas asociado a una variable objetivo como un árbol en el que todo nodo contiene una regla salvo el nodo raíz que contiene la variable objetivo considerada. Si en dicho árbol el nodo es hijo del nodo entonces el nodo contiene una regla en cuya conclusión aparece una de las variables que hay en el antecedente de la regla (o la varible que hay almacenada en dicho nodo, si se trata del nodo raíz). Se supone que una regla no se puede aplicar más de una vez para evitar ciclos infinitos. El árbol de dependencia de reglas da una idea de las reglas que hay que utilizar para deducir un valor para una variable objetivo. Ejemplo: - Con el conjunto de reglas: (defregla regla-1 (defregla regla-4 (and (igual x a) (and (igual x c) (igual x b)) (menor w 30)) (annade z f)) (annade v h)) (defregla regla-2 (defregla regla-5 (igual v b) (and (igual y d) (annade z g)) (menor w 10)) (annade v i)) (defregla regla-3 (defregla regla-6 (and (igual x d) (and (conocido x) (mayor w 0)) (distinto z e)) (annade z e)) (annade y d)) y suponiendo que "v" es una variable objetivo, el árbol de dependencia de reglas asociado a dicha variable es: +-------+ +---------| "v" |---------+ | +-------+ | | | +---------+ +---------+ | regla-4 | | regla-5 | +---------+ +---------+ | | +---------+ +--------| regla-6 |--------+ | +---------+ | | | | | | | +---------+ +---------+ +---------+ | regla-1 | | regla-2 | | regla-3 | +---------+ +---------+ +---------+ Se define la anchura de una base de conocimiento como la máxima anchura de los árboles de dependencia que se puedan construir en dicha base de conocimiento (tantos como varibles objetivo haya). Se define la profundidad de una base de conocimiento como la máxima profundidad de los árboles de dependencia que se puedan construir en dicha base de conocimiento (tantos como varibles objetivo haya). Crear un programa en Lisp que calcule la anchura y la profundidad de una base de conocimiento con la forma de las utilizadas con el programa "mir.lsp". Construir una base de conocimiento con contenido semántico, como en los ejemplos del ejercicio 1, cuya anchura y profundidad sea 5 y probar con ella el programa realizado.