22
9 SISTEMAS EXPERTOS En este capítulo abordaremos uno de los productos típicos de la Inteligencia Artificial: los Sistemas Expertos. Normalmente, usamos herramientas de desarrollo conocidas con shells para construir este tipo de sistemas, pero si necesitamos configurar un shell para una aplicación en particular, es necesario conocer como es que un sistema experto se construye desde cero. El capítulo constituye el segundo ejemplo del uso de Prolog para resolver problemas típicos de la Inteligencia Artificial. Los sistemas expertos (SE) son aplicaciones de cómputo que involucran experien- cia no algorítmica, para resolver cierto tipo de problema. Por ejemplo, los sistemas expertos se usan para el diagnóstico al servicio de humanos y máquinas. Existen SE que juegan ajedrez, que planean decisiones financieras, que configuran computadoras, que supervisan sistemas de tiempo real, que deciden políticas de seguros, y llevan a cabo demás 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 figura 26. Los componentes más importantes son: Base de conocimientos. La representación declarativa de la experiencia, muchas veces en forma de reglas IF-THEN. Almacén de trabajo. Los datos específicos al problema que se está resolviendo. Máquina de inferencia. El código central del SE que deriva recomendaciones con base en la base de conocimientos y los datos específicos del problema. Interfaz del usuario. El código que controla el diálogo entre el usuario y el SE. Para entender un SE es necesario entender también el rol de los usuarios que inter- accionan con el sistema: Experto del Dominio. El o los individuos que son los expertos en resolver el problema que el SE intentará resolver. Ingeniero de Conocimiento. El individuo que codifica el conocimiento de los expertos en forma declarativa, para que pueda ser usado por el SE. Usuario. El individuo que consultará el SE para obtener los consejos que espera- ría 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 de- clarativo para la base de conocimientos y una máquina 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 configurados para cierto tipo de aplicaciones, otro individuo entra en escena: 89

SISTEMAS EXPERTOS - uv.mx · 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

Embed Size (px)

Citation preview

Page 1: SISTEMAS EXPERTOS - uv.mx · 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

9 S I S T E M A S E X P E R TO S

En este capítulo abordaremos uno de los productos típicos de la Inteligencia Artificial:los Sistemas Expertos. Normalmente, usamos herramientas de desarrollo conocidascon shells para construir este tipo de sistemas, pero si necesitamos configurar un shellpara una aplicación en particular, es necesario conocer como es que un sistema expertose construye desde cero. El capítulo constituye el segundo ejemplo del uso de Prologpara resolver problemas típicos de la Inteligencia Artificial.

Los sistemas expertos (SE) son aplicaciones de cómputo que involucran experien-cia no algorítmica, para resolver cierto tipo de problema. Por ejemplo, los sistemasexpertos se usan para el diagnóstico al servicio de humanos y máquinas. Existen SEque juegan ajedrez, que planean decisiones financieras, que configuran computadoras,que supervisan sistemas de tiempo real, que deciden políticas de seguros, y llevan acabo demás tareas que requieren de experiencia humana.

Los SE incluyen componentes del sistema en sí e interfaces con individuos convarios roles. Esto se ilustra en la figura 26. Los componentes más importantes son:

• Base de conocimientos. La representación declarativa de la experiencia, muchasveces en forma de reglas IF-THEN.

• Almacén de trabajo. Los datos específicos al problema que se está resolviendo.

• Máquina de inferencia. El código central del SE que deriva recomendacionescon base en la base de conocimientos y los datos específicos del problema.

• Interfaz del usuario. El código que controla el diálogo entre el usuario y el SE.

Para entender un SE es necesario entender también el rol de los usuarios que inter-accionan con el sistema:

• Experto del Dominio. El o los individuos que son los expertos en resolver elproblema que el SE intentará resolver.

• Ingeniero de Conocimiento. El individuo que codifica el conocimiento de losexpertos en forma declarativa, para que pueda ser usado por el SE.

• Usuario. El individuo que consultará el SE para obtener los consejos que espera-ría de un experto del dominio.

Muchos SE se producen en ambientes de desarrollo conocidos como shells. Un shelles un sistema que contiene la interfaz del usuario, un formato de conocimiento de-clarativo para la base de conocimientos y una máquina de inferencia. El ingeniero deconocimiento usa el shell para construir un SE que resuelve problemas en un dominioparticular.

Si el sistema se construye desde cero, o utilizando shells configurados para ciertotipo de aplicaciones, otro individuo entra en escena:

89

Page 2: SISTEMAS EXPERTOS - uv.mx · 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

90 �������� ��������

Experto enel Dominio

Ingeniero del Conocimieno

Usuario

Ingeniero en Sistemas

Interface conel Usuario

Máquina de Inferencia

Base deConocimiento

Almacén deTrabajo

Experiencia

Figura 26: Componentes de un sistema experto e interfases humanas

• Ingeniero de Sistemas. La persona que construye la interfaz del usuario, diseñael formato declarativo de la base de conocimientos, e implementa la máquinade inferencia ¿adivinan cual es su rol?

En realidad eso depende de la talla del proyecto: El ingeniero de conocimiento yel ingeniero del sistema, pueden ser la misma persona. El diseño del formato de labase de conocimientos y su codificación están íntimamente relacionados. Al procesode codificar el conocimiento de los expertos, se le conoce como ingeniería del conoci-miento. Siendo ésta una tarea complicada, se espera el uso de los shells haga posiblela reutilización del conocimiento codificado. En estas sesiones nos concentraremos enla programación en Prolog de los SE al margen del uso de las shells.

�.� ��������������� �� ��� ��Los SE poseen las siguientes características, en menor o mayor grado:

• Razonamiento guiado por las metas y encadenamiento hacia atrás. Una técnicade inferencia que usa las reglas IF-THEN para descomponer las metas en sub-metas más fáciles de probar.

• Manejo de incertidumbre. La habilidad del SE para trabajar con reglas y datosque no son conocidos con precisión.

• Razonamiento guiado por los datos y encadenamiento hacia adelante. Una téc-nica de inferencia que usa las reglas IF-THEN para deducir soluciones a unproblema a partir de los datos iniciales disponibles.

• Representación de datos. La forma en que los datos específicos a un problemadado, son almacenados y accesados por el SE.

• Interfaz del usuario. La parte del SE que se usa para una interacción más ami-gable con el usuario.

Page 3: SISTEMAS EXPERTOS - uv.mx · 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

�.� ��������������� �� ��� �� 91

• Explicación. La habilidad del SE para explicar sus procesos de razonamiento ysu uso en el cómputo de recomendaciones.

�.�.� Razonamiento basado en metas

El encadenamiento hacia adelante, o razonamiento basado en metas, es una formaeficiente de resolver problemas que pueden ser modelados como casos de “selecciónestructurada”; donde la meta del SE es elegir la mejor opción de entre varias po-sibilidades enumeradas. Por ejemplo, los problemas de identificación caen en estacategoría. Los problemas de diagnóstico tambien caben aquí, pues se trata de elegirel diagnóstico adecuado.

El conocimiento se codifica en reglas que describen como es que cada caso posiblepodría ser seleccionado. La regla rompe el problema en sub-problemas. Por ejemplo,las siguientes reglas formarían parte de un SE para identificar aves:

1 IF2 familia es albatros AND3 color es blanco4 THEN5 ave es albatros laysan.6

7 IF8 familia es albatros AND9 color es negro

10 THEN11 ave es albatros de pies negros.

El sistema puede usar otras reglas para resolver las sub-metas planteadas por lasreglas de alto nivel, por ejemplo:

1 IF2 orden es tubonasales AND3 tamaño es grande AND4 alas es grandes anguladas5 THEN6 familia es albatros.

�.�.� Incertidumbre

Es muy común en la resolución de problemas de selección estructurada, que la res-puesta final 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ácilmente observableen el diagnóstico médico. Los SE normalmente usan valores numéricos para repre-sentar certidumbre. Existen diveras maneras de definirlos y usarlos en el proceso derazonamiento.

Page 4: SISTEMAS EXPERTOS - uv.mx · 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

92 �������� ��������

�.�.� Razonamiento guiado por los datos

Para muchos problemas no es posible enumerar las soluciones alternativas a las pre-guntas planteadas con antelación. Los problemas de configuración caen en esta cate-goría. El encadenamiento hacia adelante, o razonamiento guiado por los datos, usareglas IF-THEN para explorar el estado actual en la solución del problema y moversea estados más cercanos a la solución.

Un SE para acomodar el mobiliario puede tener reglas para la ubicación de unmueble en particular. Una vez que un mueble ha sido colocado, se puede procedercon los demás. La regla para colocar la TV enfrente del sofá es como sigue:

1 IF2 no_colocada tv AND3 sofá en pared(X) AND4 pared(Y) opuesta a pared(X)5 THEN6 colocar tv en pared(Y).

Esta regla toma un estado del problema con la televisión no situada y regresa unestado nuevo, donde la televisión ya ha sido colocada. Puesto que la televisión ya hasido colocada en su lugar, esta regla no volverá a ser disparada por el SE. Otras reglasserán usadas para colocar el resto de los muebles hasta terminar.

�.� ������ �� ������� �� ���������� �� ������Como pueden haber adivinado, Prolog posee una máquina de inferencia por enca-denamiento hacía atrás. Esta máquina puede usarse parcialmente para implementaralgunos SE. Las reglas de Prolog serán usadas para representar conocimiento y sumáquina de inferencia será usada para derivar conclusiones. Otras partes del sistema,como la interfaz con el usuario deberán escribirse usando Prolog.

Usaremos el problema de identificación de aves norteamericanas para ilustrar laconstrucción de un SE con Prolog. La experticia del SE se basa en un subconjunto delas reglas reportadas en Birds of North America de Robbins, Bruum, Zim y Singer 1. Lasreglas del SE estarán diseñadas para ilustrar como se pueden representar varios tiposde conocimiento, en vez de buscar una identificación precisa de las aves.

�.�.� Reglas

Las reglas de un SE normalmente toman el siguiente formato:

1 IF2 primera premisa AND3 segunda premisa AND4 ...5 THEN6 conclusión

1 La versión extendida en línea de este libro puede encontrarse en http://bna.birds.cornell.edu/bna/

Page 5: SISTEMAS EXPERTOS - uv.mx · 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

�.� ������ �� ������� �� ���������� �� ������ 93

La parte IF de la regla se conoce con el lado izquierdo de la regla (LHS), y la partedel THEN se conoce como el lado derecho de la regla (RHS). Esto es equivalente a lasemantica de la regla Prolog:

1 conclusión :-2 primera premisa,3 segunda premisa,4 ...

Esto puede ser confuso pués la regla en prolog dice más THEN-IF que IF-THEN.Retomemos los ejemplos anteriores, si queremos representar en Prolog la regla:

1 IF2 familia es albatros AND3 color es blanco4 THEN5 ave es albatros laysan

Tendríamos que escribir:

1 ave(albatros_laysan) :-2 familia(albatros),3 color(blanco).

Las siguientes reglas distinguen entre dos tipos de albatros y cisne (Ver la figura27). Todas son cláusulas 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 éxito al distinguir un ave, necesitamos almacenar he-chos acerca del ave que deseamos identificar con el SE. Por ejemplo, si agregamosestos hechos al programa:

1 familia(albatros).2 color(obscuro).

Ahora podemos usar la pregunta siguiente:

?- ave(X).X = albatros_patas_negrasYes

Page 6: SISTEMAS EXPERTOS - uv.mx · 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

94 �������� ��������

Figura 27: Cisne Trompetero en ilustración de John James Audubon (1838).

Observen que aún en esta etapa temprana tenemos un SE completo, donde la ex-perticia consiste en distinguir entre cuatro aves. La interfaz con el usuario es el REPLde Prolog y los datos de entrada se almacenan directamente en el programa.

�.�.� Reglas para relaciones jerárquicas

El siguiente paso será representar la naturaleza jerárquica del sistema de clasificaciónde un ave. Esto incluirá reglas para identificar la familia y el orden del ave. Conti-nuando con el albatros y el cisne, los predicados para orden/1 y familia/1 son:

1 orden(nariz_tubular) :-2 fosas(externas_tubulares),3 habitat(mar),4 pico(gancho).5 orden(acuatico) :-6 patas(membrana),7 pico(plano).8 familia(albatros) :-9 orden(nariz_tubular),

10 tamaño(grande),11 alas(muy_largas).12 familia(cisne) :-13 orden(acuatico),14 cuello(largo),15 color(blanco),16 vuelo(pesado).

Ahora el SE puede identificar al albatros a partir de observaciones fundamentalessobre el ave. En la primer versión, familia/1 fue implementada como un hecho. Aho-ra familia/1 es implementada como una regla. Los hechos del SE ahora reflejan másdatos primitivos:

Page 7: SISTEMAS EXPERTOS - uv.mx · 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

�.� ������ �� ������� �� ���������� �� ������ 95

1 fosas(externas_tubulares).2 habitat(mar).3 pico(gancho).4 tamaño(grande).5 alas(muy_largas).6 color(obscuro).

La consulta siguiente reporta:

?- ave(X).X = albatros_patas_negrasYes

�.�.� Reglas para otras relaciones

El ganso canadiense puede usarse para agregar complejidad al sistema. Debido aque esta ave pasa los veranos en Canadá y los inviernos en los Estados Unidos, suidentificación se ve afectada por donde ha sido vista y en que estación. Dos reglasserán 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).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 jerarquía diferente:

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]).

Page 8: SISTEMAS EXPERTOS - uv.mx · 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

96 �������� ��������

Figura 28: Pato común del norte (Mallard) en ilustración de John James Audubon (1838).

Otras aves necesitarán de predicados múltiples para ser identificada. Por ejemplo,el Mallard (Anas platyrhynchos) macho, o pato común del norte (Figura 28), tiene lacabeza verde con un anillo blanco; la hembra tiene la cabeza café 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ón del libro de las aves norte americanas puede ser ex-presado fácilmente en Prolog. Las reglas expresadas forman la base de conocimientosdel SE. El único punto débil del programa es su interfaz con el usuario, que requiereque los datos sean introducidos como hechos del programa.

�.� �������� ��� �������

El sistema puede mejorarse considerablemente si proveemos una interfaz para el usua-rio, que pregunte por la información cuando esto sea necesario, en lugar de forzar alusuario a introducirla como hechos del programa.

Antes de pensar en un predicado pregunta, es necesario entender la estructura delos datos que serán preguntados. Todos los datos, manejandos hasta ahora, han sidode la forma atributo–valor. Por ejemplo, los atributos del pato del norte Mallard, sonmostrados en el Cuadro 2.

Page 9: SISTEMAS EXPERTOS - uv.mx · 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

�.� �������� ��� ������� 97

atributo valorfamilia patovoz graznidocabeza verde

Cuadro 2: Atributos valor para el mallard

Esta es una de las representaciones más simples usadas en los SE, pero es suficientepara muchas aplicaciones. Existen representaciones más expresivas, como los tripletesobjeto–atributo–valor, o las redes semánticas, o los marcos.

Como estamos programando en Prolog, la riqueza del lenguaje puede usarse di-rectamente en el SE. Por ejemplo, los pares atributo–valor han sido representadoscomo predicados unarios de la forma atributo(valor): familia(pato), voz(graznido),cabeza(verde). Pero en region/1 usamos la membresia en listas para su definición.

Usaremos el predicado pregunta para determinar con ayuda del usuario, cuandoun par atributo–valor es verdadero. El SE debe modificarse para determinar que atri-butos son verificables por el usuario. Esto se logra con reglas para los atributos quellaman a pregunta:

1 fosas(X) :- pregunta(fosas,X).2 habitat(X) :- pregunta(habitat,X).3 pico(X) :- pregunta(pico,X).4 tamano(X) :- pregunta(tamano,X).5 come(X) :- pregunta(come,X).6 pies(X) :- pregunta(pies,X).7 alas(X) :- pregunta(alas,X).8 cuello(X) :- pregunta(cuello,X).9 color(X) :- pregunta(color,X).

Ahora, si el SE tiene como meta probar color(blanco), llamará a pregunta/2 enlugar de consultar su base de conocimientos. Si pregunta(color,blanco) tiene éxito,entonces color(blanco) también lo tiene. La pregunta es como sigue:

1 pregunta(Atrib,Val):-2 write(Atrib:Val),3 write(’? ’),4 read(si).

El predicado read/1 tendrá éxito sólo si el usuario responde “si” y falla si el usuarioresponde cualquier otra cosa. Ahora el programa puede ser ejecutado sin datos detrabajo iniciales. La misma llamada a ave/1 inicia la consulta al SE.

?- ave(X).fosas:externas_tubulares? si.habitat:mar? si.pico:gancho? si.tamano:grande? si.alas:muy_largas? si.color:blanco? si.X = albratros_laysanYes.

Page 10: SISTEMAS EXPERTOS - uv.mx · 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

98 �������� ��������

El problema con este enfoque es que si el usuario responde “no” a la última pre-gunta, la regla para ave(albratros_laysan) falla, llevandonos a un backtracking. Deesta manera el SE nos preguntaría nuevamente información que ya sabe. De algunamanera deberíamos implementar un predicado pregunta que recuerde lo pregunta-do.

?- ave(X).fosas:externas_tubulares? si.habitat:mar? si.pico:gancho? si.tamano:grande? si.alas:muy_largas? si.color:blanco? no.fosas:externas_tubulares? si.habitat:mar? si.pico:gancho? si.tamano:grande? si.alas:muy_largas? si.color:obscuro? si.X = albratros_patas_negrasYes.

Definiremos un nuevo predicado conocido/3 que nos ayude a recordar las res-puestas del usuario. Las respuestas no se guardarán directamente en memoria, sinoque serán guardadas dinámicamente con asserta/1 cuando pregunta provea infor-mación 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én es posible utilizar menues contextuales para el caso de atributos multi-variados. La idea es que para atributos de un solo valor, la interfaz por el usuariopregunte una sola vez:

1 pregunta(A,V) :-2 not(multivariado(A)),3 conocido(si,A,V2),4 V \== V2,5 !,6 fail.

Una guía sobre los valores válidos para un atributo se implementa con el predicadomenu_pregunta que trabaja de manera análoga a pregunta:

Page 11: SISTEMAS EXPERTOS - uv.mx · 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

�.� �� ����� ������ 99

1 tamaño(X) :-2 menu_pregunta(tamaño, X, [grande, mediano, pequeño]).3 color(X) :-4 menu_pregunta(color,X,[blanco,verde,cafe,negro]).

La definición 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 válido, intente nuevamente’), nl,15 menu_pregunta(A,V,MenuLista).

�.� �� ����� ������El ejemplo de identificación de aves tiene dos partes: una base de conocimientos, queincluye la información específica sobre las aves; y los predicados para controlar lainterfaz con el usuario. Al separar estas dos partes, podemos crear un shell de SE. Conello podemos crear un nuevo SE que identifique, por ejemplo, peces y reutilizar laparte de control de la interfaz.

Un cambio mínimo es necesario para separar las dos partes de nuestro SE. Necesi-tamos un predicado de alto nivel que inicie el proceso de identificación. Puesto queno sabemos de antemano lo que el SE va a identificar, el shell buscará satisfacer unpredicado llamado meta. Cada base de conocimiento deberá tener definido meta/1,por ejemplo, para el caso de identificación de aves tendríamos:

1 meta(X) :- ave(X).

como primer predicado en la base de conocimientos aves.El shell tendrá un predicado solucion/0 que llevará a cabo labores de mantenimien-

to del SE, para luego resolver la meta/1:

1 solucion :-2 abolish(conocido,3),3 define(conocido,3),4 meta(X),5 write(’La respuesta es: ’), write(X), nl.6

7 solucion :-8 write(’No se encontró una respuesta.’), nl.

Page 12: SISTEMAS EXPERTOS - uv.mx · 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

100 �������� ��������

El predicado Prolog abolish/2 se usa para eliminar los hechos definidos previamen-te con conocido/3, cada vez que una consulta se va a ejecutar. Esto permite al usuarioejecutar solucion multiples veces en una sola sesión. El predicado define/2 permiteindicarle a Prolog que conocido estará definido en el SE, de forma que no cause errorla primera utilización de este predicado. Este predicado puede variar dependiendode la versión de Prolog utilizada.

De esta manera tenemos que el SE ha sido dividido en dos partes. Los predicadosen el shell son:

• solucion,

• pregunta,

• menu_pregunta,

• los predicados auxiliares de éstos.

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 debenser cargados:

1 ?- consult(shell).2 yes3 ?- consult(’aves.kb’).4 yes5 ?- solucion.6 fosas_nasales : externas_tubulares ? ...

�.�.� REPL

El shell puede ser mejorado construyendo un ciclo de comandos read-eval-print loop.Para ello definiremos el predicado se:

1 se :-2 bienvenida,3 repeat,4 write(’> ’),5 read(X),6 do(X),7 X == quit.8

Page 13: SISTEMAS EXPERTOS - uv.mx · 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

�.� �������������� ����� ����� ��� ������������� 101

Interfaz del Usuario

sepregunta

menu_pregunta

Máquina de inferencia

solucioncargar

Base de Conocimientos

metareglas

mulivaluadopreguntado

Memoria de trabajo

conocido

Figura 29: El shell del SE.

9 bienvenida :-10 write(’Este es el shell de su SE.’), nl,11 write(’Escriba: cargar, consultar, o salir en el prompt.’), nl12

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 válido.’), 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 figura 29.

�.� �������������� ����� ����� ��� �������������Como hemos mencionado, el encadenamiento hacía adelante resulta conveniente cuan-do los problemas a resolver son del tipo selección estructurada, como en el ejemplode la clasificación de aves. Sin embargo, en además de que hemos asumido que lainformación completa está disponible para resolver el problema, también hemos asu-

Page 14: SISTEMAS EXPERTOS - uv.mx · 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

102 �������� ��������

mido que no hay incertidumbre, ni el los datos provistos por el usuario, ni en lasreglas de los expertos. Por ejemplo, el albatros puede ser observado en la bruma, conlo que sería difícil precisar si su color es blanco u obscuro. Es de esperar que un SEque maneje incertidumbre, pueda contender con este tipo de problemas.

Desarrollaremos un shell que permita manejar reglas con incertidumbre y encade-namiento de ellas hacía atrás. Evidentemente, este SE tendrá un formato de reglaspropio, diferente a las reglas de Prolog, y por lo tanto, una máquina de inferenciapropia.

�.�.� Factores de certidumbre

La forma más común de trabajar con la incertidumbre consiste en asignar un factor decertidumbre a cada pieza de información en el SE. La máquina de inferencia deberámantener los factores de incertidumbre conforme el proceso de inferencia se lleve acabo.

Por ejemplo, asumamos que los factores de certidumbre (precedidos por cf) sonenteros entre -100 (definitivamente falso) y +100 (definitivamente verdadero). La si-guiente base de conocimientos en formato del SE está diseñada para diagnosticar unauto que no enciende. Esto ilustra el comportamiento de los factores de certidumbre:

1 GOAL problema.2

3 RULE 14 IF not arranca AND5 bateria_mala6 THEN problema is bateria.7

8 RULE 29 IF luces_debiles

10 THEN bateria_mala cf 50.11

12 RULE 313 IF radio_debil14 THEN bateria_mala cf 50.15

16 RULE 417 IF arranca AND18 olor_gasolina19 THEN problema is fuga cf 80.20

21 RULE 522 IF arranca AND23 indicador_gasolina is vacio24 THEN problema is tanque_vacio cf 90.25

26 RULE 627 IF arranca AND28 indicador_gasolina is bajo29 THEN problema is tanque_vacio cf 30.30

31 ASK arranca32 MENU (si no)

Page 15: SISTEMAS EXPERTOS - uv.mx · 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

�.� �������������� ����� ����� ��� ������������� 103

33 PROMPT ’Su motor arranca? ’.34

35 ASK luces_debiles36 MENU (si no)37 PROMPT ’Sus luces están débiles? ’.38

39 ASK radio_debile40 MENU (si no)41 PROMPT ’Su radio está débil? ’.42

43 ASK olor_gasolina44 MENU (si no)45 PROMPT ’Huele a gasolina?’.46

47 ASK indicador_gasolina48 MENU (vacio, medio, lleno)49 PROMPT ’Que indica al aguja de gasolina? ’.

Por el momento la inferencia usaría encadenamiento hacía atrás, similar al que usaProlog. La regla GOAL indica que el proceso buscará un valor para problema. Laregla 1 causará que la sub-meta bateria_mala sea procesada, etc. Observen que lasreglas especifican también factores de certidumbre. Las reglas 2 y 3 proveen evidenciade que la batería está en mal estado, pero ninguna es conclusiva al respecto.

Un diálogo con este sistema sería como sigue:

1 consultar, reiniciar, cargar, listar, trazar, cómo, salida2 : consultar3 Su motor arranca?4 : si5 Huele a gasolina?6 : si7 Qué indica la aguja de la gasolina?8 : vacio9 problema-tanque-vacio-cf-90

10 problema-fuga-cf-8011 problema resuelto

Observen que a diferencia de Prolog, el sistema no se detiene al encontrar el primerposible valor para problema. En este caso se computan todos los valores razonablespara problema y se reporta el valor de certidumbre asociado a estas soluciones. Re-cordemos que estos factores de certidumbre no son probabilidades, solo ponderande alguna manera las respuestas.

De igual manera, el usuario podría ofrecer factores de certidumbre sobre sus res-puestas, por ejemplo:

1 : consultar2 ...3 Huele a gasolina?4 si cf 505 ...

Existen diversas maneras de capturar el concepto de factor de certidumbre, perotodas ellas deben de confrontar las mismas situaciones básicas:

Page 16: SISTEMAS EXPERTOS - uv.mx · 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

104 �������� ��������

• Reglas cuyas conclusiones son inciertas,

• Reglas cuyas premisas son inciertas,

• Datos provistos por el usuario inciertos,

• Combinación de premisas inciertas con conclusiones inciertas,

• Actualizar los factores de incertidumbre en los datos almacenados en el espaciode trabajo,

• Establecer un umbral sobre el cual las premisas se consideran conocidas.

�.�.� Factores de certidumbre à la MYCIN

MYCIN [5], uno de los SE más conocidos en IA, introduce factores de certidumbrediseñados para producir resultados intuitivos desde la perspectiva de los expertos.Revisemos el uso de estos factores por casos. El más simple, sería aquel donde laspremisas son totalmente ciertas:

1 arranca cf 100.2 olor_gas cf 100.

disparan la regla 4 y por tanto, problema fuga cf 80 deberá agregarse al almacénde trabajo. Sin embargo, este es un caso poco probable. Normalmente no estamostotalmente seguros de las premisas de una regla y lo normal sería tener hechos como:

1 arranca cf 80.2 olor_gas cf 50.

Cuando esto sucede, la incertidumbre en las premisas de la regla debe combinarsecon las de la conclusión de la misma de la siguiente manera:

CF = CFregla⇥ mı́nCFpremisa/100

Dado el ejemplo, la regla 4 se activaría con un cf = 50 (el mínimo de las dospremisas) y dada la fórmula anterior, agregaríamos problema fuga cf 40 al almacénde trabajo.

Para que una regla dispare, su factor de certidumbre debe superar un umbral quenormalmente se fija en 20. Así que bajo la definición anterior, la regla 4 dispararía. Situviésemos olor_gas cf 15, entonces la regla no dispararía.

Ahora consideren el caso donde hay más de una regla que da soporte a ciertaconclusión. En ese caso, cada una de las reglas que disparan contribuirá al factor decertidumbre de la conclusión. Si una regla dispara y la conclusión ya se encontrabaen el almacén de trabajo, las siguientes reglas aplican:

CF(X, Y) = X+ Y(100-X)/100. Ambos X, Y > 0

CF(X, Y) = X+ Y/1- mı́n(|X|, |Y|). Uno de X, Y < 0

CF(X, Y) = -CF(-X,-Y). Ambos X, Y < 0

Page 17: SISTEMAS EXPERTOS - uv.mx · 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

�.� �������������� ����� ����� ��� ������������� 105

Por ejemplo, si disparamos la regla 2 (luces débiles) con su premisa sin incerti-dumbre, tendríamos que agregar al almacén de trabajo bateria_mala cf 50. Luegosi disparamos la regla 3 (radio débil), el factor de certidumbre de este hecho debemodificarse a bateria_mala cf 75. Lo cual resulta intuitivo (hay más evidencia deque la batería tiene problemas). Lo que también resulta intuitivo es que necesitamosprogramar nuestra propia máquina de inferencia.

�.�.� Formato de las reglas

Como programaremos nuestra propia máquina de inferencia, podemos elegir la es-tructura de hechos y reglas. Las reglas tendrán la estructura general:

regla(Nombre,Premisas,Conclusion).

El Nombre opera solo como un identificador de la regla. El lado izquierdo de lamisma Premisas implica al lado derecho Conclusion (conclusión). Como usaremosencadenamiento hacía atrás, cada regla será usada para validar una pieza de informa-ción, de manera el RHS contiene una meta con su factor de certidumbre asociado:

conclusion(Meta,CF).

mientras que las premisas toman la forma de una lista de metas:

premisas(ListaMetas).

Las metas serán representadas, para comenzar, como pares atributo–valor:

av(Atributo,Valor).

cuando Atributo y Valor son átomos, la estructura general de las reglas se vecomo:

1 regla(Nombre,2 premisas( [av(A1,V1), av(A2,V2), ... ] ),3 conclusion(av(Attr,Val), CF)).

Por ejemplo, la regla 5 quedaría 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áciles de leer, pero tienen una estructura adecuada para serprocesadas por Prolog. Otras herramientas de Prolog como las gramáticas de cláusuladefinitivas (DCG) o la definición de operadores, puede ayudarnos a simplificar estarepresentación.

Page 18: SISTEMAS EXPERTOS - uv.mx · 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

106 �������� ��������

�.�.� La máquina de inferencia

Dado el formato de las reglas del SE deseamos que la inferencia tome en cuenta lossiguientes aspectos:

• Combine los factores de certidumbre como se indico anteriormente.

• Mantenga el espacio de trabajo con la información actualizada con las nuevasevidencias obtenidas.

• Encontrar toda la información acerca de un atributo en particular cuando sepregunte por él, y poner esa información en el espacio de trabajo.

Primero, los hechos serán almacenados en la memoria de trabajo de Prolog, con elsiguiente formato:

1 hecho(av(A,V),CF).

De forma que un predicado meta/2 haría la llamada para resolver un problemadado en estos términos. Por ejemplo, en el caso del arranque del auto, tendríamoscomo meta:

1 ?- meta(av(problema,X),CF).

El predicado meta/2 debe de contender con tres casos:

• El atributo–valor se conoce de antemano;

• Existen reglas para deducir el atributo–valor;

• Se debe preguntar al usuario.

El sistema puede diseñarse para preguntar al usuario automáticamente por el valorde un atributo, ante la ausencia de reglas; o bien, se puede declarar que atributospueden ser preguntados al usuario. Este último enfoque hace que el manejo de labase de conocimientos sea más explícito y provee mayor control sobre los diálogosusuario – SE. Podemos definir un predicado pregunta/2 para declarar el atributo apreguntar y la frase para ello:

1 pregunta(pais_residencia,’¿En qué país vive? ’).

Veamos ahora los tres casos para meta/2. El primero de ellos ocurre cuando lainformación ya está 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 memoriade trabajo, pero el es posible preguntar por ello al usuario:

Page 19: SISTEMAS EXPERTOS - uv.mx · 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

�.� �������������� ����� ����� ��� ������������� 107

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 conun valor para la atributo Atr y un factor de certidumbre asociado CF. El mensaje Msg

da la información 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)).

El tercer caso para meta/2 es cuando el valor del atributo es desconocido, pero sepuede deducir usando las reglas definidas en el sistema, en ese caso la llamada es:

1 meta(Meta,CFactual) :-2 buscaReglas(Meta,CFactual).

Esta llamada hace uso de la máquina de inferencia que diseñaremos para nuestroSE con incertidumbre. El factor de certidumbre se etiqueta como actual, porque esposible que cambie de valor al ir aplicando las reglas definidas en el sistema.

El predicado buscaReglas/2 se encarga de encontrar aquellas reglas cuya conclu-sión unifica con la Meta en cuestión y de actualizar el factor de certidumbre con baseen las premisas de estas reglas. Si la Meta es un hecho conocido, no hay nada quehacer, sólo 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 satisfacerla Meta del SE, es necesario que buscaReglas/2 las pruebe. Para ello definimosprobar/2:

1 probar(ListaPremisas, Contador) :-2 probAux(ListaPremisas, 100, Contador).3

4 probAux([],Contador,Contador).

Page 20: SISTEMAS EXPERTOS - uv.mx · 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

108 �������� ��������

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).8

9 int_redondear(X,I) :-10 X < 0,11 I is integer(X - 0.5).

La actualización 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).

Page 21: SISTEMAS EXPERTOS - uv.mx · 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

�.� �������������� ����� ����� ��� ������������� 109

�.�.� Interfaz con el usuario

La interfaz con el usuario es muy parecida a la definida en la sección anterior. Seincluyen predicados auxiliares necesarios en su definición:

1 se :-2 repeat,3 write(’consultar, cargar, salir’), nl,4 write(’: ’),5 read_line(X),6 ejec(X),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 %% % Auxiliares20

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), nl38 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

Page 22: SISTEMAS EXPERTOS - uv.mx · 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

110 �������� ��������

50 imprimeLista([]).51 imprimeLista([X|Xs]) :-52 write(X),53 imprimeLista(Xs).