0

我在 java 中使用jFuzzyLogic 库。

我正在使用的 Fcl 文件是:

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

我正在使用的java代码片段是:

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

//set variables

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

这是我得到的例外:

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

我做错了什么?异常对我来说不是很清楚,也许 CenterOfGravity Defuzzifier 不能与单例一起使用?

4

1 回答 1

2

首先有一个缺失END_FUZZIFY。真正的问题是METHOD : COG;在使用单例时,去模糊化方法必须是METHOD : COGS;

于 2012-09-21T14:57:17.733 回答