Upload
antonio-gonzalez
View
238
Download
0
Embed Size (px)
Citation preview
8/19/2019 Funciones de Membresia
1/15
Funciones de Membresía
MATLABControl Inteligente
González Moreno Antonio de Jesús - March 10, 2016
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 1
8/19/2019 Funciones de Membresia
2/15
Introduction
La Lógica Difusa proporciona un mecanismo de inferencia que permite simular los
procedimientos de razonamiento humano en sistemas basa- dos en el conocimiento. La
teoría de la lógica difusa proporciona un marco matemático que permite modelar la
incertidumbre de los procesos cognitivos humanos de forma que pueda ser tratable por
un computador. En este primer capítulo se describirán los fundamentos y características
de este mecanismo de representación de la incertidumbre.
Lógica Difusa
Básicamente la Lógica Difusa es una lógica multivaluada que per- mite representar
matemáticamente la incertidumbre y la vaguedad, proporcionando herramientas formalespara su tratamiento.
En ocaciones podemos llegar a tener problemas cuando nos encontrarnos con algo
como: “Cuando aumenta la complejidad, los enunciados precisos pierden su significado y
los enunciados útiles pierden precisión.”, que puede resumirse como que “los árboles no
te dejan ver el bosque”.
Básicamente, cualquier problema del mundo puede resolverse como dado un
conjunto de variables de entrada (espacio de entrada), obtener un valor adecuado de
variables de salida (espacio de salida). La lógica difusa permite establecer este mapeo deuna forma adecua- da, atendiendo a criterios de significado (y no de precisión).
El término Lógica Difusa fue utilizado por primera vez en 1974. Actualmente se
utiliza en un amplio sentido, agrupando la teoría de con- junto difusos, reglas si-entonces,
aritmética difusa, cuantificadores, etc. En este curso emplearemos este significado extenso
el término.
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 2
8/19/2019 Funciones de Membresia
3/15
Funciones de Membresía
Función Triangular
Función Trapezoidal
Función Gaussiana
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 3
8/19/2019 Funciones de Membresia
4/15
Función Gaussiana
Función Sigmoidal
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 4
8/19/2019 Funciones de Membresia
5/15
Objetivos Generales
Desarrollar un programa en MATLAB que muestre las principales Funciones de
Membresía.
Objetivos Particulares
- Desarrollar un script para cada función de membresía.
- Crear un programa en MATLAB utilizando las Funciones de Membresía definidasanteriormente que muestre gráficamente una función univaluada en un universo dediscurso dado, así como en un punto definido.
- Elaborar un entorno GUI para el programa anterior con una ventana interactiva en lacual el usuario pueda ingresar los datos y observar el resultante en un entorno visual.
Desarrollo
Funciones de Membresía (Script)
Triangular
function y = triangular(x, params)
if nargin ~= 2
error('Dos argumentos son requeridos por la FM Triangular.');
elseif length(params) < 3
error('La FM Triangular requiere por lo menos 3 parametros.');
end
a = params(1); b = params(2); c = params(3);
% Para calcular la funci?n triangular existen dos m?todos ?tiles:% - Evaluacion de sus puntos cr?ticos y pendientes
% - Maximos y minimos de los valores ingresados mediante una evaluaci?n
% de los valores con respecto a ?0? (find, zeros, ones)
% Puntos criticos y evaluaci?n parametrica de la funci?n
%if x
8/19/2019 Funciones de Membresia
6/15
%end
% Maximos y Minimos
if a > b,
error('Condicion parametrica invalida: a > b');
elseif b > c,
error('Condicion parametrica invalida: b > c');
elseif a > c, error('Condicion parametrica invalida: a > c');
end
y = zeros(size(x));
% Shoulders izquierdo y derecho(y = 0)
index = find(x
8/19/2019 Funciones de Membresia
7/15
% y = 0;
%end
if a > b,
error('Condicion parametrica invalida: a > b');
elseif c > d,
error('Condicion parametrica invalida: c > d');
end
y1 = zeros(size(x));
y2 = zeros(size(x));
% y1
index = find(x >= b);
if ~isempty(index),
y1(index) = ones(size(index));
end
index = find(x < a);
if ~isempty(index),
y1(index) = zeros(size(index));
end
index = find(a
8/19/2019 Funciones de Membresia
8/15
Gaussiana Generalizada
function y = gaussbellgeneralized(x, params)
% GAUSSBELLGENERALIZED(X, [A, B, C]) = 1./((1+ABS((X-C)/A))^(2*B));
if nargin ~= 2
error('Dos argumentos son requeridos por la FM Gauss Generalizada.');
elseif length(params) < 3 error('La FM Campana Generalizada necesita por lo menos 3 parametros.');
elseif params(1) == 0,
error('Parametro inv?lido en gaussbellgeneralized() --> a == 0');
end
a = params(1); b = params(2); c = params(3);
tmp = ((x - c)/a).^2;
if (tmp == 0 & b == 0)
y = 0.5;
elseif (tmp == 0 & b < 0)
y = 0;
else
tmp = tmp.^b;
y = 1./(1 + tmp);
end
Sigmoidal
function y = sigmf(x, params)
% SIGMOIDAL(X, [A, C]) = 1./(1 + EXP(-A*(X-C)))
if nargin ~= 2
error('Dos argumentos son requeridos por la FM sigmoidal.');
elseif length(params) < 2
error('La FM sigmoidal requiere al menos dos parametros.');end
a = params(1); c = params(2);
y = 1./(1 + exp(-a*(x-c)));
Script General (Entorno GUI)
function varargout = MembershipFunctions(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @MembershipFunctions_OpeningFcn, ...
'gui_OutputFcn', @MembershipFunctions_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 8
8/19/2019 Funciones de Membresia
9/15
function MembershipFunctions_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = MembershipFunctions_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
axes(handles.axes1)
imshow(imread('ESIME-Logo.png'));
axes(handles.axes2)
imshow(imread('IPN-Logo1.png'));
function popupmenu1_Callback(hObject, eventdata, handles)
contenido = get(hObject,'String');
MemberFunction = get(hObject,'Value');
function popupmenu1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit1_Callback(hObject, eventdata, handles)
vector = get(handles.edit1,'String');
x = str2num(vector);
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function pushbutton1_Callback(hObject, eventdata, handles)
MemberFunction = get(handles.popupmenu1,'Value')
x = sort(str2num(get(handles.edit1,'String')));
%f = find(x == str2num(get(handles.edit2,'String')));
%x1 = x(f);
x1 = str2num(get(handles.edit2,'String'));
switch MemberFunction
case 1
% Triangular
% a = Izquierda
% b = Centro
% c = Derecha
prompta = 'Ingrese el valor de a: ';
a = input(prompta);
promptb = 'Ingrese el valor de b: ';
b = input(promptb);
promptc = 'Ingrese el valor de c: ';
c = input(promptc);
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = triangular(x,[a b c]);
set(handles.text2,'String',num2str(y')); y1 = triangular(x1,[a b c]);
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 9
8/19/2019 Funciones de Membresia
10/15
axes(handles.axes3)
plot(x,y,x1,y1,'c*')
grid on
xlabel('Funcion de Membresia')
xlim([izq der])
case 2
% Trapezoidal
% a = Izquierda
% b = MaxSubida % c = MaxBajada
% d = Derecha
prompta = 'Ingrese el valor de a: ';
a = input(prompta);
promptb = 'Ingrese el valor de b: ';
b = input(promptb);
promptc = 'Ingrese el valor de c: ';
c = input(promptc);
promptd = 'Ingrese el valor de d: ';
d = input(promptd);
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = trapezoidal(x,[a,b,c,d]);
set(handles.text2,'String',num2str(y'));
y1 = trapezoidal(x1,[a,b,c,d]);
axes(handles.axes3)
plot(x,y,x1,y1,'c*')
%plot(x,y)
grid on
xlabel('Funcion de Membresia')
ylim([-0.05 1.05]), xlim([izq der])
case 3
% Gausiana
% Sigma = Ancho
% x0 = Centro promptsigma = 'Ingrese el valor de sigma: ';
sigma = input(promptsigma);
promptx0 = 'Ingrese el valor de x0: ';
x0 = input(promptx0);
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = campanagauss(x,[sigma x0]);
set(handles.text2,'String',num2str(y'));
y1 = campanagauss(x1,[sigma x0]);
axes(handles.axes3)
plot(x,y,x1,y1,'c*')
%plot(x,y)
grid on
xlabel('Funcion de Membresia')
ylim([-0.05 1.05]), xlim([izq der])
case 4
% Campana Generalizada
% a = Ancho
% b = Pendiente
% x0 = Centro
prompta = 'Ingrese el valor de a: ';
a = input(prompta);
promptb = 'Ingrese el valor de b: ';
b = input(promptb);
promptx0 = 'Ingrese el valor de x0: '; x0 = input(promptx0);
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 10
8/19/2019 Funciones de Membresia
11/15
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = gaussbellgeneralized(x,[a b x0]);
set(handles.text2,'String',num2str(y'));
y1 = gaussbellgeneralized(x1,[a b x0]);
axes(handles.axes3)
plot(x,y,x1,y1,'c*') %plot(x,y)
grid on
xlabel('Funcion de Membresia')
ylim([-0.05 1.05]), xlim([izq der])
case 5
% Sigmoidal
% a = Pendiente
% a > 0 Abre por la derecha
% a < 0 Abre por la Izquierda
% x0 = Cruce
prompta = 'Ingrese el valor de a: ';
a = input(prompta);
promptx0 = 'Ingrese el valor de x0: ';
x0 = input(promptx0);
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = sigmoidal(x,[a x0]);
set(handles.text2,'String',num2str(y'));
y1 = sigmoidal(x1,[a x0]);
axes(handles.axes3)
plot(x,y,x1,y1,'c*')
%plot(x,y)
grid on
xlabel('Funcion de Membresia')
ylim([-0.05 1.05]), xlim([izq der]) otherwise
warning('Funcion no encontrada.')
end
function edit2_Callback(hObject, eventdata, handles)
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 11
8/19/2019 Funciones de Membresia
12/15
Uso de la Aplicación (GUI)
1 .- Escoger la Función de Membresía.
2 .- Ingresar el “Universo de Discurso” con los valores deseados.
3 .- Ingresar el “Valor de Membresía” particular que se desea visualizar.
Figura 1. Ingreso de Valores.
4 .- Ingresar en la ventana de comandos los valores requeridos para definir la función en
los puntos deseados.
5 .- Ingresar el rango minimo y máximo de la gráfica.
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 12
8/19/2019 Funciones de Membresia
13/15
Figura 2. Ingreso de Parámetros de Evaluación.
6 .- El resultado de la operación se muestra a continuación en la Figura 3.
Figura 3. Resultado final de la operación.
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 13
8/19/2019 Funciones de Membresia
14/15
Nota: El “Valor de Membresía” que se ingrese debe estar contenido dentro de los valores del
“Universo de Discurso”. Este es definido con fines visuales y demostrativos para comprobar el
punto evaluado con los parámetros de entrada establecidos por el usuario, el asterisco de color azul
muestra el “Valor de Membresía”, mientras que la figura en color azul representa el “Universo de
Discurso” utilizado para visualizar gráficamente la evaluación del “Valor de Membresía” dentro de
la misma función. El “Valor del vector y” indica el valor numérico de la evaluación del “Valor de Membresía”.
Conclusiones
Los controladores difusos son una manera de obtener un control basado en variables
lingüísticas bastante acertivo y tan aproximado y eficiente como lo sea la definición de suselementos en los cuales se desarrollan operaciones lógicas basadas en un conjunto defunciones llamadas Funciones de Membresía las cuales nos sirven para definir un
universo de discurso en el cual realizaremos un análisis cualitativo de las variables deentrada para obtener una o más variables de salida que establezcan un manejo eficiente dela información de salida, ya sea en términos basados en ingeniería así como en otra clasede contextos como lo es la economía, la psicología, etc.
Bibliografía
Morillas Raya, A. (2006): Introducción al análisis de datos difusos.
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 14
8/19/2019 Funciones de Membresia
15/15
Indice
Portada ………….……………………………………………………….………… 1
Introducción ………….…………………………………………………………… 2
Objetivos Generales ……………………………………………………………… 5
Objetivos Particulares ….………………………………………………………… 5
Desarrollo………….………………………….…………………………………… 5
Uso de la aplicación (GUI) …..…………………………………………… 12
Conclusiones ………….……………………………………………………..…… 14
Bibliografía ………….……………………………………………………………. 14
FUNCIONES DE MEMBRESÍA - CONTROL INTELIGENTE 15