Java中的模糊逻辑:实现去模糊化过程(使用重心法)遇到困难

3
我已经在Java中实现了一整套模糊逻辑系统,但是我在去模糊化过程中遇到了严重的问题。
在我的代码中,我将输入定义为时间和距离,而输出则是简单的输出值。我定义了每个线性函数来构建输入和输出集合,因此我可以访问它们的任何值。
模糊规则如下:
FuzzySet []outputs = new FuzzySet[9]; //these are the rules

outputs[0] = new FuzzySet(INSUFFICIENT, min(timeMap.get(BAD).getDegreeOfMembership(), distanceMap.get(BAD).getDegreeOfMembership()));
outputs[1] = new FuzzySet(AVERAGE_SUFICIENT, min(timeMap.get(AVERAGE).getDegreeOfMembership(), distanceMap.get(AVERAGE).getDegreeOfMembership()));
outputs[2] = new FuzzySet(SUFFICIENT, min(timeMap.get(GOOD).getDegreeOfMembership(), distanceMap.get(GOOD).getDegreeOfMembership()));
outputs[3] = new FuzzySet(AVERAGE_SUFICIENT, min(timeMap.get(GOOD).getDegreeOfMembership(), distanceMap.get(BAD).getDegreeOfMembership()));
outputs[4] = new FuzzySet(SUFFICIENT, min(timeMap.get(GOOD).getDegreeOfMembership(), distanceMap.get(AVERAGE).getDegreeOfMembership()));
outputs[5] = new FuzzySet(SUFFICIENT, min(timeMap.get(AVERAGE).getDegreeOfMembership(), distanceMap.get(GOOD).getDegreeOfMembership()));
outputs[6] = new FuzzySet(INSUFFICIENT, min(timeMap.get(AVERAGE).getDegreeOfMembership(), distanceMap.get(BAD).getDegreeOfMembership()));
outputs[7] = new FuzzySet(AVERAGE_SUFICIENT, min(timeMap.get(BAD).getDegreeOfMembership(), distanceMap.get(GOOD).getDegreeOfMembership()));
outputs[8] = new FuzzySet(INSUFFICIENT, min(timeMap.get(BAD).getDegreeOfMembership(), distanceMap.get(AVERAGE).getDegreeOfMembership()));

在这些规则中,我首先定义了这两个输入的输出属于哪个集合(可能是INSUFFICIENTAVERAGE_SUFFICIENTSUFFICIENT)。完成后,我需要进入去模糊化处理过程,这就是我的理解有点模糊的地方。
在经过这些规则后,对于每个输出集,我都有三个规则(本质上我把三个值分类为SUFFICIENT、三个SUFFICIENT_AVERAGE和三个INSUFFICIENT)。那现在怎么办呢?这9个输出是否都将成为质心计算的一部分?我是否选择所有三个集合中的最大值,然后将它们扔到质心公式中?(这是我做的,但与Matlab相比,结果并不起作用)
1个回答

0

我不是MATLAB专家(因此对您的系统结构不完全确定),但假设INSUFFICIENT,AVERAGE_SUFFICIENT和SUFFICIENT是结论中的模糊集,则对于每个结论集,您只需担心一个规则:给出最高成员资格价值的规则。这是因为引用相同结论集的规则通常可以被视为OR在一起(析取),即“IF rule1 OR rule2 OR ...”。这将使您剩下三个(修改后的)成员功能,分别用于INSUFFICIENT,AVERAGE_SUFFICIENT和SUFFICIENT。将它们加在一起(叠加?)并计算结果复合曲线下面积的质心。

然而,根据我的经验,这可能需要一些时间。因此,我经常使用“快捷方式”:计算MF的最大值的加权平均值(类似于Sugeno的方法)。我理解您已经这样做了,但是针对所有9个规则,是吗?当成员函数简单(三角形或梯形)且非倾斜(对称)时,快捷方式尤其有效。

希望这有所帮助。(我注意到这是一个相当老的问题,但因为它仍然没有得到答复...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接