Defuzzificação

Essa é uma fase importante da lógica fuzzy. O defuzzificador é que pesa as diversas respostas fornecidas pelas regras lógicas e atribui à saída um número. Esse número é que dirá o que é mais pertinente de fazer: “comprar” ou “não comprar” e com que grau. Essa ponderação de respostas pode ser realizada por diversos métodos. Essa fase é conhecida também como máquina de inferência fuzzy e segue os seguintes passos para obter o resultado da inferência para um conjunto de fatos: fatos com premissas (antecedentes); grau de compatibilidade de cada regra; crença em cada regra: agregação. Dois métodos importantes de agregação são os mais usados na literatura.

Os dois métodos mais importantes são: método baseado no centro de massa e método baseado na média dos máximos das funções de pertinência, também conhecido como Mamdani elaborado por MANDANI .  Por um desses métodos encontra-se o valor numérico no eixo “x” mais pertinente. Então, voltando as funções de pertinência elaboradas pelas regras, descobre-se o quanto esse valor do defuzzificador significa em termos das variáveis lingüísticas “comprar”, “vender”, “comprar alto”, “comprar baixo”, “vender alto”, etc.

 

Lógica Nebulosa e Negócios

Programa Computacional

Existem muitos programas de computadores disponíveis para o uso da lógica fuzzy. Devido a grande difusão da teoria fuzzy, pode-se encontrar desde programas prontos para criar as regras até ambientes onde o usuário pode criar um programa mais específico para o problema que deseja ser abordado. Neste trabalho especificamente falando, utilizou-se um ambiente de programação em Matlab, versão 6.5 ©Mathworks.

Outro ambiente possível de utilização fuzzy é o Mathematica © Wolfram. Ou ainda o ambiente Mapple. Os três ambientes de programação fornecem possibilidades aos usuários de utilizar seu modo padrão de regras fuzzy através de um programa executável ou seu modo para desenvolvimento de programas mais específicos através da programação de algoritmos. No caso deste artigo, utilizou-se dos dois modos na apresentação dos exemplos em Matlab.


            Para o Matlab, o toolbox fuzzy possui o programa fuzzy.m como editor básico de regras. Esse programa possui um módulo de entrada, o módulo de regras e o módulo final das saídas já defuzzificadas. No módulo de entrada o usuário escolhe para cada variável, qual a função de pertinência mais adequada e qual a interligação entre as lingüísticas baixa, alta, média, baixa-alta, etc. A curva padrão que o Matlab oferece é a triangular, mas todas as outras podem ser escolhidas e suas inclinações e localizações no eixo x podem ser alteradas. No módulo de regras é possível usar Mandami ligando as regras e suas respectivas decisões de forma bastante simples e interativa com o usuário. Por fim, no módulo de saída, se escolhe quais as funções de pertinência da saída e suas relações com a entrada. Assim por exemplo, se a entrada é alta e a saída é baixa, respeitando o módulo das regras gera-se o resultado final numa operação denominada “view”. O módulo de regras segundo Mandami, pondera as entradas e saídas usando o centro de massa e mostra ao usuário o valor de pertinência através do desfuzzificador.


            Na parte do ambiente de programação, são necessários diversos passos e uma boa noção de programação para a utilização dos programas do Matlab do toolbox fuzzy. Primeiro é necessário a adição das variáveis do problema através do programa addvar.m, onde se define os nomes e valores possíveis de serem atingidos para tal variável. Depois deve-se criar o domínio de entrada através da função addmf.m, programa que cria as funções de pertinência, bem como os valores dessas funções no problema e as variáveis lingüísticas: alto, média, baixo, etc. Depois cria-se as funções de pertinência usando os dois programas anteriores, apenas identificando nos mesmo que são funções de saída (output) e não de entrada(input). O terceiro passo é a criação das regras numa matriz, cuja ordem deve respeitar o número de variáveis e o número de entradas e saídas do programa. Deve-se então adicionar as regras através do programa addrule.m.


            Por fim, os resultados são gerados através do programa evalfis.m fornecendo ao mesmo, as entradas e regras já geradas anteriormente. Como as respostas são números de pertinência, é possível fazer loops iterativos para a geração de cenários e simulação de históricos de tomadas de decisão. Todos os programas devem estar juntos num mesmo programa maior e respeitando as regras de programação de algoritmo comum a qualquer linguagem de programação, adequada é claro, ao formato do Matlab. A forma algorítmica para execução do programa seria:


Passo1: Criar o programa usando newfis.m
Passo2: Criar as variáveis lingüísticas de entrada e saída usando addvar.m
Passo3: Escolher as funções de pertinência e determinar os domínios de entrada e saída usando addmf.m
Passo4: Criar as regras fuzzy para as funções de pertinência usando uma matriz de entradas e saídas conforme definição do Matlab e usar o programa addrule.m para inserir as regras no programa.
Passo5: Avaliar a resposta fuzzy através do programa evalfis.m


            Pode-se automatizar a resposta da função de pertinência que vem do passo 5 criando entradas dentro de um loop. Essas entradas podem ser aleatórias ou entradas de valores reais para comparar os resultados de saídas com passos a frente.

 

 

Métodos de defuzzificação

Exemplo da utilização do toolbox fuzzy.m

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fim da explicação fuzzy