简单模糊控制器

1、什么是模糊、模糊性和随机性的区别?

【答:】

  1. 模糊:从属于该概念到不属于该概念之间无明显分界线。
  2. 随机性:是指实验之前不能确定实验的结果
  3. 模糊性:是指实验之后依然不能确定实验的结果。 

2、传统反馈控制系统的模型

【答:】

传统反馈控制系统由三部分组成:

  1. 被控对象;
  2. 产生作用于被控对象输入的控制器;
  3. 测量被控对象输出的敏感元件;

系统框图如下:

3、设计水位的模糊控制器。

    设有一贮水容器,具有可变的水位,另有一调节阀门可以向内注水和向外抽水,试设计一个模糊控制器,并通过调节阀将水位稳定在固定点(设为o点)附近。

扫描二维码关注公众号,回复: 9129803 查看本文章

若水位高于o点,则排水;差值越大,排水越快。”

“若水位低于o点,则向内注水;差值越大,注水越快。”

 

题目要求:①具体要求:要求写出具体步骤和过程并编程实现。

②用模糊工具箱设计此水箱的模糊控制器,每一步的结果都要求编号并截图显示、说明,截图除每一步的结果图外,还有模糊控制器模型设计图、模糊控制变量设计图,surface图。

【答:】

1、

  1. 观测量与控制量

观测量是水位对于o点的偏差e,它可以分为五级:负大(NB)、负小(NS)、零(O)、正小(PS)、正大(PB)。并将误差分为7档,即7个等级并以-3-2-10+1+2+3来表示之,它们是将水位变化范围适当划分而得。此处论域:U = { -3-2-10+1+2+3 },由此得到水位误差划分表(隶属度表示 ):

 

-3

-2

-1

0

+1

+2

+3

PBe

0

0

0

0

0

0.5

1

PSe

0

0

0

0

1

0.5

0

Oe

0

0

0.5

1

0.5

0

0

NSe

0

0.5

1

0

0

0

0

NBe

1

0.5

0

0

0

0

0

控制量是阀门转盘的角度变化u,逆时针旋转为正(注水),顺时针旋转为负(排水)。 设阀门角度变化分为9档。此处论域为:V = { -4-3-2-10+1+2+3+4 },正为注水,负为排水,阀门角度变化划分表(隶属度表示):

 

-4

-3

-2

-1

0

+1

+2

+3

+4

PBu

0

0

0

0

0

0

0

0.5

1

PSu

0

0

0

0

0

0.5

1

0.5

0

Ou

0

0

0

0.5

1

0.5

0

0

0

NSu

0

0.5

1

0.5

0

0

0

0

0

NBu

1

0.5

0

0

0

0

0

0

0

  1. 语言控制规则

按照人的控制经验,给出下列控制规则:

“若e负大,则u正大”;if e=NB then u=PB

“若e负小,则u正小” if e=NS then u=PS

“若e0,则u0 if e=0 then u=0

“若e正小,则u负小” if e=PS then u=NS

“若e正大,则u负大” ife=PB then u=NB

If

NBe

NSe

Oe

PSe

PBe

Then

PBu

PSu

Ou

NSu

NBu

 

        语言控制规则是一个多级条件语句,它可以表示为U×V的一个模糊子集,即模糊关系Ψ: Ψ  = ( NBe×PBu )( NSe×PSu )( Oe×Ou )( PSe×NSu )( PBe×NBu )

  1. 响应动作(输出)

任意给出一个观测结果 X 作为输入,则把 Ψ 作为模糊控制器,则得输出(并称之模糊响应):

                   Y X ο Ψ

matlab实现:

%水位模糊控制算法
clear all;
close all;
 
a = newfis('fuzzy tank');
 
a = addvar(a,'input','e',[-3,3]);
a = addmf(a,'input',1,'NB','zmf',[-3,-1]);
a =addmf(a,'input',1,'NS','trimf',[-3,-1,1]);
a =addmf(a,'input',1,'ZO','trimf',[-2,0,2]);
a =addmf(a,'input',1,'PS','trimf',[-1,1,3]);
a = addmf(a,'input',1,'PB','smf',[1,3]);
 
a = addvar(a,'output','u',[-4,4]);
a = addmf(a,'output',1,'NB','zmf',[-4,-2]);
a =addmf(a,'output',1,'NS','trimf',[-4,-2,0]);
a =addmf(a,'output',1,'ZO','trimf',[-2,0,2]);
a =addmf(a,'output',1,'PS','trimf',[0,2,4]);
a = addmf(a,'output',1,'PB','smf',[2,4]);
 
%建立模糊规则
rulelist=[1 5 1 1;
        2 4 1 1;
        3 3 1 1;
        4 2 1 1;
        5 1 1 1];
a = addrule(a,rulelist);
 
%设置反模糊化算法
a1 = setfis(a,'DefuzzMethod','mom');
writefis(a1,'tank');
a2 = readfis('tank');
 
figure(1);
plotfis(a2);
figure(2);
plotmf(a,'input',1);
figure(3);
plotmf(a,'output',1);
 
 
showrule(a);
ruleview('tank');
 
for i=1:1:7
   e(i)=i-4;
   Ulist(i)=evalfis([e(i)],a2);
end
Ulist = round(Ulist);  %对决策结果四舍五入取整
 
disp('------------------------------------------------------');
disp('----------模糊控制表:e =[-3,3], u = [-4,4]-----------');
disp('------------------------------------------------------');
fprintf('| a  |');
fprintf(' %d  |',e);
fprintf('\n');
fprintf('| u  |');
fprintf(' %d  |',Ulist);
fprintf('\n');

2、

①打开模糊推理系统Fuzzy,设置输入输出以及系统名

设置输入输出论域,编辑隶属度函数

 

 ③启动模糊规则编辑器,添加规则

 ④启动规则观察器

⑤模糊推理输入输出曲面视图,surface

 

发布了66 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Yansky58685/article/details/101517592