(1)确定模糊控制器的结构
控制器的输入为衣物的污泥和油脂
控制器的输出为洗涤时间
(2)定义输入、输出的模糊集
污泥定义为3个模糊集:SD(少)、MD(中)、LD(多)
油脂定义为3个模糊集:NG(少)、MG(中)、LG(多)
洗涤时间定义为5个模糊集:VS(很短)、S(短)、M(中等)、L(长)、VL(很长)
(3)定义隶属函数
污泥和油脂模糊集相同,则可采用相同的隶属函数。
(4)建立模糊控制规则
“污泥越多,油脂越多,洗涤时间越长”
“污泥适中,油脂适中,洗涤时间适中”
“污泥越少,油脂越少,洗涤时间越短”
(5)建立模糊控制集
(6)模糊推理
(7)仿真实例
污泥(油脂)隶属度函数
clear all;
close all;
N= 2;
x = 0:0.1:100;
for i = 1:N+1
f(i)=100/N*(i-1);
end
u = trimf(x,[f(1),f(1),f(2)]);
figure(1);
plot(x,u);
for j = 2:N
u=trimf(x,[f(j-1),f(j),f(j+1)]);
hold on;
plot(x,u);
end
u = trimf(x,[f(N),f(N+1),f(N+1)]);
hold on;
plot(x,u);
xlabel('x');
ylabel('Degree of membership');
clear all;
close all;
z = 0:0.1:60;
u = trimf(z,[0,0,10]);
figure(1);
plot(z,u);
u=trimf(z,[0,10,25]);
hold on;
plot(z,u);
u = trimf(z,[10,25,40]);
hold on;
plot(z,u);
u = trimf(z,[25,40,60]);
hold on;
plot(z,u);
u = trimf(z,[40,60,60]);
hold on;
plot(z,u);
xlabel('z');
ylabel('Degree of membership');
clear all;
close all;
a = newfis('fuzz_wash');
a = addvar(a,'input','x',[0,100]);
a = addmf(a,'input',1,'SD','trimf',[0,0,50]);
a = addmf(a,'input',1,'MD','trimf',[0,50,100]);
a = addmf(a,'input',1,'LD','trimf',[50,100,100]);
a = addvar(a,'input','y',[0,100]);
a = addmf(a,'input',2,'NG','trimf',[0,0,50]);
a = addmf(a,'input',2,'MG','trimf',[0,50,100]);
a = addmf(a,'input',2,'LG','trimf',[50,100,100]);
a = addvar(a,'output','z',[0,60]);
a = addmf(a,'output',1,'VS','trimf',[0,0,10]);
a = addmf(a,'output',1,'S','trimf',[0,10,25]);
a = addmf(a,'output',1,'M','trimf',[10,25,40]);
a = addmf(a,'output',1,'L','trimf',[25,40,60]);
a = addmf(a,'output',1,'VL','trimf',[40,60,60]);
rulelist = [1 1 1 1 1;
1 2 3 1 1;
1 3 4 1 1;
2 1 2 1 1;
2 2 3 1 1;
2 3 4 1 1;
3 1 3 1 1;
3 2 4 1 1;
3 3 5 1 1];
a = addrule(a,rulelist);
showrule(a)
a1 = setfis(a,'DefuzzMethod','mom');
writefis(a1,'wash');
a2 = readfis('wash');
figure(1);
plotfis(a2);
figure(2);
plotmf(a,'input',1);
figure(3);
plotmf(a,'input',2);
figure(4);
plotmf(a,'output',1);
ruleview('wash');
x = 60;
y = 70;
z = evalfis([x,y],a2
污泥隶属度函数
。
a = addvar(a,'input','x',[0,100]);
a = addmf(a,'input',1,'SD','trimf',[0,0,50]);
a = addmf(a,'input',1,'MD','trimf',[0,50,100]);
a = addmf(a,'input',1,'LD','trimf',[50,100,100]);
油脂隶属度函数
。
a = addvar(a,'input','y',[0,100]);
a = addmf(a,'input',2,'NG','trimf',[0,0,50]);
a = addmf(a,'input',2,'MG','trimf',[0,50,100]);
a = addmf(a,'input',2,'LG','trimf',[50,100,100]);
洗涤时间隶属度函数
。
a = addvar(a,'output','z',[0,60]);
a = addmf(a,'output',1,'VS','trimf',[0,0,10]);
a = addmf(a,'output',1,'S','trimf',[0,10,25]);
a = addmf(a,'output',1,'M','trimf',[10,25,40]);
a = addmf(a,'output',1,'L','trimf',[25,40,60]);
a = addmf(a,'output',1,'VL','trimf',[40,60,60]);
模糊规则
。
[1 1 1 1 1]表示If (x is SD) and (y is NG) then (z is VS) (1)
第一个值表示x取值
第二个值表示y取值
第三个值表示z取值
rulelist = [1 1 1 1 1;
1 2 3 1 1;
1 3 4 1 1;
2 1 2 1 1;
2 2 3 1 1;
2 3 4 1 1;
3 1 3 1 1;
3 2 4 1 1;
3 3 5 1 1];
a = addrule(a,rulelist);
showrule(a)
a1 = setfis(a,'DefuzzMethod','mom');
writefis(a1,'wash');
a2 = readfis('wash');
ruleview('wash');
x = 60;
y = 70;
z = evalfis([x,y],a2)
ruleview实现模糊控制的动态仿真。