Funciones de Membresia

download Funciones de Membresia

of 7

Transcript of Funciones de Membresia

  • 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