Вы находитесь на странице: 1из 12

LOPEZ COCA NATALI

POSADAS VERONICA
PROBLEMAS A RESOLVER

1. VARIABLESLINGÜÍSTICAS
a) Utilizando la interfaz gráfica de los sistemas de inferencia, o desde la línea de
comandos de Matlab, definir 3 variables con las siguientes características:
1º variable (v1): alcance (-10,+10). Tres particiones lineales hombro-triangulo-hombro con
parámetros (-10, -8, -2), (-6,1, 5), (2, 7, 10) respectivamente.

x=(-10:1:10);
V11=trapmf(x,[-10 -10 -8 -2]); V11=trapmf(x,[-10 -10 -8 -2]); ESTE PARAMETRO
(RESALTADO) COMO NO SE DIO COMO DATO, SE PONE UN VALOR IGUAL AL
PARAMETRO ANTERIOR, ES DECIR DEBE SER -10.

V12=trimf(x,[-6 1 5]);
V13=trapmf(x,[2 7 10 10]); MODIFICAR EL ULTIMO PARAMETRO QUE DEBE SER IGUAL
A 10
plot(x,V11,x,V12,x,V13)

2º variable (v2): alcance (0,20). Cinco particiones tipo hombro-trapecio-triangulo-


trapeciotriangulo igualmente espaciados con solapamiento del 30%.

x=(0:0.1:20);
V21=trapmf(x,[-1 0 2.5 4]);
V22=trapmf(x,[1.6 3 6 8]);
V23=trimf(x,[4.8 9.4 12]);
V24=trapmf(x,[8.6 12.8 14.3 16]);
V25=trimf(x,[12.6 17 20]);
plot(x,V21,x,V22,x,V23,x,V24,x,V25)
COMO OBTUVO EL SOLAPAMIENTO DEL 30% ENTRE LAS PARTICIONES?
Lo primero que hay que hacer es calcular el valor de solapamiento que van a tener
las particiones, para eso, el alcance de 20 unidades del eje X, lo dividimos en 5, ya
que serán 5 figuras 20/5=4 entonces las bases de las figuras deben tener un ancho de
4 unid (Figuras rojas dibujadas sin solapamiento). Como deben tener un
solapamiento del 30% entonces mediante regla de tres simple calculamos del 30% de
las 4 unidades

4 x 30 %
=1 , 2 Luego los 1,2 lo dividimos en 2 para repartirlo a ambos lados
100 %
entonces tenemos 0,6 de solapamiento para cada lado. (figuras en color azul).
Luego para los parámetros de cada partición sumamos y restamos este valor de
solapamiento Ej: 4+0,6 y 4- 0,6
Por ej: La primera partición tendrá los siguientes parámetros:
1ra partición: (0 0 2 4.6)
2da partición: (3.4 5 7 8.6)

x=(0:0.1:20);
V21=trapmf(x,[0 0 2.5 4.6]);
V22=trapmf(x,[3.4 4 6 8.6]);
V23=trimf(x,[7.4 9.4 12.6]);
V24=trapmf(x,[11.4 12.8 14.3 16.6]);
V25=trimf(x,[15.4 17 20]);
plot(x,V21,x,V22,x,V23,x,V24,x,V25)
3º variable (v3): alcance (0, 10). Cinco particiones con funciones continuas y derivables Z
shape (zmf()) - gaussiana - campana generalizada - gaussiana - S shape ( smf()).
Parámetros a definir por el usuario para una distribución simétrica y un solapamiento
aproximado al 25%.
X=(0:0.01:10);
V31=zmf(X,[1 2]);
V32=gaussmf(X,[0.5 2.5]);
V33=pimf(X,[3 4 6 7]);
V34=gaussmf(X,[0.4 7.5]);
V35=smf(X,[8 9.5]);
plot(X,V31,X,V32,X,V33,X,V34,X,V35)

Aplicar el mismo procedimiento que en la explicación del ejercicio anterior, calcular el


solapamiento para eso, el alcance de 10 lo dividimos en 5 particiones 10/5 = 2.  Luego
calculamos el 25% de 2 lo que dá 2 x 25% / 100% = 0,5  para el solapamiento. Los 0,5 lo
dividimos en 2 para repartirlo a ambos lados (0,25 de solapamiento para cada lado)

Ej la primera partición tendría los siguientes parámetros

 >> zshape=zmf(x,[0.5 2.5]);

Como en este ejercicio, las particiones son funciones “curvas” ayudarse con el toolboox de
Fuzzy, se abre escribiendo fuzzy en la línea de comandos, ya que ahí al dibujar las particiones
se puede mover la gráfica para ajustarla, después sólo fijarse en los parámetros y eso
parámetros son los que se usa para la línea de comando.

PARA TODOS LOS EJERCICIOS ADJUNTAR LA GRAFICA CORRESPONDIENTE


X=(0:0.01:10);
V31=zmf(X,[0.5 2.5]);
V32=gaussmf(X,[0.5 3]);
V33=gbellmf(X,[0.5 2 5]);
V34=gaussmf(X,[0.5 7]);
V35=smf(X,[7.5 9]);
plot(X,V31,X,V32,X,V33,X,V34,X,V35)

b) Un sistema de lógica fuzzy debe reemplazar dos funciones lineales por tramos, con
funciones continuas y derivables, de manera que el error cuadrático medio sea
menor a 10-2. Calcular los parámetros en cada caso:
1º función escalón (heaviside): alcance (0, 10), con flanco creciente en 7. Reemplazar con
función hombro derecho (s-shape) o función sigmoide según convenga.

x=(0:0.1:10);
escalon=heaviside(7); PARA LA FUNCION ESCALON EL COMANDO CORRECTO SERÍA
escalon=heaviside(X-7); CORREGIR
hombroD=smf(x, [6.9 7.1]);
plot(x,escalon,x,hombroD)
Error=mse(escalon,hombroD) CONTROLAR QUE ESTE ERROR SEA MENOR A 10^-2=0,01

x=(0:0.1:10);
escalon=heaviside(x-7);
hombroD=smf(x, [6.9 7.1]);
plot(x,escalon,x,hombroD)
Error=mse(escalon,hombroD)

2º función triángulo (trimf): alcance (0, 10), con parámetros (3,6,9). Reemplazar con
función gaussiana o diferencia de sigmoides según convenga.
x=(0:0.1:10);
triangulo=trimf(x,[3 6 9]);
gauss=gaussmf(x,[1.25 6]);
plot(x,triangulo,x,gauss)
Error=mse(triangulo, gauss)

PROBAR CON LA FUNCION DIFIRENCIA DE SIGMOIDE, ABRIR EL TOOLBOX DE FUZZY PARA


GRAFICARLA Y ASÍ PODER AJUSTAR LA FUNCION PARA QUE SE ASEMEJE A LA FUNCION
TRIANGULO.
CALCULAR EL ERROR CUADRATICO MEDIO PARA AMBAS APROXIMACIONES
x=(0:0.1:10);
triangulo=trimf(x,[3 6 9]);
dSigmoide=dsigmf(x, [1.5 4.5 1.75 7.5]);
plot(x,triangulo,x,dSigmoide)
Error=mse(triangulo, dSigmoide)

En Matlab el error cuadrático medio se calcula con la función mse(). ECM = Error
Cuadrático Medio (en español); MSE = Mean Square Error (en inglés).
Investigar la posible utilización de la aplicación gráfica cftool

2. FUNCIONES ADVERBIALES
Definir y escribir las funciones de Matlab que realicen las siguientes transformaciones.
Graficar.
a) Función concentración ......f1 = concen(x,mu0) f1
=
μ
02
% funcion concentracion
function [f1] = concentracion (x,mu0)
if nargin == 2 %controlo que la cantidad de argumentos de
entrada sea 2
if (mu0<=1) && (mu0>=0)
f1 = mu0.^2;
str = sprintf('advervio %s ; mu0: %d', x, f1);
disp(str);
else
disp ('mu0 debe estar entre 1 y 0');
end
else
disp('Debe ingresa el adverbio seguido del valor de la
difusidad');
end

EJEMPLO
x=(0:0.1:10);
mu=trapmf(x,[2 4 6 8]);
C=concentracion(x,mu);
plot(x,mu, x,C)
b) Función dilación f2 = dilac(x,mu0) f2
=
μ
01
/2
% funcion dilacion
function [f2] = dilacion (x,mu0)
if nargin == 2 %controlo que la cantidad de argumentos de
entrada sea 2
if (mu0<=1) && (mu0>=0)
f2 = mu0.^(1/2);
str = sprintf('advervio %s ; mu0: %d', x, f2);
disp(str);
else
disp ('mu0 debe estar entre 1 y 0');
end
else
disp('Debe ingresar el adverbio seguido del valor de la
difusidad');
end

EJEMPLO
x=(0:0.1:10);
mu=trapmf(x,[2 4 6 8]);
D=dilacion(x,mu);
plot(x,mu, x,D)
2*μ0
si μ0 [0 ; 0.5]
c) Función intensificación f3 = intens(x,mu0) f3=
1-2*(1-μ0)2 si μ0 [0.5 ;
1]
% funcion intesificacion
function [f3] = intensificacion (x,mu0)
if nargin == 2 %controlo que la cantidad de argumentos de entrada sea
2
if (mu0<=1) && (mu0>=0)
if (mu0 <= 0.5)
f3 = 2*(mu0);
str = sprintf('advervio %s ; mu0: %d', x, f3);
disp(str);
else
f3 = 1-(2*((1-mu0).^2));
str = sprintf('advervio %s ; mu0: %d', x, f3);
disp(str);
end
else
disp ('mu0 debe estar entre 1 y 0');
end
else
disp('Debe ingresa el adverbio seguido del valor de la difusidad');
end

EJEMPLO

x=(0:0.1:10);
mu=trapmf(x,[2 4 6 8]);
I=intensificacion(x,mu);
plot(x,mu, x,I)
ADJUNTAR GRÁFICAS

x = secuencia de datos de entrada en el eje de abcisas;


mu0(x) = valores de pertenencia proporcionados por el
usuario.
En todos los casos implementar el control de datos para cada función, como por ejemplo que
los argumentos sean vectores fila de igual longitud, que la función de pertenencia de entrada
esté en el alcance correcto, etc. Utilizando las funciones anteriores como base, escribir por lo
menos tres funciones representativas de adverbios fuzzy, darles valores en el intervalo [0 ; 1],
fuzzyficar y graficar junto a la función de base.

3. OPERADORESLÓGICOSFUZZY
Definir según un criterio coherente, las variables lingüísticas aspecto (particiones “lindo”,
“estándar”, “feo”); y altruismo (particiones “generoso”, “insensible” “avaro”). Seleccionar las
funciones de pertenencia para cada partición, en un rango [0 ; 10] y graficarlas. Luego,
mostrar cómo serían las funciones de pertenencia cuando se aplican los operadores lógicos
que se indican a continuación:

x=(0:0.1:10);
feo=trapmf(x,[-1 0 4 5]);
estandar=trimf(x,[3 5 7]);
lindo=trapmf(x,[6 8 10 12]);
plot(x,feo,x,estandar,x,lindo)
avaro=trapmf(x,[-1 0 4 6]);
insensible=trimf(x,[4 6 7]);
generoso=trapmf(x,[6.5 8 10 12]);
plot(x,avaro,x,insensible,x,generoso)

a) Lindo y no avaro.
A=min(lindo,1-avaro);
plot(x,A)
b) Feo o generoso.
B=max(feo,generoso);
plot(x,B)
c) Estándar XOR insensible (en este caso conviene descomponer la función XOR en los
operadores básicos.
INCOMPLETO
Comentar cómo resultan las funciones de pertenencia compuestas (comprimidas, expandidas,
sesgadas, deformadas, etc.

4. ADVERBIOSFUZZY
4. Dibujar las modificaciones que sufren las funciones de pertenencia dadas, al aplicarle
sucesivamente los adverbios fuzzy que se indican:

a) Función de base: (x)  Periferia Modificación 1: 1(x) 


cercano a (Periferia)
Modificación 2: 2(x)  ligeramente cercano en
(Periferia)

Dibujar la función (x) de la figura y sus modificaciones,


utilizando por lo menos 100 puntos.

x=0:0.1:60;
periferia=trapmf(x,[10 25 50 50]);
cercano=periferia.^1.4;
plot(x,periferia, x,cercano)
ligeramente=periferia.^1.2;
plot(x,periferia,x,ligeramente)

b) Función de base: (x)  Cerca Modificación 1: (x) 


Más(Cerca)
Modificación 2: 2(x)  Bastante(Más(Cerca))

Ref. (x) = zmf(x,[3,7]) con x = 0:0.1:10


x=(0:0.1:10);
cerca=zmf(x, [3 7]);
mas=cerca.^1.25;
plot(x,cerca,x,mas)
bastante=min(intensificacion(x,mas),1-(intensificacion(x,concentracion(x,mas))));
plot(x,cerca,x,bastante)

Comentar si las heurísticas aplicadas producen modificaciones coherentes, analizando algunos


puntos de referencia.

5. APLICACIÓNDEADVERBIOSMÚLTIPLES
Escribir una función de Matlab que aplique sucesivamente hasta tres adverbios fuzzy a una
secuencia de pertenencia base mu0, con las siguientes condiciones:

a) La función debe recibir como entrada una secuencia [x0 , mu0].


b) Debe incorporar adicionalmente una, dos o tres etiquetas que indiquen el tipo de
adverbio aaplicar. En la función se debe reconocer la cantidad de adverbios a aplicar
(comando nargin). Las etiquetas pueden ser por ejemplo ‘no’, ‘muy’, ‘algo’,
‘aproximadamente’, etc.
c) Incorporar controles para asegurar que x0 y mu0 sean de la misma longitud y que
losvalores de mu0 esté en el intervalo [0 ; 1].Incorporar un mínimo de cinco
adverbios reconocibles por la función (se pueden utilizar los propuestos en clase).
Puede utilizar internamente las funciones definidas en el punto anterior (2), como
funciones auxiliares (deben estar en la misma carpeta).
d) Como argumentos de salida, la función debe generar la secuencia de base x0 (la
misma queingresa), la secuencia de pertenencia mu0 (la misma que ingresa) y la
secuencia de pertenencia modificada - muadv- por la aplicación sucesiva de los
adverbios indicados en el argumento de la función. Por ejemplo:
[x0,mu0,muadv] =
adv_multiples(x0,mu0,’no’,’muy’,’aproximadamente’)

e) La función debe generar además una gráfica que muestre el conjunto de base y los
conjuntosmodificados con diferentes colores, sobre el mismo sistema de ejes.

function [ x0,m0,muadv ] = adv_multiples( x0,m0,adv1,adv2,adv3 )


%UNTITLED5 Summary of this function goes here
% Etiquetas: muy, mas, menos, aproximadamente, masomenos
if nargin >= 3
if (length(x0)== length(m0))
if (mu0<=1) && (mu0>=0)
switch nargin
case 3
switch adv1
case 'muy'
muadv=m0.^2;
case 'mas'
muadv=m0.^1.25;
case 'menos'
muadv=m0.^0.75;
case 'aproximadamente'
muadv=(m0.^1/2).^1/2;
case 'masomenos'
muadv=m0.^1/2;
end
case 4
switch adv1
case 'muy'
muadv=m0.^2;
case 'mas'
muadv=m0.^1.25;
case 'menos'
muadv=m0.^0.75;
case 'aproximadamente'
muadv=(m0.^1/2).^1/2;
case 'masomenos'
muadv=m0.^1/2;
end
switch adv2
case 'muy'
muadv=muadv.^2;
case 'mas'
muadv=muadv.^1.25;
case 'menos'
muadv=muadv.^0.75;
case 'aproximadamente'
muadv=(muadv.^1/2).^1/2;
case 'masomenos'
muadv=muadv.^1/2;
end
case 5
switch adv1
case 'muy'
muadv=m0.^2;
case 'mas'
muadv=m0.^1.25;
case 'menos'
muadv=m0.^0.75;
case 'aproximadamente'
muadv=(m0.^1/2).^1/2;
case 'masomenos'
muadv=m0.^1/2;
end
switch adv2
case 'muy'
muadv=muadv.^2;
case 'mas'
muadv=muadv.^1.25;
case 'menos'
muadv=muadv.^0.75;
case 'aproximadamente'
muadv=(muadv.^1/2).^1/2;
case 'masomenos'
muadv=muadv.^1/2;
end
switch adv3
case 'muy'
muadv=muadv.^2;
case 'mas'
muadv=muadv.^1.25;
case 'menos'
muadv=muadv.^0.75;
case 'aproximadamente'
muadv=(muadv.^1/2).^1/2;
case 'masomenos'
muadv=muadv.^1/2;
end
end
plot(x0,m0,x0,muadv)
end
end
end
end

INCOMPLETO

6. AJUSTEDEFUNCIONES
Un experto proporciona al Ing. de Conocimiento un conjunto de 21 puntos representativos de
un conjunto fuzzy que define la pertenencia de una variable V F. Para poder utilizar tal
información el Ing. debe definir una función que represente a tales puntos. Investigar entre
las funciones de pertenencia usuales (Ver help), cual es la que mejor se ajusta al conjunto de
puntos dados. En el caso de las funciones paramétricas, se deben ajustar adecuadamente sus
parámetros. Dibujar sobre un sistema de ejes la nube de puntos y la función seleccionada.
Orientación: Investigar GUI cftool.
VF 1 5 9 13 17 3 7 11 15 19
mu 0,126 0,814 0,964 0,915 0,485 0,546 0,913 0,959 0,792 0,157

18 0 4 8 12 16 20 2 6 10 14
0,421 0,097 0,632 0,957 0,957 0,655 0,141 0,278 0,905 0,970 0,800
vr=[1 5 9 13 17 3 7 11 15 19 18 0 4 8 12 16 20 2 6 10 14];
mu=[0.126 0.814 0.964 0.915 0.485 0.546 0.913 0.959 0.792 0.157 0.421 0.097 0.632 0.957
0.957 0.655 0.141 0.278 0.905 0.970 0.800];
funcion=gaussmf(x,[6 10]);
plot(vr,mu,x,funcion)

Вам также может понравиться