论文研究3——模糊系统(1)

一、浅浅理解

通常,我们让系统判断一件事时,回答大多应该是:是或者否,也就对应计算机中的1或者0,就好像我问你来了吗,你应该回答的来了或者没来,但是前段时间看视频,里面教授说了个很有意思的词,“如来”,来了吗,如来。就是好像来了,又好像没来,给人一种很模糊的感觉,其实模糊系统也是如此。

第一个应用模糊系统的产品是日本松下的洗衣机,那可能就有人好奇了,能用来干什么,听完娓娓道来:如果洗衣机要实现自动加水放水的功能,有时就需要一个阈值,又或者根据衣服上的泥污和油污来判断要洗衣服的时长,但这种事情要给出一个准确的数无疑是太难了,可是为什么你爸妈知道大概要洗多久呢,因为他们有经验,能根据经验判断大概放多少洗衣粉,洗多久,那想要把这种经验应用到机器上,就需要用到模糊系统了,通过我们建立规则,慢慢让系统明白,衣服比较脏的时候,就要多洗会儿,干净的就少洗会儿。

好了,俗话说完了,下面该说点专业上的分析了。

二、专业理解

传统的控制结构系统是这样的:

论文研究3——模糊系统(1)_第1张图片

你可以通过调节控制信号u,来使得输出信号达到要求。

那模糊系统其实也不复杂:

论文研究3——模糊系统(1)_第2张图片

模糊控制器FC代替传统控制器

有人又要问了:不是,他凭什么就把传统的代替了,他高级在哪啊?

一般你要控制个东西,是不是要建立个精确的数学模型,但人只需要通过经验就可以控制的大差不差,我衣服太脏我就多洗一会,没必要精确到水要放多少毫升,大差不差就行,对于完全不了解底层逻辑的复杂系统而言,模糊真的太棒了!

三、基本流程

①确定问题:首先,确定你要解决的深度学习问题,并确定哪些方面可能存在模糊或不确定性。

②收集数据:收集与问题相关的数据,并进行预处理,以便于模糊化处理。

③模糊化:将输入数据模糊化,将其转换为模糊集合,以表示不确定性程度。可以使用模糊化方法,如隶属函数或模糊集合。

④构建模糊规则:基于问题的特点和领域知识,设计一组模糊规则,用于推断模糊输出。

⑤推断:使用模糊规则和模糊化的输入数据,推断出模糊输出。

⑥解模糊化:将模糊输出转换为具体的结果,以解决深度学习问题。

整个流程的核心就是模糊控制器FC,而控制器的核心是知识库构成

论文研究3——模糊系统(1)_第3张图片

当我们输入污泥和油脂的含量后,就可以得到洗涤时间这个输出结果。

下面我会通过洗衣机的例子一个个解释:

(1)确定问题

这个例子的问题就是:通过 确定污泥和油脂的含量后,系统会自动输出洗涤时间,完成自动控制。

(2)收集数据

该例子的数据我们可以根据情况进行设置,如果有题目给出,需要先对数据进行预处理,再进行下一步的操作。

(3)模糊化(关键)

我们将清晰的输入输出值通过隶属函数映射到模糊子集上,(下面会解释隶属函数)

模糊子集是什么呢,简单来说,我们可以把污泥的含量大致分为三类:污泥少(SD)、污泥中(MD)、污泥多(LD)。这三者组成了污泥的模糊子集。

那我想问个问题,当污泥含量为60%,他属于上面模糊子集的哪一类。这就需要隶属函数给出一个隶属值了,由此引出隶属函数。

隶属函数有很多种,我先一种以便于认识概念,三角形隶属函数:

论文研究3——模糊系统(1)_第4张图片

通过这个隶属函数,我们不难看出,污泥含量60%时,有污泥中的隶属值有0.8,而污泥高的隶属值有0.2。(所谓隶属,这名字起的就很好,你更属于谁,就好像有三个帮派,你越有钱越可以去好的帮派,现在你有60大洋,那你就有0.8属于中间帮派,0.2属于大帮派了,要注意,这两个值加起来不一定要等于1,这不完全是概率的问题,隶属值是可以自己主观调整的。

当然还有很多隶属函数,下篇文章我会仔细讲解隶属函数的分类。

(4)构建模糊规则(关键)

如果污泥含量被我们分为三类的话,那油污含量也可以分为三类,由此我们就可以根据经验制定规则。

论文研究3——模糊系统(1)_第5张图片

一共应该有3*3=9条规则,

(5)推断模糊输出

根据上面的模糊规则,就能推断出输出,比如当油脂为MG,污泥为MD时,时间就应该是M(5)。当油污含量为60%,油脂含量为70%,那么根据隶属函数的图,我们可以得到:

论文研究3——模糊系统(1)_第6张图片

污泥有两种情况,油脂也有两种,由此得到时间的四种结果,然后我们在时间的函数上寻找他们的交集就可以得到最终的总输出。之后最交集的图进行解模糊化就可以得到最终结果啦。(红色为交集后的结果)

论文研究3——模糊系统(1)_第7张图片

当然我们还能进行列矩阵进行计算,这里我放一个例子,感兴趣可以结合着看:模糊控制的基本原理

(6)解模糊化

解模糊化的方法有很多,常见的有三类解模糊器:重心解模糊器、中心平均解模糊器和最大值解模糊器。中心法是最好的方法了。下图是用的在最大值的平均值法。

论文研究3——模糊系统(1)_第8张图片

四、MATLAB代码例子

后续会更新如何在MATLAB中使用模糊逻辑工具箱。

clear;

close all;

%模糊控制器设计

a=newfis('fuzzy');        %创建新的模糊推理系统

%输入1

a=addvar(a,'input','e',[-3,3]);

%添加e的模糊语言变量

a=addmf(a,'input',1,'N','trimf',[-3,-3,0]);

%隶属度函数为三角形函数

a=addmf(a,'input',1,'Z','trimf',[-3,0,3]);

a=addmf(a,'input',1,'P','trimf',[0,3,3]);

%图1

figure(1);

plotmf(a,'input',1);

%输入2

a=addvar(a,'input','de',[-3,3]);

%添加de的模糊语言变量

a=addmf(a,'input',2,'N','trimf',[-3,-3,0]);

%隶属度函数为三角形函数

a=addmf(a,'input',2,'Z','trimf',[-3,0,3]);

a=addmf(a,'input',2,'P','trimf',[0,3,3]);

%图2

figure(2);

plotmf(a,'input',2);

%输出

a=addvar(a,'output','u',[-4,4]);

%添加u的模糊语言变量

a=addmf(a,'output',1,'NB','zmf',[-4,-1]);

%隶属度函数为Z函数

a=addmf(a,'output',1,'NS','trimf',[-4,-2,1]);

a=addmf(a,'output',1,'ZE','trimf',[-2,0,2]);

a=addmf(a,'output',1,'PS','trimf',[-1,2,4]);

a=addmf(a,'output',1,'PB','smf',[1,4]);  %隶属度函数为S函数

%图3

figure(3);

plotmf(a,'output',1);

%设置规则库

rulelist=[1 1 5 1 1;

          1 2 4 1 1;

          1 3 3 1 1;

          2 1 3 1 1;

          2 2 3 1 1;

          2 3 2 1 1;

          3 1 2 1 1;

          3 2 2 1 1;

          3 3 1 1 1];

a=addRule(a,rulelist);     %添加模糊规则函数

showrule(a)            %显示模糊规则函数

a1=setfis(a,'DefuzzMethod','mom');  %模糊化方法为平均最大隶属度函数法mom

writefis(a1,'fuzzy');   %保存模糊控制系统

a2=readfis('fuzzy');    %从磁盘读出保存的模糊系统

disp('fuzzy Controller table:e=[-3,+3],de=[-3,+3]'); %显示矩阵和数组内容

%上面代码的这些设置和规则我们可以自己在控制器中设置,而且更为简单,后面我会讲解

%推理

Ulist=zeros(7,7);    %创立一个7×7的全零矩阵

for i=1:7

    for j=1:7

        e(i)=-4+i;

        de(j)=-4+j;

        Ulist(i,j)=evalfis([e(i),de(j)],a2);    %完成模糊推理计算

    end

end

Ulist=ceil(Ulist)      %取整(向大数取)

%图4

figure(4);

plotfis(a2);

你可能感兴趣的:(人工智能)