智慧型控制 Intelligent Control

Mamdani 型模糊推論

Mamdani 型是最常見的模糊推論方式(E. H. Mamdani,1975),規則的結論也是模糊集合。以 Matlab 工具箱的「小費問題」說明:依服務品質(0~10)與食物品質(0~10)決定小費比例(0~30%)。三條規則:

  1. 若服務差,或食物難吃,則小費少。
  2. 若服務好,則小費普通。
  3. 若服務優,或食物好吃,則小費多。
▶ 在 Colab 開啟原課程的 MATLAB 程式已改寫成 Python 筆記本(第 6 節 Mamdani 推論逐步計算與五種解模糊化),可以直接在瀏覽器執行、修改參數。⬇ 下載 Fuzzy_toolbox.ipynb

推論的五個步驟 Five Steps

以課程附檔 tipper.fis 實際計算服務 = 3、食物 = 8 的情形:

服務差0.135食物難吃0.000OR(max)w = 0.135小費少若 服務 是 差 或 食物 是 難吃 → 小費 少服務好0.411(不使用此輸入)w = 0.411小費普通若 服務 是 好 → 小費 普通服務優0.000食物好吃0.500OR(max)w = 0.500小費多若 服務 是 優 或 食物 是 好吃 → 小費 多01530重心 18.0%三條規則的輸出取聯集(max)→ 求面積重心小費 = 18.0%服務 = 3食物 = 8小費(0~30%)
  1. 模糊化輸入:讀出每個輸入在各歸屬函數的歸屬度。服務 3 屬於「差」0.135、「好」0.411、「優」幾乎 0;食物 8 屬於「難吃」0、「好吃」0.5。
  2. 模糊運算:前件有兩個條件時用 AND 或 OR 合成一個值,即規則的激發強度 \(w\)。本例規則 1、3 是 OR,取最大值(max):\(w_1 = \max(0.135, 0) = 0.135\)、\(w_3 = \max(0, 0.5) = 0.5\);規則 2 只有一個條件,\(w_2 = 0.411\)。
  3. 蘊含(implication):用 \(w\) 截掉結論模糊集合的頂端(min),規則越不成立,結論越「矮」。
  4. 聚合(aggregation):三條規則的結論取聯集(max),得到一個輸出模糊集合。
  5. 解模糊化:取聚合後圖形的面積重心當作輸出: $$z^* = \frac{\int \mu(z)\,z\,dz}{\int \mu(z)\,dz}$$ 本例 \(z^*\) = 18.0%。
編註:原講義的兩張流程圖取自 Matlab 工具箱手冊,同樣以服務 3、食物 8 為例,得到小費 16.7%。但手冊圖的輸出軸只到 25%,是示意圖;用課程附檔 tipper.fis(輸出 0~30%)實算,結果是 18.0%(verify_fz.py 核對:本站的推論程式對手冊中 evalfis([1 2]) 的例子算出同樣的 5.5586,可見程式與工具箱一致)。

互動推論 Try It

(補充)拖動服務與食物,觀察三條規則的激發強度、截頂後的結論與重心怎麼變;右上是整個輸入範圍的輸出曲面——模糊推論把幾條簡單規則「內插」成一個平滑的非線性對應:

自製動畫(依控制理論數值模擬)

工具箱中的操作見小費問題(Mamdani)範例;Sugeno 型的做法見下一頁。

原圖對照(取自 Matlab 工具箱手冊)
原圖
原圖