智慧型控制 Intelligent Control

範例:MCK 系統模糊控制 I(單輸入)

把模糊控制器接到質量–彈簧–阻尼(MCK)系統上,讓質量塊的位移追上單位步階。這一頁是最簡單的版本:控制器只看誤差一個輸入。下方是老師錄製的建模與模擬示範,附檔為 MCKFuzzy1.zip(含 FuzzyMCK1.mdl、MCK 方塊所在的 mylib.mdl 與 MCKFZ.fis)。

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

系統與控制器 Plant and Controller

(以下依附檔整理並模擬,為補充)受控體是 Simulink 的 MCK_System 方塊(m = 1、c = 1、k = 2):

$$m\ddot x + c\dot x + kx = F$$ r(步階 1)+−模糊控制器FIS受控體 MCKmẍ + cẋ + kx = FeFxd/dtde/dt(雙輸入版才有,與 e 以 Mux 合併)m = 1、c = 1、k = 2

MCKFZ.fis 是 Mamdani 型(min/max/重心),只有三條規則:

誤差 e(範圍 −1.2~1.2)→ 力 F(範圍 −10~10)
負 trapmf [−2.06 −1.3 −1.1 0]負力 NF trimf [−18 −10 0]
零 trimf [−0.1 0 0.1]零 ZF trimf [−2 0 2]
正 trapmf [0 1.1 1.3 2.06]正力 PF trimf [0 10 18]

模擬結果 Simulation

單輸入的模糊控制器其實就是一條非線性曲線 F(e),作用像一個「非線性的比例控制」。左圖畫出這條曲線;右圖是步階(t = 1 s 起)的響應:

-1.2-0.600.61.2-10-50510誤差 e控制力 F平衡點 e = 0.067藍:模糊控制器 F(e)黃虛線:靜止時彈簧力 kx = 2(1−e)024681000.51位移 x10 s 時 x = 0.930峰值 1.330246810-50510時間(s)控制力 F

下一頁加入誤差的微分,相當於加上阻尼,可以壓低超越量:MCK 模糊控制 II。

模擬時的錯誤與排除 Boolean Logic Signals

原講義的截圖顯示,在當時的 Simulink 版本執行這個模型,會出現錯誤 “MinMax blocks do not accept 'boolean' signals”。原因是 FIS 方塊內部解模糊化子系統裡的「Zero Strength」比較器輸出 boolean,接到 Max 方塊。排除方法:

  1. Simulation → Simulation parameters…
  2. 切到 Advanced 頁籤,把 Optimizations 中的 Boolean logic signals 由 On 改為 Off,按 Apply。

這樣比較器改輸出 double,就能執行。新版 Matlab 已沒有這個問題。比較器等關係運算方塊的說明見附檔 Relational Operator(PDF)。

原圖對照(Simulink 操作截圖)
原圖

模型與 Fuzzy Logic Controller 方塊的參數 readfis('MCKFZ.fis')

原圖

錯誤訊息:MinMax 方塊不接受 boolean 訊號

原圖
原圖
原圖

Simulation parameters → Advanced → Boolean logic signals 改為 Off