Escolar Documentos
Profissional Documentos
Cultura Documentos
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%
µ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
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
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
µ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
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
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
µcheap = 0.125
OUTROS OPERADORES DE ATIVAÇÃO DE CONSEQUENTE
Disponíveis no jFuzzy
ATIVAÇÃO (ou COMPOSIÇÃO) DO CONSEQUENTE: PRODUCT
RULEBLOCK No1
AND : MIN;
ACT : MIN;
ACCU : MAX;
cheap average generous
MÁX(𝜇cheap,R1 , 𝜇cheap,R3)
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
fonte: http://cs.bilkent.edu.tr/~zeynep/files/short_fuzzy_logic_tutorial.pdf