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、三个 onSUFFICIENT_AVERAGE和三个 of INSUFFICIENT)。那么现在怎么办?所有这 9 个输出都将成为质心计算的一部分吗?我是否选择所有三组中的最大值,然后将它们放入质心公式?(这就是我所做的,但与 matlab 相比,结果不起作用)

4

1 回答 1

0

我不是 MATLAB 专家(因此我不完全确定您的系统的结构)但假设 INSUFFICIENT、AVERAGE_SUFFICIENT 和 SUFFICIENT 是结论中的模糊集,那么您只需要担心每个结论集的一个规则:赋予最高会员价值的那个。这是因为引用相同结论集的规则通常可以被认为是一起进行或运算(析取),即“IF rule1 OR rule2 OR...”。这为您留下了三个(修改后的)membershp 函数,一个用于 INSUFFICIENT、AVERAGE_SUFFICIENT 和 SUFFICIENT。将它们加在一起(覆盖它们?)并计算所得复合曲线下方区域的质心。

但是,根据我的经验,这可能会有点耗时。因此,我经常使用“捷径”:我计算 MF 最大值的加权平均值(类似于 Sugeno 的方法)。据我了解,您已经这样做了,但是对于所有 9 条规则,对吗?当隶属函数很简单(三角形或梯形)且非偏斜(对称)时,该捷径特别有效。

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

于 2014-12-18T10:27:33.003 回答