【问题标题】:Exception evaluating fcl file评估 fcl 文件的异常
【发布时间】:2012-09-19 17:10:11
【问题描述】:

我在 java 中使用jFuzzyLogic library

我使用的 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代码sn-p是:

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 不能与单例一起使用?

【问题讨论】:

    标签: java exception fuzzy-logic jfuzzylogic


    【解决方案1】:

    首先缺少END_FUZZIFY。 真正的问题是METHOD : COG;在使用singleton时,去模糊化的方法必须是METHOD : COGS;

    【讨论】: