| SISTEMAS
EXPERTOS APRA TECNICOS - PARTE 2
|
|
Creación en NePic de una
Base de Conocimiento Determinista para Soporte en
Reparaciones Electrónicas - Parte 2
Las reglas deterministas constituyen la más
sencilla de las metodologías utilizadas en
sistemas expertos. En la primera parte de este artículo
presentamos las bases necesarias para la implementación
de una base de datos que nos ayude en las tareas de
reparación. En esta segunda parte veremos la
implementación práctica de un sistema
experto para soporte en reparaciones electrónicas. |
|
|
Implementación de un sistema experto para
soporte en reparaciones electrónicas
En la figura 1 vemos los pasos necesarios para
la creación de un sistema experto:
En nuestro caso, aprenderemos a crear un sistema
experto que nos sirva como apoyo en el hallazgo
de fallas en equipos electrónicos (figura
2).
Para esto usaremos en NePic un intérprete
de reglas que permite generar sistemas expertos,
el código base que utiliza está
bajo entorno DOS, pero de todas formas es muy
didáctico, amigable y fácil de usar.
Este intérprete utiliza la filosofía
de encadenamiento hacia atrás, es decir
que toma como punto de inicio a los objetivos
y combina las reglas y los datos que forman la
base de conocimientos para tratar de cumplir estos
objetivos.
O sea con este programita no necesitamos preocuparnos
ni por la memoria de trabajo y lo que es más
importante tampoco por el motor de inferencia,
sólo debemos conocer cómo cargar
reglas y cuáles son los mensajes que deseamos
comunicar al usuario.
Con el propósito didáctico y de
no extendernos demasiado supondremos algunas reglas
muy simplificadas, a tener en cuenta para hallar
la falla de un circuito imaginario (o sea plantearemos
conocimiento ficticios) y las incorporaremos en
código a la base de datos creando un pequeño
sistema experto. Luego verificaremos su funcionamiento.
A partir de esto cada uno puede, siguiendo los
mismos pasos, personalizar su propio sistema experto
en base a los conocimientos y equipamiento electrónico
de diagnostico al que tenga acceso. Se pueden
generar bases de conocimiento muy extensas con
todo el conocimiento empírico del que dispongamos,
más informaciones de manuales, hojas de
datos, etc. Así para nuestro ejercicio,
supondremos, que se trata de reparación
de equipos de comunicaciones (radares) con un
monitor con tubo de rayos catódicos donde
se muestra la información (repito, es sólo
con fines ilustrativos, es un caso ficticio, de
todas maneras con información real funciona
muy bien). Tenemos pues, la siguiente información,
que obtuvimos de las posibles fuentes antes mencionadas
(manuales, expertos humanos, hojas de datos, etc)
(ver tablas 1 y 2):
Aquí podemos observar que en estas reglas,
pese a su simplicidad, se reúnen las ideas
básicas que mencionamos y hay reglas entrelazadas
de manera que en algunos casos las interrelaciones
entre varias de ellas no son tan obvias. Lo mismo
sucede en las reparaciones reales, hay veces que
una falla produce otra y el reparador tiene que
seguir una línea de razonamiento buscando
pistas; el diseñar un experto en base a
esto nos allana el camino o por lo menos nos orienta
en el razonamiento hacia soluciones.
Bueno, veamos cómo implementar estas reglas
en nuestro intérprete de reglas.
|
| |
|
Este software Ud. lo puede bajar gratuitamente
de nuestra web: www.webelec-tronica.com.ar, haciendo
click en el ícono password e introduciendo
la clave Neperto, se trata de la versión
actualizada de NePic. Para instalarlo, sólo
es muy importante tener en cuenta un detalle:
al comenzar la primer pantalla que vemos es una
que nos solicita el directorio destino, cambiar
el que se halla por defecto (generalmente C:\Archivos
de programa\ Nepic) por este C:\i2. Una vez instalado,
hacemos click en Inicio-> Programas-> NePic,
e ingresamos como vemos en la figura 3.
A continuación aparecerá
la siguiente pantalla, (figura 4), con las flechas
_ _ del teclado nos podemos mover en el menú,
seleccionar “Edit a knowledge base”
y luego dar enter. Luego presionamos F2 (que como
podemos ver corresponde a New, en el menú
que va surgiendo en la parte inferior de la pantalla,
cada número corresponde a una tecla de las
F) y ahí ingresar un nombre corto (figura
5) con el que llamaremos a nuestro experto, por
ejemplo simplemente experto y luego enter.
Y en la pantalla que aparece (figura
6) ya podemos implementar nuestro experto.
Veamos paso a paso el código
que pondremos y su significado. El arreglo típico
de un programa experto en este intérprete
de reglas tendrá los siguientes componentes:
- Título
- Declaración de variables
- Inicialización de variables
- Objetivos
- Reglas
- Carteles de información
- Finalización
|
|
El título
es una cadena de hasta 60 caracteres. Esta instrucción
es obligatoria y es la primera línea de todo
programa. Para indicarlo se antecede con la palabra
reservada TITLE, en nuestro ejemplo será:
TITLE Experto electrónico |
| |
|
Aquí podremos
declarar cuatro tipos diferentes de variables, éstas
podrán ser:
- NUMERIC (Número entero o real)
- SIMPLEFACT (Variable de tipo booleano)
- STRING (Cadena de caracteres)
- OBJECT (Variable de tipo objeto)
Las variables pueden representarse
mediante cualquier cadena de caracteres.
Esta cadena debe utilizarse durante
todo el programa exactamente como fue definida,
respetando mayúsculas, minúsculas
y espacios.
Además si colocamos AND
a continuación de una variable que fue definida,
la que sigue será del mismo tipo. Las variables
de tipo booleano sólo pueden representar
verdadero o falso y se denominan hechos simples.
Las variables de tipo objeto son
aquellas a las que se les puede asignar algún
atributo que las identifique.
Por ejemplo, para la variable de
tipo objeto Color, el atributo podría ser
Verde, Amarillo, Azul, Rojo. En nuestro ejemplo
serán:
- SIMPLEFACT PantallaAmarilla
- SIMPLEFACT TemperaturaNormal
- SIMPLEFACT AumentoTemperatura
- SIMPLEFACT FrecuenciaNormal
- SIMPLEFACT ComponenteExcedido
- SIMPLEFACT ComponenteDisminuido
- SIMPLEFACT AspectoNormal
- AND ImagenDébil
- AND ColorDisplayNormal
- AND BajoVoltajeFuente
- NUMERIC Frecuencia
- NUMERIC Temp1
- NUMERIC Temp2
|
| INICIALIZACION
DE VARIABLES |
|
Permite asignar
a las variables declaradas un valor inicial, la
sintaxis es:
INIT (Variable): = (Valor
inicial)
También en este caso, si
se desea inicializar más de una variable,
se debe utilizar el conector AND. Cualquier variable
que no se inicialice es preguntada al usuario por
el motor de inferencias cuando se requiera.
En nuestro ejemplo queremos que
todas las variables que se necesiten para el diagnóstico
sean preguntadas o calculadas en base a las solicitadas,
por lo que no inicializamos ninguna variable, pero
puede ser muy útil en ciertos casos. |
| |
|
Los objetivos
pueden representarse por dos de los tipos de variables:
Objetos / atributos o Hechos simples.
Cada objetivo se indica con un
número seguido de un punto y la variable.
- 1. (Primer objetivo, objeto/atributo o hecho
simple)
- 2. (Segundo objetivo, objeto/atributo o hecho
simple)
- 3. ...
Durante la ejecución del
programa el NePic intenta, en base a los datos y
a las reglas, concluir acerca de alguno de los objetivos
siguiendo el orden de numeración. En el caso
de los hechos simples el programa intenta determinarlos
como verdaderos. En el caso de los objetos/atributos
el programa intenta asignarle al objeto algún
atributo.
En este último caso se utiliza
para la definición del objetivo la palabra
reservada WHAT. En la configuración por defecto
de NePic, una vez que el programa verifica un objetivo
la ejecución se detiene. También existe
la posibilidad de definir subobjetivos para cada
uno de los objetivos:
- 1. (Primer objetivo)
- 1.1. (Primer subobjetivo del primer objetivo)
- 1.2. (Segundo subobjetivo del primer objetivo)
- 1.2.1. (Primer subobjetivo del segundo subobjetivo
del primer objetivo)
- 2. (Segundo objetivo)
- 2.1. ...
En los casos en los que se definen
subojetivos el programa intenta verificar primero
algún objetivo y, en caso de lograrlo, intenta
verificar algún subojetivo del objetivo verificado.
En la configuración por defecto el programa
se detiene cuando se verifica algún subobjetivo
del último nivel definido.
También existen los objetivos
intermedios, que son aquellos que no se definen
en la sección de objetivos pero que aparecen
en las reglas. Su propósito es el de encadenar
reglas, ya que NePic activa sólo a aquellas
que poseen objetivos en sus consecuentes.
Si los objetivos internos se ubican
en el antecedente de algunas reglas, el NePic activará
aquellas reglas que posean estos mismos objetivos
en su consecuente para intentar asignarles algún
valor.
En nuestro programa colocaremos
según la tabla de conocimiento, los siguientes
objetivos:
- 1. FuncionaOK,
- 2. CañónDañado,
- 3. Descalibrado,
- 4. ElevadorDañado
|
|
Para cargar las
reglas debemos obedecer la siguiente sintaxis:
- RULE (Título de la regla)
- IF (Antecedentes)
- THEN (Consecuentes)
El título de la regla puede
ser cualquier cadena de caracteres y no tiene ningún
significado para NePic. Sólo se utiliza para
identificar el propósito de la regla. Los
antecedentes y consecuentes se escriben de a uno
por línea, conectados mediante los conectores
lógicos AND, OR, NOT (OR no debe usarse en
los consecuentes). |
| |
|
Algo muy importante
y que hace a la interfaz con el usuario son los
carteles de información. Estos se utilizan
para expandir la información que se presenta
al operario del programa. Dos formas posibles de
expandir la información implican el uso de
los comandos reservados DISPLAY y TEXT. Estos obedecen
a la siguiente sintaxis:
- DISPLAY (Título del mensaje) (Cuerpo
del mensaje)
- TEXT (Variable a expandir) (Cuerpo del mensaje)
DISPLAY se utiliza en los consecuentes
de las reglas para mostrar información resultado
de la regla, mientras que TEXT se utiliza para reemplazar
una variable cualquiera por un texto que la explique.
En ambos casos se puede mostrar el valor de las
variables al operario, incluyéndolas en el
mensaje entre corchetes. Para llamar al mensaje
de DISPLAY deseado en el consecuente de la regla
se agrega AND y a continuación el nombre
del DISPLAY . |
| |
|
En todo programa
hecho NePic requiere el uso de la palabra reservada
END en la última línea. En la figura
7 podemos observar el código completo de
este ejemplo. Una vez que pasemos todo este código,
sólo queda compilar la aplicación;
para esto presionar\ F3 para guardar y luego F4
para compilar. Si todo está bien, el programa
nos informa que no hay errores y ahora sólo
queda correrlo, lo que se logra ahora presionando
F3. Con esto empezará a funcionar nuestro
experto solicitándonos datos ( figura 8 ).
Para asegurarnos que funcione bien,
podemos probarlo contestando y guiándonos
por la tabla para ver si razona según lo
planeado. Por ejemplo:
- ¿Cuál es el valor en ºC
de la temperatura al encender el equipo?
25 ºC
- ¿Cuál es el valor en ºC
de la temperatura luego de 15 minutos de encendido?
50 ºC
- ¿Se observa la pantalla con tono
amarillento? true
- ¿La imagen pierde fuerza en el
interlineado? true
Con lo que el sistema nos responderá
como vemos en la figura 9. Una vez que compilamos
una base de conocimiento podemos usar nuestro experto
corriéndola cuantas veces queramos eligiendo
“Run a knowledge base” en el menú
inicial y luego la base deseada, lo mismo para modificarla
con “Edit a knowledge base”, incluso
este ejemplo que vimos ya está con el nombre
de ejemplo y podemos cargarlo sin necesidad de pasar
todo el código. Para salir se usa F10 y luego
F1, y F8 para retornar al menú. Bueno ahora
sólo queda diseñar sus propios sistemas
expertos y disfrutar de éstos. |
| |
Autor:
Sergio Raúl Richter - Con la colaboración
de Mariana Ortúzar
E-Mail: sergioraulrichter@yahoo.com.ar |
|
|
|
|