当前位置:   article > 正文

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

模糊控制的应用实例

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

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

(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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

隶属度函数 洗涤时间隶属度函数

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');       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述 洗衣机模糊控制完整代码

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

在这里插入图片描述洗涤时间在这里插入图片描述

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

污泥隶属度函数

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]);
  • 1
  • 2
  • 3
  • 4

油脂隶属度函数

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]);
  • 1
  • 2
  • 3
  • 4

洗涤时间隶属度函数

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
  • 2
  • 3
  • 4
  • 5
  • 6

模糊规则
[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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述建立模糊推理系统

a1 = setfis(a,'DefuzzMethod','mom');
writefis(a1,'wash');
a2 = readfis('wash');
  • 1
  • 2
  • 3

在这里插入图片描述在这里插入图片描述在这里插入图片描述
模糊控制的动态仿真

ruleview('wash');
x = 60;
y = 70;
z = evalfis([x,y],a2)
  • 1
  • 2
  • 3
  • 4

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/395969
推荐阅读
相关标签
  

闽ICP备14008679号