我已经用 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()));
在每个规则中,我首先定义这两个输入的输出所属的集合(可以是INSUFFICIENT
,AVERAGE_SUFFICIENT
或SUFFICIENT
)。完成后,我需要继续进行去模糊化过程,这就是我的理解有点模糊的地方。
在完成规则之后,我为每组输出设置了三个(基本上我有三个值分类为SUFFICIENT
、三个 onSUFFICIENT_AVERAGE
和三个 of INSUFFICIENT
)。那么现在怎么办?所有这 9 个输出都将成为质心计算的一部分吗?我是否选择所有三组中的最大值,然后将它们放入质心公式?(这就是我所做的,但与 matlab 相比,结果不起作用)