Pergunta

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?

Foi útil?

Solução

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;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top