2014-04-24 48 views
3

我已經在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())); 

在這些規則中的每一個,我首先定義在何種設置爲這兩個輸入輸出屬於(可能是INSUFFICIENTAVERAGE_SUFFICIENTSUFFICIENT)。做完這些之後,我需要進入去模糊化過程,這是我的理解有點陰影的地方。

在經過規則後,我對每組輸出(每個組合有三個輸出)(基本上有三個值分類爲SUFFICIENT,3個在SUFFICIENT_AVERAGE和3個INSUFFICIENT)。那麼現在怎麼辦?所有這9個輸出都將成爲質心計算的一部分嗎?我是否選擇所有三組中的最大值,然後將它們放入質心公式中? (這是我做的,但結果是沒有工作時,與matlab相比)

回答

0

我不是MATLAB的專家(因此我不完全確定你的系統的結構),但假設INSUFFICIENT,AVERAGE_SUFFICIENT和SUFFICIENT是結論中的模糊集合,那麼你應該只需要擔心每個結論集合的一個規則:給出最高的隸屬度值的那個。這是因爲參照相同結論集的規則通常可以被認爲是在一起(分離),即「IF規則1或規則2 OR ...」。這給你留下了三個(修改的)memberhp函數,一個用於INSUFFICIENT,AVERAGE_SUFFICIENT和SUFFICIENT。將它們疊加在一起(疊加它們?)並計算所得複合曲線下方區域的質量中心。

但是,根據我的經驗,這可能會有點費時。因此,我經常使用「捷徑」:我計算MFs最大值的加權平均值(類似於Sugeno的方法)。據我所知,你已經這樣做了,但是對於所有9條規則,對吧?當成員函數簡單(三角形或梯形)和非傾斜(對稱)時,快捷鍵工作得尤其好。

希望這會有所幫助。 (我注意到這是一個相當古老的問題,但由於它仍然沒有答案......)