非线性控制1.0——模糊控制理论基础

本文介绍了模糊控制的基本概念,特点及其在洗衣机控制中的应用。通过定义模糊集、隶属度函数,建立模糊规则并实现模糊推理,展示了模糊控制在解决复杂控制问题上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模糊控制基本概念

1. 定义

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

                    

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

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

2. 组成

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

                                           

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

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

二、模糊控制特点

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

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

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

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

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

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

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

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

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

步骤3:定义隶属度

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

                                             \mu_{D}=\left\{\begin{matrix} \mu_{SD}(x)=(50-x)/50,\qquad 0\leq x\leq 50 \\ \mu_{MD}(x)=\left\{\begin{matrix} x/50, & 0\leq x\leq 50\\ (100-x)/50, &50< x\leq 100 \end{matrix}\right. \\ \mu_{LD}(x)=(x-50)/50, \qquad 50< x\leq 100 \end{matrix}\right.

实现代码如下:

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

                       

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

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

                                      \mu_{G}=\left\{\begin{matrix} \mu_{SG}(y)=(50-y)/50,\qquad 0\leq y\leq 50 \\ \mu_{MG}(y)=\left\{\begin{matrix} y/50, & 0\leq y\leq 50\\ (100-y)/50, &50< y\leq 100 \end{matrix}\right. \\ \mu_{LG}(y)=(y-50)/50, \qquad 50< y\leq 100 \end{matrix}\right.

                      

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

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

                                 \mu_{T}=\left\{\begin{matrix} \mu_{VS}(z)=(10-z)/10, \qquad 0\leq z\leq 10 \\ \mu_{S}(z)=\left\{\begin{matrix} z/10, \quad \qquad \qquad 0\leq z\leq 10\\ (25-z)/15, \qquad 10< z\leq 25\end{matrix}\right.\\ \mu_{M}(z)=\left\{\begin{matrix} (z-10)/15,\qquad 10\leq z\leq 25\\ (40-z)/15,\qquad 25< z\leq 40 \end{matrix}\right.\\ \mu_{L}(z)=\left\{\begin{matrix} (z-25)/15,\qquad 25\leq z\leq 40\\ (60-z)/15,\qquad 40< z\leq 60 \end{matrix}\right.\\ \mu_{VL}(z)=(z-40)/20,\qquad 40\leq z\leq 60\end{matrix}\right.

                       

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

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

                                                                         表3-1 模糊控制表

       

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

(1)规则匹配

假设x_{0}(D)=60,y_{0}(G)=70,分别代入所属隶属度函数中,求得隶属度为

                                  \mu_{SD}(60)=0,\mu_{MD}(60)=\frac{4}{5},\mu_{LD}(60)=\frac{1}{5}

                                  \mu_{NG}(70)=0,\mu_{MG}(70)=\frac{3}{5},\mu_{LG}(70)=\frac{2}{5}

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

                                                                     表3-2 模糊推理结果

        

(2)规则触发

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

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

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

                

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

                                                                     表3-3 规则前提可信度

 

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

                                                              表3-4 规则总可信度

 

(4)模糊系统总的输出

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

        

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

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

由表3-4及总的可信度输出结果可知,洗涤时间的隶属度最大值为\mu=\frac{3}{5}

 

  

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

\mu=\frac{3}{5}带入洗涤时间的隶属度函数中,得

                                                 \mu_{M}(z)=\frac{z-10}{15}=\frac{3}{5},\mu_{M}(z)=\frac{40-z}{15}=\frac{3}{5}

得到z_{1}=19,z_{2}=31

              

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

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

                                                  z^{*}=\frac{z_{1}+z_{2}}{2}=\frac{19+31}{2}=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

运行结果:

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

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路漫求索_CUMT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值