You are on page 1of 11

Proyecto N2:Sistema Basado en Conocimiento con

Encadenamiento Inverso
Rodrigo Orostica
Departamento de Ingeniera Electrica
Universidad de Chile
EL7038-Introduccion a la Teora de Conjuntos Difusos y Sistemas Inteligentes
Email:reorostica@ing.uchile.cl

ResumenEn este documento se presentan los resultados del


proyecto N2 del curso EL7038-Introduccion a la Teora de
Conjuntos Difusos y Sistemas Inteligentes, el cual consiste en
implementar un sistema basado en conocimiento con encadenamiento inverso (AEI) para determinar el grado de certeza
de una serie de hipotesis relativas a las especies de un animal.
La implementacion del algoritmo de encadenamiento inverso es
realizada de forma recursiva y considera una serie de parametros
de control que aseguren una convergencia rapida y con un alto
grado de veracidad de las hipotesis en cuestion. La informacion
para concluir la validez de una hipotesis viene dada por una
Base de Reglas mas el conocimiento del usuario a medida que
este es requerido por el programa. Se realizan una seria de
pruebas, de forma selectiva, para mostrar la correcta aplicacion
de las variables de control y la forma en que se actualizan la
Base de Hechos y el Conjunto de Hipotesis . Los resultados
permiten corroborar la correcta implementacion del algoritmo
y la utilidad de este para obtener informacion a partir de una
base de conocimiento pre establecida.
Index TermsConjunto de Hipotesis, Encadenamiento Inverso, Base de Reglas.

I.

I NTRODUCCI ON

El siguiente reporte presenta los resultado del Proyecto


N2 del curso EL7038-Introduccion a la Teora de Conjuntos
Difusos y Sistemas Inteligentes, el cual tiene como objetivo
aplicar un sistema de reglas con encadenamiento inverso con
el proposito de determinar el grado de certeza de un conjunto
de hipotesis, mediante la interaccion con un usuario.
El conjunto de hipotesis corresponde a aseveraciones sobre
especies a las que puede corresponder un animal en cuestion
y las reglas son sentencias del tipo SI... ENTONCES ...
que permiten verificarlas. La informacion para concluir si
el animal corresponde a una especie u otra deriva de la
informacion proporcionada por el usuario mas la contenida
en una base de conocimiento que se va completando con
conclusiones de las reglas a medida que estas son gatilladas.
Para que una regla sea activada y se puedan tomar en
cuenta las conclusiones intermedias previas a la demostracion
de la hipotesis, se deben satisfacer una serie de condiciones de
control que permiten asegurar el cumplimiento de la hipotesis
con un grado satisfactorio de certeza.

II.

P ROBLEMA

Este ejercicio recrea la estructura de un sistema de reglas


con encadenamiento inverso, similar al usado en MYCIN,
incluyendo grados de pertenencia (conjuntos difusos).
Usaremos expresiones proposicionales, con un lenguaje de
representacion que ayude a simplificar el problema.
El objetivo es implementar un sencillo sistema que interactua con el usuario, y utiliza el conocimiento de que dispone,
para evaluar la validez de determinadas hipotesis que son
conocidas por el sistema. Las fuentes de conocimiento del
sistema son: el conjunto de reglas en su base de conocimiento,
que es conocimiento universal (es decir, aplicable a todos
los casos), y el conocimiento particular del caso en estudio,
que se puede dividir en el conocimiento acumulado (Hechos)
sobre el caso, y consultas al usuario.
II-A.

Variables Globales

En este problema las variables globales corresponden a


los conjuntos denominados:Base de Reglas,Base de Hechos
y Conjunto de Hipotesis. El primero de ellos contiene las
22 reglas relacionadas con caractersticas de las distintas
especies de animales, las cuales se observan en la Tabla I. La
Base de Hecho es un conjunto que contiene la informacion
actual del problema la cual incluye tanto las condiciones
iniciales como las conclusiones intermedias. Y por u ltimo el
la Base de Hipotesis corresponde al conjunto de hechos por
demostrar que en este caso en particular corresponde a un
listado de especies de animales.
A continuacion se realiza una descripcion detallada de
como se definen cada uno de los conjuntos en MATLAB
para permitir la interaccion con el usuario con la informacion
almacenada.
III.

BASE DE R EGLAS

Para poder definir la base de reglas en Matlab se crea


una estructura compuesta por las 22 reglas enunciadas, pero
dejando libre la opcion de agregar nuevas. A su vez cada
regla es en si misma una estructura formada por una serie
de campos que incluyen las clausulas de la premisa y las
acciones de la conclusion de manera similar a como se
especifica en [?], aunque cada hecho no es diferenciado

en una tripleta lo que impide de partida realizar la seccion


opcional correspondiente a la ampliacion del universo de
preguntas.

Tabla I
BASE DE R EGLAS
N

Premisa

Conclusion

Valores

animal tiene pelo

animal es mamfero
animal es ave
animal es reptil

0.8
-1
-1

animal da leche

animal es mamfero
animal es ave
animal es reptil

1
-1
-1

animal pone huevos


animal tiene piel dura

animal es mamfero
animal es ave
animal es reptil

-1
-1
1

animal pone huevos


animal puede volar

animal es ave
animal es reptil

1
-1

animal tiene plumas

animal es mamfero
animal es ave

-1
1

animal come carne

animal es carnvoro

animal tiene garras

animal es carnvoro

0.8

animal tiene mamfero


animal tiene pezunas

animal es ungulado

animal es mamfero
animal es rumiante

animal es ungulado

0.75

10

animal vive con personas

animal es domestico

0.9

11

animal vive en zoologico

animal es domestico

-0.8

12

animal es mamfero
animal es carnvoro
animal tiene manchas oscuras

animal es cheetah

0.9

13

animal es mamfero
animal es carnvoro
animal tiene rayas negras

animal es tigre

0.85

14

animal es mamfero
animal es carnvoro
animal es domestico

animal es perro

0.9

15

animal es reptil
animal es domestico

animal es tortuga

0.7

16

animal es mamfero
animal es ungulado
animal tiene cuello largo

animal es jirafa

17

animal es mamfero
animal es ungulado
animal tiene rayas negras

animal es cebra

0.95

18

animal es mamfero
animal puede volar
animal es feo

animal es murcielago

0.9

19

animal es ave
animal vuela bien

animal es gaviota

0.9

20

animal es ave
animal corre rapido

animal es avestruz

21

animal es ave
animal es parlanchn

animal es loro

0.95

22

animal es mamfero
animal es grande
animal es ungulado
animal tiene trompa

animal es elefante

0.9

En Codigo 1 se observa el detalle de los distintos campos


con sus valores para la regla R1.

Codigo 1. Estructura para regla 1 (R1)


regla1=struct('Regla', {'SI'...
'animal tiene pelo'...
'ENTONCES'...
'animal es mamifero 0.8'...
'animal es ave -1'...
'animal es reptil -1'});
premisas1=struct('Premisas',{'animal tiene pelo'});
conclusiones1=struct('Conclusiones',{'animal es ...
mamifero'...
'animal es ave'...
'animal es reptil'});
R1=struct('Indentificacion', 1,...
'Regla', regla1,...
'Premisas',premisas1,...
'Conclusiones',conclusiones1,...
'Valores', [ 0.8 -1 -1]);

Los distintos campos son Identificacion, Regla,


Premisas, Conclusiones y Valores. El primero indica el
numero de reglas a la cual se hace referencia, en el segundo se
identifica a la regla en su totalidad en forma de una estructura
diferenciada por partes, para este ejemplo en particular se
tiene lo mostrado en Codigo 1, el campo siguiente indica
las distintas clausulas que forman las premisas, mientras
que en los u ltimos dos se tiene el vector de conclusiones
junto con el grado de certeza de cada una de las acciones
que lo conforman. Los grados de certeza estan delimitados
en el rango [1, 1] , indicando los extremos grados certeza
completa de falsedad o verdad, respectivamente, mientras que
el valor nulo indica ignorancia.
La idea de definir la base de reglas de este modo es
la facilidad con la que se puede acceder a la informacion
que esta en ella. Por ejemplo si se quieren revisar las
clausulas de las premisas de la regla 2 basta ejecutar
BaseReglas(1).Base.Premisas.
Incluso se puede
determinar el largo de las distintas sub-estructuras con el fin
de calcular la cantidad de clausulas o el numero de hechos
que forman parte de una conclusion.
IV.

BASE DE H ECHOS

De igual modo que la base de reglas, la base de hechos se


define como una estructura en forma vectorial formada por
2 campos Hecho y Valor. El primero de ellos, tal como lo
indica su nombre, almacena un hecho que puede corresponder
tanto a una clausula como a una accion, y el segundo indica
el grado de certeza de dicho hecho el cual es determinado
mediante el algoritmo de encadenamiento inverso.

i) Conjuncion: Para calcular el valor de certidumbre de una


premisa, lo vc de las clausulas de la premisa se agregan
aplicando la funcion min modificada.
ii) Conjuncion: Se utiliza para calcular el vc de una conclusion de la regla gatillada. Una vez obtenido el vc de la
premisa (agregada), se aplica el el grado de implicancia
utilizando el textitproducto.
iii) Disyuncion: Si una misma conclusion es obtenida por
mas de una regla el vc de esta se obtendra aplicando la
funcion max modificada.
VI-2. Parametros de Control: Para optimizar el tiempo de
ejecucion del algoritmo y asegurar la veracidad de la hipotesis
con un grado de certeza elevado, se definen ciertos parametros
de control. A continuacion de define cada uno de ellos:
d1 : Detener algoritmo de encadenamiento inverso al
cumplirse una hipotesis por primera vez.
: parametro para determinar cuando una hipotesis de
alto nivel demostrada e forma satisfactoria, de manera
que no ea necesario analizar otra hipotesis.
: parametro para determinar cuando un hecho (o su
negacion) tiene un grado de certidumbre suficiente como
para ser u til en una inferencia.
: parametro para determinar cuando un hecho (o su
negacion) tiene un grado de certidumbre suficiente como
para no requerir mayor esfuerzo para mejorar su grado
de certidumbre.
: parametro para determinar cuando una premisa tiene
un grado de certidumbre suficiente como para gatillar un
regla.
 : parametro para determinar cuando una regla tiene un
grado de certidumbre suficiente como para inferir una
hipotesis (o conclusion intermedia) dada, suponiendo que
la premisa este totalmente satisfecha.

Inicialmente la base de hechos se encuentra vacia pero


a medida que se ejecuta el programa se va completando
con la informacion de los hechos fundamentales cuyo grado
de certeza es ingresado por el usuario as como con las
conclusiones intermedias resultado del cumplimiento de
diversas reglas.
V.

BASE DE H IPOTESIS

La base de hipotesis se define como una estructura con dos


campos: Hecho y Valor, de forma similar la base de hechos
pero con la diferencia de que es inicializada con las hipotesis
por demostrar con grado de certeza nulo.

Figura 1. Visualizacion de Conjunto de Hipotesis Matlab

A medida que el programa es ejecutado, se comienzan a


verificar cada una de las hipotesis en el orden en que han
sido enunciadas, ver Figura 1 mientras se va actualizando el
grado de certeza, el cual esta comprendido entre 1 y 1. En
este punto existen dos opciones las cuales pueden ser elegidas
por el usuario, en la primera el programa se detiene en el
momento en que alguna hipotesis es satisfecha superando un
umbral definido, y en la otra, se entrega el grado de certeza
de todas las hipotesis luego de evaluarlas una por una en
forma secuencial.
VI.

VII.

E NCADENAMIENTO I NVERSO
I MPLEMENTACI ON

El desarrollo del proyecto se basa en la funcion


disenada y denomina [Valor,BaseHechos] = ...
BackwardChaining(BaseHechos,BaseReglas,Hipotesis),

la cual permite determinar de forma recursiva el valor de


certeza de un hecho, sea este una hipotesis, conclusion
intermedia o una clausula fundamental. En Codigo A, ver
Anexo, se muestra el codigo de la funcion que sera detallada
a continuacion pero que en terminos generales realiza las 3
acciones indicadas en [1]: Revisar base de hechos, cuestionar
base de reglas y preguntar al usuario.

A SPECTOS G ENERALES

Como se indico, el objetivo del proyecto consiste en implementar un algoritmo de encadenamiento inverso que permita
determinar la veracidad de una hipotesis a partir de una Base
de Reglas mas la informacion que pueda ser anadida por el
usuario mediante la interaccion con el programa a disenar. El
manera de implementar el algoritmo se describe en detalle en
el enunciado de la actividad [1] y en la seccion siguiente,
pero cabe hacer destacar algunos puntos para comprender
totalmente la implementacion, los cuales son mencionados a
continuacion.
VI-1. Operadores: Los valores de certidumbre para los
hechos a medida que las reglas comienzan a ser evaluadas se
determinan mediante alguno de los siguientes 3 operadores
dependiendo del caso:

Los parametros de entrada de la funcion son la base de


hechos (BaseHechos), la base de reglas (BaseReglas) y un
hecho (Hipotesis) los cuales corresponden a las hipotesis
por comprobar. Mientras que las salidas son el grado de certeza
del hecho consultado y la base de hechos actualizada. Como
ya se indico la funcion se implementa de forma recursiva definiendo en un comienzo los parametros de control , , , y 
descritos previamente. A continuacion sobre el hecho de entrada (Hipotesis) se aplica la funcion BuscarBaseHechos(),
ver Codigo 2, que se encarga de revisar si este se encuentra

en la base de hechos, en caso de ser as la salida Valor de la


funcion toma el valor de certeza almacenado siempre que sea
mayor que , de lo contrario sera nulo.

siempre que el valor ingresado sea mayor que . En caso


de que el resultado de BuscarConclusion sea no nulo, el
valor de certeza del hecho se calcula usando nuevamente la
funcion BackwardChaining().

Codigo 2. BuscarBaseHechos
function [vector] = BuscarBaseHechos(BaseHechos, ...
hechos)
vector=[];
n=length(BaseHechos);
for i=1:n
a=strcmp(BaseHechos(i).Hechos,hechos);
if(a==1)
vector=i;
break
end
end
end

Si para la regla evaluada se cumple que todas las clausulas


de la premisa tienen un valor de certeza significativo (> ) se
calcula el valor de esta usando la funcion min modificada. A
continuacion se necesita verificar si la regla es activada o no,
para lo cual se compara el modulo del valor de certeza (|vc|)
con el parametro ; de ser mayor es activada con lo que a
continuacion se guardan en la Base de Hechos las acciones
de la conclusion usando el operador de propagacion, lo que
implica que el valor de certeza almacenado correspondera al
producto entre la incerteza de la conclusion y el de la premisa.
Al momento de guardar los hechos de la conclusion se revisa
si se encontraban disponibles y en en caso de ser as su valor
de certeza se reemplaza la funcion max modificada.

En caso de que la busqueda con BuscarBaseHechos()


entregue ningun elemento se aplica la funcion
BuscarConclusiones, ver Codigo 3, que se encarga de
buscar aquellas reglas que lo contienen en sus conclusiones;
en este punto solo se considera la opcion de la que hipotesis
sea valida por lo tanto siempre se va a encontrar por lo menos
una regla. La salida de BuscarConclusiones es un vector
con los numeros de reglas correspondientes, por ejemplo,
si el hecho que se busca es el animal es carnivoro el
vector de salida correspondiente es : [6 7] dado que R6 y R7
son las reglas que contienen este hecho como conclusion.

no

Si el hecho en cuestion tiene valor de certeza, en modulo,


mayor que el parametro de control no es necesario
seguir revisando el resto de las reglas contenidas en el
vector calculado por la funcion BuscarConclusion(), de
lo contrario, el ciclo for continua revisando la siguiente regla.

En resumen, la funcion BackwardChaining() permite


obtener el valor de certeza de cualquier hecho contenido en
la Base de Reglas mientras no sea uno fundamental. Ademas,
Codigo 3. BuscarConclusiones
dadas las caractersticas del algoritmo a implementar, es
function ...
elaborado de forma recursiva por lo que en ningun momento
[vector]=BuscarConclusiones(BaseReglas,hecho)
%vector=zeros(1,length(BaseReglas));
se limita el numero de conclusiones intermedias que se
vector=[];
pueden encontrar, o sea, no hay restriccion con respecto a la
contador=1;
profundidad de busqueda como puede ocurrir al trabajar con
for i=1:length(BaseReglas)
n=length(BaseReglas(i).Base.Conclusiones);
una Base de Hechos particular y previamente compilada. A
for j=1:n
continuacion se muestran una serie de ejemplos para mostrar
a=strcmp(BaseReglas(i).Base.Conclusiones(j).Conclusiones,...
el comportamiento de la funcion disenada usando como
hecho);
if(a==1)
valores para los parametros de control los indicados en el
vector(contador)=i;
enunciado ( momentaneamente no es considerado).
contador=contador+1;
end
end
Tabla II

PAR AMETROS
DE C ONTROL

end

Como se menciono, siempre existira a lo menos una


regla que contenga el hecho en cuestion como conclusion
(siempre que no sea uno fundamental) incluso si este es una
hipotesis. A continuacion se revisan dichas reglas de forma
secuencial (orden de aparicion) extrayendo las premisas de
estas as como el valor de incerteza de la conclusion en
cuestion con el fin de determinar el parametro de control
. Las premisas de la primera regla que contiene el hecho
evaluado se recorren mediante un ciclo for con el objetivo
de determinar si es fundamental, para lo cual se vuelve a
usar la funcion BuscarConclusion(), la que en el caso de
entregar un vector vaco confirma la situacion. En este caso
el grado de incerteza es consultado al usuario y almacenado
en la base de hechos, mientras que el ciclo for continua

Parametro

Valor

0.7
0.2
0.85
0.5
0.2/vc(regla)

En Codigo 4 se indica el codigo que se debe ejecutar para


los ejemplos mencionados, donde es requisito definir en primer
lugar la Base de Hechos con sus campos inicialmente en
blanco. Ademas de forma generica de define el parametro
Hecho que sera reemplazado por algun hecho presente en la
Base de Reglas, o sea, n es mas que una hipotesis a probar

aunque no necesariamente coincide con las de mas alto nivel


(especies de animales).

El
El
El
El

animal
animal
animal
animal

Codigo 6. Ejemplo N2
tiene pelo?: 1
da leche?: 0.7
pone huevos?: 0.1
tiene plumas?: -1

Codigo 4. Codigo para implementar ejemplos


BaseHechos=struct('Hechos',[],'Valor',[]);
[Valor,BaseHechos] = ...
BackwardChaining(BaseHechos,BaseReglas,Hecho)

Si Hecho= 'animal corre rapido' o toma el valor de cualquier hecho fundamental, Valor sera vacio al
igual que BaseHechos. Cuando reemplazamos Hecho por
'animal es mamifero' el programa comenzara su ejecucion y realizara las consultas necesarias al usuario. En
Codigo 5 se muestran los resultados, indicando las preguntas
realizadas junto al valor de certeza ingresado y en Figura 2 el
contenido de la Base de Hechos.
Figura 3. Base de Hechos Prueba N2

El hecho consultado aparece en las conclusiones de


las reglas R1, R2, R3 y R5. La primera, dado el
valor ingresado, es gatillada pero con el grado de
certeza resultante de la conclusion no es posible validar
'el animal es mamifero', por lo que se continua con
la siguiente regla R2, que a diferencia de la Prueba N1,
a pesar de ser activada no permite concluir la hipotesis
considerada. Se pasa a analizar R3, la cual esta formada por
2 clausulas en su premisa: 'el animal pone huevos'
y 'el animal tiene piel dura', las cuales son
consultadas al usuario en orden, pero como el valor asignado
a la primera es insuficiente para satisfacer las condiciones
de control, la segunda no se pregunta al usuario y por
consiguiente la regla no se activa. Finalmente se trata
verificar la regla R5, cuya premisa esta formada solo por un
hecho fundamental, el cual es consultado al usuario; como
el valor de certidumbre (su modulo) asignado permite que el
de la conclusion, luego de la operacion de propagacion, sea
mayor que la hipotesis es validada y el resultado entregado
por la funcion BackwardChaining es Valor=1.

Codigo 5. Ejemplo N1
El animal tiene pelo?: 1
El animal da leche?: 1

Figura 2. Base de Hechos Prueba N1

Como

el

grado

de
certidumbre
del
hecho
despues de que es gatillada
la regla R1 no es suficiente para concluir con satisfaccion su
veracidad, se comienzan a consultar al usuario las clausulas
de la premisa de R2. En este caso el valor ingresado permite
que la regla se active y que ademas el valor de certeza sea
mayor que con lo que se da por concluida la ejecucion de
la funcion y el salida resulta ser Valor=1. En cuanto a la
Base de Hechos ,como se puede observar en Figura 5, pasa
a ser completada por las acciones de las conclusiones de
las reglas R1 y R2, con el valor de certeza correspondiente.
Notese que para el caso particular del hecho de interes
('animal es mamifero') su valor fue modificado durante
el transcurso de la ejecucion pues despues de gatillarse R1 su
vc era 0.8.
'animal es mamifero'

En cuanto a la Base de Hechos, despues de la ejecucion


se encuentra con la informacion entregada por el usuario
como por los hechos que forman las conclusiones de las
reglas gatilladas. Notese que el sistema es capaz de identificar
cuando una conclusion ya se encontraba en la base de datos
reemplazando solo el valor de certeza bajo la operacion max
modificada.
Queda por comprobar si el sistema implementado mantiene
registro de las consultas realizadas al usuario, o sea, que no
volvera a realizar la misma pregunta. Para esta prueba se
considera como hipotesis el hecho 'el animal es ave', y
al igual que para los otros casos se muestra las consultas al
usuario junto a la Base de Hechos al final de la ejecucion, en
Codigo 7 y Figura 4, repectivamente.

En la siguiente prueba se mantendra el hecho utilizado


como hipotesis pero se modificaran los valores ingresados
por el usuario para verificar el funcionamiento del resto de
las consideraciones de control. Esta es la Prueba N2 y sus
resultados se muestran en Codigo 6 y la Figura 3.

Codigo 7. Ejemplo N3

El
El
El
El
El

animal
animal
animal
animal
animal

tiene pelo?: -0.15


da leche?: 0.1
pone huevos?: 0.95
tiene piel dura?: 0
puede volar? 1

ConjuntoHipotesis(6)=struct('Hipotesis', 'animal ...


es jirafa', 'Valor', 0);
ConjuntoHipotesis(7)=struct('Hipotesis', 'animal ...
es tortuga', 'Valor', 0);
ConjuntoHipotesis(8)=struct('Hipotesis', 'animal ...
es cheetah', 'Valor', 0);
ConjuntoHipotesis(9)=struct('Hipotesis', 'animal ...
es gaviota', 'Valor', 0);
ConjuntoHipotesis(10)=struct('Hipotesis', ...
'animal es avestruz', 'Valor', 0);
ConjuntoHipotesis(11)=struct('Hipotesis', ...
'animal es loro', 'Valor', 0);
%% Base de Hechos
BaseHechos=struct('Hechos',[],'Valor',[]);
%% Determinar modo de ejecucion
x=input('Detener revision de Hipotesis? SI=1, ...
NO=0:')
if x==1;
alpha=0.7;
else
alpha=2; %sirve cualquier valor mayor que 1
end
%% Iteracion a traves del Conjunto de Hipotesis
for i=1:length(ConjuntoHipotesis)
[Valor,BaseHechos] = ...
BackwardChaining(BaseHechos,BaseReglas,...
ConjuntoHipotesis(i).Hipotesis);
ConjuntoHipotesis(i).Valor= Valor;
if(Valoralpha)
display(['El ' ...
ConjuntoHipotesis(i).Hipotesis ' con ...
certeza: ' num2str(Valor) ]);
break;
end
end

Figura 4. Base de Hechos Prueba N3

Las primeras 5 reglas contienen la hipotesis dentro de


sus conclusiones y dados los valores de certeza ingresados
por el usuario para la informacion consultada no se gatillan
las reglas R1, R2 ni R3. A continuacion se debe analizar
R4 la cual contiene en su premisa la clausula fundamental
'el animal pone huevos', la cual no se vuelve a
consultar dado que tambien esta en R3, entonces se pasa a
las siguientes, en particular a el animal puede volar. El
valor de certidumbre ingresado permite activar esta regla y
validar la hipotesis con un Valor=0.95.
VIII.

El codigo implementado que incorpora la funcion


de encadenamiento inverso se encuentra en el archivo
Proyecto2.m, ver Codigo 8. Como se puede observar,
inicialmente se define el Conjunto de Hipotesis, luego la
Base de Hechos para ser utilizada como entrada de la
funcion BackwardChaining(), el modo de trabajo que
es seleccionado por el usuario a traves de la consola y
finalmente, mediante un ciclo for se recorren todas las
hipotesis desde la inicial:'el animal es perro' con el
fin de determinar su grado de certeza, el cual es actualizado
en el Conjunto de Hipotesis mientras lo mismo ocurre con la
Base de Hechos. Si la opcion escogida por el usuario es la
de detener la revision cuando se alcanza un valor de certeza
suficiente (SI=1) se produce un break en la iteracion y se
despliega el valor de certeza con un mensaje, de lo contrario
(NO=0), hay que revisar dentro del workspace los valores
de las distintas hipotesis.

DE A NIMALES
S ISTEMA DE I DENTIFICACI ON

La tarea solicitada consiste en demostrar las hipotesis del


Conjunto Hipotesis mediante el uso del algoritmo explicado
e implementado a traves de la funcion BackwardChaining
de la seccion precedente. El listado de hipotesis de puede
observar en la Figura 1 y la validacion de cada una de ellas
en base al conocimiento de la Base de Reglas y del usuario
se efectua de forma secuencial. Dentro de los requisitos
solicitados esta el incorporar parametros de control que
permitan escoger al usuario la opcion de revisar todas las
hipotesis o detenerse cuando alguna de ellas sea demostradas
de forma satisfactoria, o sea, cuando el valor de certeza sea
mayor que el parametro .

Codigo 8. Proyecto2.m
%%Definicion de conjunto de Hipotesis
ConjuntoHipotesis=struct('Hipotesis',[],
'Valor',[]);
ConjuntoHipotesis(1)=struct('Hipotesis',
es perro', 'Valor', 0);
ConjuntoHipotesis(2)=struct('Hipotesis',
es murcielago', 'Valor', 0);
ConjuntoHipotesis(3)=struct('Hipotesis',
es tigre', 'Valor', 0);
ConjuntoHipotesis(4)=struct('Hipotesis',
es elefante', 'Valor', 0);
ConjuntoHipotesis(5)=struct('Hipotesis',
es cebra', 'Valor', 0);

Para ejemplificar los modos de funcionamiento del programa se muestra el resultado de la ejecucion en ambos
casos considerando que el animal que se describe es un perro
(primera hipotesis del conjunto).
Al considerar la opcion de detener la revision, se tienen
los resultados mostrados en las Figuras 5 y 6. En la primera
de las Figuras mencionadas se observa el dialogo entre
el programa y el usuario, comenzado con la seleccion de
la opcion y luego el listado de preguntas en busca de
informacion que permita validar la primera hipotesis junto
con los valores de certeza asignados por el usuario. Al

...
'animal ...
'animal ...
'animal ...
'animal ...
'animal ...

completar la ejecucion se obtiene que la hipotesis valida es la


primera: 'el animal es perro', con un valor de certeza
de 0.81.

Las respuestas entregadas por el usuario son considerando


que el animal en estudio es un perro pero dada la opcion
elegida se evaluan todas las hipotesis del listado. En 8 se
tienen los grados de certeza para los hechos fundamentales,
conclusiones intermedias y principales evaluadas durante la
ejecucion del programa. El orden en que estas aparecen
listadas depende del orden en que se evaluen las reglas y
por consiguiente de como esta conformado el Conjunto de
Hipotesis.

Figura 5. Modo Detencion. Interaccion con Usuario

En grado de certeza se obtiene al activarse las reglas R1,


R2, R6 y R10 que contienen conclusiones intermedias, junto
con R14, la cual incluye la hipotesis de mayor jerarqua.
En la Figura 6 se muestran la Base de Hechos actualizada
despues de la activacion de las reglas mencionadas. Se puede
observar que no hay conflictos (no se repiten hechos) y
ademas de satisfacen las condiciones de control as como la
operatoria entre los grados de certeza.

Figura 6. Modo Detencion. Base de Hechos

Figura 8. Modo sin Detencion. Base de Hechos

Cuando se considera el modo que recorre todo el Conjunto


de Hipotesis se tienen los resultados de las Figuras 7, 8 y 9
que muestran los mensaje en consola, la Base de Hechos y
el Conjunto de Hipotesis actualizado al finalizar la ejecucion,
respectivamente.

En la Figura 9 se tiene el Conjunto de Hipotesis actualizado


donde se indica el valor de certeza para cada una de ellas.
Una observacion de los valores permite concluir que con una
certidumbre del 0.81 el animal es perro. En cuanto el resto
estas estan indeterminadas (valores nulos) o con certeza no lo
son (valores negativos).

Figura 9. Modo sin Detencion. Conjunto de Hipotesis Final


Figura 7. Modo sin Detencion. Interaccion con Usuario

IX.

R ESULTADOS Y C ONCLUSIONES

En las secciones previas se ejemplifico el correcto


funcionamiento de las funciones implementadas, y como
estas son usadas para resolver el problema de encadenamiento
inverso. A pesar de esto, en ningun caso se realizo un analisis
exhaustivo de las distintas combinaciones de valores de
certeza posibles de ingresar por el usuario, lo que en realidad
no es practico dada la enorme cantidad de posibilidades.
Se opta por un analisis selectivo que considera el modo
de operacion de detener el algoritmo cuando se satisface la
primera hipotesis.

Figura 12. Elefante

En las Figuras 10-19 se muestra la interaccion entre el


programa y el usuario en distintas situacion que involucran
la verificacion de todas las hipotesis del listado en cada
ejecucion. Por ejemplo en 10 las respuestas del usuario son
considerando que efectivamente el animal que esta validando
corresponde a un murcielago. Lo mismo se aplica para las
otras Figuras, para el animal indicado en el ttulo de esta.
En todas ellas, salvo en 15, el programa al finalizar indica
la hipotesis cumplida junto con el grado de certeza de esta,
el cual es mayor que el parametro . Para la excepcion la
condicion de control mencionada previamente no se cumple
y por esta razon son evaluadas todas las hipotesis.

Figura 13. Cebra

Finalmente se tiene que el algoritmo implementado funciona


correctamente, y que la inclusion de parametros de control
le da una versatilidad que permite al usuario cambiar los
umbrales del algoritmo en funcion de sus exigencias.

Figura 14. Jirafa

Figura 10. Murcielago

Figura 11. Tigre


Figura 15. Tortuga

Figura 16. Cheetah

Figura 17. Gaviota

Figura 19. Loro

Figura 18. Avestruz

A P E NDICE A

C ODIGO
S CRIPT TAREA 2()
A continuacion se muestra el codigo de la funcion
BackwardChaining() descrito en el documento. Esta es

la funcion principal que permite realizar el encadenamiento


inverso.
R EFERENCIAS
[1] C.Held, Enunciado Proyecto N2: Sistema Basado en Conocimiento
Con Encadenamiento Inverso, Universidad de Chile, Departamento de
Ingeniera Electrica.

Codigo 9. BackwardChaining()
function [Valor,BaseHechos] = BackwardChaining(BaseHechos1,BaseReglas,Hipotesis)
BaseHechos=BaseHechos1;
beta=0.2;
epsilon=0.5;
gamma=0.85;
[Vector_Hecho] = BuscarBaseHechos(BaseHechos, Hipotesis);
if(isempty(Vector_Hecho))
[Vector_Reglas]=BuscarConclusiones(BaseReglas,Hipotesis);
for i=Vector_Reglas
Regla_Premisas=BaseReglas(i).Base.Premisas;
for p=1:length(BaseReglas(i).Base.Conclusiones)
if(strcmp(BaseReglas(i).Base.Conclusiones(p).Conclusiones, Hipotesis));
break;
end
end
=beta/abs(BaseReglas(i).Base.Valores(p));
control=0;
for j=1:length(Regla_Premisas)
Premisa=Regla_Premisas(j).Premisas;
[Vector_Conclusiones]=BuscarConclusiones(BaseReglas,Premisa);
b=0;
for m=1:length(BaseHechos)
b=strcmp(Premisa,BaseHechos(m).Hechos);
if(b==1)
%Valor_in(j)=BaseHechos(m).Valor;
break;
end
end
if(isempty(Vector_Conclusiones))
if(b==0)
Valor_in(j)=input(['El ' Premisa '?' '\n']);
BaseHechos(length(BaseHechos)+1)=struct('Hechos',Premisa,'Valor', Valor_in(j));
if(abs(Valor_in(j))<)
control=1;
break;
end
else
Valor_in(j)=BaseHechos(m).Valor;
if(abs(Valor_in(j))<)
control=1;
break;
end
end
else
[Valor_in(j),BaseHechos]= BackwardChaining(BaseHechos,BaseReglas,Premisa);
if(abs(Valor_in(j))<)
control=1;
break;
end

end
end
if(control==0)
minimo=min(Valor_in);
if(abs(minimo)>epsilon)
for k=1:length(BaseReglas(i).Base.Conclusiones)
for m=1:length(BaseHechos)
a=strcmp(BaseReglas(i).Base.Conclusiones(k).Conclusiones,BaseHechos(m).Hechos);
if(a==1)
break
end
end
if(a==1)
if(BaseHechos(m).Valor...
abs(minimo*BaseReglas(i).Base.Valores(k)))
BaseHechos(m)=struct('Hechos',BaseReglas(i).Base.Conclusiones(k).Conclusiones,...
'Valor', minimo*BaseReglas(i).Base.Valores(k));
end
else
BaseHechos(length(BaseHechos)+1)=struct('Hechos',BaseReglas(i).Base.Conclusiones(k).Conclusiones,.
'Valor', minimo*BaseReglas(i).Base.Valores(k));
end
end

10

for p=1:length(BaseReglas(i).Base.Conclusiones)
if(strcmp(BaseReglas(i).Base.Conclusiones(p).Conclusiones, Hipotesis));
break;
end
end
if(minimo*BaseReglas(i).Base.Valores(p)>gamma)
break;
end
end
end
end
for b=1:length(BaseHechos)
a=strcmp(Hipotesis,BaseHechos(b).Hechos);
if(a==1)
break
end
end
Valor=BaseHechos(b).Valor;
else
Valor_aux=BaseHechos(Vector_Hecho).Valor;
if(abs(Valor_aux)gamma)
Valor=Valor_aux;
else
Valor=0;
end
end
end

11

You might also like