我已經在Java中實現了一個完整的模糊邏輯系統,但是我在解模糊過程中遇到了嚴重的問題。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
,3個在SUFFICIENT_AVERAGE
和3個INSUFFICIENT
)。那麼現在怎麼辦?所有這9個輸出都將成爲質心計算的一部分嗎?我是否選擇所有三組中的最大值,然後將它們放入質心公式中? (這是我做的,但結果是沒有工作時,與matlab相比)