Está en la página 1de 22

Captulo 9

Sistemas Expertos
Resumen En este captulo abordaremos uno de los productos tpicos de la Inte-
ligencia Articial: los Sistemas Expertos. Normalmente, usamos herramientas de
desarrollo conocidas con shells para construir este tipo de sistemas, pero si nece-
sitamos congurar un shell para una aplicaci on en particular, es necesario conocer
como es que un sistema experto se construye desde cero. El captulo constituye el
segundo ejemplo del uso de Prolog para resolver problemas tpicos de la Inteligencia
Articial
9.1. Introducci on
Los sistemas expertos (SE) son aplicaciones de c omputo que involucran expe-
riencia no algortmica, para resolver cierto tipo de problema. Por ejemplo, los siste-
mas expertos se usan para el diagn ostico al servicio de humanos y m aquinas. Existen
SE que juegan ajedrez, que planean decisiones nancieras, que conguran compu-
tadoras, que supervisan sistemas de tiempo real, que deciden polticas de seguros, y
llevan a cabo dem as tareas que requieren de experiencia humana.
Los SE incluyen componentes del sistema en s e interfaces con individuos con
varios roles. Esto se ilustra en la gura 9.1. Los componentes m as importantes son:
Base de conocimientos. La representaci on declarativa de la experiencia, muchas
veces en forma de reglas IF-THEN.
Almac en de trabajo. Los datos especcos al problema que se est a resolviendo.
M aquina de inferencia. El c odigo central del SE que deriva recomendaciones con
base en la base de conocimientos y los datos especcos del problema.
Interfaz del usuario. El c odigo que controla el di alogo entre el usuario y el SE.
Para entender un SE es necesario entender tambi en el rol de los usuarios que
interaccionan con el sistema:
Experto del Dominio. El o los individuos que son los expertos en resolver el
problema que el SE intentar a resolver.
99
100 9 Sistemas Expertos
Experto en
el Dominio
Ingeniero del
Conocimieno
Usuario
Ingeniero en
Sistemas
Interface con
el Usuario
Mquina de
Inferencia
Base de
Conocimiento
Almacn de
Trabajo
Experiencia
Figura 9.1 Componentes de un sistema experto e interfases humanas
Ingeniero de Conocimiento. El individuo que codica el conocimiento de los
expertos en forma declarativa, para que pueda ser usado por el SE.
Usuario. El individuo que consultar a el SE para obtener los consejos que espe-
rara de un experto del dominio.
Muchos SE se producen en ambientes de desarrollo conocidos como shells. Un
shell es un sistema que contiene la interfaz del usuario, un formato de conocimiento
declarativo para la base de conocimientos y una m aquina de inferencia. El ingeniero
de conocimiento usa el shell para construir un SE que resuelve problemas en un
dominio particular.
Si el sistema se construye desde cero, o utilizando shells congurados para cierto
tipo de aplicaciones, otro individuo entra en escena:
Ingeniero de Sistemas. La persona que construye la interfaz del usuario, dise na
el formato declarativo de la base de conocimientos, e implementa la m aquina de
inferencia adivinan cual es su rol?
En realidad eso depende de la talla del proyecto: El ingeniero de conocimiento
y el ingeniero del sistema, pueden ser la misma persona. El dise no del formato
de la base de conocimientos y su codicaci on est an ntimamente relacionados. Al
proceso de codicar el conocimiento de los expertos, se le conoce como ingeniera
del conocimiento. Siendo esta una tarea complicada, se espera el uso de los shells
haga posible la reutilizaci on del conocimiento codicado. En estas sesiones nos
concentraremos en la programaci on en Prolog de los SE al margen del uso de las
shells.
9.2 Caractersticas de los SE 101
9.2. Caractersticas de los SE
Los SE poseen las siguientes caractersticas, en menor o mayor grado:
Razonamiento guiado por las metas y encadenamiento hacia atr as. Una t ecnica
de inferencia que usa las reglas IF-THEN para descomponer las metas en sub-
metas m as f aciles de probar.
Manejo de incertidumbre. La habilidad del SE para trabajar con reglas y datos
que no son conocidos con precisi on.
Razonamiento guiado por los datos y encadenamiento hacia adelante. Una t ecni-
ca de inferencia que usa las reglas IF-THEN para deducir soluciones a un pro-
blema a partir de los datos iniciales disponibles.
Representaci on de datos. La forma en que los datos especcos a un problema
dado, son almacenados y accesados por el SE.
Interfaz del usuario. La parte del SE que se usa para una interacci on m as amiga-
ble con el usuario.
Explicaci on. La habilidad del SE para explicar sus procesos de razonamiento y
su uso en el c omputo de recomendaciones.
9.2.1. Razonamiento basado en metas
El encadenamiento hacia adelante, o razonamiento basado en metas, es una for-
ma eciente de resolver problemas que pueden ser modelados como casos de se-
lecci on estructurada; donde la meta del SE es elegir la mejor opci on de entre varias
posibilidades enumeradas. Por ejemplo, los problemas de identicaci on caen en esta
categora. Los problemas de diagn ostico tambien caben aqu, pues se trata de elegir
el diagn ostico adecuado.
El conocimiento se codica en reglas que describen como es que cada caso po-
sible podra ser seleccionado. La regla rompe el problema en sub-problemas. Por
ejemplo, las siguientes reglas formaran parte de un SE para identicar aves:
1 IF
2 familia es albatros AND
3 color es blanco
4 THEN
5 ave es albatros laysan.
6
7 IF
8 familia es albatros AND
9 color es negro
10 THEN
11 ave es albatros de pies negros.
El sistema puede usar otras reglas para resolver las sub-metas planteadas por las
reglas de alto nivel, por ejemplo:
102 9 Sistemas Expertos
1 IF
2 orden es tubonasales AND
3 tamano es grande AND
4 alas es grandes anguladas
5 THEN
6 familia es albatros.
9.2.2. Incertidumbre
Es muy com un en la resoluci on de problemas de selecci on estructurada, que la
respuesta nal no es conocida con total certeza. Las reglas del experto pueden ser
vagas, o el usuario puede estar inseguro sobre sus respuestas. Esto es f acilmente
observable en el diagn ostico m edico. Los SE normalmente usan valores num ericos
para representar certidumbre. Existen diveras maneras de denirlos y usarlos en el
proceso de razonamiento.
9.2.3. Razonamiento guiado por los datos
Para muchos problemas no es posible enumerar las soluciones alternativas a las
preguntas planteadas con antelaci on. Los problemas de conguraci on caen en esta
categora. El encadenamiento hacia adelante, o razonamiento guiado por los datos,
usa reglas IF-THEN para explorar el estado actual en la soluci on del problema y
moverse a estados m as cercanos a la soluci on.
Un SE para acomodar el mobiliario puede tener reglas para la ubicaci on de un
mueble en particular. Una vez que un mueble ha sido colocado, se puede proceder
con los dem as. La regla para colocar la TV enfrente del sof a es como sigue:
1 IF
2 no_colocada tv AND
3 sofa en pared(X) AND
4 pared(Y) opuesta a pared(X)
5 THEN
6 colocar tv en pared(Y).
Esta regla toma un estado del problema con la televisi on no situada y regresa un
estado nuevo, donde la televisi on ya ha sido colocada. Puesto que la televisi on ya
ha sido colocada en su lugar, esta regla no volver a a ser disparada por el SE. Otras
reglas ser an usadas para colocar el resto de los muebles hasta terminar.
9.3 Usando la m aquina de inferencia de Prolog 103
9.3. Usando la m aquina de inferencia de Prolog
Como pueden haber adivinado, Prolog posee una m aquina de inferencia por en-
cadenamiento haca atr as. Esta m aquina puede usarse parcialmente para implemen-
tar algunos SE. Las reglas de Prolog ser an usadas para representar conocimiento
y su m aquina de inferencia ser a usada para derivar conclusiones. Otras partes del
sistema, como la interfaz con el usuario deber an escribirse usando Prolog.
Usaremos el problema de identicaci on de aves norteamericanas para ilustrar la
construcci on de un SE con Prolog. La experticia del SE se basa en un subconjunto de
las reglas reportadas en Birds of North America de Robbins, Bruum, Zim y Singer.
Las reglas del SE estar an dise nadas para ilustrar como se pueden representar varios
tipos de conocimiento, en vez de buscar una identicaci on precisa de las aves.
9.3.1. Reglas
Las reglas de un SE normalmente toman el siguiente formato:
1 IF
2 primera premisa AND
3 segunda premisa AND
4 ...
5 THEN
6 conclusion
La parte IF de la regla se conoce con el lado izquierdo de la regla (LHS), y la parte
del THEN se conoce como el lado derecho de la regla (RHS). Esto es equivalente a
la semantica de la regla Prolog:
1 conclusion :-
2 primera premisa,
3 segunda premisa,
4 ...
Esto puede ser confuso pu es la regla en prolog dice m as THEN-IF que IF-THEN.
Retomemos los ejemplos anteriores, si queremos representar en Prolog la regla:
1 IF
2 familia es albatros AND
3 color es blanco
4 THEN
5 ave es albatros laysan
Tendramos que escribir:
104 9 Sistemas Expertos
1 ave(albatros_laysan) :-
2 familia(albatros),
3 color(blanco).
Las siguientes reglas distinguen entre dos tipos de albatros y cisne. Todas son
cl ausulas del predicado ave/1:
1 ave(albatros_laysan) :-
2 familia(albatros),
3 color(blanco).
4 ave(albatros_patas_negras) :-
5 familia(albatros),
6 color(obscuro).
7 ave(cisne_silbador) :-
8 familia(cisne),
9 voz(suave_musical).
10 ave(cisne_trompetero) :-
11 famila(cisne),
12 voz(alta_trompeta).
Para que estas reglas tengan exito al distinguir un ave, necesitamos almacenar
hechos acerca del ave que deseamos identicar con el SE. Por ejemplo, si agregamos
estos hechos al programa:
1 familia(albatros).
2 color(obscuro).
Ahora podemos usar la pregunta siguiente:
1 ?- ave(X).
2 X = albatros_patas_negras
3 Yes
Observen que a un en esta etapa temprana tenemos un SE completo, donde la
experticia consiste en distinguir entre cuatro aves. La interfaz con el usuario es el
REPL de Prolog y los datos de entrada se almacenan directamente en el programa.
9.3.2. Reglas para relaciones jer arquicas
El siguiente paso ser a representar la naturaleza jer arquica del sistema de clasi-
caci on de un ave. Esto incluir a reglas para identicar la familia y el orden del ave.
Continuando con el albatros y el cisne, los predicados para orden/1 y f amilia/1
son:
1 orden(nariz_tubular) :-
2 fosas(externas_tubulares),
9.3 Usando la m aquina de inferencia de Prolog 105
3 habitat(mar),
4 pico(gancho).
5 orden(acuatico) :-
6 patas(membrana),
7 pico(plano).
8 familia(albatros) :-
9 orden(nariz_tubular),
10 tamano(grande),
11 alas(muy_largas).
12 familia(cisne) :-
13 orden(acuatico),
14 cuello(largo),
15 color(blanco),
16 vuelo(pesado).
Ahora el SE puede identicar al albatros a partir de observaciones fundamentales
sobre el ave. En la primer versi on, f amilia/0 fue implementada como un hecho.
Ahora f amilia/1 es implementada como una regla. Los hechos del SE ahora reejan
m as datos primitivos:
1 fosas(externas_tubulares).
2 habitat(mar).
3 pico(gancho).
4 tamano(grande).
5 alas(muy_largas).
6 color(obscuro).
La consulta siguiente reporta:
1 ?- ave(X).
2 X = albatros_patas_negras
3 Yes
9.3.3. Reglas para otras relaciones
El ganso canadiense puede usarse para agregar complejidad al sistema. Debido a
que esta ave pasa los veranos en Canad a y los inviernos en los Estados Unidos, su
identicaci on se ve afectada por donde ha sido vista y en que estaci on. Dos reglas
ser an necesarias para cubrir estas situaciones:
1 ave(ganso_canadiense) :-
2 familia(ganso),
3 estacion(invierno),
4 pais(estados_unidos),
5 cabeza(negra),
6 pecho(blanco).
106 9 Sistemas Expertos
7 ave(ganso_canadiense) :-
8 familia(ganso),
9 estacion(verano),
10 pais(canada),
11 cabeza(negra),
12 pecho(blanco).
Estas metas pueden hacer referencia a otros predicados en una jerarqua diferen-
te:
1 pais(estados_unidos) :- region(oeste_medio).
2 pais(estados_unidos) :- region(sur_oeste).
3 pais(estados_unidos) :- region(nor_oeste).
4 pais(estados_unidos) :- region(atlantico_medio).
5 pais(canada) :- provincia(ontario).
6 pais(canada) :- provincia(quebec).
7
8 region(nueva_inglaterra) :-
9 estado(X),
10 member(X,[massachusetts, vermont, connecticut, maine]).
11
12 region(sur_oeste) :-
13 estado(X),
14 member(X,[florida, mississippi, alabama, nueva_orleans]).
Otras aves necesitar an de predicados m ultiples para ser identicada. Por ejemplo,
el Mallard (Anas platyrhynchos), o pato com un del norte, macho tiene la cabeza
verde con un anillo blanco; la hembra tiene la cabeza caf e moteada:
1 ave(mallard):-
2 familia(pato),
3 voz(graznido),
4 cabeza(verde).
5 ave(mallard) :-
6 familia(pato),
7 voz(graznido),
8 cabeza(cafe_moteada).
Basicamente, cualquier situaci on del libro de las aves norte americanas puede
ser expresado f acilmente en Prolog. Las reglas expresadas forman la base de cono-
cimientos del SE. El unico punto d ebil del programa es su interfaz con el usuario,
que requiere que los datos sean introducidos como hechos del programa.
9.4 Interfaz del usuario 107
9.4. Interfaz del usuario
El sistema puede mejorarse considerablemente si proveemos una interfaz para
el usuario, que pregunte por la informaci on cuando esto sea necesario, en lugar de
forzar al usuario a introducirla como hechos del programa.
Antes de pensar en un predicado pregunta, es necesario entender la estructura de
los datos que ser an preguntados. Todos los datos, manejandos hasta ahora, han sido
de la forma atributovalor. Por ejemplo, los atributos del pato del norte Mallard, son
mostrados en la gura 9.1.
atributo valor
familia pato
voz graznido
cabeza verde
Cuadro 9.1 Atributos valor para el mallard
Esta es una de las representaciones m as simples usadas en los SE, pero es su-
ciente para muchas aplicaciones. Existen representaciones m as expresivas, como
los tripletes objetoatributovalor, o las redes sem anticas, o los marcos.
Como estamos programando en Prolog, la riqueza del lenguaje puede usarse di-
rectamente en el SE. Por ejemplo, los pares atributovalor han sido representados
como predicados unarios de la forma atributo(valor): familia(pato), voz(graznido),
cabeza(verde). Pero en region/1 usamos la membresia en listas para su denici on.
Usaremos el predicado pregunta para determinar con ayuda del usuario, cuando
un par atributovalor es verdadero. El SE debe modicarse para determinar que
atributos son vericables por el usuario. Esto se logra con reglas para los atributos
que llaman a pregunta:
1 come(X) :- pregunta(come,X).
2 pies(X) :- pregunta(pies,X).
3 alas(X) :- pregunta(alas,X).
4 cuello(X) :- pregunta(cuello,X).
5 color(X) :- pregunta(color,X).
Ahora, si el SE tiene como meta probar color(blanco), llamar a a pregunta/2
en lugar de consultar su base de conocimientos. Si pregunta(color, blanco) tiene
exito, entonces color(blanco) tambi en lo tiene. La versi on m as simple de pregunta
es como sigue:
1 pregunta(Atrib,Val):-
2 write(Atrib:Val),
3 write(? ),
4 read(si).
108 9 Sistemas Expertos
El predicado read/1 tendr a exito s olo si el usuario responde si y falla si el
usuario responde cualquier otra cosa. Ahora el programa puede ser ejecutado sin
datos de trabajo iniciales. La misma llamada a ave/1 inicia la consulta al SE.
1 ?- ave(X).
2 fosas_nasales : externas tubulares ? si.
3 habitat : mar ? si.
4 pico : ganchudo ? si.
5 tamano : grande ? si.
6 alars : largas ? si.
7 color : blanco ? si.
8 X = albatros_laysan
9 Yes.
El problema con este enfoque es que si el usuario responde no a la ultima pre-
gunta, la regla para ave(albratros laysan) falla, llevandonos a un backtracking. De
esta manera el SE nos preguntara nuevamente informaci on que ya sabe. De alguna
manera deberamos implementar un predicado pregunta que recuerde lo pregunta-
do.
Deniremos un nuevo predicado conocido/3 que nos ayude a recordar las res-
puestas del usuario. Las respuestas no se guardar an directamente en memoria, sino
que ser an guardadas din amicamente con asserta/1 cuando pregunta provea infor-
maci on nueva para el SE:
1 pregunta(A,V) :- conocido(si,A,V), !.
2
3 pregunta(A,V) :- conocido(_,A,V), !, fail.
4
5 pregunta(A,V) :-
6 write(A:V),
7 write? : ),
8 read(Resp),
9 asserta(conocido(Resp,A,V)),
10 Resp == si.
Tambi en es posible utilizar menues contextuados para el caso de atributos multi-
variados. La idea es que para atributos de un solo valor, la interfaz por el usuario
pregunte una sola vez:
1 pregunta(A,V) :-
2 not(multivariado(A)),
3 conocido(si,A,V2),
4 V \== V2,
5 !,
6 fail.
Una gua sobre los valores v alidos para un atributo se implementa con el predi-
cado menu pregunta que trabaja de manera an aloga a pregunta:
9.5 Un Shell simple 109
1 tamano(X) :-
2 menu_pregunta(tamano, X, [grande, mediano, pequeno]).
3 color(X) :-
4 menu_pregunta(color,X,[blanco,verde,cafe,negro]).
La denici on de menu pregunta/3 es:
1 menu_pregunta(A,V,MenuLista) :-
2 write(Cual es el valor para ,
3 write(A), write(? ), nl,
4 write(MenuLista),nl,
5 read(Resp),
6 checar(Resp,A,V,MenuLista),
7 asserta(conocido(si,A,X)),
8 X == V.
9
10 checar(X,A,V,MenuLista) :-
11 member(X,MenuLista), !.
12
13 checar(X,A,V,MenuLista) :-
14 write(Ese valor no es valido, intente nuevamente), nl,
15 menu_pregunta(A,V,MenuLista).
9.5. Un Shell simple
El ejemplo de identicaci on de aves tiene dos partes: una base de conocimientos,
que incluye la informaci on especca sobre las aves; y los predicados para controlar
la interfaz con el usuario. Al separar estas dos partes, podemos crear un shell de SE.
Con ello podemos crear un nuevo SE que identique, por ejemplo, peces y reutilizar
la parte de control de la interfaz.
Un cambio mnimo es necesario para separar las dos partes de nuestro SE. Ne-
cesitamos un predicado de alto nivel que inicie el proceso de identicaci on. Puesto
que no sabemos de antemano lo que el SE va a identicar, el shell buscar a satisfa-
cer un predicado llamado meta. Cada base de conocimiento deber a tener denido
meta/1, por ejemplo, para el caso de identicaci on de aves tendramos:
1 meta(X) :- ave(X).
como primer predicado en la base de conocimientos aves.
El shell tendr a un predicado solucion/0 que llevar a a cabo labores de manteni-
miento del SE, para luego resolver la meta/1:
1 solucion :-
2 abolish(conocido,3),
110 9 Sistemas Expertos
3 define(conocido,3),
4 meta(X),
5 write(La respuesta es: ), write(X), nl.
6
7 solucion :-
8 write(No se encontro una respuesta.), nl.
El predicado Prolog abolish/2 se usa para eliminar los hechos denidos previa-
mente con conocido/3, cada vez que una consulta se va a ejecutar. Esto permite al
usuario ejecutar solucion multiples veces en una sola sesi on. El predicado de f ine/2
permite indicarle a Prolog que conocido estar a denido en el SE, de forma que no
cause error la primera utilizaci on de este predicado. Este predicado puede variar
dependiendo de la versi on de Prolog utilizada.
De esta manera tenemos que el SE ha sido dividido en dos partes. Los predicados
en el shell son:
solucion,
pregunta,
menu pregunta,
los predicados auxiliares de estos.
Los predicados en la base de conocimientos son:
meta,
las reglas sobre el conocimiento del SE,
las reglas sobre los atributos provistos por el usuario,
las declaraciones de los atributos multi-variados.
Para usar este shell en Prolog, tanto el shell como la base de conocimientos deben
ser cargados:
1 ?- consult(shell).
2 yes
3 ?- consult(aves.kb).
4 yes
5 ?- solucion.
6 fosas_nasales : externas_tubulares ? ...
9.5.1. REPL
El shell puede ser mejorado construyendo un ciclo de comandos read-eval-print
loop. Para ello deniremos el predicado se:
1 se :-
2 bienvenida,
9.6 Encadenamiento haca atr as con incertidumbre 111
3 repeat,
4 write(> ),
5 read(X),
6 do(X),
7 X == quit.
8
9 bienvenida :-
10 write(Este es el shell de su SE.), nl,
11 write(Escriba: cargar, consultar, o salir en el promt.), nl
12
13 do(cargar) :-
14 cargar_bd, !.
15
16 do(consultar) :-
17 solucion, !.
18
19 do(salir).
20
21 do(X) :-
22 write(X),
23 write( no es un comando valido.), nl,
24 fail.
25
26 cargar_bd :-
27 write(Nombre del archivo: ),
28 read(F),
29 reconsult(F).
La arquitectura obtenida de esta forma se muestra en la gura 9.2.
9.6. Encadenamiento haca atr as con incertidumbre
Como hemos mencionado, el encadenamiento haca adelante resulta conveniente
cuando los problemas a resolver son del tipo selecci on estructurada, como en el
ejemplo de la clasicaci on de aves. Sin embargo, en adem as de que hemos asumido
que la informaci on completa est a disponible para resolver el problema, tambi en
hemos asumido que no hay incertidumbre, ni el los datos provistos por el usuario,
ni en las reglas de los expertos. Por ejemplo, el albatros puede ser observado en la
bruma, con lo que sera difcil precisar si su color es blanco u obscuro. Es de esperar
que un SE que maneje incertidumbre, pueda contender con este tipo de problemas.
Desarrollaremos un shell que permita manejar reglas con incertidumbre y enca-
denamiento de ellas haca atr as. Evidentemente, este SE tendr a un formato de reglas
propio, diferente a las reglas de Prolog, y por lo tanto, una m aquina de inferencia
propia.
112 9 Sistemas Expertos
Interfaz del Usuario
se
pregunta
menu_pregunta
Mquina de inferencia
solucion
cargar
Base de Conocimientos
meta
reglas
mulivaluado
preguntado
Memoria de trabajo
conocido
Figura 9.2 El shell del SE.
9.6.1. Factores de certidumbre
La forma m as com un de trabajar con la incertidumbre consiste en asignar un fac-
tor de certidumbre a cada pieza de informaci on en el SE. La m aquina de inferencia
deber a mantener los factores de incertidumbre conforme el proceso de inferencia se
lleve a cabo.
Por ejemplo, asumamos que los factores de certidumbre (precedidos por cf) son
enteros entre -100 (denitivamente falso) y +100 (denitivamente verdadero). La si-
guiente base de conocimientos en formato del SE est a dise nada para diagnosticar un
auto que no enciende. Esto ilustra el comportamiento de los factores de certidumbre:
1 GOAL problema.
2
3 RULE 1
4 IF not arranca AND
5 bateria_mala
6 THEN problema is bateria.
7
8 RULE 2
9 IF luces_debiles
10 THEN bateria_mala cf 50.
11
12 RULE 3
13 IF radio_debil
9.6 Encadenamiento haca atr as con incertidumbre 113
14 THEN bateria_mala cf 50.
15
16 RULE 4
17 IF arranca AND
18 olor_gasolina
19 THEN problema is fuga cf 80.
20
21 RULE 5
22 IF arranca AND
23 indicador_gasolina is vacio
24 THEN problema is tanque_vacio cf 90.
25
26 RULE 6
27 IF arranca AND
28 indicador_gasolina is bajo
29 THEN problema is tanque_vacio cf 30.
30
31 ASK arranca
32 MENU (si no)
33 PROMPT Su motor arranca? .
34
35 ASK luces_debiles
36 MENU (si no)
37 PROMPT Sus luces estan debiles? .
38
39 ASK radio_debile
40 MENU (si no)
41 PROMPT Su radio esta debil? .
42
43 ASK olor_gasolina
44 MENU (si no)
45 PROMPT Huele a gasolina?.
46
47 ASK indicador_gasolina
48 MENU (vacio, medio, lleno)
49 PROMPT Que indica al aguja de gasolina? .
Por el momento la inferencia usara encadenamiento haca atr as, similar al que
usa Prolog. La regla GOAL indica que el proceso buscar a un valor para problema.
La regla 1 causar a que la sub-meta bateria mala sea procesada, etc. Observen que
las reglas especican tambi en factores de certidumbre. Las reglas 2 y 3 proveen evi-
dencia de que la batera est a en mal estado, pero ninguna es conclusiva al respecto.
Un di alogo con este sistema sera como sigue:
1 consultar, reiniciar, cargar, listar, trazar, como, salida
2 : consultar
3 Su motor arranca?
4 : si
5 Huele a gasolina?
6 : si
7 Que indica la aguja de la gasolina?
8 : vacio
114 9 Sistemas Expertos
9 problema-tanque-vacio-cf-90
10 problema-fuga-cf-80
11 problema resuelto
Observen que a diferencia de Prolog, el sistema no se detiene al encontrar el
primer posible valor para problema. En este caso se computan todos los valores
razonables para problema y se reporta el valor de certidumbre asociado a estas
soluciones. Recordemos que estos factores de certidumbre no son probabilidades,
solo ponderan de alguna manera las respuestas.
De igual manera, el usuario podra ofrecer factores de certidumbre sobre sus
respuestas, por ejemplo:
1 : consultar
2 ...
3 Huele a gasolina?
4 si cf 50
5 ...
Existen diversas maneras de capturar el concepto de factor de certidumbre, pero
todas ellas deben de confrontar las mismas situaciones b asicas:
Reglas cuyas conclusiones son inciertas,
Reglas cuyas premisas son inciertas,
Datos provistos por el usuario inciertos,
Combinaci on de premisas inciertas con conclusiones inciertas,
Actualizar los factores de incertidumbre en los datos almacenados en el espacio
de trabajo,
Establecer un umbral sobre el cual las premisas se consideran conocidas.
9.6.2. Factores de certidumbre ` a la MYCIN
MYCIN, uno de los SE m as conocidos en IA, introduce factores de certidumbre
dise nados para producir resultados intuitivos desde la perspectiva de los expertos.
Revisemos el uso de estos factores por casos. El m as simple, sera aquel donde las
premisas son totalmente ciertas:
1 arranca cf 100.
2 olor_gas cf 100.
disparan la regla 4 y por tanto, problema fuga cf 80 deber a agregarse al al-
mac en de trabajo. Sin embargo, este es un caso poco probable. Normalmente no
estamos totalmente seguros de las premisas de una regla y lo normal sera tener
hechos como:
9.6 Encadenamiento haca atr as con incertidumbre 115
1 arranca cf 80.
2 olor_gas cf 50.
Cuando esto sucede, la incertidumbre en las premisas de la regla debe combinarse
con las de la conclusi on de la misma de la siguiente manera:
CF =CFreglamnCFpremisa/100
Dado el ejemplo, la regla 4 se activara con un c f = 50 (el mnimo de las dos
premisas) y dada la f ormula anterior, agregaramos problema fuga cf 40 al
almac en de trabajo.
Para que una regla dispare, su factor de certidumbre debe superar un umbral que
normalmente se ja en 20. As que bajo la denici on anterior, la regla 4 disparara.
Si tuvi esemos olor gas cf 15, entonces la regla no disparara.
Ahora consideren el caso donde hay m as de una regla que da soporte a cierta
conclusi on. En ese caso, cada una de las reglas que disparan contribuir a al factor de
certidumbre de la conclusi on. Si una regla dispara y la conclusi on ya se encontraba
en el almac en de trabajo, las siguientes reglas aplican:
CF(X,Y) = X +Y(100X)/100. Ambos X,Y > 0
CF(X,Y) = X +Y/1mn(|X|, |Y|). Uno de X,Y < 0
CF(X,Y) = CF(X, Y). Ambos X,Y < 0
Por ejemplo, si disparamos la regla 2 (luces d ebiles) con su premisa sin incerti-
dumbre, tendramos que agregar al almac en de trabajo bateria mala cf 50.
Luego si disparamos la regla 3 (radio d ebil), el factor de certidumbre de este hecho
debe modicarse a bateria mala cf 75. Lo cual resulta intuitivo (hay m as
evidencia de que la batera tiene problemas). Lo que tambi en resulta intuitivo es que
necesitamos programar nuestra propia m aquina de inferencia.
9.6.3. Formato de las reglas
Como programaremos nuestra propia m aquina de inferencia, podemos elegir la
estructura de hechos y reglas. Las reglas tendr an la estructura general:
regla(Nombre, Premisas,Conclusion).
El Nombre opera solo como un identicador de la regla. El lado izquierdo de
la misma Premisas implica al lado derecho Conclusion (conclusi on). Como usare-
mos encadenamiento haca atr as, cada regla ser a usada para validar una pieza de
informaci on, de manera el RHS contiene una meta con su factor de certidumbre
asociado:
116 9 Sistemas Expertos
conclusion(Meta,CF).
mientras que las premisas toman la forma de una lista de metas:
premisas(ListaMetas).
Las metas ser an representadas, para comenzar, como pares atributovalor:
av(Atributo,Valor).
cuando Atributo y Valor son atomos, la estructura general de las reglas se ve
como:
1 regla(Nombre,
2 premisas( [av(A1,V1), av(A2,V2), ... ] ),
3 conclusion(av(Attr,Val), CF)).
Por ejemplo, la regla 5 quedara representada como:
1 regla(5,
2 premisas([av(arranca,si), av(indicador_gasolina,vacio)]),
3 conclusion(av(problema,fuga), 80)).
Estas reglas no son f aciles de leer, pero tienen una estructura adecuada para ser
procesadas por Prolog. Otras herramientas de Prolog como las gram aticas de cl ausu-
la denitivas (DCG) o la denici on de operadores, puede ayudarnos a simplicar
esta representaci on.
9.6.4. La m aquina de inferencia
Dado el formato de las reglas del SE deseamos que la inferencia tome en cuenta
los siguientes aspectos:
Combine los factores de certidumbre como se indico anteriormente.
Mantenga el espacio de trabajo con la informaci on actualizada con las nuevas
evidencias obtenidas.
Encontrar toda la informaci on acerca de un atributo en particular cuando se pre-
gunte por el, y poner esa informaci on en el espacio de trabajo.
Primero, los hechos ser an almacenados en la memoria de trabajo de Prolog, con
el siguiente formato:
1 hecho(av(A,V),CF).
9.6 Encadenamiento haca atr as con incertidumbre 117
De forma que un predicado meta/2 hara la llamada para resolver un problema
dado en estos t erminos. Por ejemplo, en el caso del arranque del auto, tendramos
como meta:
1 ?- meta(av(problema,X),CF).
El predicado meta/2 debe de contender con tres casos:
El atributovalor se conoce de antemano;
Existen reglas para deducir el atributovalor;
Se debe preguntar al usuario.
El sistema puede dise narse para preguntar al usuario autom aticamente por el va-
lor de un atributo, ante la ausencia de reglas; o bien, se puede declarar que atributos
pueden ser preguntados al usuario. Este ultimo enfoque hace que el manejo de la
base de conocimientos sea m as explcito y provee mayor control sobre los di alogos
usuario SE. Podemos denir un predicado pregunta/2 para declarar el atributo a
preguntar y la frase para ello:
1 pregunta(pais_residencia,En que pas vive? ).
Veamos ahora los tres casos para meta/2. El primero de ellos ocurre cuando la
informaci on ya est a en la memoria de trabajo:
1 meta(av(Atr,Val),CF) :-
2 hecho( av(Atr,Val), CF),
3 !.
El segundo caso se da cuando el valor del atributo no se encuentra en la memoria
de trabajo, pero el es posible preguntar por ello al usuario:
1 meta(av(Atr,Val), CF) :-
2 \+ hecho( av(Atr,_),_),
3 pregunta(Atr,Msg),
4 preguntar(Atr,Msg),
5 !,
6 meta(av(Atr,Val), CF).
Para ello, el predicado preguntar/2 interroga al usuario. El usuario responde con
un valor para la atributo Atr y un factor de certidumbre asociado CF. El mensaje
Msg da la informaci on necesaria para guiar al usuario en estas consultas:
1 preguntar(Atr,Msg) :-
2 write(Msg),
3 read(Val),
4 read(CF),
5 asserta(fact(av(Atr,Val),CF)).
118 9 Sistemas Expertos
El tercer caso para meta/2 es cuando el valor del atributo es desconocido, pero
se puede deducir usando las reglas denidas en el sistema, en ese caso la llamada
es:
1 meta(Meta,CFactual) :-
2 buscaReglas(Meta,CFactual).
Esta llamada hace uso de la m aquina de inferencia que dise naremos para nuestro
SE con incertidumbre. El factor de certidumbre se etiqueta como actual, porque es
posible que cambie de valor al ir aplicando las reglas denidas en el sistema.
El predicado buscaReglas/2 se encarga de encontrar aquellas reglas cuya con-
clusi on unica con la Meta en cuesti on y de actualizar el factor de certidumbre con
base en las premisas de estas reglas. Si la Meta es un hecho conocido, no hay nada
que hacer, s olo regresar true:
1 buscaReglas(Meta,CFactual) :-
2 regla(N, premisas(ListaPremisas),
3 conclusion(Meta,CF)),
4 probar(ListaPremisas,Contador),
5 ajustar(CF,Contador,NuevoCF),
6 actualizar(Meta,NuevoCF,CFactual),
7 CFactual == 100,
8 !.
9
10 buscaReglas(Meta,CF) :-
11 hecho(Meta,CF).
Dada una lista de premisas pertenecientes a una regla encontrada para satisfacer
la Meta del SE, es necesario que buscaReglas/2 las pruebe. Para ello denimos
probar/2:
1 probar(ListaPremisas, Contador) :-
2 probAux(ListaPremisas, 100, Contador).
3
4 probAux([],Contador,Contador).
5 probAux([Premisa1|RestoPremisas],ContadorActual,Contador) :-
6 meta(Premisa1,CF,Cont),
7 Cont >= 20,
8 probAux(RestoPremisas,Cont,Contador).
El ajuste de los factores de certidumbre se lleva a cabo de la siguiente manera:
1 ajustar(CF1, CF2, CF) :-
2 X is CF1
*
CF2 / 100,
3 int_redondear(X,CF).
4
5 int_redondear(X,I) :-
6 X >= 0,
7 I is integer(X + 0.5).
9.6 Encadenamiento haca atr as con incertidumbre 119
8
9 int_redondear(X,I) :-
10 X < 0,
11 I is integer(X - 0.5).
La actualizaci on de la memoria de trabajo se lleva a cabo de la siguiente manera:
1 actualizar(Meta,NuevoCF,CF) :-
2 hecho(Meta,ViejoCF),
3 combinar(NuevoCF,ViejoCF,CF),
4 retract(hecho(Meta,ViejoCF)),
5 asserta(hecho(Meta,CF)),
6 !.
7
8 actualizar(Meta,CF,CF) :-
9 asserta(hecho(Meta,CF)).
10
11 combinar(CF1, CF2, CF) :-
12 CF1 >= 0,
13 CF2 >= 0,
14 X is CF1 + CF2
*
(100 - CF1)/100,
15 int_redondear(X,CF).
16
17
18 combinar(CF1,CF2,CF) :-
19 CF1 < 0,
20 CF2 < 0,
21 X is -( -CF1-CF2
*
(100+CF1)/100),
22 int_redondear(X,CF).
23
24 combinar(CF1,CF2,CF) :-
25 (CF1 < 0 ; CF2 < 0),
26 (CF1 > 0 ; CF2 > 0),
27 abs_minimum(CF1,CF2,MCF),
28 X is 100
*
(CF1 + CF2) / (100 - MCF),
29 int_redondear(X,CF).
9.6.5. Interfaz con el usuario
La interfaz con el usuario es muy parecida a la denida en la secci on anterior. Se
incluyen predicados auxiliares necesarios en su denici on:
1 se :-
2 repeat,
3 write(consultar, cargar, salir), nl,
4 write(: ),
5 read_line(X),
6 ejec(X),
120 9 Sistemas Expertos
7 X == salir.
8
9 ejec(consultar) :-
10 metas_principales,
11 !.
12
13 ejec(cargar) :-
14 cargar_reglas,
15 !.
16
17 ejec(salir).
18
19 %%% Auxiliares
20
21 metas_principales :-
22 meta_principal(Atr),
23 principal(Atr),
24 imprime_meta(Atr),
25 fail.
26 metas_principales.
27
28 principal(Atr) :-
29 meta(av(Atr,Val,CF)),
30 !.
31 principal(_) :- true.
32
33 imprime_meta(Atr) :-
34 nl,
35 hecho(av(Atr,Val), CF),
36 CF >= 20,
37 salidap(av(Atr,Val),CF), nl
38 fail.
39 imprime_meta(Atr) :-
40 write (Meta: ), write(Attr), write( solucionada.),
41 nl, nl.
42
43 salidap(av(Atr,Val),CF) :-
44 output(Atr,Val,ListaImprimir),
45 write(Atr-cf-CF),
46 imprimeLista(ListaImprimir), !.
47 salidap(av(Atr,Val),CF) :-
48 write(Atr-Val-cf-CF).
49
50 imprimeLista([]).
51 imprimeLista([X|Xs]) :-
52 write(X),
53 imprimeLista(Xs).

También podría gustarte