Professional Documents
Culture Documents
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
I.
I NTRODUCCI ON
II.
P ROBLEMA
Variables Globales
BASE DE R EGLAS
Tabla I
BASE DE R EGLAS
N
Premisa
Conclusion
Valores
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 es mamfero
animal es ave
animal es reptil
-1
-1
1
animal es ave
animal es reptil
1
-1
animal es mamfero
animal es ave
-1
1
animal es carnvoro
animal es carnvoro
0.8
animal es ungulado
animal es mamfero
animal es rumiante
animal es ungulado
0.75
10
animal es domestico
0.9
11
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
BASE DE H ECHOS
BASE DE H IPOTESIS
VII.
E NCADENAMIENTO I NVERSO
I MPLEMENTACI ON
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:
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
no
PAR AMETROS
DE C ONTROL
end
Parametro
Valor
0.7
0.2
0.85
0.5
0.2/vc(regla)
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
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
Codigo 5. Ejemplo N1
El animal tiene pelo?: 1
El animal da leche?: 1
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'
Codigo 7. Ejemplo N3
El
El
El
El
El
animal
animal
animal
animal
animal
DE A NIMALES
S ISTEMA DE I DENTIFICACI ON
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 ...
IX.
R ESULTADOS Y C ONCLUSIONES
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
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