模糊控制应用实例——洗衣机的模糊控制详解

模糊控制应用实例——洗衣机的模糊控制详解

模糊控制的一般流程(以洗衣机为例)

(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');         

模糊控制应用实例——洗衣机的模糊控制详解_第1张图片 洗涤时间隶属度函数

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');       

模糊控制应用实例——洗衣机的模糊控制详解_第2张图片 洗衣机模糊控制完整代码

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

模糊控制应用实例——洗衣机的模糊控制详解_第3张图片模糊控制应用实例——洗衣机的模糊控制详解_第4张图片模糊控制应用实例——洗衣机的模糊控制详解_第5张图片

洗衣机模糊控制的代码详解

污泥隶属度函数

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)

模糊控制应用实例——洗衣机的模糊控制详解_第6张图片建立模糊推理系统

a1 = setfis(a,'DefuzzMethod','mom');
writefis(a1,'wash');
a2 = readfis('wash');

模糊控制应用实例——洗衣机的模糊控制详解_第7张图片模糊控制应用实例——洗衣机的模糊控制详解_第8张图片模糊控制应用实例——洗衣机的模糊控制详解_第9张图片
模糊控制的动态仿真

ruleview('wash');
x = 60;
y = 70;
z = evalfis([x,y],a2)

ruleview实现模糊控制的动态仿真。

你可能感兴趣的:(matlab,算法)