模糊控制 MATLAB 仿真

参考《智能控制》第三章

以模糊洗衣机的设计为例,其控制是一个开环的决策过程,模糊控制按以下步骤进行。

1)模糊控制器的结构

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

2)定义输入输出模糊集

   X:将污泥分为三个模糊集:SD(污泥少),MD(污泥中),LD(污泥多),取值范围为[0100]

   Y:将油脂分为三个模糊集:NG(无油脂),MG(油脂中),LG(油脂多),取值范围为[0100]

   Z:将洗涤时间分为三个模糊集:VS(很短),S(短),M(中等),L(长),VL(很长),取值范围为[060]

3)定义隶属函数

    选用如下隶属函数:

       a、污泥隶属度

                    模糊控制 MATLAB 仿真_第1张图片

                                模糊控制 MATLAB 仿真_第2张图片

       b、污泥隶属度

          模糊控制 MATLAB 仿真_第3张图片

                             模糊控制 MATLAB 仿真_第4张图片

   c、 输出隶属度 

         模糊控制 MATLAB 仿真_第5张图片

                                 模糊控制 MATLAB 仿真_第6张图片

4)建立模糊控制规则

根据人的操作经验设计模糊规则,模糊规则设计的标准为:“污泥越多,油脂越多,洗涤时间越长”;“污泥适中,油脂适中,洗涤时间适中”;“污泥越少,油脂越少,洗涤时间越短”。

5)建立模糊控制表

       根据模糊规则的设计标准,建立模糊规则表

         模糊控制 MATLAB 仿真_第7张图片

代码如下

dxp_fis=newfis('fuzz_wash');
%增加模糊语言变量x
dxp_fis=addvar(dxp_fis,'input','污泥量x',[0,100]);              
dxp_fis=addmf(dxp_fis,'input',1,'SD','trimf',[0,0,50]);     %增加模糊语言名称,即模糊集合  污泥少
dxp_fis=addmf(dxp_fis,'input',1,'MD','trimf',[0,50,100]);   %污泥中
dxp_fis=addmf(dxp_fis,'input',1,'LD','trimf',[50,100,100]); %污泥多
 %增加模糊语言变量y
dxp_fis=addvar(dxp_fis,'input','油脂量y',[0,100]);               
dxp_fis=addmf(dxp_fis,'input',2,'NG','trimf',[0,0,50]);     %无油脂
dxp_fis=addmf(dxp_fis,'input',2,'MG','trimf',[0,50,100]);   %油脂中
dxp_fis=addmf(dxp_fis,'input',2,'LG','trimf',[50,100,100]); %油脂多
 %模糊输出变量z
dxp_fis=addvar(dxp_fis,'output','洗涤时间z',[0,60]);               
dxp_fis=addmf(dxp_fis,'output',1,'VS','trimf',[0,0,10]);    %很短
dxp_fis=addmf(dxp_fis,'output',1,'S','trimf',[0,10,25]);    %短
dxp_fis=addmf(dxp_fis,'output',1,'M','trimf',[10,25,40]);   %中等
dxp_fis=addmf(dxp_fis,'output',1,'L','trimf',[25,40,60]);   %长
dxp_fis=addmf(dxp_fis,'output',1,'VL','trimf',[40,60,60]);  %很长
%[输入1条件索引  输入2条件索引 输出1条件索引 1 1] 
% 最后两个分别表示该条规则的权重和个条件的关系
% 1-AND,2-OR
rule=[
          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;
];
dxp_fis = addrule(dxp_fis,rule);
ruleview('洗衣时间');  %动态仿真

输入污泥量x=60 油脂量y=70 输出z=33.6    反模糊化采用重心法

      模糊控制 MATLAB 仿真_第8张图片

你可能感兴趣的:(MATLAB仿真)