jFuzzyLogic: Open Source Fuzzy Logic (Java)

FCL Example

This is an example of a Fuzzy Control Language (FCL) program:

// Block definition (there may be more than one block per file)
FUNCTION_BLOCK tipper

// Define input variables
VAR_INPUT
    service : REAL;
    food : REAL;
END_VAR

// Define output variable
VAR_OUTPUT
    tip : REAL;
END_VAR

// Fuzzify input variable 'service'
FUZZIFY service
    TERM poor := (0, 1) (4, 0) ; 
    TERM good := (1, 0) (4,1) (6,1) (9,0);
    TERM excellent := (6, 0) (9, 1);
END_FUZZIFY

// Fuzzify input variable 'food'
FUZZIFY food
    TERM rancid := (0, 1) (1, 1) (3,0) ;
    TERM delicious := (7,0) (9,1);
END_FUZZIFY

// Defzzzify output variable 'tip'
DEFUZZIFY tip
    TERM cheap := (0,0) (5,1) (10,0);
    TERM average := (10,0) (15,1) (20,0);
    TERM generous := (20,0) (25,1) (30,0);
    // Use 'Center Of Gravity' defuzzification method
    METHOD : COG;
    // Default value is 0 (if no rule activates defuzzifier)
    DEFAULT := 0;
END_DEFUZZIFY

RULEBLOCK No1
    // Use 'min' for 'and' (also implicit use 'max'
    // for 'or' to fulfill DeMorgan's Law)
    AND : MIN;
    // Use 'min' activation method
    ACT : MIN;
    // Use 'max' accumulation method
    ACCU : MAX;

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

    RULE 2 : IF service IS good 
                THEN tip IS average; 

    RULE 3 : IF service IS excellent AND food IS delicious 
                THEN tip is generous;
END_RULEBLOCK

END_FUNCTION_BLOCK
See FCL code detailed explanation here

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Author: Pablo Cingolani (pcingola@users.sourceforge.net)
Key words (for search engines):
Fuzzy logic
Fuzzy logic software
Fuzzy logic package
Fuzzy logic library
Fuzzy logic sourceforge sf.net
Open source
GNU
GPL LGPL
java
Windows Linux OSX
FCL
IEC 1131
IEC 61131
IEC 61131 part 7
IEC 61131-7
Fuzzy logic Wikipedia