1模糊控制结构
本次设计的控制对象是应用范围广泛的家用洗衣机,这里简化了模糊自动洗衣机的输入和输出个数。选用双输入单输出的模糊控制,其中,把负载(衣物量)和污浊度作为输入条件、洗衣机工作时间作为输出结果。 2输入隶属度函数确定
1) 对于负载(衣物量)(x)而言建立了四个模糊子集,分别为:很少(HS)、少(S)、多(D)、很多(HD)。其中HS和HD模糊子集选用梯形隶属度函数;S、D选用三角形隶属度函数。 输入1隶属度分布如图1所示。
图1 负载隶属度函数分布
2) 对于污浊度(y)而言,同样建立了四个模糊子集,分别为:轻脏(QZ)、较脏(JZ)、脏(Z)、很脏(HZ)。其中QZ和HZ模糊子集选用梯形隶属度函数;JZ、Z选用三角形隶属度函数。输入2隶属度分布如图2所示。
图2 污浊度隶属度函数分布
3输出隶属度函数确定
对于洗衣机工作时间(t)来说,建立了五个模糊子集,分别为很短(HD)、短(D)、中等(Z)、长(C)、很长(HC)。为了保证洗衣机的最低工作时间,其中HD选用梯形隶属度函
数,其余则为三角形隶属度函数,输出1的隶属度分布如图3所示。
图3 工作时间的隶属度函数分布
4模糊规则建立
根据经验(衣服越多,越污浊,则洗涤时间越长。反之则相反)可以归纳总结出如下16条规则,如表1所示。
表1 模糊控制规则表
X HS S D HD Y t QZ JZ Z HZ HD HD D Z HD D Z C D Z C HC Z C HC HC 5输出模糊量清晰化
本次选用的清晰化方法为最大隶属度平均值法(mom) 6测试
分别随机选取三组输入测试 1) x=1、y=2
2) x=5、y=6
3) x=8、y=9
7模糊控制程序 %模糊控制程序 clc
clear all; close all;
a=newfis('xiyiji');%新建模糊控制 f1=1;
a=addvar(a,'input','x',[0,10*f1]); %建立模糊输入负载的隶属度函数 a=addmf(a,'input',1,'HS','trapmf',[0,0,2*f1,4*f1]); a=addmf(a,'input',1,'S','trimf',[2*f1,4*f1,6*f1]); a=addmf(a,'input',1,'D','trimf',[4*f1,6*f1,8*f1]);
a=addmf(a,'input',1,'HD','trapmf',[6*f1,8*f1,10*f1,10*f1]);
f2=1;
a=addvar(a,'input','y',[0,10*f2]); %建立模糊输入污浊度的隶属度函数 a=addmf(a,'input',2,'QZ','trapmf',[0,0,2*f2,4*f2]); a=addmf(a,'input',2,'JZ','trimf',[2*f2,4*f2,6*f2]); a=addmf(a,'input',2,'Z','trimf',[4*f2,6*f2,8*f2]);
a=addmf(a,'input',2,'HZ','trapmf',[6*f2,8*f2,10*f2,10*f2]); f3=1;
a=addvar(a,'output','t',[0,60*f3]); %建立模糊输时间的隶属度函数 a=addmf(a,'output',1,'HD','trapmf',[0,0,10*f3,20*f3]); a=addmf(a,'output',1,'D','trimf',[10*f3,20*f3,30*f3]); a=addmf(a,'output',1,'Z','trimf',[20*f3,30*f3,45*f3]); a=addmf(a,'output',1,'C','trimf',[30*f3,45*f3,60*f3]); a=addmf(a,'output',1,'HC','trimf',[45*f3,60*f3,60*f3]);
%建立模糊规则库,共16条规则 rulelist = [1 1 1 1 1; 1 2 1 1 1; 1 3 2 1 1; 1 4 3 1 1;
2 1 1 1 1; 2 2 2 1 1; 2 3 3 1 1; 2 4 4 1 1;
3 1 2 1 1; 3 2 3 1 1; 3 3 4 1 1; 3 4 5 1 1;
4 1 3 1 1;
4 2 4 1 1; 4 3 5 1 1; 4 4 5 1 1];
a=addrule(a,rulelist);
%showrule(a) % 显示模糊规则
a1=setfis(a,'DefuzzMethod','mom'); % 设置清晰化函数为mom writefis(a1,'xiyiji'); % 储存模糊文件 a2=readfis('xiyiji'); % 读取模糊文件 disp('负载x范围:[0,10],污浊度y范围:[0,10]'); x=input('负载:'); %输入负载 y=input('污浊度:'); %输入污浊度
t=evalfis([x,y],a2); %调用模糊控制函数 t=ceil(t); %取整
fprintf('工作时间t为%d分钟\\n',t); %输出工作时间
figure(1); %显示模糊控制器 plotfis(a2);
figure(2); %显示输入1的隶属度 plotmf(a,'input',1);
figure(3); %显示输入2的隶属度 plotmf(a,'input',2);
figure(4); %显示输出1的隶属度 plotmf(a,'output',1);
因篇幅问题不能全部显示,请点此查看更多更全内容