Você está na página 1de 35

Tutorial em jFuzzy

Compreender o funcionamento de um classificador baseado em regras,


seus componentes e mecanismo de inferência fuzzy
Início

baixar versão full do jFuzzy:


http://jfuzzylogic.sourceforge.net/

Rodar a demo:
java -jar jFuzzyLogic.jar demo
Linguagem FCL
jFuzzy utiliza uma linguagem padrão denominada Fuzzy Control Language (FCL) definida pela
IEC61131 part 7 spec.

FUNCTION_BLOCK tipper

VAR_INPUT:
service : REAL;
food : REAL;
END_VAR

VAR_OUTPUT:
tip : REAL;
END_VAR
...
http://jfuzzylogic.sourceforge.net/html/fcl/tipper.fcl
Funcionamento O objetivo deste classificador fuzzy (meutipper.fcl)
é graduar o valor da gorjeta (tip) para o garçom
considerando-se a qualidade da comida e do
arquivo .fcl serviço.
• vars entrada e saída • nota da comida (food): entre 0 e 9
• método fuzificação das • nota do serviço (service): entre 0 e 9
entradas • valor da gorjeta (tip): ???
• regras
• método defuzificação das
saídas
Motor inferência jFuzzy valores saída
fuzificar → inferência → desfuzificar tip = 18,84%

valores entrada • fuzificar entradas


food = 8 • inferência: ativar regras e calcular valor de saída
service = 7 • conjunto fuzzy de saída
• desfuzificar saída
Execução Execute o classificador com food=7.5 e service=5.5
java -jar jFuzzyLogic.jar -e meutipper.fcl 7.5 5.5
Produzirá a saída tip=8,27

µpoor = µgood

motor jFuzzy

µdelicious

µrancid
EXECUÇÃO: REGRAS ATIVADAS E SEUS SUPORTES, VALORES para variáveis de ENTRADA e SAÍDA

FUNCITON_BLOCK tipper
VAR_INPUT food = 7,500000
VAR_INPUT service = 5,500000
VAR_OUTPUT tip = 8,270089
RULE_BLOCK No1
Support Rule name Rule
0,125000 1 IF (service IS poor) AND (food IS rancid) THEN tip IS cheap;
0,500000 2 IF (service IS poor) AND (food IS delicious) THEN tip IS average;
0,125000 3 IF (service IS good) AND (food IS rancid) THEN tip IS cheap;
0,500000 4 IF (service IS good) AND (food IS delicious) THEN tip IS generous;
Vamos fazer engenharia reversa para compreender este exemplo....
Definição das variáveis linguísticas de ENTRADA: food

// Define input variables


VAR_INPUT
service : REAL;
food : REAL; food: define a variável
END_VAR REAL: define o conjunto de referência U

FUZZIFY food // Fuzzify input variable 'food': { 'rancid', 'delicious' }


TERM rancid := (0, 1) (4, 1) (8, 0) ;
TERM delicious := (7, 0) (8,1) (9,1); são os termos linguísticos
END_FUZZIFY

Funções características dos termos


µrancid = semi-trapezoidal
µdelicious = semi-trapezoidal
Definição das variáveis linguísticas de ENTRADA : service

// Define input variables


VAR_INPUT
service : REAL; service: define a variável
food : REAL; REAL: define o conjunto de referência U
END_VAR

FUZZIFY service // Fuzzify input variable 'service': {'poor', 'good'}


TERM poor := (0, 1) (4, 1) (7, 0);
TERM good := (4, 0) (7, 1) (9, 1); são os termos linguísticos
END_FUZZIFY

Funções características dos termos


µpoor = semi-trapezoidal
µgood = semi-trapezoidal
Definição das variáveis linguísticas de SAÍDA: tip

// Define output variables


VAR_OUTPUT
tip : REAL; tip: define a variável
END_VAR REAL: define o conjunto de referência U

DEFUZZIFY tip // Defuzzify output variable 'tip' : {'cheap', 'average', 'generous' }


TERM cheap := (0,0) (3,1) (6,0);
TERM average := (4,0) (7,1) (10,0); são os termos linguísticos com as
TERM generous := (8,0) (11,1) (14,0); funções de pertinência µ
METHOD : COG; // Center of gravity
DEFAULT := 0; // Default value is 0 (if no rule activates defuzzifier)
END_DEFUZZIFY
A definição das variáveis de entrada (com
seus termos linguísticos e funções
pertinência) define uma partição no espaço
de valores de entrada
RANCID DELICIOUS

POOR
Partição fuzzy do Universo
de entrada na forma de
grade

GOOD
Em seguida, um especialista define as regras.
Por exemplo, uma regra por partição do
Universo de entrada (há métodos automáticos).
RULEBLOCK No1
AND : MIN; // Use 'min' for 'and' (also implicit use 'max' for 'or' to fulfill DeMorgan's Law)
ACT : MIN; // Use 'min' activation method
ACCU : MAX; // Use 'max' accumulation method

RULE 1 : IF service IS poor AND food IS rancid THEN tip IS cheap;


RULE 2 : IF service IS poor AND food IS delicious THEN tip IS average;
RULE 3 : IF service IS good AND food IS rancid THEN tip IS cheap;
RULE 4 : IF service IS good AND food IS delicious THEN tip IS generous;
END_RULEBLOCK
R2 service=poor and
food = delicious
R1 service=poor and
food = rancid

Regiões em amarelo ativam


mais de uma regra, por
exemplo, quando o serviço
não é nem poor nem good!

R3 service=good and
R4 service=good and
food = rancid
food = delicious
FUZZIFICAÇÃO
Em seguida, o FUZZIFICADOR faz o matching
das entradas com os termos linguísticos das
regras
FUZZIFICAÇÃO DAS ENTRADAS

service=5.5
food=7.5
poor good
rancid delicious
µ 0.5 0.5
µ 0.125 0.5

µpoor = µgood µdelicious

µrancid
MATCHING DAS ENTRADAS FUZZIFICADAS COM CADA REGRA

service=5.5 food=7.5
poor good rancid delicious
µ 0.5 0.5 µ 0.125 0.5

RULE 1 : IF service IS poor AND food IS rancid THEN tip IS cheap;


0.5 0.125

RULE 2 : IF service IS poor AND food IS delicious THEN tip IS average;


0.5 0.5

RULE 3 : IF service IS good AND food IS rancid THEN tip IS cheap;


0.5 0.125

RULE 4 : IF service IS good AND food IS delicious THEN tip IS generous;


0.5 0.5
INFERÊNCIA: AGREGAÇÃO DO ANTECEDENTE
O motor de inferência determina o grau de
satisfação/realização do antecedente de cada
uma das regras.
GRAU DE SATISFAÇÃO/REALIZAÇÃO DO ANTECEDENTE DAS REGRAS: AGREGAÇÃO

service=5.5 food=7.5
poor good rancid delicious
µ 0.5 0.5 µ 0.125 0.5

RULE 1 : IF service IS poor AND food IS rancid THEN tip IS cheap; RULEBLOCK No1
0.5 MÍN 0.125 AND : MIN;
ACT : MIN;
RULE 2 : IF service IS poor AND food IS delicious THEN tip IS average; ACCU : MAX;
0.5 MÍN 0.5

RULE 3 : IF service IS good AND food IS rancid THEN tip IS cheap; Implicitamente OR : MAX
0.5 MÍN 0.125

RULE 4 : IF service IS good AND food IS delicious THEN tip IS generous;


0.5 MÍN 0.5
OUTROS OPERADORES DE AGREGAÇÃO DE ANTECEDENTES
Disponíveis no jFuzzy

São utilizados por pares:


• ao colocar AND: MIN implicitamente escolhe-se OR: MAX
• idem para os outros
INFERÊNCIA: ATIVAÇÃO DO CONSEQUENTE
O motor de inferência ATIVA os termos
linguísticos de saída de cada regra em função do
grau de satisfação/realização do antecedente.
ATIVAÇÃO (ou COMPOSIÇÃO) DO CONSEQUENTE

food=7.5 service=5.5
rancid delicious poor good
µ 0.125 0.5 µ 0.5 0.5

RULE 1 : IF service IS poor AND food IS rancid THEN tip IS cheap; RULEBLOCK No1
0.125 µcheap,R1 = 0.125 AND : MIN;
ACT : MIN;
RULE 2 : IF service IS poor AND food IS delicious THEN tip IS average; ACCU : MAX;
0.5 µaverage,R2 = 0.5

RULE 3 : IF service IS good AND food IS rancid THEN tip IS cheap;


0.125 µcheap,R3 = 0.125

RULE 4 : IF service IS good AND food IS delicious THEN tip IS generous;


0.5 µgenerous,R4 = 0.5
ATIVAÇÃO (ou COMPOSIÇÃO) DO CONSEQUENTE: MÍNIMO

RULE 1 : IF service IS poor AND food IS rancid THEN tip IS cheap;


0.125 µcheap,R1 = 0.125
RULE 3 : IF service IS good AND food IS rancid THEN tip IS cheap;
0.125 µcheap,R3 = 0.125
RULEBLOCK No1
for x intervalo [0, 6] faça:
AND : MIN;
saída RULE 1 = mín(µcheap(x), µcheap,R1 )
ACT : MIN;
ACCU : MAX;
µcheap(x)

Mínimo entre a função de pertinência do


termo linguístico de saída cheap (em
verde) e o valor de ativação de cheap na
RULE 1 → resulta o trapézio em cinza
0.125
Se RULE1 e RULE3 ativassem cheap com µcheap
cheap diferentes então teríamos 2 trapézios diferentes
(temos dois trapézios, porém são idênticos)
Ativação de todos os termos linguísticos de saída pelo operador MÍN:
Faz-se o mínimo entre as funções de pertinência dos termos linguísticos de saída (os triângulos
coloridos) e seus valores de ativação (µgenerous , µaverage µcheap): as linhas pontilhadas indicam as
funções de pertinência resultantes.

cheap average generous


µaverage = µgenerous = 0.5

µcheap = 0.125
OUTROS OPERADORES DE ATIVAÇÃO DE CONSEQUENTE
Disponíveis no jFuzzy
ATIVAÇÃO (ou COMPOSIÇÃO) DO CONSEQUENTE: PRODUCT

RULE 1 : IF service IS poor AND food IS rancid THEN tip IS cheap;


0.125 triângulo em cinza

for x intervalo [0, 6] faça: RULEBLOCK No1


saída RULE 1 = µcheap(x). µcheap,R1 AND : MIN;
ACT : PROD;
ACCU : MAX;

µcheap(x) Faz o produto entre a função de


pertinência do termo de saída cheap
(em rosa) e o valor de ativação de cheap
na RULE 1 → resulta o triângulo em
cinza
0.125
Equivale a aplicar uma escala de igualdade ou
de redução na função de pertinência do
termo linguístico de saída
Ativação de todos os termos linguísticos de saída pelo operador PROD:
Faz-se o produto das funções de pertinência dos termos linguísticos de saída (os triângulos
coloridos) pelos seus valores de ativação (µcheap, µaverage, µgenerous ,): as linhas pontilhadas indicam as
funções de pertinência resultantes.
INFERÊNCIA: ACUMULAÇÃO, COMPOSIÇÃO OU AGREGAÇÃO DO RESULTADO
Define como combinar os resultados de ativação dos consequentes obtidos das regras
linguísticas em um resultado final
ACUMULAÇÃO (ou AGREGAÇÃO DO RESULTADO): MÁX

RULEBLOCK No1
AND : MIN;
ACT : MIN;
ACCU : MAX;
cheap average generous

MÁX(𝜇cheap,R1 , 𝜇cheap,R3)

MAX(𝜇cheap,R1 , 𝜇cheap,R3 , 𝜇average,R2)

Obs:
Como RULE1 e RULE3 produziram dois
trapézios idênticos, o máximo entre os
Observar que a linha preta espessa equivale ao máximo das funções de pertinência dois sempre dará o mesmo valor não
dos termos linguísticos de saída (os três trapézios em linhas pontilhadas). afetando a acumulação.
ACUMULAÇÃO (ou AGREGAÇÃO DO RESULTADO): outros operadores
ACUMULAÇÃO (ou AGREGAÇÃO DO RESULTADO): BSUM = bounded sum = soma com limite

RULEBLOCK No1
AND : MIN;
ACT : MIN;
ACCU : BSUM;

generous
average
cheap

MÍN(1, 𝜇cheap,R1 + 𝜇cheap,R3)


Obs:
MÍN(1, 𝜇cheap,R1 + 𝜇cheap,R3 + 𝜇average,R2) Como RULE1 e RULE3 produziram dois
MÍN(1, 𝜇average,R2) trapézios idênticos, o valor de pertinência
para cada regra será somado
MÍN(1, 𝜇 average,R2 + 𝜇generous,R4)
MÍN(1, 𝜇generous,R4)
DEFUZZIFICAÇÃO
converte um termo linguístico de saída em um
valor NUMÉRICO.
Neste exemplo, o método de defuzzificação é por centro de gravidade.
A partir do cálculo deste ponto, encontra-se o valor de x.
SISTEMA FUZZY

fonte: http://cs.bilkent.edu.tr/~zeynep/files/short_fuzzy_logic_tutorial.pdf

Você também pode gostar