Download Ingeniería del Conocimiento Ingeniería Electrónica

Document related concepts
no text concepts found
Transcript
Ingeniería del Conocimiento
Ingeniería Electrónica
Práctica 2 - Sistemas Expertos y Jess
1) (Jess) Considere las siguientes reglas para aconsejar las actividades a una persona:
R1: vacaciones ˄ examen = no → Tiempo_libre
R2: dinero → Actividad = compras
R3: Tiempo_libre ˄ dinero → Actividad = viaje
R4: examen = si → Actividad = estudio
R5: desocupado → Tiempo_libre
a) Se desea determinar cuál será la actividad de Juan utilizando Jess, sabiendo que
está desocupado y tiene dinero.
b) Ahora suponga Pedro tiene vacaciones, no rinde examen, tiene dinero.
2) (Jess)
Dadas las siguientes reglas para diagnóstico y tratamiento de enfermedades simples:
Si temperatura alta
Entonces fiebre
Si fiebre y dolores en el cuerpo y dolor de garganta
Entonces gripe
Si dolor de garganta y estornudos
Entonces resfrío
Si fiebre y gangleos inflamados
Entonces infección
Si resfrío
Entonces aspirina y abrigarse
Si gripe
Entonces paracetamol y acostarse
Si infección
Entonces antibióticos
a) Crear en Jess los objetos necesarios y sus slots correspondientes para poder representar
estructuradamente las variables del sistema.
b) Implementar las reglas dadas y probar el sistema.
c) Inferir un diagnóstico y un tratamiento para un conjunto de síntomas ingresado por teclado.
; Ayuda para posible solución:
; Considerar que una persona tiene un nombre y puede sentir determinados
; síntomas. La medicina trata de deducir diagnósticos a partir de ciertos
síntomas.
1
; En general, una vez determinado un diagnóstico, se recetan indicaciones.
; Con este razonamiento, un ejemplo de cómo se puede estructurar la información
es el siguiente:
(deftemplate persona (slot nombre) (multislot sintomas))
(deftemplate medicina (multislot sintomas) (slot diagnostico))
(deftemplate tratamiento (slot diagnostico) (multislot indicaciones))
(deffunction ingreso ()
(printout t "Ingrese el nombre de la persona:" crlf)
(assert (persona (nombre (read))))
)
(defrule ingresoR
?t <- (persona (sintomas $?l))
;(bind ?nom (read))
=>
(printout t "Cargar síntoma? s/n" crlf)
(bind ?var (read))
(if (eq ?var s) then (modify ?t (sintomas ?l (read)))))
;
;
;
;
;
El objetivo consiste en conseguir indicaciones médicas para una persona
que padece ciertos síntomas. Es decir, la entrada al sistema será una persona
con determinados síntomas y la salida, un conjunto de indicaciones.
En este caso, las reglas asociarán personas con diagnósticos y
diagnósticos con indicaciones. Por ejemplo:
(defrule M1
?m <- (medicina (sintomas dolor-garganta estornudos))
=>
(modify ?m (diagnostico resfrio)))
(defrule T1
?t <- (tratamiento (diagnostico resfrio))
=>
(modify ?t (indicaciones aspirina abrigarse)))
; Posteriormente, se deberá conectar los síntomas de las personas con los
síntomas de la medicina
; y los diagnósticos médicos con los diagnósticos de los tratamientos:
(defrule PM
(persona (sintomas $?v)) => (assert (medicina (sintomas ?v))))
(defrule MT
(medicina (diagnostico ?v)) => (assert (tratamiento (diagnostico ?v))))
; Entonces, una vez encadenadas las acciones, nos interesan las indicaciones
recomendadas.
(defrule imprime
(tratamiento (indicaciones $?lista&:(<> (length$ $?lista) 0))) => (printout
t "Tratamiento: " ?lista crlf))
; Por último, se lanza el sistema:
(reset)
(ingreso)
(run)
2
3) (Jess)
Dadas las siguientes reglas para diagnosticar problemas típicos en el uso de PCs:
Si programa falla
Entonces programa erróneo
Si programa erróneo
Entonces bug en el código
Si año de compra >= 2007
Entonces PC nueva
Si año de compra < 2007
Entonces PC vieja
Si programa lento y PC nueva
Entonces memoria insuficiente
Si programa lento y PC vieja
Entonces PC obsoleta
Si PC obsoleta
Entonces renovar PC
Si memoria insuficiente
Entonces memoria saturada
Si programa se tilda
Entonces conflictos
Si conflictos o memoria saturada
Entonces sistema operativo sobrecargado
Si bug en el codigo
Entonces corregir fuentes
Si sistema operativo sobrecargado
Entonces reiniciar PC
a) Crear en Jess templates de hechos ordenados para poder representar las variables del sistema.
b) Implementar las reglas.
c) ¿Qué acción se debe tomar si el programa funciona lentamente en una PC 2008?
4) (Java (reglas en Jess)).
Dada la siguiente clase Java:
/******************************
archivo Complejo.java
******************************/
package compl;
public class Complejo {
private double real;
3
private double imag;
public Complejo(double real, double imag) {
this.real = real;
this.imag = imag;
}
public double getReal() {
return real;
}
public double getImag() {
return imag;
}
}
Diseñar un programa en java que pida el ingreso de un complejo por teclado y determine a qué
cuadrante pertenece mediante el uso de reglas jess.
Solución:
La clase Cuadrantes copiada a continuación posee un método main que toma por teclado la
parte real y la parte imaginaria de un complejo c y ejecuta un motor de inferencia para determinar a
qué cuadrante pertenece el complejo c.
/******************************
archivo Cuadrantes.java
******************************/
package compl;
import jess.JessException;
import java.io.*;
public class Cuadrantes {
public static void main(String[] args) throws JessException, IOException {
Motor m = new Motor();
System.out.println("Ingrese la parte real: ");
double a = leeDouble();
System.out.println("Ingrese la parte imaginaria: ");
double b = leeDouble();
m.comenzar(new Complejo(a, b));
}
public static String leeLinea() throws IOException {
BufferedReader d = new BufferedReader(new InputStreamReader
(System.in));
return d.readLine();
}
public static double leeDouble() throws IOException {
return Double.valueOf(leeLinea()).doubleValue();
}
}
La clase Motor posee un único campo miembro llamado motor de tipo Rete. El constructor de
la clase carga el archivo "cuadrantes.clp". Este archivo jess permite crear complejos a partir de la
clase java, y contiene las reglas para determinar el cuadrante de un complejo dado.
4
La clase Motor posee además, un método comenzar, que envía el complejo ingresado por
teclado a la base de datos del motor y lanza su ejecución.
/******************************
archivo Motor.java
******************************/
package compl;
import jess.JessException;
import jess.Rete;
public class Motor {
private Rete motor;
public Motor() throws JessException {
motor = new Rete();
motor.reset();
motor.batch("cuadrantes.clp");
}
public void comenzar (Complejo z) throws JessException {
motor.add(z);
motor.run();
}
}
; archivo cuadrantes.clp
(import compl.*)
(deftemplate Complejo (declare (from-class Complejo)))
(defrule RA
(Complejo (real ?a&:(>= ?a 0)) (imag ?b&:(>= ?b 0)))
=>
(printout t "Z = " ?a " + " ?b "i -> Cuadrante I " crlf))
(defrule RB
(Complejo (real ?a&:(< ?a 0)) (imag ?b&:(>= ?b 0)))
=>
(printout t "Z = " ?a " + " ?b "i -> Cuadrante II " crlf))
(defrule RC
(Complejo (real ?a&:(< ?a 0)) (imag ?b&:(< ?b 0)))
=>
(printout t "Z = " ?a " + " ?b "i -> Cuadrante III " crlf))
(defrule RD
(Complejo (real ?a&:(>= ?a 0)) (imag ?b&:(< ?b 0)))
=>
(printout t "Z = " ?a " + " ?b "i -> Cuadrante IV " crlf))
Nota: Recordar que para que se pueda ejecutar jess desde java se deben haber seguido los
siguientes pasos:
a) Seleccionar el proyecto y hacer click derecho.
5
b) Seleccionar propiedades.
c) Seleccionar Java Build Path -> Libraries -> Add External JARs...
d) Seleccionar jess.jar (buscarlo en la carpeta ...\Jess71p2\Jess71p2\lib)
5) (Java (reglas en Jess)).
Si los clientes tienen entre 15 y 25 años, les agrada el rock, y prefieren las bandas nacionales es
conveniente recomendarles “Circo Beat” de Fito Páez. Si en cambio prefieren las bandas de rock
extranjeras, la mejor opción es “Pop” de U2. Si el género preferido es el folklore, lo más adecuado
es “Tarefero de mis pagos” de Chango Spasiuk.
Para los clientes de más de 25 años que se inclinan por el rock, y prefieren las bandas
nacionales, aconsejar “Almendra (1969)” de Almendra, si en cambio se inclinan por las bandas
extranjeras, conviene recomendar el “Álbum Blanco” de Los Beatles. En caso de que prefieran el
folklore, la mejor opción es “Luna Tucumana” de Atahualpa Yupanqui.
a) Representar utilizando la estructura de objetos de Java el conocimiento del dominio presentado,
de forma de implementar un sistema capaz de recomendar un CD de música. Utilizar las reglas
generadas y el motor de Jess para acceder a las conclusiones.
b) Pruebe el sistema en los siguientes casos ingresando los siguientes datos por teclado:
- El cliente es Juan que tiene 20 años, le encanta el rock y prefiere la música nacional.
- El cliente es Susana, de 37 años que prefiere el folklore.
6) (Jess)
a) Diseñar un programa en Jess que resuelva el siguiente Sudoku de tamaño 4:
1
4
2 3 1 4
7) (Jess)
Elección de monitor para PC
Los monitores para PC pueden clasificarse de acuerdo a su resolución. Los monitores de baja
resolución, pequeños, monocromáticos, aconsejables para aplicaciones de línea tales como
cajeros de supermercados. Los monitores estándar y los de resolución mejorada, aconsejables para
aplicaciones hogareñas o de oficina. En estas últimas aplicaciones, si el monitor se utilizará durante
períodos prolongados, se sugiere el de resolución mejorada aunque por supuesto es más caro.
Finalmente están los monitores profesionales cuyo dot pitch es menor o igual a 0.28 pulgadas. Estos
monitores profesionales se aconsejan para aplicaciones específicas que requieren diferentes
características:
• Para diseño asistido por computadora (CAD) se requiere un manejo aceptable del color, pero
muy bajo nivel de distorsión y se aconseja pantalla plana.
• Para diseño gráfico, es fundamental un muy buen manejo del color.
• Para aplicaciones médicas, se aconseja monitor monocromático, pero con una
excelente escala de grises y relación de tamaño invertida (monitor vertical).
a) Educir las reglas de este sistema en lenguaje natural y representarlas en Jess.
6
b) Implementar en Jess un menú de opciones para seleccionar el uso que el cliente le dará al
monitor exponiendo una lista con las posibles aplicaciones. Sólo en caso de ser necesario
activar preguntas adicionales.
c) Determinar el monitor que se aconseja adquirir utilizando las reglas del sistema e imprimirlo
en pantalla.
8) Problema ejemplo para entregar en grupo (utilizar esta situación o una similar)
Lo siguiente es lo que respondió un experto en placas de video para PCs de escritorio, cuando se le
preguntó sobre las características principales a tener en cuenta a la hora de seleccionar una placa
de video para incorporarle a una computadora:
“A la hora de seleccionar una placa de video, se tienen que tener en cuenta algunos factores
fundamentales, que son compatibilidad, velocidad, y precio. En general las placas de video de
marca Nvidia son más compatibles con gran variedad de sistemas operativos, ya que están
fabricadas con componentes estándar y además la empresa permite la descarga de actualizaciones
de drivers desde Internet. Las placas de marca ATI son buenas placas, y veloces, pero funcionan
correctamente sólo bajo Windows, quitándose responsabilidad el fabricante si el usuario desea
instalar algún otro sistema operativo. Los modelos más nuevos de Nvidia son bastante más rápidos
que sus antecesores, pero todo en detrimento del precio.
Comparando modelos de Nvidia y ATI lanzados al mercado en fechas similares, se puede observar
que el modelo de ATI correspondiente es un poco más veloz, aunque el de Nvidia es más barato,
salvo que se tome el mismo modelo de Nvidia pero con más memoria interna, en cuyo caso el
precio aumenta, pero las prestaciones son claramente superiores.
Ahora bien, todo esto se tiene que tener en cuenta si el usuario desea la computadora para algo más
que utilización cotidiana de escritorio e Internet, es decir, básicamente para juegos y diseño en 3
dimensiones.
Si el usuario solamente utilizará la computadora para escribir en algún procesador de textos,
navegar por Internet, o incluso ver películas en CD o DVD, le bastará con una placa de video que
venga incorporada en el motherboard de la computadora. Una ventaja adicional es que las placas de
video integradas son mas baratas que el modelo correspondiente de una placa no integrada,
probablemente porque el fabricante se ahorra componentes en la memoria interna de la placa. En
este caso, la memoria que se le asignará a la placa de video puede ser variable (ya que se utiliza la
memoria del sistema, no memoria interna de la placa), pero lo que si hay que tener en cuenta son las
marcas de las placas de video integradas, por las mismas cuestiones de compatibilidad que se
enunciaron previamente.
Las motherboard marca Intel tienen integradas placas de video marca Nvidia, en cambio las
motherboard marca Asus, tienen integradas placas de video marca ATI. Las placas de video
integrada no ofrecen la posibilidad de tener salida a TV (característica bastante útil cuando el
cliente piensa ver películas con su computadora), en cambio cuando se compra una placa de video
no integrada, es posible por un poco de diferencia de precio comprar el modelo que tiene salida a
TV.
Lo que se le suele preguntar al cliente cuando viene a comprar una computadora es para qué tiene
pensado usarla, como para ver que background tiene y si va a necesitar algo específico o se le puede
dar lo estándar con el objetivo de ahorrar dinero. Obviamente para esto se tiene en cuenta el
presupuesto disponible por el cliente, y los conocimientos de computación que pueda llegar a tener,
para ver si luego él mismo podrá modificar la configuración de su computadora (bajándose
actualizaciones, instalando nuevo hardware, o probando su nueva adquisición con diferentes
sistemas operativos, programas y/o juegos).”
Se pide:
a) Representar el dominio del problema y estructurarlo utilizando Jess y/o Java.
7
b) Obtener del texto un grupo de entre 10 y 15 reglas implícitas y enunciarlas en lenguaje
natural.
c) Implementar un mini sistema experto, que le ayude a una persona que tiene pensado
comprarse una computadora a decidir qué placa de video incorporar en su futura máquina.
Proveer una interface adecuada.
d) Escribir un pequeño informe, explicitando el desarrollo realizado, qué ventajas y desventajas
tiene, y qué mejoras podrían hacerle.
e) Entregar el trabajo en formato impreso y electrónico a [email protected] (nombrar
los archivos con los apellidos de los autores).
8