簡單模糊控制器

1、什麼是模糊、模糊性和隨機性的區別?

【答:】

  1. 模糊:從屬於該概念到不屬於該概念之間無明顯分界線。
  2. 隨機性:是指實驗之前不能確定實驗的結果
  3. 模糊性:是指實驗之後依然不能確定實驗的結果。 

2、傳統反饋控制系統的模型

【答:】

傳統反饋控制系統由三部分組成:

  1. 被控對象;
  2. 產生作用於被控對象輸入的控制器;
  3. 測量被控對象輸出的敏感元件;

系統框圖如下:

 

3、設計水位的模糊控制器。

    設有一貯水容器,具有可變的水位,另有一調節閥門可以向內注水和向外抽水,試設計一個模糊控制器,並通過調節閥將水位穩定在固定點(設爲o點)附近。

若水位高於o點,則排水;差值越大,排水越快。”

“若水位低於o點,則向內注水;差值越大,注水越快。”

 

題目要求:①具體要求:要求寫出具體步驟和過程並編程實現。

②用模糊工具箱設計此水箱的模糊控制器,每一步的結果都要求編號並截圖顯示、說明,截圖除每一步的結果圖外,還有模糊控制器模型設計圖、模糊控制變量設計圖,surface圖。

【答:】

1、

  1. 觀測量與控制量

觀測量是水位對於o點的偏差e,它可以分爲五級:負大(NB)、負小(NS)、零(O)、正小(PS)、正大(PB)。並將誤差分爲7檔,即7個等級並以-3-2-10+1+2+3來表示之,它們是將水位變化範圍適當劃分而得。此處論域:U = { -3-2-10+1+2+3 },由此得到水位誤差劃分表(隸屬度表示 ):

 

-3

-2

-1

0

+1

+2

+3

PBe

0

0

0

0

0

0.5

1

PSe

0

0

0

0

1

0.5

0

Oe

0

0

0.5

1

0.5

0

0

NSe

0

0.5

1

0

0

0

0

NBe

1

0.5

0

0

0

0

0

 

控制量是閥門轉盤的角度變化u,逆時針旋轉爲正(注水),順時針旋轉爲負(排水)。 設閥門角度變化分爲9檔。此處論域爲:V = { -4-3-2-10+1+2+3+4 },正爲注水,負爲排水,閥門角度變化劃分表(隸屬度表示):

 

-4

-3

-2

-1

0

+1

+2

+3

+4

PBu

0

0

0

0

0

0

0

0.5

1

PSu

0

0

0

0

0

0.5

1

0.5

0

Ou

0

0

0

0.5

1

0.5

0

0

0

NSu

0

0.5

1

0.5

0

0

0

0

0

NBu

1

0.5

0

0

0

0

0

0

0

 

  1. 語言控制規則

按照人的控制經驗,給出下列控制規則:

“若e負大,則u正大”;if e=NB then u=PB

“若e負小,則u正小” if e=NS then u=PS

“若e0,則u0 if e=0 then u=0

“若e正小,則u負小” if e=PS then u=NS

“若e正大,則u負大” ife=PB then u=NB

If

NBe

NSe

Oe

PSe

PBe

Then

PBu

PSu

Ou

NSu

NBu

 

        語言控制規則是一個多級條件語句,它可以表示爲U×V的一個模糊子集,即模糊關係Ψ: Ψ  = ( NBe×PBu )( NSe×PSu )( Oe×Ou )( PSe×NSu )( PBe×NBu )

  1. 響應動作(輸出)

任意給出一個觀測結果 X 作爲輸入,則把 Ψ 作爲模糊控制器,則得輸出(並稱之模糊響應):

                   Y X ο Ψ

matlab實現:

%水位模糊控制算法
clear all;
close all;
 
a = newfis('fuzzy tank');
 
a = addvar(a,'input','e',[-3,3]);
a = addmf(a,'input',1,'NB','zmf',[-3,-1]);
a =addmf(a,'input',1,'NS','trimf',[-3,-1,1]);
a =addmf(a,'input',1,'ZO','trimf',[-2,0,2]);
a =addmf(a,'input',1,'PS','trimf',[-1,1,3]);
a = addmf(a,'input',1,'PB','smf',[1,3]);
 
a = addvar(a,'output','u',[-4,4]);
a = addmf(a,'output',1,'NB','zmf',[-4,-2]);
a =addmf(a,'output',1,'NS','trimf',[-4,-2,0]);
a =addmf(a,'output',1,'ZO','trimf',[-2,0,2]);
a =addmf(a,'output',1,'PS','trimf',[0,2,4]);
a = addmf(a,'output',1,'PB','smf',[2,4]);
 
%建立模糊規則
rulelist=[1 5 1 1;
        2 4 1 1;
        3 3 1 1;
        4 2 1 1;
        5 1 1 1];
a = addrule(a,rulelist);
 
%設置反模糊化算法
a1 = setfis(a,'DefuzzMethod','mom');
writefis(a1,'tank');
a2 = readfis('tank');
 
figure(1);
plotfis(a2);
figure(2);
plotmf(a,'input',1);
figure(3);
plotmf(a,'output',1);
 
 
showrule(a);
ruleview('tank');
 
for i=1:1:7
   e(i)=i-4;
   Ulist(i)=evalfis([e(i)],a2);
end
Ulist = round(Ulist);  %對決策結果四捨五入取整
 
disp('------------------------------------------------------');
disp('----------模糊控制表:e =[-3,3], u = [-4,4]-----------');
disp('------------------------------------------------------');
fprintf('| a  |');
fprintf(' %d  |',e);
fprintf('\n');
fprintf('| u  |');
fprintf(' %d  |',Ulist);
fprintf('\n');

 

2、

①打開模糊推理系統Fuzzy,設置輸入輸出以及系統名

設置輸入輸出論域,編輯隸屬度函數

 

 ③啓動模糊規則編輯器,添加規則

 ④啓動規則觀察器

⑤模糊推理輸入輸出曲面視圖,surface

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章