我已经在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
、三个SUFFICIENT_AVERAGE
和三个INSUFFICIENT
)。那现在怎么办呢?这9个输出是否都将成为质心计算的一部分?我是否选择所有三个集合中的最大值,然后将它们扔到质心公式中?(这是我做的,但与Matlab相比,结果并不起作用)