سؤال

I'm using the jFuzzyLogic library in java.

The Fcl file I'm using is:

FUNCTION_BLOCK rischio_ciclo_fenologico


VAR_INPUT
   ciclo_colturale : REAL;
   ciclo_vegetativo : REAL;
END_VAR

VAR_OUTPUT
   rischio_ciclo_fenologico : REAL;
END_VAR

FUZZIFY ciclo_colturale
   TERM alto := 0 ;
   TERM medio := 1 ;
   TERM basso := 2 ;
FUZZIFY ciclo_vegetativo
   TERM alto := 0 ;
   TERM medio := 1 ;
   TERM basso := 2 ;
END_FUZZIFY

DEFUZZIFY rischio_ciclo_fenologico
   TERM alto := 0 ;
   TERM basso := 100 ;
   METHOD : COG;
   DEFAULT := 0;
END_DEFUZZIFY

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

   RULE 1 : IF ciclo_colturale IS alto AND ciclo_vegetativo IS alto THEN rischio_ciclo_fenologico IS alto ;
   RULE 2 : IF ciclo_colturale IS alto AND ciclo_vegetativo IS medio THEN rischio_ciclo_fenologico IS basso ;
   RULE 3 : IF ciclo_colturale IS alto AND ciclo_vegetativo IS basso THEN rischio_ciclo_fenologico IS basso ;
   RULE 4 : IF ciclo_colturale IS medio AND ciclo_vegetativo IS alto THEN rischio_ciclo_fenologico IS basso ;
   RULE 5 : IF ciclo_colturale IS basso AND ciclo_vegetativo IS alto THEN rischio_ciclo_fenologico IS basso ;
   RULE 6 : IF ciclo_colturale IS medio AND ciclo_vegetativo IS medio THEN rischio_ciclo_fenologico IS basso ;
   RULE 7 : IF ciclo_colturale IS basso AND ciclo_vegetativo IS basso THEN rischio_ciclo_fenologico IS basso ;
   RULE 8 : IF ciclo_colturale IS medio AND ciclo_vegetativo IS basso THEN rischio_ciclo_fenologico IS basso ;
   RULE 9 : IF ciclo_colturale IS basso AND ciclo_vegetativo IS medio THEN rischio_ciclo_fenologico IS basso ;

END_RULEBLOCK
END_FUNCTION_BLOCK

The java code snippet I'm using is:

FIS fis = FIS.load(fileName,true);

//set variables

fis.evaluate();
return fis.getVariable("rischio_ciclo_fenologico").getValue();

And this is the Exception I get:

java.lang.RuntimeException: MembershipFunction and Defuzzifier are neither both discrete nor both continuous
    Term: rischio_ciclo_fenologico IS alto
    Membership function: Singleton : {0.0, 1.0}
    Defuzzifier: CenterOfGravity

What I'm doing wrong? The Exception is not so clear to me, maybe the CenterOfGravity Defuzzifier cannot be used with singleton?

هل كانت مفيدة؟

المحلول

First of all there is a missing END_FUZZIFY. The real problem is METHOD : COG; when using singleton, the defuzzifing method must be METHOD : COGS;

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top