guia_xfl para sistemas fuzzy
DESCRIPTION
Descripción paso a paso de diseño de un sistema fuzzy con lenguaje XFL en programa XfuzzyTRANSCRIPT
LOGICA FUZZY
CASO: CRUZAR UNA CALLE
SOTWARE: Xfuzzy 3.0
Descripción del caso: Cruzar una calle
Objetivo: Un peatón debe decidir de que manera
cruza una calle.
Descripción del caso: Cruzar una calle
Objetivo: Un peatón debe decidir de que manera cruza una calle.
----------------------------------------------------------
En esta presentación desarrollamos paso a paso el código en lenguaje XFL para diseñar Sistemas Fuzzy.
Descripción del caso: Cruzar una calle
Objetivo: Un peatón debe decidir de que manera cruza una calle.
----------------------------------------------------------
En esta presentación desarrollamos paso a paso el código en lenguaje XFL para diseñar Sistemas Fuzzy.
------------------------------------------------------------
El estudiante debe conocer el caso “Cruzar calle” mostrado en una presentación previa
AUTO
AUTO
velocidad
AUTO
distancia
velocidad
AUTO
distancia
velocidad
AUTO
distancia
velocidad
AUTO
distancia
velocidad
velocidad?
Velocidad del auto
0,2
0,4
0,6
0,8
1,0
10 20 30 40 50 60
LENTOLENTOLENTO NORMAL RAPIDO
Lenguaje XFL para Velocidad del auto
En lenguaje XFL primero se crea el TIPO con los términos linguísticos y luego se crea la variable de entrada
● type Tva
Denominación del tipode variable
(Tipo variable auto)Palabra reservada
(tipo)
Lenguaje XFL para Velocidad del auto
En lenguaje XFL primero se crea el TIPO con los términos linguísticos y luego se crea la variable de entrada
● type Tva [0.0, 60.0; 61]
Valormínimo
Valor máximo
Cardinalidad:Número de
valores enterosde la variable
Lenguaje XFL para Velocidad del auto
En lenguaje XFL primero se crea el TIPO con los términos linguísticos y luego se crea la variable de entrada
● type Tva [0.0,60.0;61] {
lento xfl.trapezoid(-0.1, 0.0, 10.0, 30.0);
Término
linguísticoFunciòn
Lenguaje XFL para Velocidad del auto
En lenguaje XFL primero se crea el TIPO con los términos linguísticos y luego se crea la variable de entrada
● type Tva [0.0,60.0;61] {
lento xfl.trapezoid(-0.1,0.0,10.0,30.0);
normal xfl.trapezoid(10.0,30.0,40.0,60.0);
rapido xfl.triangle(40.0,60.0,60.01);
}COMPLETAMOS LOS TÉRMINOS LINGUÍSTICOS
Lenguaje XFL para Velocidad del auto
En lenguaje XFL primero se crea el TIPO con los términos linguísticos y luego se crea la variable de entrada
● type Tva [0.0,60.0;61] {
lento xfl.trapezoid(-0.1,0.0,10.0,30.0);
normal xfl.trapezoid(10.0,30.0,40.0,60.0);
rapido xfl.triangle(40.0,60.0,60.01);
}
● system (Tva va : ) {
} Definimos la variable de entrada va(velocidad del auto
de tipo Tva)Palabra reservada(definir sistema fuzzy)
Distancia del auto
0,2
0,4
0,6
0,8
1,0
20 40 60 80 100
CERCA LEJOS MUY LEJOS
30 50 70
Lenguaje XFL para Distancia del auto
type Tda [0.0,100.0;101] {
cerca xfl.triangle(-0.1,0.0,30.0);
lejos xfl.triangle(20.0,50.0,80.0);
muylejos xfl.triangle(70.0,100.0,100.01);
}
system (Tva va, Tda da : ) {
}
Velocidad del peatón
0,2
0,4
0,6
0,8
1,0
1 2 3 4 5 6
MUY LENTO CAMINAR CORRERLENTOLENTOLENTO TROTAR
CORRERMUCHO
Lenguaje XFL para Distancia del peatón
type Tvp [0.0,6.0;7] {
muylento xfl.trapezoid(-0.1,0.0,1.0,2.0);
lento xfl.triangle(1.0,2.0,3.0);
caminar xfl.triangle(2.0,3.0,4.0);
trotar xfl.triangle(3.0,4.0,5.0);
correr xfl.triangle(4.0,5.0,6.0);
corrermucho xfl.triangle(5.0,6.0,6.01);
}
system (Tva va, Tda da : Tvp vp) {
}
Variable de salida vp(velocidad del peatón)
BASE DE REGLASVELOCIDAD
AUTODISTANCIA
AUTOVELOCIDAD
PEATON
LENTO (0-30) CERCA (0-30) CAMINAR (2-4)
LENTO (0-30) LEJOS (20-80) LENTO (1-3)
LENTO (0-30) MUY LEJOS (70-mas) MUY LENTO (0-2)
NORMAL (10-60) CERCA (0-30) CORRER (4-6)
NORMAL (10-60) LEJOS (20-80) TROTAR (3-5)
NORMAL (10-60) MUY LEJOS (70-mas) CAMINAR (2-4)
RAPIDO (40-mas) CERCA (0-30) CORRER MUCHO (5-mas)
RAPIDO (40-mas) LEJOS (20-80) CORRER (4-6)
RAPIDO (40-mas) MUY LEJOS (70-mas) TROTAR (3-5)
BASE DE REGLASVELOCIDAD
AUTO
(va)
DISTANCIAAUTO
(da)
VELOCIDADPEATON
(vp)LENTO (0-30) CERCA (0-30) CAMINAR (2-4)
if(va == lento & da == cerca) -> vp = caminar
Lenguaje XFL para la Base de reglas
rulebase base
Palabra reservadapara declarar
base de reglas
Nombre de la base de reglas
Lenguaje XFL para la Base de reglas
rulebase base (Tva va, Tda da : Tvp vp)
Declaración deVariables de entrada
Declaración devariable de salida
Lenguaje XFL para la Base de reglas
rulebase base (Tva va, Tda da : Tvp vp) using oper {
Operradores definidos
Lenguaje XFL para la Base de reglas
rulebase base (Tva va, Tda da : Tvp vp) using oper {
if(va == lento & da == cerca) -> vp = caminar;
if(va == lento & da == lejos) -> vp = lento;
if(va == lento & da == muylejos) -> vp = muylento;
if(va == normal & da == cerca) -> vp = correr;
if(va == normal & da == lejos) -> vp = trotar;
if(va == normal & da == muylejos) -> vp = caminar;
if(va == rapido & da == cerca) -> vp = corrermucho;
if(va == rapido & da == lejos) -> vp = correr;
if(va == rapido & da == muylejos) -> vp = trotar;
}
system (Tva va, Tda da : Tvp vp) {
base(va, da : vp);
}
Declaración dereglas
Definición de la baseen el sistema
Al código mostrado agregamos el que corresponde a los operadores difusos que son
utilizados en nuestro caso
operatorset oper { and xfl.min();
defuz xfl.CenterOfArea(); }
Unimos todo el código en orden:OperadoresTipos Reglas Sistema
Finalmente lo copiamos al ambiente Xfuzzy
Ejecutar el programa Xfuzzy
Creando el sistema fuzzy
Secuencia de acciones:
File
New Sistem
Guardando el sistema fuzzy calle.xfl
Secuencia de acciones:
Hacemos clic en nomame_000
File
Save System As ...
Seleccionamos la carpeta en la que guardamos el sistema fuzzy
Archivo: calle.xfl
Save
Diseñamos el sistema fuzzy
Secuencia de acciones:
Design
Edit System
Secuencia de acciones:
File
Edit XFL3 file
Digitamos los operadores fuzzy:
operatorset oper { and xfl.min();
defuz xfl.CenterOfArea(); }
Guardamos el archivo
OK
Verificamos los cambios
Regresamos al editor del sistema y escribimos el resto
de código para los tipos, variables y base de reglas
del sistema que tratamos en las diapositivas anteriores
Guardamos el archivo
OK
Verificamos los cambios
(Verificar en la plantalla principal del programa la existencia de errores)
Haciendo doble clic sobre cada uno de los elementos que hemos creado
visualizamos sus atributos
Monitoreamos elSistema creado
Secuencia de acciones
VerificationMonitorization
Generando códigoen lenguaje java
Secuencia de acciones
Synthesisto Java
MUCHAS GRACIAS