Jess II

Anuncio
Sistemas Expertos
Caso de Estudio:
Selección de un
microcontrolador
Introducción
Un Sistema Experto (SE) clásico comienza con
una serie de preguntas.
En base a las respuestas genera una
recomendación.
Para la recomendación de un microcontrolador
se debe proveer cierta información sobre el
sistema en el cual se aplicará.
El primer paso es colectar la información.
Construcción de un SE: Fases del desarrollo
Identificación
Reformulación
Requerimientos
Conceptualización
Reformulación
Conceptos
Caracterizar los aspectos
importantes del problema
Encontrar los conceptos para
representar el conocimiento
formalización
Rediseño
Estructura
Diseñar las estructuras para
representar el conocimiento
Implementación
Desarrollo del sistema
Refinamiento
Reglas
Testeo
Validación del sistema
Ingeniería del conocimiento
Un sistema basado en reglas se relaciona con un
dominio.
Dominio: Subconjunto del conocimiento global.
El proceso de colectar la información sobre el dominio
es llamado adquisición del conociminto y es una de las
tareas de la Ingeniería del Conocimiento (IC).
El ingeniero del conocimiento -sin tener que
convertirse en un experto- debe conocer los
requerimientos, principios, recursos y fronteras
Entrevistas y Documentación
La IC es un proceso iterativo:
–
–
–
–
–
–
Charlas con los clientes (necesidades y recursos).
Estimaciones del tiempo de desarrollo.
Estudio sobre el dominio (se logra mejor
comunicación con los expertos).
Entrevista con el experto.
Estructura de la información recabada (esbozo,
diagrama de flujo, etc).
Código Jess con comentarios.
Entrevistas
Debe haber acuerdos entre los clientes y los
potenciales usuarios del sistema.
La gente es la mejor fuente de información.
La gente también recomienda libros, sitios
web, y a otra gente que puede ayudar a
entender el dominio del problema.
Es conveniente no utilizar lenguaje específico
de programación.
Reglas potenciales I
Juguetes especiales, como un auto a control
remoto requiere alta velocidad de respuesta,
necesita un ancho de palabra de 32 bits y
consume bastante energía.
Un sistema de frenos ABS implementa cálculos
críticos en tiempo limitado y 16 bits de ancho
de palabra son suficientes.
Reglas potenciales II
La implementación de un lavarropas es de 16 bits
y consume bastante energía.
La placa de un mouse óptico requiere más de 80
MHz de velocidad, 32 bits y consume menos de
4.8 V.
Cualquier sistema que requiera cálculos críticos en
tiempo limitado necesita alta velocidad de
respuesta.
Reglas potenciales III
Características de algunos microcontroladores
PIC32:
–
–
PIC32MX320: 4.8 V a 6 V, 80 MHz.
PIC32MX200: menos de 4.8 V, 80 MHz.
Características de algunos microcontroladores
PIC16:
–
–
–
PIC16F1947: 80 MHz.
PIC16F8XX: 4.8 V a 6 V.
PIC16F6XX: 80 MHz.
Dando forma a las reglas y
plantillas
Cualquier sistema
que requiera
cálculos críticos en
tiempo limitado
necesita alta
velocidad de
respuesta
Los micros con
mejor velocidad
de respuesta
son de 80 Mhz
"Una placa de alta
velocidad de respuesta
debe proveer 80 MHz"
Dando forma a las reglas y
plantillas II
Los micros que
soportan más
energía proveen
entre 4.8 y 6
Voltios
La implementación
de un lavarropas es
de 16 bits y
consume bastante
energía.
"Sistemas que requieren
bastante energía deben
contar con placas de más
de 4.8 Voltios"
Dando forma a las reglas y
plantillas III
¿Template
lavarropas?
¿Slot
lavarropas?
¿Energía:
template o
slot?
¿Un Slot "voltaje o energía
corresponde con una
plantilla de aplicación o de
micro?
¿Template
usuario?
¿Template
velocidadcálculos?
Reglas en Jess
(defrule calculos-criticos
?t <- (MAIN::aplicacion (complejidad-calculos
"critica") (tiempo "limitado"))
=>
(modify ?t (velocidad "rapido")))
(defrule energia-alta
?t <- (MAIN::aplicacion (energia "bastante"))
=>
(modify ?t (energia (> 4.8))))
Revisión de reglas I
Generalmente, falta información.
Se debe desarrollar una serie de nuevas preguntas y
reunirse con el experto nuevamente (iteraciones).
La IC no necesariamente termina cuando comienza
el desarrollo.
Se comienza a mostrar un prototipo en las
entrevistas.
A veces el ingeniero del conocimiento es también un
programador.
Revisión de reglas II
(defrule calculos-criticos
?t <- (MAIN::aplicacion (complejidad-calculos
"critica") (tiempo "limitado") (velocidad nil))
=>
(modify ?t (velocidad "rapido")))
(defrule energia-alta
?t <- (MAIN::aplicacion (energia "bastante"))
=>
(modify ?t (energia 6)))
Organización de los datos
Las reglas Jess trabajan por reconocimiento
de patrones sobre los hechos.
Para escribir las reglas se debe tener idea de
cómo serán los hechos y viceversa. ¿Cómo
empezar?
–
Candidatos para deftemplate: micro (un
microcontrolador específico), usuario (el operador
del sistema), aplicación (requerimientos), pregunta,
respuesta, recomendación.
Templates
(defrule micro-200
(aplicacion (energia 4.8) (palabra 32) (velocidad "80"))
=>
(assert (micro (nombre "PIC32MX200"))))
aplicacion
energia
palabra
velocidad
¿slot nombre?
micro
nombre
¿algún slot más?
Estructura del sistema
El recomendador necesita hacer cuatro cosas:
–
–
–
Inicializar la aplicación.
Ver qué micro recomendar.
Mostrar al usuario los micros recomendados.
Estos tres pasos se mapean a tres fases de
procesamiento: Módulos inicio,
recomendacion, reporte.
Organización de las reglas
Defmodules particiona los hechos y las reglas.
Se necesita decidir qué templates van en cada
módulo observando qué reglas necesitan acceder
a los datos.
Recordar que si dos módulos necesitan compartir
una plantilla, ésta debe estar en el módulo main.
–
Observemos que en nuestro ejemplo tendremos
dos templates: aplicacion y micro en el módulo
MAIN.
Escribiendo el código I
Se codifica todo el conocimiento al formato de las
reglas Jess:
(defrule auto-palabra
?t <- (MAIN::aplicacion (nombre "Auto a control remoto"))
=>
(modify ?t (palabra 32)))
Para lanzar el sistema:
(deffunction ejecutar ()
(reset)
(focus inicio recomendacion respuesta)
(imprime-inicio)
(run))
Escribiendo el código II
La activación y el lanzamiento de las reglas
conduce a la asignación del nombre del
microcontrolador:
(defrule responder
?m <- (micro (nombre ~nil))
=>
(printout t ?m.nombre crlf))
Código Resultante
Descargar