智慧型控制 Intelligent Control

範例:水槽液位控制的 FIS

老師錄製的操作示範:開啟並檢視水槽液位控制的 FIS(附檔 tank.fis)。問題說明見 水槽液位控制。

▶ 在 Colab 開啟原課程的 MATLAB 程式已改寫成 Python 筆記本(第 2 節 tank.fis 與平衡誤差),可以直接在瀏覽器執行、修改參數。⬇ 下載 Fuzzy_control.ipynb

歸屬函數 Membership Functions

(以下整理自附檔,為補充)Mamdani 型;AND = prod、OR = probor、蘊含 prod(縮放而非截頂)、聚合 max、解模糊化 centroid。

-10101輸入 level(水位誤差,m)過高剛好過低-0.100.101輸入 rate(變化率,m/s)下降不變上升-10101輸出 valve(閥速度)快關慢關不動慢開快開
變數範圍歸屬函數
輸入 level(水位誤差)−1~1 mhigh 過高、okay 剛好、low 過低:gaussmf σ = 0.3,中心 −1、0、1
輸入 rate(水位變化率)−0.1~0.1 m/snegative 下降、none 不變、positive 上升:gaussmf σ = 0.03,中心 −0.1、0、0.1
輸出 valve(閥速度)−1~1close_fast 快關 [−1 −0.9 −0.8]、close_slow 慢關 [−0.6 −0.5 −0.4]、no_change 不動 [−0.1 0 0.1]、open_slow 慢開 [0.2 0.3 0.4]、open_fast 快開 [0.8 0.9 1](trimf)

level 是「期望 − 實際」,所以誤差為負(中心 −1)代表水位過高,為正代表過低。

規則 Rules

  1. If level is okay, then valve is no_change.(水位剛好就不動)
  2. If level is low, then valve is open_fast.(水位過低就快開)
  3. If level is high, then valve is close_fast.(水位過高就快關)
  4. If level is okay and rate is positive, then valve is close_slow.(水位剛好但還在上升,就慢慢關)
  5. If level is okay and rate is negative, then valve is open_slow.(水位剛好但還在下降,就慢慢開)

前三條只看誤差,像一個比例控制;後兩條在接近目標時依變化率提前修正,避免衝過頭。五條規則就涵蓋了整個操作範圍,這正是模糊控制的優點:規則直接寫出操作員的經驗。

互動模擬 Try It

下方動畫使用同一個 tank.fis,可以看到每條規則的激發強度隨水位變化(推論程式與本站 Python 模組逐點比對一致,見 verify_fzex.py):

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