pcingola / jFuzzyLogic

The most complete fuzzy logic library in Java. The de-facto standard for research and industrial applications.
GNU Lesser General Public License v3.0
66 stars 32 forks source link

adding weights to rules ? #1

Closed ghost closed 9 years ago

ghost commented 9 years ago

Hello I think jFuzzyLogic doesn't work when I add weight to rule, is that right ?

jFuzzyLogic version JFuzzyLogic 3.3 (build 2015-04-09), by Pablo Cingolani.

line 34:51 extraneous input '(' expecting ID
line 34:87 extraneous input ')' expecting SEMICOLON
line 35:53 extraneous input '(' expecting ID
line 35:89 extraneous input ')' expecting SEMICOLON
line 36:48 extraneous input '(' expecting ID
line 36:75 mismatched input ')' expecting SEMICOLON
Exception in thread "main" java.lang.RuntimeException: Unknown (or unimplemented) ruleblock item : RULE 2: IF  (Enemy_Health IS Good) THEN (Aggressiveness IS Run_Away) WITH 1.0;
    at net.sourceforge.jFuzzyLogic.rule.RuleBlock.fclTree(RuleBlock.java:188)
    at net.sourceforge.jFuzzyLogic.FunctionBlock.fclTree(FunctionBlock.java:135)
    at net.sourceforge.jFuzzyLogic.FIS.createFromLexer(FIS.java:79)
    at net.sourceforge.jFuzzyLogic.FIS.createFromString(FIS.java:97)
    at net.sourceforge.jFuzzyLogic.JFuzzyLogic.load(JFuzzyLogic.java:137)
    at net.sourceforge.jFuzzyLogic.JFuzzyLogic.show(JFuzzyLogic.java:189)
    at net.sourceforge.jFuzzyLogic.JFuzzyLogic.run(JFuzzyLogic.java:180)
    at net.sourceforge.jFuzzyLogic.JFuzzyLogic.main(JFuzzyLogic.java:36)
    RULEBLOCK first
        ACCU:MAX;(*MAX NSUM BSUM*)
        OR:MAX;(*Autres operations possibles : ASUM > u1+u2-u1xu2, BSUM > min (1,u1+u2) *)
        AND:MIN;(*Autres operations possibles : PROD > u1xu2, BDIF > max(0,u1*u2-1)*)
        RULE 0: IF (Our_Health IS Near_Death) THEN (Aggressiveness IS Fight_Defensively) ;
        RULE 1: IF (Enemy_Health IS Near_Death) THEN (Aggressiveness IS Fight_Defensively);
        RULE 2: IF  (Enemy_Health IS Good) THEN (Aggressiveness IS Run_Away)  WITH 1.0 ;
    END_RULEBLOCK
pcingola commented 9 years ago

No, you are wrong. It works OK:

RULE 1 : IF (service IS poor) OR (food IS rancid) THEN tip IS cheap WITH 0.8;
RULE 2 : IF service IS good THEN tip IS average WITH 0.5;
RULE 3 : IF (service IS excellent) AND (food IS delicious) THEN tip IS generous WITH 0.9;

java -jar ~/jFuzzyLogic.jar fcl/tipper_with.fcl 
# Shows plots OK