天天看點

子句判斷、啟動強度和去模糊化--AForge.NET架構的使用(三)使用AForge.NET進行模糊運算子句判斷(Clause)啟動強度(Firing Strength)去模糊化(defuzzification )

上一篇說來一些模糊運算的數學問題,用AForge.NET做相關運算就很簡單了。

1.聯集運算中的标準聯集

數學:s (p,q) = max (p,q)

程式:

2.交集運算中的标準交集

數學:t (p,q) = min (p,q)

3.交集運算中的代數乘積:

數學:t (p,q) = pq

4.邏輯非

數學:t(p)=1-p

我比較好奇AForge.NET沒有實作徹底聯集和徹底交集,隻有自己補上了。

這個嚴格來說隻是一個輔助用的類,它可以判斷特定的子句是否可以建構。

依舊用溫度舉例,語意變量temperature的hot隸屬度0.4,warm隸屬度0.6。那麼temperature is hot和temperature is warm都可以建構。

效果:

子句判斷、啟動強度和去模糊化--AForge.NET架構的使用(三)使用AForge.NET進行模糊運算子句判斷(Clause)啟動強度(Firing Strength)去模糊化(defuzzification )

很明顯在35度時,temperature is hot 可以建構,temperature is cold則不行。

這個類在自己寫東西的時候一般用不上,但是如果要編寫泛用性的或者拿給别人用的系統,那麼最後每個子句都檢查一下。

啟動強度(Firing Strength)是衡量規則和輸入的比對度的量。

舉個例子,語意變量Steel為Cold 的隸屬度是0.6,Stove為Hot的隸屬度為0.4。

那麼規則R1:IF Steel is Cold and Stove is Hot then Pressure is Low 的Firing Strength=min(x,y)=0.4

規則R2:IF Steel is Cold and not (Stove is Warm or Stove is Hot) then Pressure is Medium"的Firing Strength=0.4

(以上算法隻是這裡采用的而已,不同的運算規則會有不同結果,比如0.24之類的)

子句判斷、啟動強度和去模糊化--AForge.NET架構的使用(三)使用AForge.NET進行模糊運算子句判斷(Clause)啟動強度(Firing Strength)去模糊化(defuzzification )

這可以說是模糊系統的最後一步,将經過模糊推理之後産生的結論,轉換為一明确數值,稱之為“去模糊化”。

至于這一步驟的必要性,一般有兩個原因:

1.不同的模糊規則産生的結果不一緻,有的是集合,有的是具體的資料,需要一個統一。

2.模糊系統一般不單獨使用,它和其他系統(如神經網絡)等搭配時,輸出值必須是數值。

去模糊化常用方法有最大隸屬度法、取中位數法和重心法。

AForge.Net的實作是CentroidDefuzzifier,即重心法。

當論域為連續時:

子句判斷、啟動強度和去模糊化--AForge.NET架構的使用(三)使用AForge.NET進行模糊運算子句判斷(Clause)啟動強度(Firing Strength)去模糊化(defuzzification )

當論域為離散時:

子句判斷、啟動強度和去模糊化--AForge.NET架構的使用(三)使用AForge.NET進行模糊運算子句判斷(Clause)啟動強度(Firing Strength)去模糊化(defuzzification )

至此大部分知識準備就完成了,下一篇會給出一個完整一些的示例。

最後找到一個有關模糊集合的PPT,大家可以參考一下:

<a href="http://www.ctdisk.com/file/4496068">http://www.ctdisk.com/file/4496068</a>

繼續閱讀