Está en la página 1de 34

,Sis/emas

expertos

fl

;:,:

Prolog. Programacin avanzada

Los sistemas expertos son interesantes principalmente por dos razones:


primera, hay programas generalmente prcticos y tiles que satisfacen
una necesidad concreta; y segunda, son realizables. Estas son las razones de que ellos constituyan la mayora de los programas con xito comercial de la IA. La primera parte de este captulo le mostrar qu son
los sistemas expertos y las distintas formas en que pueden lrabajar. La
segunda parte del captulo desarrollar un sistema experto completo,
de propsito general.

Qu es un sistema exPerto?
se estableci en el Captulo 1, los sistemas expertos son programas que imitan el comportamiento de un experto humano. Usan la informacin que suministra el usuario para devolver una opinin sobre
una cierta materia. De este modo, el sistema experto le pide que responda preguntas hasta que puede identificar un objeto que se adeca a
sus respuestas. Para comprender lo que hace un sistema experto, considere el siguiente dilogo entre un experto en fruta y alguien que est
buscando consejo.

Como

Experto
Usuario
Experto
Usuario
Experto
Usuario
Experto
Usuario
Experto
Usuario
Experto

Es verde?

No.
Es rojo?
S.

Crece en los rboles?

No.
Crece en una caa?
S.

Tienen espinas las caas?


S.

Es una frambuesa.

El objetivo de un sistema experto en fruta informatizado es ser caprz

de reproducir este dialogo. Ms generalmente, un sistema experto intehta dar consejo al usuario sobre el dominio en el que es experto.

Sistemas

expertos

59

Cules son las ventajas de un sistema experto?

La utilidad de un sistema experto se basa principalmente en la eficacia


y conveniencia. A diferencia de un experto humano que tiene que dormir, comer, descansar, tomarse vacaciones, y otras cosas, el sistema experto est accesible para usarse veinticuatro horas al da, todos los das
del ao. Adems, se pueden crear muchos sistemas expertos, mientras
que el nmero de expertos humanos puede ser limitado, lo cual hace
virtualnente imposible en muchas situaciones tener un experto disponible cuando se necesita. Adems, a diferencia de los humanos, los expertos informatizados nunca mueren
el conocimiento con
-llevndose
experto puede copiarse y almaellos-. El conocimiento de un sistema
cenarse fcilmente siendo excepcional la prdida permanente del conocimiento del experto.
Otra ventaja de un sistema experto sobre los expertos humanos es
que el experto informatizado est siempre rindiendo al mximo. Cuando un experto humano se cansa, puede resentirse la fiabilidad del consejo del experto. Sin embargo, el experto informatizado generar siempre la mejor opinin posible
de las limitaciones de su cono-dentro
cimiento.
Una ventaja menos importante de un sistema experto es su falta de
personalidad. Probablemente se habr dado cuenta de que no todas las
personalidades son compatibles. Si no se lleva bien con un experto, puede tener reservas para utilizar el conocimiento de un experto. La situacin contraria tambin es cierta: un experto humano a quien no le guste usted puede no ser capaz de proporcionarle informacin fiable. Pero
un experto informatizado no tiene (o al menos no debera tener) personalidad, as se eliminaran estos problemas.
Una ventaja final de un sistema experto es que despus de tener un
experto informatizado, puede adquirir un nuevo experto simplemente
copiando el programa de una mquina a otra. Un humano necesita largo tiempo para convertirse en un experto en ciertos campos, lo cual
hace difcil adquirir nuevos expertos humanos.

Algunos ejemplos de sistemas expertos comerciales


Si no fuera por un sistema experto llamado MYCIN, los sistemas expertos podran haber permanecido en el laboratorio de investigacin de
la IA y no haber progresado dentro del mundo exterior. Uno de los

d0

furbo Prolog. Programacin

avanzada

mayores problemas de imagen de la IA ha sido que mucha gente, incluyendo otros programadores, crean que las tcnicas de IA slo funcionaban con problemas simples (llamados algunas veces problemas de
juguete) que requeran un conjunto estricto de reglas e hiptesis. Esta
gente crea que nunca podra usarse la IA para resolver problemas difciles. MYCIN cambi todo eso.
MYCIN fue el primer sistema experto exitoso del mundo. Desarrollado en la Universidad de Stanford a la mitad de los aos setenta,
MYCIN fue diseado para ayudar a los mdicos en la diagnosis de ciertas
enfermedades bacterianas. Diagnosticar enfermedades significa esencialmente comparar los sntomas exhibidos por el paciente con los sntomas
de una enfermedad hasta que se encuentra una similitud. El problema es
que para un mdico es difcil diagnosticar todas las numerosas enfermedades que existen rpidamente y con seguridad. Por consiguiente, MYCIN
satisfara la necesidad de confirmar los diagnsticos de los mdicos.
Otro ejemplo de sistema experto viable comercialmente es PROSPECTOR, el cual fue creado en 1978 por Richard Duda, Peter Hard y
Rene Reboh. PROSPECTOR es un experto en geologa: predice la verosimilitud de que pueden encontrarse depsitos de ciertos minerales
en una regin particular. Ha habido variaciones sobre este programa,
incluyendo programrs que son expertos en predecir descubrimientos de
petrleo, gas natural y helio.
El comienzo de los aos ochenta vio la introduccin de sistemas expertos dedicados que podan proporcionar consultora de impuestos,
consejos sobre seguros y asistencia legal. Muchos programadores creen
que al final de los aos ochenta habr un gran mercado de sistemas
expertos "personales" para usar en casa y en la oficina. Estos sistemas
jardinera y cuidado del csped hascubrirn muchas materias
-desde
ta reparacin de automviles-. De hecho, los sistemas expertos pueden probar ser el tipo de programa ms comn que se ejecuta en computadoras personales.

Cmo trabajan los sistemas expertos


Todo sistema experto tiene dos partes: la base de conocimientos y el
mecanismo de inferencia. Esta seccin describir las formas ms comunes en que pueden ser implementadas estas partes.

Sistemas

expertos

6l

La base de conocimientos
La base de conocimientos es una base de datos que toma informacin
y reglas especficas sobre una cierta materia. He aqu dos trminos que
debera conocer para esta discusin:

o Objeto.

Conclusin que se define por sus reglas asociadas.

a Atributo.

Una cuaiidad especfica que, junto con su regla, ayuda

a definir el objeto.

En consecuencia, puede pensar en la base de conocimientos como en


una lista de objetos con sus reglas y atributos asociados.
Para la mayora de las aplicaciones de los sistemas expertos, puede
definir un objeto como una lista de atributos que el objeto posee o no.
De este modo, para la mayora de los propsitos, la regla que se aplica
a un atributo establece que el objeto "tiene" o "no tiene" el atributo.
Por ejemplo, un sistema experto que identifica varios tipos de fruta podra tener una base de conocimientos como sta:
Manzana

( ti:,,
trcne.

)I no ttene

Itme

crece en los rboles

forma redonda
crece muy al sur
color rojo o amarillo

Uva
tiene
f tt.ene
<I frcne
I no *ne

Ittene
Naranja

*n,
f trcne
II no tiene
l*ne

crece en los rboles


tamao pequeo
color prpura
espinas

habilidad para hacer vino

crece en los rboles


forma redonda
crece en el norte

color naranja

Si piensa en esta base de conocimientos, puede ver que puede simpliy usar la forma negativa
ficarla: puede usar slo una regla

-"tiene"-

62

Turbo Prolog. Programacin avanzada

del atributo si debe establecer una relacin de "no tiene". De este modo,
la regla se convierte simplemente en "posee", y la base de conocirnientos simplificada aparece as:

Manzana

en los rboles

I "rrce
redonda
I .ro "..." muv al sur
color .t .o o amarillo
[-el

Uva

en los rboles
"r""e
tamaro pequeo
de
varios colores

(-tas viaes no tienen espinas


Naranja

1"r.." en los rboles


I redondo

no puede crecer en el norte

[-el color

es

prpura

Aunque ciertos sistemas expertos sofisticados pueden necesitar una regla ms compleja que simplemente "posee", sta es suficiente en muhas ocasions y simplifica en gran medida la base de conocimientos.
Para el resto de este libro, suponga que la base de conocimientos consiste slo en objetos Y atributos.

El mecanismo de inferencia
El mecanismo de inferencia es la parte del sistema experto que intenta
usar la informacin que le da para encontrar un objeto que case' Hay
dos categoras claras de mecanismos de inferencia: determinstico y probabilstico. Para comprender la diferencia, imagine que hay dos expertos, uno en qumica y el otro en sociologa. El qumico puede decir con

un
certeza que si el tomo en cuestin tiene dos electrones, entonces
porque
tomo de helio. No hay duda acerca de la identidad del tomo
el nmero de electrones determina el tipo de elemento. Sin embargo, si
pregunta al socilogo cul es la mejor forma de prevenir los abandonos
en t Uactrillerato, el socilogo dar una respuesta que est calificada
eS

It

u
a

:T

Sistemas expertos

63

como ser slo probable o como que tiene una cierta probabilidad de
xito. En consecuencia, la respuesta es verosmil, pero incierta.
La mayora de las disciplinas no son determinsticas, sino probabilsticas en cierta medida. Sin embargo, para muchas de stas, la incertidumbre no es estadsticamente importante por lo que se pueden tratar
como situaciones determinsticas. El resto del captulo tratar slo con
sistemas expertos determinsticos porque su lgica es ms clara. (Sin embargo, el captulo 8 trata de sistemas probabilsticos e incertidumbre.)
Ms all de estas dos categoras claras de certidumbre e incertidum-

bre, hay tres formas bsicas de construir el mecanismo de inferencia:


encadenamiento hacia delante, encadenamiento hacia atras y valor de
la regla. Las diferencias de los mtodos se refieren a cmo intenta el
mecanismo alcanzar su objetivo.
:,

,.i

til,
rii.
ir
lr

I
i

ll
il
ti
t:

li
ir

El mtodo de encadenamiento hacia delante. El encadenamiento hacia delante es llamado algunas veces guiado por los datos (data-driven)
porque el mecanismo de inferencia usa informacin proporcionada por
el usuario para moverse a travs de la red de Y y O lgicos hasta que
alcanza un punto terminal, el cual es el objeto. Si el mecanismo de inferencia no puede encontrar un objeto usando la informacin existente,
entonces pide mas. Las reglas que definen el objeto crean el camino
que conduce a l; en consecuencia, la nica forma de alcanzar el objeto
es satisfacer todas sus reglas. De esta forma, un mecanismo de inferencia encadenamiento hacia delante comienza con alguna informacin y
trata de encontrar el objeto que encaja con la informacin.
Para comprender cmo trabaja el encadenamiento hacia delante,
imagine que su coche est funcionando mal y que telefonea a su mecnico, que es el experto en este caso, para que le d una opinin sobre
el problema. Entonces el mecnico le pide que descubra lo que est mal.
Usted explica que su coche tiene prdida de potencia, pega tirones, el
motor sigue funcionando despus de que se apaga el contacto y que no
se ha puesto a punto en varios meses. Usando esta informacin, su mecnico le dice que lo ms verosmil es que su coche necesite imperiosamente una puesta a punto.
Si recuerda la base de conocimientos de la fruta descrita anteriormente, puede crear un diagrama que muestre cmo alcanzara el objeto
maI]zana un mecanismo de inferencia por encadenamiento hacia delante, cuando se dan los atributos propios, como se muestra en la Figura 3-1. Como puede ver, un sistema de encadenamiento hacia delante
esencialmente construye un rbol desde las hojas hasta la ra2.

6t

Turbo Prolog. Programacin avanzada

Redondo

Crece en los rboles

No crece muy

Rojo o amarillo

Manzana

Figura

3-1.

Encadenamiento hacia delante hasta el cbjeto manzana

El mtodo de encadenamiento hacia atrs. El encadenamiento hacta


atrs es el opuesto al encadenamiento hacia delante: un mecanismo de
inferencia por encadenamiento hacia atrs comienza con una hiptesis
(un objeto) y pide informacin para confirmarlo o negarlo. Por ejemplo, el sistema experto simple en animales que se incluye en el paquete
de Turbo Prolog usa el encadenamiento hacia atrs. El encadenamienes llamado a veces guiado por los objetos (object-driven)
porque el sistema empieza con un objeto e intenta verificarlo.
Para comprender cmo trabaja el encadenamiento hacia atrs, imagine que su computadora para de trabajar repentinamente. Su primera
tripOtsis es que se le ha ido la corriente. Para comprobar esto, escucha
el ventilador. Oyndole funcionar, techaza esta hiptesis y procede a
otra. Su segunda hiptesis es que su computadora se ha estropeado debido a un defecto del software. Para confirmar o rechazar esta posibilidad, hace un reset a su computadora para ver si se inicializa con xito. Afortunadamente, su computadora vuelve a la vida; su segunda hiptesis era cierta.
Si la fruta en cuestin es una marlzar].a, aplicar inferencias de encadenamiento hacia atrs a la base de conocimientos de fruta produce el
diagrama de la Figura 3-2. Como muestra este diagrama, el encadenamiento hacia atrs poda un rbol. Esto es lo opuesto al encadenamiento hacia delante, el cual construye un rbol.

to hacia atrs

El mtodo del valor de la regla. un mecanismo de inferencia del valor


de la regla es superior tericamente tanto a un sistema de encadenamiento hacia delante como a uno de encadenamiento hacia atrs por-

Figure

Sistemas expertos

65

lntena manzana

Crece en
Crece en las rides

Es naranla

Rojo o amarillo

Manzana

Figura

3-2.

Encadenamiento hacia atrs hasta el objeto manzana

que requiere la informacin que tiene mayor importancia, dado el estado actual del sistema. Es comnmente un mecanismo de encadenamiento hacia atrs mejorado. La teora general de operacin es que el
sistema requiere como su prxima pieza de informacin aquella que JUprimir la mayor incertidumbre del sistema.
Para comprender el enfoque del valor de la regla, imagine que ha
llamado a su mdico porque su hijo est enfermo. El doctor primero
pregunta si el nio tiene fiebre porque la respuesta a esta pregunta estrecha el mayor nmero de posibilidades. Si responde "s" a la primera
pregunta, entonces el doctor pregunta sta en vez de otras porque sus
respuestas tienen el mayor impacto dado el estado actual. Este procedimiento contina hasta que el doctor puede hacer un diagnstico. En
este ejemplo, el punto clave es que el doctor selecciona cada pregunta
para progresar ms rpidamente hasta la conclusin.
El problema de los sistemas con valor de la regla es que son difciles
de implementar. Hay dos razones para esto' Primero, en las situaciones
de la vida real, la base de conocimientos es a menudo tan grande que
el nmero de combinaciones posibles excede lo que puede ser abarcado
fcilmente. Por consiguiente, el sistema no puede determinar simple-

T-rrbo Prolog. Programacin ar.anzada

mente qu informacin elimina la mayor incertidumbre en cualquier es-

tado dado. Segundo, los sistemas con valor de la regla requieren que
la base de datos contenga no slo la informacin estndar obieto-atributo, sino tambin un cuantificador de valor que hace ms difcil la
construccin de la base de conocimientos. Sin embargo, hay ciertas situaciones que conducen por s mismas a inferencias basadas en el valor

Cre

de la regla ms que otras. Tambin, cuando son implementados, los sis-

temas con valor de la regla generalmente hacen un trabajo mejor que


los otros dos mtodos.

Eleccin de un mtodo. En este momento, usted puede estar preguntndose cul de los tres tipos de mecanismo de inferencia es el mejor
para usar. La solucin se basa en parte en la preferencia personal, porque los tres tipos harn cualquier tarea que usted quiera hacer. Como
se estableci anteriormente, puede encontrar que los sistemas con valor
de la regla son difciles de implementar, por eso, hasta que sea un experto en la construccin de sistemas expertos, probablemente es mejor

evitar este mtodo.

El mtodo de encadenamiento hacia delante hace ms fcil el proceso de derivar la mayor cantidad de informacin de la base de cono-

cimientos porque construye un rbol. Los sistemas de encadenamiento


hacia delante encuentran comnmente todos los posibles objetos que encajan con los atributos. La ventaja del sistema experto que usa el encadenamiento hacia atrs es que requiere slo la informacin suficiente
para encontrar un objeto. De este modo, debido a que los sistemas expertos de encadenamiento hacia atrs son guiados por et objetivo (goal
driven), slo permiten que entre en el sistema informacin relevante,
mientras que los sistemas expertos de encadenamiento hacia delante
pueden tener que descartar informacin extraa. Un sistema de enca-

denamiento hacia atrs es til cuando se quiere encontrar un objeto


aunque otros objetos tambin satisfagan los atributos-. Us-incluso
ted puede hacer un sistema experto de encadenamiento hacia atrs gue
encuentre soluciones mltiples, pero requiere un poco ms de trabajo
que construir un sistema experto de encadenamiento hacia delante.
En el anlisis final, depende de usted el enfoque concreto que use.
Sin embargo, si todos los casos son iguales, el enfoque de encadenamiento hacia atrs es un poco mas fcil de implementar y produce un
sistema experto que parece lo que usted esperara que pareciera. Por
estas razones, este captulo desarrollar un sistema experto que usar
encadenamiento hacia atrs.

,.

I
r

Sistemas expertos

67

creacin de un sistema experto de propsito generar


Ahora que tiene ros conocimientos bsicos necesarios sobre
sistemas expertos, es hora de ver la.apariencia que tiene un
sistema experto concreto. Esta seccin crear un sistema experto de propsito gin.iut
q*
usa encadenamiento hacia atrs. Es llamado ae jroposito g-enerar
porque permite usar el mismo mecanismo de inferenci
con diversidad de
bases de conocimientos. Tambin incluye las rutinas ,r"".ru.iu,
puru
crear las bases de conocimientos. Sin embargo, antes de
empezar, es im-

portante disipar algunas ideas preconcebidas que puede


tener sobre la
forma en que deberan implementarse los sistemas expertos.

un

hecho desafortunado, pero comprensibl.,


qui virtualmente to",
dos los libros introductorios sobre prorog (incluyendo
el manual de
usuario de Turbo Prolog) usan el ejemplo simple del sistema
experto
"animal". ocasionalmente, un libro iltroductorio puede l.uu. ago
-ar,
pero est estructurado aproximadamente de la misma
forma. rnqr.
este sistema experto simple sirve para ilustrar varios
aspectos del prolog (y ciertamente estimula la imaginacin), presenta una forma
incorrecta de implementar un sistema experto. SJ mezcla el
mecanismo de
inferencia con los objetos y atributos. Esto significa que ra
uur. . .onocimientos est codificada dentro del programa. Esta es
una tcnica
de programacin pobre por varias ."ro.r.r.-una de las p.or"r
.urorr.,
es que alterar, mejorar o agrandar la base de conocimi"nio,
i_pii* unu

alteracin en el cdigo del programa


una recompiracin-. Esta arteracin abre la puerta a toda clase de-y
problemas que van desde errores
accidentales de edicin hasta la mutilacin del cdiio u.iuur
por * p."gramador inexperto. otra razn por la que codificar la
base de conocimientos dentro del programa es una tcnica de programacin
pobre
es que los cambios a la base de conocimientos duianti
,r, ,,ro ,l[r..i
ra que un usuario hiciera cambios en el programa
ltima .oru q.r.
deseara un programador en lo que a l iespicta_.-la
Adems, estu prac_
tica implica tambin que el usuario tendra .".ro al cdigo
fuente, atgo
que ningn constructor de software comercial deseara.
como muestra esa discusin, la base de conocimiento debe estar
separada del mecanismo de inferencia. slo de esta
forma pueden crear
los constructores legtimos del software sistemas viables. 'nrt"
p..*it"
tambin el desarrollo de sistemas expertos de propsito generai
que el
usuario puede entrenar sin reprogrrmar. Esties ia est.ictura
ti.u.
nen todos los sistemas comerciales, y esta es la estructura que
imprementar el sistema experto que este captulo crea.

6t

Turbo Prolog. Programacin avanzada

Lo esencial de su forma de operar


Antes de que vea cmo escribir cdigo para un sistema experto, esta
seccin define, en trminos prrticos, lo que necesita hacer para crear
un mecanismo de inferencia. Esta seccin supone que la base de conocimientos consistir slo en objetos y sus atributos. Para comprender
lo que debe ser capaz de hacer un mecanismo de inferencia, use la pequea base de conocimientos que se muestra aqu:

Objeto
I
2
3
4

Atributos

A,B,C
A, B,Y

B,X
A,B,D

En el nivel ms primitivo, el mecanismo de inferencia comienza suponiendo que el objeto I es el objetivo y trata de confirmar esto preguntando si el objetivo tiene los atributos del objeto 1. Si los tiene, entonces el mecanismo de inferencia manifiesta que el objeto I es la respuesta. Si no, entonces el mecanismo de inferencia procede con el objeto 2
e inquiere sobre los atributos del objeto 2. Este proceso se repite hasta
que o bien se encuentra el objeto apropiado, o bien no hay ms objetos. Si son estos los pasos que toma el mecanismo de inferencia, y si el

objetivo

es

el objeto 4, tendr lugar el siguiente dilogo:

experto tiene A?
usuario s.
experto tiene B?
usuario s.
experto tiene C?
usuario no.
experto tiene A?
usuario s.
experto tiene B?
usuario s.
experto tiene Y?
usuario no.
experto tiene B?
usuario s.
experto tiene X?

lxr,:chazar

lxl

/x

redundante *,i

/*

redundante x/

f *rechazar 2x f
/ x redundante x/

/ x innecesario

*/

ci

Sistemas

usuario no.
experto tiene A?
usuario s.
experto tiene B?
usuario s.
experto tiene D?
usuario s.
experto es el 4.

expertos

69

*rechazar 3* I
/*redundante*i
f

/r.redundantex

/xencontrado*/

Un sistema experto que trabaje como ste no slo sera tedioso de usar,
sino que no merecera la pena en la mayora de los casos cuando hubiera ms de un puado de objetos en el sistema. Este tipo de sistema exhibe dos defectos. Primero, pregunta sobre el mismo atributo varias veces. Segundo, cuando vuelve al objeto 3, hace una pregunta innecesa-

ria. El sistema debera haber sabido por sus preguntas previas que el
objeto en cuestin tiene el atributo B, y debera haber rechazado el objeto 3 sin una nueva prueba porque el objeto 3 no tiene el atributo B.
Aunque es posible qtse podra haber sido til saber sobre el atributo X,
en trmino medio, el mecanismo de inferencia ser ms eficiente si pasa
por alto todos los objetos que no se ajusten al estado actual. De este
modo, lo que se desea es un mecanismo de inferencia que, cuando se
da la misma base de conocimiento con el objeto 4 como objetivo, produzca este dilogo:

experto tiene A?
usuario s.
experto tiene B?
usuario s.
experto tiene C?
usuario no.
experto tiene Y?
usuario no.
experto
usuario
experto

tiene

D?

fxrechazar

lxf

*rechazar 2xf

*rechazar 3*f

/ * encontrado

*/

s.

es el 4.

Con este tipo de mecanismo de inferencia como objetivo, he aqu las


especificaciones que debe conformar el mecanismo de inferencia del
ejemplo:

'r0

Turbo Prolog. Programacin avanzada

l.

El sistema experto no pregunta sobre el mismo atributo dos veces.

2.

El sistema experto rechazara inmediatamente y pasara por alto

cualquier objeto que rio tenga los atributos necesarios conocidos.

3.

Si se le ordena, el sistema experto debera ser capaz de manifestar por qu est siguiendo una lnea de razonamiento.

La tercera especificacin se aade no slo como una forma de verificar


que el sistema experto est operando correctamente, sino como un mtodo de educar al usuario.

Estructuracin de la base de conocimientos


es definir la estructura de
la mayora de los sishace
como
usar,
Usted
conocimientos.
la base de
temas expertos comerciales, la facilidad de la base de datos predefinida
del Turbo Prolog. La base de conocimientos es

El primer paso para crear un sistema experto

info(symboI,1ista)

/* objeto, lista de atributos */

donde lista ser definida como una lista de smbolos.


Como ver, el mecanismo de inferencia debe llevar la cuenta de todos los atributos que pertenecen al objetivo y de aquellos que no pertenecen. Aunque podra usar listas para hacer esto, es ms fcil definir
dos bases de datos adicionales que almacenen esta informacin temporalmente. Por consiguiente, la porcin de declaracin de base de datos
entera de un sistema experto es

database

info(symbo1,1ista)

/x objeto, lista de atributos */


s(symbol) /* recotdax 1-as x/
no(symbol) /* resPuestas s Y no */
Carga de la base de conocimiento
Antes de que pueda desarrollar el mecanismo de inferencia, debe crear
rutinas que le permitan situar la informacin en la base de datos. Aun-

Sistemas

expertos

7l

que podra escribir un programa separado para hacer esto, la mayora


de. los sistemas expertos comerciales lo haran de esta forma, poisim-

plicidad las rutinas que permiten introducir conocimiento ".iro del sistema experto desarrollado aqu. como se muestra aqu, introducir lee
el nombre de un objeto y llama a atributm, que introuce los atributos
que se asocian con ese objeto. Este proceso se repite hasta que el usuario teclea fin. Entonces introducir pregunta por ms; si el usuario teclea s como respuesta, entonces se repite el procedimiento. He aqu estas rutinas.

/* introducir objetos y atributos */


introducir:

r{rrite("Qu

es?:,'),

readln(Object),

Obj

ect(}"fin"

atributos(Object, [ ] ),
write("ms? "), !,
readln(Q),Q:s,

introducir.

,/* obtener los atributos */


atributos(O,List): write (O , ', es/tiene/hace : ', ) ,
readln(Attribute)
Attribute(>"f in',
aadir (Attribure, ri"a, List2 ),
atributos(O,List2).
atributos(O,Lisr): assert ( info (O, List) ),
escribirlista(List, 1), !,
,

nl

Debido a que el usuario slo debera tener que introducir una vez la
informacin en la base de conocimientos, al final de cada sesin de entrad,a, otra rutina salvar la informacin usando la orden save del rurbo Prolog. Por simplicidad, este sistema experto supondr siempre que
la base de conocimientos est contenida en el archivo x.dat. (in embargo, sera fcil permitir al usuario especificar el nombre del archivo.
Puede desear hacer esta mejora usted mismo.) Bajo esta hiptesis, el primer preCicado ejecutado ser start, el cual se muestra aqu:

72

Turbo Prolog. Programacin ar.anzada

start: consult("x'dat"), /* leer un nfo x/


fail.
/* ir a l-a siguiente clusuLa x/
start:
assert(s(end) ) ,
assert(no(end)),
write("Introducir informacin? (srzn) : "),
readln(A) ,
A:S,

not(introducir) ,
save("x.dat"), !, /* saLvat la base de conocimientos */
preguntar.
start: preguntar.
Esta es la forma en que trabaja start. La primera clusula comunica al
sistema que lea en ia base de conocimientos x.dat y luego falla. Esto
fuerza al Turbo Prolog a intentar la segunda clusula. Puede pensar
que no hay motivo para incluir la primera clusula porque podra simplemente situar consult("x.dato') como primera lnea de la segunda
ilusula. Sin embargo, lo malo de esto e que la primera vez que el sistema se ejecute no existir x.dat. Esto significa que consult fallar. As,
si consult fuera parte de la segunda clusula, las lneas de cdigo despus de consult nunca se ejecutaran.
Los dos assert con que comienza la segunda clusula se usan para
inicializar las dos bases de datos-soporte. Despus, el programa preguntar si el usuario desea introducir ms, o nueva, informacin. Si el
usuario responde s, entonces se ejecuta el predicado introducir explicado anteriormente. Despus del regreso de introducir, la rutina salva
la informacin en el archivo del disco y llama al predicado de alto nivel
del mecanismo de inferencia preguntar. Si el usuario elige no introducir
ms informacin, entonces la segunda clusula de start falla y la clusula final ejecuta una llamada a preguntar.

Construccin del mecanismo de inferencia


Ahora que puede cargar informacin en la base de conocimientos, est
listo para atacar el mecanismo de inferencia. El mecanismo de inferencia eJ la fierza conductora del sistema experto. Aunque en sentido abstracto es bastante simple, implementar un mecanismo de inferencia puede ser bastante difcil. Aunque el que se desarrollar aqu es bastante

Sistemas expertos

73

simple, es bastante bueno para muchas tareas.


Recuerde que los sistemas expertos comerciares tendrn generalmente
un nmeio mayor de
restricciones y demandas que las qrr. ,. estn poniendo
en este sistema
experto' Todava, el mecanismo de inferencia desarrolr"ao
uqui ir.a.
servir como punto de partida para sus sistemas
ms avanzados.
El predicado de alto rur,el del mecanismo de inferencia
., fr.grrrt".
y se muestra aqu:

/x pedir informacin al usuario para


encontrar un objeto */
preguntar: info(0,A),
anterioressi(A)
/'* comprobar 1as respuestas s
anteriores x-/
anterioresno(A),
/* y Las respuestas no */
intentar(O,A),
/x ver si encaj a */
,

purgar.
preguntar:
purgar.

A pesar de su apariencia simple, preguntar es bastante sofisticado


porque u operacin est basada en las capacidades

de la vuelta a,.r p.oTurbo prolog. Tr.abaja como sigue. primero, p..gr"i;;;;g.r_


ta a la base de conocimientos para tigr un objeto y'rur-utri-urio,
uo
y A. Suponiendo que haya algo en la base e cnocimi"rtor,
,ri.-puro
tendr xito. Luego, las rutinas anteriores s y anterior..
no'..iuun lo,

pia

d.el

objetos que no se encuentran en el estado actual


del sistema: anteriores
s comprueba la lista de atributos de o para
asegurarse de que contiene
todos los atributos que er usuario ha comuni"uo
ui-rirt"riu '.u.
tener el objeto; y anteriores no la comprueba para
ur.gr.u.r-. qu"
entre los atributos de O no se encuentr ninguno que
hya sido recha_
zado' Estos chequeos satisfacen las especificaicion"r p.i.*
| ,"g;nou,
que se dieron anteriormente. El prediiado intentar
iregunta al u"ruu.io
sobre los atributos. Si todos eilos casan, entonces
se ha encontrado el
objeto y purgar borra las bases de datos temporales.
Si no casan, in_
tentar falla y se hace una vuelta atrs con un nuevo
objeto tomado de
la base de conocimientos. Finalmente, si se han examinado
todos los
objetos de la base de datos, entonces el sistema simplemente
uo.ra tas
bases de datos temporales y termina.
. El proceso entero parece bastante fcil. Sin embargo, todava no ha
visto las'rutinas soporte. primero, he aqu anteriores
Jy
no.

"niurio...

74

Turbo Prolog. Programacin avanzada

tienen
,/* seleccionar todos los objetos que nodeterminados
1os atributos apropiados como ya estn
anterioressi(A): si(T), !
xanterioressi(T,A, [ ] ), !'.
,

xanterioressi(end,-,-) : - !
xanterioressi(T,A, L) : -

miembro(T,A) , ! ,

aadir(T,L,Lz) ,
s i (X) , not (miembro (X, L2) ) , | ,
xanterioress i (X, A, L2 ) .

tjenen
/* seleccionar todos los objetos que
atributos Ya determinados como no
pertenecientes a1 objeto */
anteri-oresno (A) : no(T) , ! ,

xanterioresno(T,A,

[]

),

xanterioresno(end,-,-):

-!

xanterioresno(T,A, L) : not(miembro(T,A)), !,
aadir(T ,L,Lz) ,
no(X),not(miembro(X,L2) ), !'
xanterioresno (X, A, L2 ) .
Los predicados anterioles s y anteriores no

se usan simplemente para

envir ilamadas a sus respectivas rutinas soporte. Estos predicados ayu-.


dan a restringir la vuelta atrs del Turbo Prolog. Adems, el corte (!)
se usa libremente para impedir la vuelta atrs a varios puntos. Como
probablemente sabe ya, algunas veces la parte ms dura de programar
en Turbo Prolog es iimitar su implacable bsqueda de soluciones. El
predicado soporte miembro determina cundo un elemento es parte de
una lista. El punto importante que debera recordar sobre la operacin
de estas rutinas es que usan la centinela end para determinar su operacin: anterioles s slo devuelve el valor verdadero si anteriores s devuelve verdadero, y la nica forma de que ocurra eso es que la clusula

xanterioressi

end,

-, -

Sistemas

expertos

75

tenga xito. Esto slo puede ocurrir si todos los atributos que se almacenan en la base de datos temporal encajan con aquellos del objeto en
consideracin. Lo mismo vale para anteriores no.
La porcin del mecanismo de inferencia que interacta con el usuario y encuentra efectivamente el objeto objetivo es intentar:

,/* intentar una hiptesis */


intentar(O,[]):write("Es ",o),nI.

intentar(o, [XlT]): si(X), !,


intentar(O,T).
intentar(O, [XlT] ): write("es/tiene filace ",X, " "),
readln(Q) ,
procesar(O,X,Q), !,

intentar(O,T).

Como se muestra aqu, intentar extrae un atributo cada vez de la lista


de atributos del objeto y pregunta al usuario si este atributo particular
es parte del objeto objetivo. Si el usuario responde s a todas las preguntas, entonces se produce una lista vaca finalmente y la primera clusula devuelve el valor verdadero. La segunda clusula se usa para impedir las preguntas redundantes. Debido a que el sistema experto est
diseado para ser de propsito general, el mensaje de pregunta es tan
general como es posible. Sin embargo, podra adaptarlo para hacerle
que pegue.
La porcin intentar usa el predicado soporte procesar, que toma diferentes acciones basadas en la respuesta del usuario. Procesar tambin
este modo
explica por qu se est preguntando una cierta pregunta
-de
resanteriormente-.
Procesar
se satisface la tercera especificacin dada
ponde a la orden why (por qu) imprimiendo qu objeto se est persiguiendo actualmente y la lista actual de atributos. Aqu se muestra procesar con su rutina soporte xwrite, que es usada para presentar la lista
de atributos actuales:

/* procesar varias respuestas */


procesar(_,X, s)

:-

asserta(si(X)), !.

procesar(_,X,n) : asserta(no(X)), !, fai1.

76

Turbo Prolog. Programacin avanzada

procesar(O,X,why): write("Creo que puede ser',), nl,


write (0, " porque tiene: ', ) , n1 ,

si(Z),xwrite(Z),n1,

Z:end,l,

write("es/tiene/hace ",X, "? "),


readln(Q) ,
procesar(O,X,Q), !.

xwrite(end).
xI^irite (z) : write(Z).
He aqu el programa del sistema experto entero. Debera introducir ste
en su computadora ahora, as estar listo para una ejecucin de ejemplo.

/.', Un si.stema experto con encadenamiento hacia atrs


que s1o 1a primera solucin *,/
domains

lista : symbol*

database

info (s1'rnbo1 , lista)


/), objeto, lista de atributos */
si(symbol)
/* recordar las */
no(symbol) /* respuestas s y no
predicates
j untar (1ista, lista, lista)
escribirlista ( Iista, integer)
introducir
purgar
aadir ( symbol, 1 ista, lista)
preguntar
atributos ( symbol, lista)
procesar(symbol, symbol, symbol)
start
anterioressi(lista)
anterioresno ( lista)
xanter i o re s s i ( symbo I , 1 i s ta , 1 i s ta )
xanterioresno ( symbol , lista, lista)
intentar ( symbol, 1is ta)
miembro (symbol , lista)
xwrte(symbol)

>\/

Sistemas expertos

goal
s

tart

clauses

start: consult("x.dat"), /*'leer un irfo *.i


fai1. /* r a la siguiente cl-usu1a *.,,
start: assert(s(end) ) ,
assert(no(end)),
write("Tntroducir informacin? (s/n) :,'),
readln(A) ,
A:S,

not(introducir),
save("x.dat"), !,
preguntar.
start: preguntar.

,/* introducir objetos y atributos


introducir: write( "Qu es?:
readln(Object),
Obj eet()" f in,'
atributos(Object,

")

[]

),

write("ms? "),!,
readln(Q),Q:s,

introducir.

obtener los atributos *,/


atributos(O,Lisr): v/rite(0, " es/tiene/hace: "),
readln(Attrbute) ,
Attribute()" fin"
aadir (Attribure , 1,i"., List2 )
atributos(O,List2).
atributos (0, List) : assert(info (O, List) ),
,/rk

escribirlista(Lisr,1)

nl

,t

/* aadr un srmbol a una Lista x/


aadir(X, L, [xlL] ) .

r",/

77

78

Turbo Prolog. Programacin avanzada

/* ped.ir informacin a1 usuario


encontrar un objeto x/

para

preguntar: info(O,A),

anterioressi(A), ,/* cmProbar 1as respuestas s


anteriores *r/
anterioresno(A) , /* resPuestas no */
intentar(O,A),

Purgar.
preguntar:
purgar.

,/x seleccionar todos 1os objetos que no tienen


Ios atributos apropiados como ya estn
determinados

*/

anterioressi(A): si(T), ! ,
xanterioressi(T,A,

[ ] ), !

xanterioressi(end,_,_) : - ! .
xanterioressi (T,A, L) : miembro(T,A), !,
aadir(T ,L,Lz) ,

si(X),not(miembro(X,L2) ), !,
xanterioress i (X, A, L2 ) .

,/* seleccionar todos 1os obj etos que tienen


atributos va determinados como no
pertenecientes al objeto */
anterioresno(A) : no(T), ! ,
xanterioresno(T,A,

[]

),

xanterioresno(end,_,_):
xanterioresno(I,A, L) : not(miembro(T,A)), !,
aadir(T,L,L2),

-!

no(X),not(miembro(X, L2) ), !,
xanterioresno (X, A, L2 ) .

/* intentar una hptesis */


intentar(O,[]):write("Es ",O),nl.

Sistemas expertos

intentar(0, [XlT]) : si(X) , !


intentar(0,T).
intentar(0, [XlT] ): hrrite("es/tiene/hace ",X, " "),
,

readln(Q) ,
procesar(O,X,Q), !,

intentar(O,T).
/)t procesar varias respuestas */
procesar(_,X, s)

:-

asserta(si(X)), !.

procesar(_,X,n): asserta(no(X) ), !, fai1.


procesar(O,X,why): write("Creo que puede ser"), nl,
hrrite(o," porque tiene: "),nl,
si(Z) ,xwrite(Z) ,nl,
Z:end,l,

write("es/tiene/hace ",X, "? "),


readln(Q) ,
procesar(O,X;Q), !.

xwrite(end).
x\,rrite(Z) : write(Z).
Purgar: -

retract(si(X)
fail.

X-end,

PurSar: -

retract(no(X) ) ,

X:end.

juntar( [ ], List, List)


juntar([xlL1], List2, IxlL3]) it
juntar(Ll,List2,L3).
escribirlista( [ ] ,_).
.

escribirlista( [HeadlTail] ,3) : \"/rite(Head) ,nl , escribirlista(Tail , l)


escribirlista( [Headl Tail] , I) : N:I+l,
write(Head, " "),escribirlista(Tai1,N)
miembro(N, tNl_l).
miembro(N, t_l Tl ) : - miembro(N,T) .
.

79

80

Turbo Prolog. Programacin avanzada

Una ejecucin de ejemplo


Ahora que se ha introducido el sistema experto en su computadora,
ejectelo e introduzca la siguiente informacin en 1a base de conocimientos.

Atributos
Objeto
Manzana crece-enjrrboles,roja-o-amarilla,redonda
naranja, crece-en--rboles, redonda
Naranja
prpura, crece-en-vides, no-espinas
Uva
Frambuesa crece-en-caas, roja, espinas
crece-en-rboles, roja-o-verde, no---:edonda
Pera
crece-en-vides, no-espinas, verde, grande
Sanda
roja o-amarilla, crece-enjrrboles, pequea
Cereza
Mandarina piel suave,redonda,crece-enitrboles,naranja
Con el sistema dotado de conocimiento, usted podr usarlo para identificar diferentes tipos de fruta. Los tres dilogos siguientes fueron producidos mediante el uso de este sistema:

Primer dilogo

es/tiene/hace: redondo s
es /tiene/hace : roj o_o_amarillo n
es /tiene/t.ace : crece_en_rboles s
es/xiene/hace : naranja s
Es naranja

Segundo dilogo

es/tiene/hace:
es/tiene/hace :
es/ti-ene/hace :
es/ti-ene/hace:
es/tLene/haee:
es/tLene/hace:
Es sanda

redondo n
no_espinas s
crece_en_vides
prpura n
grande s

verde

Sistemas expertos

81

Tercer dilogo

/ tLene/haee: redondo n
es/ ti,ene/hace: no_espnas s
es/tiene/hace:. crece_en_vides
es/ti-ene/hace: prpura n
es/xiene/hace: gran,Je s
es

es/xiene/hace: verde why


Creo que puede ser sanda porque tiene:
grande

crece_en_vides
no_espinas

es/ti,ene/haee: verde
Es sanda

Observe el uso de la orden why en el tercer dilogo. Intente experimen-

tar con el sistema; tan pronto como se convenza de que comprende su


operacin, proceda con la siguiente seccin.
rl:

ll
ii

Encontrando soluciones mltiples


Si repasa la base de conocimientos, encontrar que las definiciones de
naranja y mandarina son idnticas, excepto que la mandarina tiene el
atributo adicional de ser de piel suave. En consecuencia, incluso si el
usuario tiene realmente una mandarina, el sistema experto tal como
est identificar siempre una naranja porque encaja con los tres primeros atributos de mandarina. Esto puede ser aceptable en algunas situaciones, pero para la mayora ser importante encontrar una solucin
completa. Ahora ver de qu forma puede modificar el sistema para
que encuentre todas las soluciones.
Hay slo dos predicados que necesitan ser alterados sustancialmente: preguntar e intentar. Preguntar debe cambiarse para aceptar una lista como parmetro. Esta lista recoger los nombres de los objetos que
el sistema ya ha examinado e impedir que la base de conocimientos
sea reexaminada desde el principio cuando el usuario pide soluciones
adicionales. Otro cambio a preguntar es que devolver la solucin actual, en vez de intentar. El predicado preguntar modificado se muestra
aqu:

ii:rbo Prolog. Programacin

atanzada

preguntar(L): info(O,A),
not(miembro(O,L)), /x no encontrar e1 mismo *,/
aadir(O ,L,Lz) ,
/* dos veces *,/
anterioressi(A), ,/* comProbar 1as respuestas s

anteriores */
, /x resPuestas no */
intentar(O,A),
! , r.rrite (0, " satisface los " ) , n1
write("atributos actuales"),nl,
anterj.oresno(A)

write( "continuax? " ),


readln(Q) , Q:s,
preguntar(L2).

Aqu, cada vez que se encuentra un objeto que encaja con el conjunto
actual de hechos, preguntar imprime el nombre del objeto y pregunta
al usuario si debera continuar. Si el usuario teclea s, entonces el sistema llama a preguntsr recursivamente. La lista que se pasa a preguntar
fuerza al Turbo Prolog a encontrar objetos que no han sido examinados todava en la base de conocimientos.
Intentar no devuelve ya la solucin, as que se modifica como se
muestra:

intentar(_, []).
,/* encuentra algo */
intentar(o, [XlT]): si(X) , ! ,
intentar(O,T).
intentar(0, IXlT]): hTrite("es/tene/hace ",X, " "),
readln(Q) ,
procesar(O,X,Q), !,

intentar(O,T).

Finalmente, debe alterar sta para que pase una lista nula a preguntar,
como se muestra aqu:

start: consult("x.dat"), /* leer un info */


fai1. /* Lt a la siguiente clusu].a */
start: assert(s(end)

assert(no(end) ) ,

Sistemas expertos

write(rrIntroducir informacin? (s/n) : "),


readln(A),

not(introducir) ,
save("x.dat"), !,
preguntar([]).
start: preguntar(

start:

[]

),purgar.

purgar.

He aqu el sistema experto mejorado entero:

/*

tJn sistema

experto con encadenamiento hacia atrs


que encuentra mItiples soluciones */

domains

lista :

symbol*

database

info(symbo1,1ista)

/* objeto, lista de atributos */


s(symbol) /* recordar l.as */
no(symbol) /* respuestas s y oo */
predicates
j untar ( 1ista, 1ista, lista)
escribirlista ( 1ista, integer)

introducir

purgar
aadir ( symbol, lista,
preguntar ( lista)

lista)

atributos ( symbol, lista)

procesar(symbo1, srmbo1, symbol)

start

anterioressi ( lista)

anterioresno ( lista)
xanteroress i ( srmbo1, 1ista,
xanterioresno (symbol , lista,

intentar ( syrnbol, lista)

miembro (symbol

xwrite (symbol)
goal
starE.

lista)

lista)
lista)

E3

8{

Turbo Prolog. Programacin avanzada

clauses

start: consult("x.dat"), /x leer un info */


fail.
/* ir a 1a si.guiente clus:u1.a */
start: assert(s(end) ) ,
assert(no(end) ) ,

write("Introdueir
readln(A) ,
A:s

informacin? (s/n) : "),

not(introducir),
save("x.dat"), !,
preguntar([]).
start: preguntar( [ ] ),purgar.
start: purgar.

/* introducir objetos y atributos *,/


introducir: write("Qu es?: "),
readln(Obj ect)

2..

ect()" f in" ,
atributos(Object, []),
write("ms? "), !,
Obj

-Tj

r:

readln(Q),Q:s,

introducir.

/* obtener los atribuxos x/


atributos (0, List) : write(0," es/tiene/hace: "),

readln(Attribute),
Attribute()" fin"
aadir (Attribute, List, List2 ),
atributos(O,List2).
atributos(O,List): assert(info(0, List) ),
escribirlista(List, 1), !,
,

n1

/x aadir un srmbo1 a una lista */


aadir (X, L, IX I L] )

T:.
t:'

:
l

Sistemas

expertos

x pedir informacin a1 usuario para


encontrar un objeto */
preguntar(L) : info(O,A),
not(miembro(0,L)), /x no encontrar el mismo *,/
aadir(O,L,L2) ,
/* dos veces */
anterioressi(A),
,/* comprobar las respuestas s
anteriores *,/
anterioresno(A) , /* respuestas no */
intentar(O,A),
! , vTrite (0, " satisf ace los,') , n1 ,
write( "atributos actuales,, ), nl,
write("continuay? "),
readln(Q) , Q:s,
preguntar(L2).
,/* seleccionar todos los objetos que no tenen
1os atributos apropiados como ya estn
determinados */
anterioressi(A): si(T), !,
xanterioressi(T,A, [ ] ), I .
xanterioressi(end,_,_) : - ! .
xanterioressi (T,A, L) : miembro(T,A), !,
aadir(T ,L,L2) ,
si(X) ,nor(miembro(X, LZ)) ,l
xanterioressi (X,A, L2 ) .

,/* seleccionar todos los objetos que tienen


atributos ya determinados .o*o ,,o
pertenec.entes al objeto x/
anterioresno(A) : no(T) , ! ,

xanterioresno(T,A,

[]

),

xanterioresno(end,_,_) : - I .
xanterioresno(T,A, L) : not(miembro(T,A)), !,
aadir(T, L,L2) ,
no (X)

not (miembro (X,

xanterioresno

L2 )

(X, A, L2 )

),!,

85

Turbo Prolog. Programacin avanzada

,/* intentar una hiptesis */


intentar(_,[]).
intentar(0,[XlT]):-

l;-

si(X) , ! ,
intentar(O,T).
intentar(o, [XlT] ): r^/rite(" es/ti-ene/hace ",X, " "),
readln(Q)

procesar(o,x,Q),!,
intentar(O,T).

E" s;gr

ai:r:rL

/* procesar varias respuestas


procesar(_,X, s) : -

*/

g!

asserta(si(X)), !.
procesar(_,x,n): -

:--

-"--.]

Z:end, | ,

------J

write("es/tiene/hace ",X, "? "),


readln(Q),
Procesar(o,x,Q) , ! .

En

xu

Intenre

res. Co?

xwrite(end).
xvrrite (Z)

j.

es -:j

es

asserta(no(X) ), !, fail.
procesar(O,X,why) : r^/rite("Creo que puede ser"), n1 ,
write(0," porque tiene: "),n1,

si(Z) ,x!rite(Z) ,nl

:-

write(Z).

purgar:

Ingeniera dc

retract(si(X)

X:end, fail
purgar: -

El sstm
con .a pn
menfe !
que esrt
P

retract(no(X) ) ,

X:end.

juntar(

causa pm
ejempJo. r
tiene rnrrt
to Ie podr,

,List,List).
juntar([xlLl], Lisx2, [xlL3]) if
[]

j untar (L1 , List2

L3 )

escribirlista([],_).
escribirlista( [Headl Tail] ,3) : r^rrite (Head), n1, escribirlista(Tai1

,1)

ver es ci
ingeaiena r
La

"nn

en que s

Sistemas e\pertos

87

escribirlista( [HeadlTail] , I) : N:I+1,


write(Head,

" "),escribirlista(Tai1,)

miembro(N, tNl_l)
miembro(N, [_lT] )

miembro(N,T)

El siguiente dilogo ilustra los cambios cuando se ejecuta el programa


ahora:

es/tiene/hace redondo s
es/tiene/hace roj o_o_amari11o n
es/tiene/}:.ace crece en rboles s
es/ ti-ene/h".. rr"r"r,J"
naranja encaja con los" atributos
continuar ? s
es/xLene/hace piel_suave s
mandarina encaja con 1o atributos
continuar? n
En esta ocasin, puede querer jugar un poco con esta nueva versin.
Intente experimentar con nuevos frutos que tengan definiciones similares. Como ver, a veces el programa parece completamente inteligente.

Ingeniera del conocimiento


El sistema experto desarrollado en este captulo comienza su bsqueda
con la primera entrada en la base de conocimientos y procede simplemente en orden secuencial a lo largo de la lista de objetos. Mientras
que este proceso est bien para pequeas cantidades de objetos, podra
causar problemas cuando se usan grandes bases de conocimientos. por
ejemplo, si hubiera mil objetos, y el que describe es el nmero 999 y
tiene muchos atributos comunes, entonces a este tipo de sistema experto le podra llevar mucho tiempo encontrar la solucin. Intentar resolver esta clase de problemas, junto con otros, conduce al campo de la
ingeniera del conocimiento.
La ingeniera del conocimiento es la disciplina que trata de la forma
en que se grganizan, construyen y verifican las bases de conocimientos.

tE

Turbo Prolog. Programacin avanzada

Aunque est ms all del propsito de este libro presentar una discusin completa de este tema, es importante estar atento a las dificultades
que pued encontrar cuando intente construir una base de conocimientos. Recuerde que el campo de la ingeniera del conocimiento es completamente nuevo y que todava hay mucho que aprender'

sir

::

qI}

rea

al.r
-u.. I

.cs:

Organizacin de la base de conocimientos

t-i&

El sistema experto desarrollado en este captulo comienza en el principio de la base de conocimientos y trabaja a travs de ella secuencialmente. Sin heursticas, es Io mejor que puede esperar que haga un mecanismo de inferencia. sin embargo, como creador de la base de conocimientos, usted puede controlar la organizacin de la informacin, lo
que implica que puede haber ordenaciones mejores o peores'
A menudo, una buena forma de organizar la informacin es situar
los objetos ms probables Io ms cerca del comienzo. El problema es
decidir qu objetos son los ms y los menos probables. Incluso un experto humano puede no saber qu soluciones son las ms probables. usied puede crear algunas veces la base de conocimientos aleatoriamente
y Aejar que sea usada un perodo corto mientras registra el nmero de
veces que se selecciona cada objeto. Usando estas frecuencias, puede entonces reordenar la base de conocimientos'
otra forma de organizar la informacin es situar cerca de Ia base
de conocimientos aquellos atributos que causan Ia poda de la mayor
parte del "rbol". Para bases de conocimientos grandes, de nuevo puede ser difcil determinar qu atributos causan el mayor efecto'

: nt
--J_it
!L !U

u:I. p
qu; q
caoI
foz_,

&l
I'ltri n

de
cja_

=,-rx

guxor

A:-'ur.I{l

I-erificr
Si suprr
Una Cf:.Cr:

con e- trrc

mente -o
9ue cisbe r

Encontrando eI exPerto
La nica hiptesis que se ha hecho durante todo este captulo es que
puede encontrar un experto humano y que puede extraer fcilmente el
es ste el caso.

onocimiento del experto. Desafortunadamente, rafavez


primero, a menudo es difcil determinar quin es o no es un verdadero
experto. Este es un problema especialmente cuando Se conoce poco sobri la materia. Segundo, dos expertos diferentes en la misma materia
tienen a menudo opciones contradictorias, lo que hace difcil saber cul
usar.

cuando las opiniones de los expertos difieren, generalmente puede

tesea ur

Coao r

posible soh

queo debi
ma].ona Ce

rificar

cn-^
4rrl
i
conliar
h
!a
oe
_

secuencia_

mueslr3 i

cuaiquier

rg

Sisi:ir:as i\pertos

89

elegir entre tres opciones


tiles. primera,

puede seleccionar
e rgnorar al orro. Esta
un erperto
es
que ta base de co11ciy1en1";;;;;;;tenerr.i,, p..o pu.a. ,igniricar

.ru.u;;;;l;L,

alguna informacin err_

nea. (pero la cantidad


d. irf";;;;;;
expeo puede propor"i",;;.1"il;:ff

tormacin; esto es, intentar

:?l:l,l,H:#;ffi1;:T]

,ru. ,to-inrormacin

que es

"orn .nr..

ifimffi:::,TTi',,"lli,lll#r,',",;;,.;;"";;lii'.u,u,,.0
ventaja es que - uu..

"r".r.i#; :*1,t:l.il?,Tff .hrt.:;

conocimiento prenode
ning'e;;*- r,a solucin final es
conocimiento de ambos
incluir el
dir; podra aadir un ru"toi.
"*i".,or J"'.irirr.ru y dejar al usuario decior""iriiuo"o para cad,aelemento.
que esro puede
ser,aceptabre en

argurur^ri,ru."r;;;ffi:ias

;ffi fl:'#: 1T.:1ii::'' "'.;;"';" u ",i",i# lH


'

Aunupti_

uerr

Otro punto problemtico


es que la mayora de
los expertos huma_
nos no saben lo oue saben;
1", frrrrrr,
Pueden hacer un volcado
de memoria de la'misma
r;.*"

"

.no
o;.
cia, puede ser difcil exrraer
toda la inro.r"l.Tl-'tadora'.En consecuen-

5[?,1i.T3:il;:;I1tr;';*'ff

#iT::.',y,liilll'l;i1iTil:;

ril

.iil

ill

flii

nll

Verificaciones de Ia base
de conocimientos
Si supone que ha encontrado
un experto

una descripcin completa


.
co n er p ro brem a
de veriricar

,i

," -"i.".i";11t-::.:"operativo y que da


;il;;;;;:ifJi?,ffi iliil..."1i:T:1

.!::1,".'r::[:'Jt.#:i;l::*r*llil"t";Ii_.,."*,t,o,""
testea una base de conocimientos? La pregunta es: Cmo se
como

se estableci_en

.r "prirr"

la bsqueda exhaustiva
es im_
datos extremuaur.ni"
p._
o'i o' o m ui'nli"l'I. .,,
si gni rica q ue p
"
l,ur,'L.',io'
ara
" nJ nuv rol-u'i. a
u.i::]Xi'j:j ff:il::*,rer

posibre sobre algo que


no sea un

,:ill, Tit

riricar

1,

conjur;;;

;;;;"*

sea exacra. En con_

s.ecuencia, ra mejor sorucin

;;
r;m:
"'
cuarquie*i";i ;;;;;i:#HJi:TJ:;
j: ;,::',1

a b as";;;.;;,;i;;;ruentos
e J; ;
,;, j;,T:: T,*:"J 3: T:J;
serie de

*',' q* 0."0",.1.u,

Turbo Prolog. Programacin avanzada

En otro enfoque, tiene la autocomprobacin del sistema por consistencia y ver que toda la informacin de la base de conocimientos concuerda consigo misma. Aunque sta no encontrar todos los problemas, encontrar algunos. Sin embargo, dependiendo de cmo est implementada la autocomprobacin, en algunas bases de datos grandes,
puede alcanzar la muralla de piedra combinatoria, haciendo este enfoque imposible.
De este modo, segn crece el uso de los sistemas expertos, la verificacin de las bases de conocimientos ser una de las ms importantes

+
J

rS

,;i

reas de investigacin.
;-ir

:{s

t{

,T

:
J

'*

;,;l

.#l

ir

-k

ss
ii..

También podría gustarte