一、模糊控制基本概念

1. 定义

以模糊集合理论、模糊语言变量及模糊推理为基础的一类控制方法。模糊控制原理框图如图1-1所示。

                    

洗衣机模糊推理 python 洗衣机模糊控制原理_离线

                                                                              图1-1 模糊控制原理框图

                                                                      注:图片来源于《智能控制》(第4版),刘金坤

2. 组成

模糊控制器(Fuzzy Controller ,FC)也称为模糊逻辑控制器(Fuzzy Logic Controller ,FLC),整个控制器包括:模糊化接口、知识库、推理机、解模糊接口。

                                           

洗衣机模糊推理 python 洗衣机模糊控制原理_离线_02

                                                                              图1-2 模糊控制器组成框图

                                                                                                          注:图片来源于《智能控制》(第4版),刘金坤。

二、模糊控制特点

(1)模糊控制不需要被控对象的数学模型;

(2)模糊控制是一种反映人类智慧的智能控制方法;

(3)构造容易,鲁棒性和适应性好。

三、模糊控制器设计—以洗衣机的模糊控制为例

模糊控制器最简单的实现方法是将一系列模糊控制规则离线转化为一个查询表(又称为控制表) ,存储在计算机中供在线控制时使用。这种模糊控制器结构简单,使用方便,是最基本的一种形式。

步骤1:确定模糊控制器结构

选用两输入单输出模糊控制器。控制器的输入为衣物的污泥和油脂,输出为洗涤时间。

步骤2:定义输入、输出模糊集

将污泥分为3 个模糊集:SD(污泥少), MD(污泥中), LD(污泥多);将油脂分为3 个模糊集:NG(油脂少), MG(油脂中), LG(油脂多);将洗涤时间分为5 个模糊集:VS(很短),S(短), M (中等),L(长), VL(很长)。

步骤3:定义隶属度

(1)选用如下三角形隶属函数可实现污泥的模糊化。

                                             

洗衣机模糊推理 python 洗衣机模糊控制原理_离线_03

实现代码如下:

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

                       

洗衣机模糊推理 python 洗衣机模糊控制原理_智能控制_04

                                                                           图3-1 污泥的隶属度函数

(2)同理,选用如下三角形隶属函数可实现油脂的模糊化。

                                      

洗衣机模糊推理 python 洗衣机模糊控制原理_框图_05

                      

洗衣机模糊推理 python 洗衣机模糊控制原理_智能控制_06

                                                                        图3-2 油脂的隶属度函数

(3)同理,选用如下三角形隶属函数可实现洗涤时间的模糊化。

                                 

洗衣机模糊推理 python 洗衣机模糊控制原理_离线_07

                       

洗衣机模糊推理 python 洗衣机模糊控制原理_离线_08

                                                                           图3-3  洗涤时间的隶属度函数

步骤4:建立模糊规则,并绘制模糊控制表

                                                                         表3-1 模糊控制表

    

洗衣机模糊推理 python 洗衣机模糊控制原理_框图_09

   

步骤5:实现模糊推理,分为以下几步

(1)规则匹配

假设

洗衣机模糊推理 python 洗衣机模糊控制原理_洗衣机模糊推理 python_10

,分别代入所属隶属度函数中,求得隶属度为                                  

洗衣机模糊推理 python 洗衣机模糊控制原理_洗衣机模糊推理 python_11

                                  

洗衣机模糊推理 python 洗衣机模糊控制原理_框图_12

可得到4 条相匹配的模糊规则,如下表

                                                                     表3-2 模糊推理结果

        

洗衣机模糊推理 python 洗衣机模糊控制原理_模糊控制_13

(2)规则触发

由表3-2可知,被触发的规则有4 条,即

洗衣机模糊推理 python 洗衣机模糊控制原理_离线_14

(3)规则前提可信度与规则总可信度

在同一规则内,前提之间通过“与”关系得到规则的结论。前提的可信度之间通过取小运算,由表3-2可得到没一条规则总前提的可信度为

                

洗衣机模糊推理 python 洗衣机模糊控制原理_离线_15

由此得到洗衣机规则前提可信度表,即规则强度表,见表3-3。

                                                                     表3-3 规则前提可信度

 

洗衣机模糊推理 python 洗衣机模糊控制原理_框图_16

将表3-2和表3-3进行“与运算”,得到每条规则的总可信度,见表3-4所示。

                                                              表3-4 规则总可信度

 

洗衣机模糊推理 python 洗衣机模糊控制原理_模糊控制_17

(4)模糊系统总的输出

模糊系统总的可信度为各条规则可信度推理结果的并集,即

        

洗衣机模糊推理 python 洗衣机模糊控制原理_洗衣机模糊推理 python_18

可见,有三条规则被触发。

步骤6:解模糊化(以最大隶属度平均法为例)

由表3-4及总的可信度输出结果可知,洗涤时间的隶属度最大值为

洗衣机模糊推理 python 洗衣机模糊控制原理_洗衣机模糊推理 python_19


 

  

洗衣机模糊推理 python 洗衣机模糊控制原理_洗衣机模糊推理 python_20

                                                             图3-4  洗衣机的3个规则被触发


洗衣机模糊推理 python 洗衣机模糊控制原理_洗衣机模糊推理 python_19

带入洗涤时间的隶属度函数中,得                                                 

洗衣机模糊推理 python 洗衣机模糊控制原理_智能控制_22

得到

洗衣机模糊推理 python 洗衣机模糊控制原理_离线_23

              

洗衣机模糊推理 python 洗衣机模糊控制原理_模糊控制_24

                                               图3-4  洗衣机的组合输出及解模糊化

采用最大平均法,可得精确输出为

                                                  

洗衣机模糊推理 python 洗衣机模糊控制原理_智能控制_25

源代码:

%Fuzzy Control for washer
clear all;
close all;
clc

a=newfis('fuzz_wash');

%% 输入变量和输出变量模糊化
a=addvar(a,'input','x',[0,100]);                %Fuzzy Stain
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]);                %Fuzzy Axunge
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]);                %Fuzzy Time
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;                   %Edit rule base
          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)                         %Show fuzzy rule base

%% 解模糊,采用平均最大隶属度法
a1=setfis(a,'DefuzzMethod','mom');  %Defuzzy

%% 读写模糊控制器
writefis(a1,'wash');                %Save to fuzzy file "wash.fis"
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');  %Dynamic Simulation

%% 利用模糊控制器求解
x=60;
y=70;
z=evalfis([x,y],a2)   %Using fuzzy inference

运行结果:

洗衣机模糊推理 python 洗衣机模糊控制原理_框图_26

注释:程序中规则表为什么是3行5列的,具体解释如下:

洗衣机模糊推理 python 洗衣机模糊控制原理_框图_27