计算智能模糊集算法
題目背景:該控制器根據室內溫度,濕度來決定設備運轉的時間。輸入變量為濕度和溫度,輸出變量為運轉時間。
1.建立模糊集系統
(1)代碼展示
%模糊控制器設計
a=newfis('fuzzf'); ? ? ? ? ? ? ? ? ? %創建新的模糊推理系統
%輸入1
f1=1;?
a=addvar(a,'input','e',[-2*f1,2*f1]); ? ? ? ? ? ? ? ? ??
?%添加 e 的模糊語言變量
a=addmf(a,'input',1,'NB','zmf',[-2*f1,-1*f1]); ? ? ? ? ?
?%添加 e 的模糊語言變量的隸屬度函數(z型)
%a=addmf(a,'input',1,'NM','trimf',[-3*f1,-2*f1,0]); ? ? ?
? %隸屬度函數為三角形
a=addmf(a,'input',1,'NS','trimf',[-2*f1,-1*f1,0]);?
a=addmf(a,'input',1,'Z','trimf',[-2*f1,0,2*f1]);?
a=addmf(a,'input',1,'PS','trimf',[0,1*f1,2*f1]);
%a=addmf(a,'input',1,'PM','trimf',[0,2*f1,3*f1]);
a=addmf(a,'input',1,'PB','smf',[1*f1,2*f1]);?
%輸入2
f2=1;
a=addvar(a,'input','ec',[-2*f2,2*f2]); ? ? ? ? ? ? ? ? ??
?%添加 ec 的模糊語言變量
a=addmf(a,'input',2,'NB','zmf',[-2*f2,-1*f2]);?
%a=addmf(a,'input',2,'NM','trimf',[-3*f2,-2*f2,0]);
a=addmf(a,'input',2,'NS','trimf',[-2*f2,-1*f2,0*f2]);
a=addmf(a,'input',2,'Z','trimf',[-1*f2,0,1*f2]);
a=addmf(a,'input',2,'PS','trimf',[-1*f2,0,2*f2]);
%a=addmf(a,'input',2,'PM','trimf',[0,2*f2,3*f2]);
a=addmf(a,'input',2,'PB','smf',[1*f2,2*f2]);?
%輸出
f3=1.5;
a=addvar(a,'output','u',[-2*f3,2*f3]); ? ? ? ? ? ? ? ??
? ?%添加 u 的模糊語言變量
a=addmf(a,'output',1,'NB','zmf',[-2*f3,-1*f3]);?
%a=addmf(a,'output',1,'NM','trimf',[-3*f3,-2*f3,0]);
a=addmf(a,'output',1,'NS','trimf',[-2*f3,-1*f3,1*f3]);
a=addmf(a,'output',1,'Z','trimf',[-1*f3,0,1*f3]);
a=addmf(a,'output',1,'PS','trimf',[-1*f3,0,2*f3]);
%a=addmf(a,'output',1,'PM','trimf',[0,2*f3,3*f3]);
a=addmf(a,'output',1,'PB','smf',[1*f3,2*f3]);
(2)運行結果
?
e的隸屬度函數
?
ec的隸屬度函數
2.定義模糊集規則
(1)代碼展示
%規則庫
rulelist=[1 1 1 1 1; ? ? ? ? ? ? %編輯模糊規則,后倆個數分別是規則權重和AND OR選項
? ? ? ? ? ? ? ?1 2 1 1 1;
? ? ? ? ? ? ? ?1 3 2 1 1;
? ? ? ? ? ? ? ?1 4 3 1 1;
? ? ? ? ? ? ? ?1 5 3 1 1;
? ? ? ? ? ? ?
? ? ? ? ? ? ? ?2 1 1 1 1;
? ? ? ? ? ? ? ?2 2 2 1 1;
? ? ? ? ? ? ? ?2 3 3 1 1;
? ? ? ? ? ? ? ?2 4 4 1 1;
? ? ? ? ? ? ? ?2 5 5 1 1;
? ? ? ? ? ? ?
? ? ? ? ? ? ? ?3 1 1 1 1
? ? ? ? ? ? ? ?3 2 1 1 1
? ? ? ? ? ? ? ?3 3 3 1 1
? ? ? ? ? ? ? ?3 4 3 1 1
? ? ? ? ? ? ? ?3 5 4 1 1
? ? ? ? ? ? ? ?4 1 4 1 1
? ? ? ? ? ? ? ?4 2 2 1 1
? ? ? ? ? ? ? ?4 3 4 1 1
? ? ? ? ? ? ? ?4 4 4 1 1
? ? ? ? ? ? ? ?4 5 5 1 1
? ? ? ? ? ? ? ?5 1 1 1 1
? ? ? ? ? ? ? ?5 2 3 1 1
? ? ? ? ? ? ? ?5 3 4 1 1
? ? ? ? ? ? ? ?5 4 4 1 1
? ? ? ? ? ? ? ?5 5 5 1 1;];
? ? ? ? ? ?
a=addrule(a,rulelist); ? ? ? ? ? ? ? ?%添加模糊規則函數
showrule(a) ? ? ? ? ? ? ? ? ? ? ? ? ? ? %顯示模糊規則函數
a1=setfis(a,'DefuzzMethod','centroid'); ? ? ? ? ? ? ? ? ?%設置解模糊方法
writefis(a1,'fuzzf'); ? ? ? ? ? ? ? ? ? ? ? %保存模糊系統
a2=readfis('fuzzf'); ? %從磁盤讀出保存的模糊系統
disp('fuzzy Controller table:e=[-3,+3],ec=[-3,+3]');%顯示矩陣和數組內容
%推理
Ulist=zeros(5,5); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %全零矩陣
for i=1:5
? ? ? ?for j=1:5
? ? ? ? ? ?e(i)=-3+i;
? ? ? ? ? ?ec(j)=-3+j;
? ? ? ? ? ?Ulist(i,j)=evalfis([e(i),ec(j)],a2); ? ?%完成模糊推理計算
? ? ? ?end
? ?end
% ? Ulist=ceil(Ulist) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %朝正無窮方向取整
? ?Ulist ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %朝正無窮方向取整
? ?
%畫出模糊系統
figure(1); plotfis(a2); ?
figure(2);plotmf(a,'input',1);
figure(3);plotmf(a,'input',2);
figure(4);plotmf(a,'output',1);
(2)運行結果
輸出u
模糊集經處理后的變成的集合
?
?
?
?
模糊集語句
3.分析與結論
(1)輸入量和輸出量的模糊化
將濕度e分為五個模糊集:負大(NB),負小(NS),零(Z),正小(PS),正大(PB),將溫度分為五個模糊集:負大(NB),負小(NS),零(Z),正小(PS),正大(PB)。
u為設備運轉時間,將其分為五個模糊集:負大(NB),負小(NS),零(Z),正小(PS),正大(PB)
(2)模糊規則的描述
根據日常的經驗,設計模糊規則:“若e負大,且ec負大,,則u負大”…
上述規則采用“IF?A?THEN?B”形式來描述:“if?e=NB and?ec=NB,then u=NB”?…
(3)求模糊關系
模糊控制規則是一個多條語句,它可以表示為ec×e上的模糊子集,即模糊關系R:
R=(NBe×NBu)∪(NSe×NSu)∪(Ze×Zu)∪(PSe×PSu)∪(PBe×PBu)
其中規則內的模糊集運算取交集,規則間的模糊集運算取并集。
(4)模糊決策
模糊控制器的輸出為誤差向量和模糊關系的合成:
u=e?○?R
2.實驗分析
本次實驗為兩輸入(e、ec)、一輸出(u)模型。首先構造模糊集:
對e:將偏差e劃分為5個模糊集,負大(NB)、負小(NS)、零(Z)、?正小(PS)、 正大(PB),設定e的取值范圍為[-2,2]。
對ec:將偏差ec劃分為5個模糊集,負大(NB)、負小(NS)、零(Z)、?正小(PS)、 正大(PB),設定ec的取值范圍為[-2,2]。
對u:將u劃分為5個模糊集,負大(NB)、負小(NS)、零(Z)、?正小(PS)、 正大(PB),設定u的取值范圍為[-3,3]。
對于建立模糊規則:規則庫rulelist中的5列分別表示:前兩列(兩個輸入e和ec)、第3列(輸出u)、第4列(信賴度)、第5列(AND、OR選項,AND用1表示,OR用0表示)。由于兩輸入、一輸出都各有5個模糊集,因此總的應該有25種模糊規則。
結論:
?
?
總結
- 上一篇: 在win10 python3用pyhiv
- 下一篇: mysql 删除表的方法_MySQL 删