模糊控制控制器设计
模糊控制設計控制器
模糊控制的具體過程不詳細介紹,具體參考例子參考博客:https://www.cnblogs.com/long5683/p/9963488.html
問題
使用一個具體的問題來解釋模糊控制器的設計:設計一個模糊控制器,通過控制進水電磁閥V1的開啟度,將液位穩定在倒錐形容器的液位高度h。變量的量化等級均為5級,取5個語言值。設計模糊控制器
圖如下:
一維模糊控制器
設計:
e=h0?he=h_0-he=h0??h
則為eee的大小分成五類:負大(NB)、負小(NS)、零(ZOZ_OZO?)、正小(PS)、正大(PB)
根據偏差e的變化范圍分為五個等級:-2,-1,0,+1,+2。得到水位變化(e)模糊表:
控制量u為調節閥門開度的變化。將其分為五個模糊集:負大(NB),負小(NS),零(ZO),正小(PS),正大(PB)。并將u的變化范圍分為七個等級:-3,-2,-1,0,+1,+2,+3。得到控制量(u)模糊劃分表。
根據日常的經驗,設計以下模糊規則:
(1)“若e負大,則u負大”
(2)“若e負小,則u負小”
(3)“若e為0,則u為0”
(4)“若e正小,則u正小”
(5)“若e正大,則u正大”
其中,排水時,u為負,注水時,u為正。
上述規則采用“IF A THEN B”形式來描述:
(1) if e=NB then u=NB
(2) if e=NS then u=NS
(3) if e=0 then u=0
(4) if e=PS then u=PS
(5) if e=PB then u=PB
下面是matlab程序:
a=newfis('fuzzf'); %輸入 f1=1; a=addvar(a,'input','e',[-2*f1,2*f1]); a=addmf(a,'input',1,'NB','trimf',[-2*f1,-2*f1,-1*f1]); a=addmf(a,'input',1,'NS','trimf',[-2*f1,-1*f1,0]); a=addmf(a,'input',1,'Z','trimf',[-1*f1,0,1*f1]); a=addmf(a,'input',1,'PS','trimf',[0,1*f1,2*f1]); a=addmf(a,'input',1,'PB','trimf',[1*f1,2*f1,2*f1]); %輸出 f8=1; a=addvar(a,'output','u',[-3*f8,3*f8]); a=addmf(a,'output',1,'NB','trimf',[-3*f8,-3*f8,-1*f8]); a=addmf(a,'output',1,'NS','trimf',[-3*f8,-1*f8,1*f8]); a=addmf(a,'output',1,'Z','trimf',[-2*f8,0,2*f8]); a=addmf(a,'output',1,'PS','trimf',[-1*f8,1*f8,3*f8]); a=addmf(a,'output',1,'PB','trimf',[1*f8,3*f8,3*f8]); %規則庫 rulelist=[1 1 1 1; %第一列為輸入,第二列為輸出,第三列為權重(一般取1),第四列為and/or(1為and,2為or)2 2 1 1; %第一第二列的1為NB,2為NS,3為Zo,4為PS,5為PB,具體規則參考規則表上。3 3 1 1;4 4 1 1;5 5 1 1;]; a=addrule(a,rulelist); showrule(a) a1=setfis(a,'DefuzzMethod','mom'); writefis(a1,'fuzzf'); a2=readfis('fuzzf'); figure(1);plotfis(a2); figure(2);plotmf(a,'input',1); figure(4);plotmf(a,'output',1); %disp('fuzzy Controller table:e=[-3,+3],ec=[-3,+3]');%顯示矩陣和數組內容 %推理 for i=1:1:5 %因為輸入變化等級有五個e(i)=i-3; %變化等級的范圍在-2~+2Ulist(i)=evalfis([e(i)],a2); end Ulist=round(Ulist) %單獨推理 E=-1; %e為NS時進行推理 u=evalfis(E,a2);一維模糊控制器的系統框架圖如下:
e的隸屬函數圖像如下:
u的隸屬函數圖如下:
二維模糊控制器
在上面的基礎上,引入偏差變化量(ececec),此處ec為NB意思是加水快,NS為加水慢,Z為加水無變化,PS為排水慢,PB為排水快速。因此我們可以得到25條規則如下:
這里仔細解釋一下,黑色的字體為U的動作,紅色字體橫著的為輸入水位偏差e,豎著的為偏差變化量ec。
舉個例子:
If e=NB and ec=NB then U=NB (如果水位極高,水加的快,則排水排的快)
if e=PS and ec=PB then U=PB (如果水位略微低,水排的很快,則需要加水加大)
此時我們已經有了規則表,因此直接進入matlab上程序:
整個二維模糊控制器的框架圖如下:
e的隸屬函數圖如下:
ec的隸屬函數圖如下:
u的隸屬函數圖如下:
補充
此處的輸入量化等級是題目要求為五級,正常情況,可以自行根據情況選擇,若等級選擇高了會更精細,但是系統復雜程度會上升。變量的語言值也可以選擇多幾個,例如PM、NM等。
二維模糊控制器的設計過程中,該控制器的規則表可以自行定義,程序運行后能與自己設計的規則對應到就行。
總結
- 上一篇: “测不准原理”在计算机领域的体现
- 下一篇: 舍近求远