上一篇說來一些模糊運算的數學問題,用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都可以建構。
效果:

很明顯在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之類的)
這可以說是模糊系統的最後一步,将經過模糊推理之後産生的結論,轉換為一明确數值,稱之為“去模糊化”。
至于這一步驟的必要性,一般有兩個原因:
1.不同的模糊規則産生的結果不一緻,有的是集合,有的是具體的資料,需要一個統一。
2.模糊系統一般不單獨使用,它和其他系統(如神經網絡)等搭配時,輸出值必須是數值。
去模糊化常用方法有最大隸屬度法、取中位數法和重心法。
AForge.Net的實作是CentroidDefuzzifier,即重心法。
當論域為連續時:
當論域為離散時:
至此大部分知識準備就完成了,下一篇會給出一個完整一些的示例。
最後找到一個有關模糊集合的PPT,大家可以參考一下:
<a href="http://www.ctdisk.com/file/4496068">http://www.ctdisk.com/file/4496068</a>