模糊逻辑 | 模糊推理 | 模糊控制

注:本文为 “模糊逻辑” 相关合辑。
图片清晰度限于引文原状。
如有内容异常,请看原文。


初学模糊逻辑控制(Fuzzy Logic Control)

ziqian__ 已于 2022-08-19 20:30:25 修改

一、前言

模糊逻辑控制(Fuzzy Logic Control)是基于模糊数学发展来的一类控制方法,由扎德(Zadeh)于 1965 年提出。在传统的 PID 控制中,被控量误差通过精确的比例 — 积分 — 微分运算得到精确的控制动作,作用于被控对象,达到被控量追踪其参考值的效果。而在模糊逻辑控制中,从被控量误差得到控制动作不再依赖具体的数学表达式,而是通过人类模糊的经验获得,以控制电机转速为例:如果电机转速稍大于参考速度,那么我们就稍微减小电机速度,而如果电机转速远大于目标转速,那么我们就显著减小电机速度。这里得稍大于稍微减小远大于显著减小,都是一个比较抽象模糊的概念,而不是像比例 — 积分 — 微分运算那样精确。

模糊逻辑控制是一类更接近于人类思维习惯的控制策略,在生活中也有很多成功的应用,因此,有必要来了解一下其中蕴含的思想。

本文将以如下模糊控制系统为例,首先介绍模糊逻辑控制的一些基本概念,之后介绍一下其流程。

模糊控制系统示意图

二、基本概念

1. 模糊集合(Fuzzy set)

对于一个变量,如温度,除了用具体的温度数值来表示,我们平时生活中,还习惯用 “温度高”、“温度低” 等模糊词语表示,这里的 “温度高”、“温度低” 就是模糊集合。

以 “温度高” 这个模糊集合为例,假设论域Ω={0℃,10℃,20℃,30℃,40℃},即我们在 Ω 中讨论 “温度高” 这一概念,隶属度函数μ(a) 为:μ(0℃)=0,μ(10℃)=0,μ(20℃)=0.3,μ(30℃)=0.6,μ(40℃)=1,这里,隶属度函数代表论域中元素a 属于某模糊概念的可能性,显然,在 Ω 中,0℃显然不属于 “温度高” 这一模糊概念,所以 μ(0℃)=0。那么,“温度高” 对应的模糊集合 A={(0℃, 0),(10℃, 0),(20℃, 0.33),(30℃, 0.6),(40℃, 1) },为了方便,可以记 A=0/0℃+0/10℃+0.3/20℃+0.6/30℃+1/40℃。

从上面的例子来看,模糊集合 A 是元素 a 与其隶属度函数 μ(a) 的序偶集合,即:

模糊集合

对于本文前言所用的模糊控制系统,对于变量 “误差 e” 和其 “导数 ec”,可以将其模糊化为 {负大,负中,负小,零,正小,正中,正大},简记为 {NB,NM,NS,O,PS,PM,PB},其中,负大、负中等均代表一个模糊集合

2. 控制规则和模糊推理

在模糊控制中,我们需要根据实际生活中的经验去人为地设置一些控制规则。对于变量 “误差 e” 和 “控制量 u” 来说,两者论域均为 {1,2,3,4,5},且 “误差小” 这一模糊集合 A 的隶属度函数为 μ_es=(1.0,0.8,0.3,0.1,0.0),“控制量大” 这一模糊集合 B 的隶属度函数为 μ_ub=(0.0,0.2,0.4,0.7,1.0)。如果有类似这样的控制规则:“如果误差小,那么控制量大”,我们怎么根据两个隶属度函数推出两个模糊集合之间的模糊关系 R 呢?以下给出 R 的定义:

在这里插入图片描述

根据以上步骤,我们得到了模糊集合 A 到模糊集合 B 的模糊关系 R。但是,这个 R 的含义是什么,怎么去用它呢?这就需要介绍模糊推理了。

模糊推理就是用已有的规则,由输入近似推理输出。比如说,我们有规则 “变量 x 为 A,则变量 y 为 B”,且实际的变量 x 为 A‘,那么实际的变量 y’对应的 B‘是什么呢?这里就用到了模糊集合 A、B 之间的模糊关系 R,即:

在这里插入图片描述

仍以上述误差和控制量为例,我们已经求出了模糊集合 A 和 B 之间的关系 R,即式 (2)。如果已知实际变量 x’对应的模糊集合就是 A,则 μ_A’=(1.0,0.8,0.3,0.1,0.0),那么 μ_B’可以由下式求得:

在这里插入图片描述

我们仔细观察一下,这个 μ_B’恰好是 μ_ub,,也就是 B‘对应 “控制量大” 这一模糊集合 B。从模糊推理这个例子来看,上述定义的 R 确实能够反映 “如果误差小,那么控制量大” 这一控制规则。

上述输入只有一个误差 e,如果输入变为误差 e 和其导数 ec 后,模糊关系 R 是什么样的呢?假设误差 e 的一个模糊集合为 E,对应隶属度函数为 μ_E=(0.8,0.2),误差 ec 的一个模糊集合为 EC,对应隶属度函数为 μ_EC=(0.1,0.6,1.0),控制量 u 的模糊集合为 U,对应隶属度函数为 μ_U=(0.3,0.7,1.0)。则 R 的求解如下:

在这里插入图片描述

注意,这里算出 R1 后,再算 R 时用的是 R1’,将矩阵变成了向量。推理的时候,用:

在这里插入图片描述

值得注意的是,这里算出来 E’×EC’后,也需要将矩阵转换成向量。

3. 多个控制规则时的模糊关系 R

对于每一条控制规则 “如果…,那么…”,都有一个 Ri 与之对应。而一个模糊控制器中不止一个控制规则,最终的模糊关系 R 由下式得到:

在这里插入图片描述

4. 解模糊

我们根据模糊推理,得到的是控制变量的模糊集合 U,或者说是其隶属度函数 μ_U,如何根据隶属度函数得到具体的控制变量值 u 呢?这里需要用到解模糊。解模糊的方式有很多种,有最大隶属度法、重心法、系数加权平均法等,这里只介绍最大隶属度法和重心法。

4.1 最大隶属度法

对于控制变量 u,假设其论域为 {1,2,3,4,5},而求出来的模糊控制集合 U 的隶属度函数为(0.2,0.3,0.7,0.4,0.3)。那么,我们选取最大隶属度,即 0.7,对应的论域元素,即 3,作为控制变量 u 施加给执行器。

4.2 重心法

仍然假设对于控制变量 u,其论域为 {1,2,3,4,5},而求出来的模糊控制集合 U 的隶属度函数为(0.2,0.3,0.7,0.4,0.3)。则 u=(0.21+0.32+0.73+0.44+0.3*5)/(0.2+0.3+0.7+0.4+0.3)=3.16。用公式表示为:

在这里插入图片描述

式 (7) 针对离散论域,式 (8) 针对连续论域。

三、利用 Matlab Fuzzy 工具箱实际模糊控制器

Matlab 中有自带的 Fuzzy 控制器设计工具,也可以很方便地在 Simulink 调用。本节以一个简单的问题为例,说明利用 Matlab 中的 Fuzzy 工具箱来控制系统的大体流程。

1. 控制问题

对于如下系统,设计一个模糊控制器,使其输出能够跟随输入。

在这里插入图片描述

2. 利用 Fuzzy 工具箱设计 Fuzzy 控制器

在 Matlab 的命令行窗口中输入 fuzzy,打开 Fuzzy 工具箱,如下图所示。

在这里插入图片描述

2.1 初识模糊控制器设计界面

从图中可以看出,模糊控制器设计界面分为 4 个部分:

第 1 部分是模糊控制器整体,包含输入,所设计控制器,及输出。值得注意的是,输入输出数量是可以改变的,具体通过菜单栏 >>Edit>>Add Variable 实现。

第 2 部分为模糊控制器类型,分为 mamdani 和 sugeno 型。前者是输出是模糊量,后者输出是精确量。两者区别可参考 Mamdani 模糊系统Sugeno 模糊模型Mamdani and Sugeno Fuzzy Inference Systems。本文中用的是 mamdani 型。

第 3 部分为模糊推理及解模糊相关设置。

以规则 “如果 input1 是 A并且 / 或input2 是 B,那么output 是 C” 为例。

该规则中,并且就是 3 中的 and,就是 3 中的 or,选择不同的 and 和 or 操作,结果也会不同,一般情况 and 设置为 min 操作,or 设置为 max 操作即可。

implication指的是规则中的那么,是根据已知条件推理的过程,一般选为 min。

Aggregation是对多个控制规则得到的输出进行整合,得到最终的模糊输出。

Defuzzification指的是解模糊过程,将得到的模糊输出清晰化,是其能够直接用于系统控制。

关于第三部分各参数含义,以及模糊控制器工作过程,具体参考 Matlab 帮助说明 Fuzzy Inference Process,里面详细生动地给出了模糊控制器工作过程,对理解模糊控制很有帮助。

第 4 部分就是 1 中当前选中的内容一些信息。比如图中所展示的,1 中当前选中了 input1,则 input1 相关信息就在 4 中展示出来。

2.2 输入 / 输出模糊变量隶属度函数设置

双击 1 中的 input1/output1,可以进入相应的隶属度函数设置界面,如下图

在这里插入图片描述

第 1 部分展示了所有模糊变量的隶属度函数总体形状。

第 2 部分可以改变输入范围(Range),以及显示范围,即第一部分坐标轴横坐标(Display Range)。

第 3 部分相当重要,通过该部分,可以设置模糊变量名称(Name)及相应隶属度函数形状(Type,可以是三角形、梯形等),也可以通过改变 Params,来改变隶属度函数宽窄。

如果想要增加模糊变量个数,可以通过菜单栏 >>Edit>>Add MFs 实现。

至此,我们完成了对输入输出模糊变量隶属度函数的设置,接下来,需要我们设置规则,实现通过已知模糊输入,得到模糊输出。

2.3 模糊规则

通过菜单栏 >>Edit>>Rules,可以实现模糊规则的添加,如下图

在这里插入图片描述

第 1 部分为已经制定好的模糊规则。

第 2 部分为输出条件之间关系,并(and)/ 或(or)。

第 3 部分为该规则的权重,权重越大,该条规则优先级越大。

第 4 部分为删除 / 增加 / 改变规则。

2.4 保存所构建的模糊控制器

至此,我们设计了一个模糊控制器,通过菜单栏 >>File>>Export>>To workspace/file。前者将设计的模糊控制器导出到 workspace 中,后者将模糊控制器保存在电脑上。注意,仅保存到 workspace 中的模糊控制器在 matlab 关闭后随之消失。

3. 在 Simulink 中调用相关模糊控制器

在 Simulink 中搭建 1 中所例举系统并使用模糊控制器控制,如下图

在这里插入图片描述

第 1 部分为输入量限制,将输入量控制在输入论域范围。

第 2 部分为所构建的模糊控制器,先在 Simulink 中加入 Fuzzy Logic Controller 模块,双击将其中名称改为刚才设计的控制器名称即可。注意,运行仿真程序前,最好将刚才设计的模糊控制器导入到 workspace,这样 simulink 调用时不会出错。

第 3 部分为 1 中被控系统。

四、写在最后

至此,介绍了模糊控制的一些概念,利用 matlab 设计模糊控制并将其用于 simulink 中系统的控制。

希望对大家有所帮助。


一文搞懂什么是模糊逻辑【附应用举例】

报告,今天也有好好学习 于 2020-10-21 00:56:45 发布

模糊逻辑

著名的 “沙堆问题”

“从一个沙堆里拿走一粒沙子,这还是一个沙堆吗?”

如果有人正正经经地问你这个问题,那你毫无疑问是会回答 “是”。

但如果每拿一粒就问你这个问题,问题的答案会一直都是 “是” 吗?

如果每次都是拿走一粒,始终还是一个沙堆的话,那么到最后一粒沙都没有的沙堆也能成为沙堆咯。

这显然是违背我们认知的,那么这里的问题出在哪呢?

这里的问题就在于 “沙堆” 这个概念是模糊的,没有一个清晰的界限将 “沙堆” 与 “非沙堆” 分开。我们没有办法明确指出,在这个不断拿走沙子的过程中,什么时候 “沙堆” 不再是 “沙堆”。

与 “沙堆” 相似的模糊概念还有 “年轻人”、“小个子”、“大房子” 等。这种在生活中常见的模糊概念,在用传统数学方法处理时,往往会出现问题。

那么,如果尝试消除这些概念的模糊性,会怎样呢?

如果规定沙堆只能由 10000 粒以上的沙子组成,“沙堆” 这个概念的模糊性就消除了。10000 粒沙子组成的是沙堆,9999 粒沙子组成的不是沙堆:这在数学上没有任何问题。

然而,仅仅取走微不足道的一粒沙子,就将 “沙堆” 变为 “非沙堆”,这又不符合我们日常生活中的思维习惯。

在企图用数学处理生活中的问题时,精确的数学语言和模糊的思维习惯产生了矛盾。

传统的数学方法常常试图进行精确定义,而人关于真实世界中事物的概念往往是模糊的,没有精确的界限和定义。在处理一些问题时,精确性和有效性形成了矛盾,诉诸精确性的传统数学方法变得无效,而具有模糊性的人类思维却能轻易解决。例如人脸识别问题。

所以,模糊逻辑就是用来解决这一矛盾的工具之一。

1.1 模糊逻辑简介

经典二值逻辑中,通常以 0 表示 “假” 以 1 表示 “真”,一个命题非真即假 。

在模糊逻辑中,一个命题不再非真即假,它可以被认为是 “部分的真” 。

模糊逻辑取消二值之间非此即彼的对立,用隶属度表示二值间的过度状态 。

打个比方,身高一米 178 是高个子。这句话无论你认为是真还是否,其实都是不准确的。

然后结合上文我们提到的隶属度,可以认为身高 178 对 “高个子” 的隶属度为 0.7。

下文放一张模糊理论的发展历程图。

在这里插入图片描述

1.2 模糊集合与模糊逻辑

在介绍模糊集合之间,我们先来回忆一下我们之前学习过的古典集合。

古典集合:对于任意一个集合 A,论域中的任何一个元素 x,或者属于 A,或者不属于 A。集合 A 也可以由其特征函数定义:

f A ( x ) = { 1 ,   x ∈ A 0 ,   x ∉ A \Large \mathop{f}_{A}(x)=\left\{ \begin{matrix} 1,\text{ }x\in A \\ 0,\text{ }x\notin A \\ \end{matrix} \right. fA(x)= 1, xA0, x/A

而模糊集合呢,则是论域上的元素可以 “部分地属于” 集合 A 。一个元素属于集合 A 的程度称为隶属度,模糊集合可用隶属度函数定义。

模糊集合的完整定义如下:

设存在一个普通集合 U,U 到 [0,1] 区间的任一映射 f 都可以确定 U 的一个模糊子集,称为 U 上的模糊集合 A。其中映射 f 叫做模糊集的隶属度函数,对于 U 上一个元素 u, f (u) 叫做 u 对于模糊集的隶属度,也可写作 A (u) 。

看不懂这句话就多看几遍,哈哈。然后还可以结合下文的内容,增进理解。

1.2.1 模糊集合与隶属度函数

隶属度表示程度,它的值越大,表明 u 属于 A 的程度越高,反之则表明 u 属于 A 的程度越低 。

古典集合可以看作一种退化的模糊集合,即论域中不属于该古典集合的元素隶属度为 0,其余元素隶属度为 1。

模糊集合的表示法

一共有两种表示方法,分别如下所示。

(1)Zadeh 表示法

当论域 U 为离散集合时,一个模糊集合可以表示为:

A ∼   = ∑ u ∈ U μ A ∼   ( u ) u \Large \underset{\sim}{\mathop{A}}\,=\sum\limits_{u\in U}{\frac{\mathop{\mu }_{\underset{\sim }{\mathop{A}}\,}(u)}{u}} A=uUuμA(u)

当论域 U 为连续集合时,一个模糊集合可以表示为:

A ∼   = ∫ u μ A ∼   ( u ) u \Large \underset{\sim }{\mathop{A}}\,=\int\limits_{u}{\frac{\mathop{\mu }_{\underset{\sim }{\mathop{A}}\,}(u)}{u}} A=uuμA(u)

需要注意的是,这里仅仅是借用了求和与积分的符号,并不表示求和与积分

(2)序对表示法

对于一个模糊集合来说,如果给出了论域上所有的元素以及其对应的隶属度,就等于表示出了该集合。所以,序对表示法出现了。

A ∼   = { ( u , μ A ( u ) ) ∣ u ∈ U } \Large \underset{\sim }{\mathop{A}}\,=\{(u,\mathop{\mu }_{A}(u))|u\in U\} A={(u,μA(u))uU}

模糊集合表示法示例

在这里插入图片描述

在这里插入图片描述

简单总结一下就是,模糊集合可以让很多情况的分类不显得那么绝对,而显得相对。

至于上文提到的隶属度函数,显而易见的是,隶属度函数十分重要,而不同问题对应的隶属度函数也不同,并且往往需要专家提供专业知识。

1.2.2 模糊集合上的运算定律

没啥好说的,基本同古典集合的运算定律一致。除了在古典集合中成立的矛盾律和排中律在模糊集合上不成立外。

定义:当且仅当对论域上任意元素 u,都有

μ A ∼   ( u ) ≤ μ B ∼   ( u ) \large \mathop{\mu }_{\underset{\sim }{\mathop{A}}\,}(u)\le \mathop{\mu }_{\underset{\sim }{\mathop{B}}\,}(u) μA(u)μB(u)

则称模糊集合 A 是模糊集合 B 的子集。

在这里插入图片描述

1.2.3 模糊逻辑

经典逻辑是二值逻辑,其中一个变元只有 “真” 和 “假”(1 和 0)两种取值,其间不存在任何第三值。

模糊逻辑也属于一种多值逻辑,在模糊逻辑中,变元的值可以是 [0,1] 区间上的任意实数。

设 P、Q 为两个变元,模糊逻辑的基本运算定义如下:

在这里插入图片描述

1.2.4 模糊关系及其合成运算

模糊关系也是模糊集合上的一种映射。像经典关系一样,模糊关系上也定义了映射特有的合成运算。

设 X,Y,Z 为论域,R 是 X×Y 上的模糊关系,S 是 Y×Z 上的模糊关系,T 是 R 到 S 的合成,记为 T=R◦S,其隶属度函数定义如下:

μ R ⋅ S ( x , z ) = V y ∈ Y   ( μ R ( x , y ) × μ S ( y , z ) \large \mathop{\mu }_{R\cdot S}(x,z)=\underset{y\in Y}{\mathop{V}}\,(\mathop{\mu }_{R}(x,y)\times \mathop{\mu }_{S}(y,z) μRS(x,z)=yYV(μR(x,y)×μS(y,z)

在这里插入图片描述

这里稍微提一句,3.33 这个公式后面会经常用到。

1.3 模糊推理

模糊推理可以认为是一种不精确的推理,是通过模糊规则将给定输入转化为输出的过程。

模糊推理是将输入的模糊集通过一定运算对应到特定输出模糊集的计算过程。模糊规则是在进行模糊推理时依赖的规则,通常可以用自然语言表述。

1.3.1 模糊规则、语言变量和语言算子

啥叫模糊规则?举个例子:“如果天气比较热,那么教室就应该开空调。”

但如果想具体了解模糊规则,那首先得了解一下几个概念。

语言变量:对应于自然语言中的一个词或者一个短语、句子。它的取值就是模糊集合。

在这里插入图片描述

语言算子:用于对模糊集进行修饰。作用类似于在自然语言常常的 “可能”、“大约”、“比较”、“很” 等,表示可能性、近似性和程度。

如果 - 则” 规则:模糊规则的一般形式。基础的 “如果 - 则” 规则表述如下:

If x is A then y is B(若 x 是 A,那么 y 是 B)

其中,设 A 的论域是 U,B 的论域是 V,A 与 B 均是语言变量的具体取值,即模糊集,x 与 y 是变量名。规则中的 “If x is A ” 又称前件,“y is B” 又称后件。“如果张三比较胖则运动量比较大” 中,x 就是 “张三”,y 为 “运动量”,“比较胖” 和 “比较大” 分别为 x 和 y 的取值之一。

模糊集 A 与 B 之间的关系是 A×B 上的模糊蕴含关系 ,记作 A→ B,其定义有多种,常见的两种是最小运算 (Mamdani) 和积运算 (Larsen)。

大家应该都听说过三段式推理吧,即:猫是人类的主人,小白是猫;结论:小白是人类的主人。

下面看下一个比较有趣的东西:

大前提(规则):若 x 是 A,那么 y 是 B。

小前提(输入):x 是 C。

结论(输出):y 是 D。

???

如果你没接触模糊推理,那肯定是???这种反应。现在我们来具体解释一下。

即:在模糊推理中,小前提没有必要与大前提的前件一致(A 与 C 不必完全一致),结论没有必要与大前提的后件一致(B 与 D 不必完全一致)。

关于模糊蕴含的推理方式有两种:肯定式的推理和否定式的推理。下文将主要介绍肯定式推理。

在这里插入图片描述

在这里插入图片描述

上式中的合成操作有不同的定义方法,最常用的就是最大-最小合成。

如果看到这不是很懂怎么操作的话,下面阔以看一下这个实例。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

稍微解释一下题中 B’1 的求解,这里就是用到了最大 — 最小合成。即:

R ∘ S ↔ μ R ⋅ S ( x , z ) = V y ∈ Y   ( min ⁡ ( μ R ( x , y ) , μ S ( y , z ) ) ) \large R\circ S\leftrightarrow \mathop{\mu }_{R\cdot S}(x,z)=\underset{y\in Y}{\mathop{V}}\,(\min (\mathop{\mu }_{R}(x,y),\mathop{\mu }_{S}(y,z))) RSμRS(x,z)=yYV(min(μR(x,y),μS(y,z)))

1.4 模糊计算的流程

生活中经常能遇到这样的情况:要根据几个变量的输入,以及一组自然语言表述的经验规则,来决定输出。 这就是一个模糊计算的过程。

如现实生活中,我们在夏天往往会根据温度和湿度,决定开空调的温度。

模糊计算的过程可以分为四个模块:

模糊规则库、模糊化、推理方法和去模糊化

模糊规则库是专家提供的模糊规则。模糊化是根据隶属度函数从具体的输入得到对模糊集隶属度的过程。推理方法是从模糊规则和输入对相关模糊集的隶属度得到模糊结论的方法。去模糊化就是将模糊结论转化为具体的、精确的输出的过程。

在这里插入图片描述

最后来看下实例。

在这里插入图片描述

在这里插入图片描述

计算输出过程如下:

(1) 输入变量模糊化并激活相应规则

输入变量模糊化,得到隶属度如表:

在这里插入图片描述

由于温度对 “低” 的隶属度为 0,而湿度对 “大” 的隶属度为 0,故控制规则表内条件包含低温度和大湿度的规则不被激活。而有如下 4 条规则被激活:

a. 若温度为高且湿度为小,则运转时间为长。

b. 若温度为中且湿度为中,则运转时间为中。

c. 若温度为中且湿度为小,则运转时间为长。

d. 若温度为高且湿度为中,则运转时间为中。

(2) 计算模糊控制规则的强度

这一步骤属于 “推理方法” 模块。采用不同的推理方法,(2)的具体步骤也不相同。img

由于规则条件中连接两个条件的是 “且”,故在此选用取最小值法确定四条规则的强度:

规则 a:温度对 “高” 隶属度为 0.1,湿度对 “小” 隶属度为 0.075,min (0.1, 0.075)=0.075

规则 b:温度对 “中” 隶属度为 0.53,湿度对 “中” 隶属度为 0.467,min (0.53, 0.467)=0.467

规则 c:温度对 “中” 隶属度为 0.53,湿度对 “小” 隶属度为 0.075,min (0.53,0.075)=0.075

规则 d:温度对 “高” 隶属度为 0.1,湿度对 “中” 隶属度为 0.467,min (0.1,0.467)=0.1

(3)确定模糊输出并去模糊化

这一步骤属于 “推理方法” 和 “去模糊化” 模块。采用不同的推理方法,(3)的具体步骤也不相同。

规则 a 和规则 c 的结论是运转时间为长,规则 b 和规则 d 的结论是运转时间为中。故运转时间对 “长” 的隶属度是规则 a 和规则 c 强度较大者 0.075,运转时间对 “中” 的隶属度是规则 b 和规则 d 强度较大者 0.467。

进行去模糊化,最终的输出为:

u = 0.075 × 1000 + 0.467 × 500 0.075 + 0.467 = 569.2 ( s ) \displaystyle u=\frac{0.075\times 1000+0.467\times 500}{0.075+0.467}=569.2(s) u=0.075+0.4670.075×1000+0.467×500=569.2(s)

总结一下,其实我们不难发现,上述实现过程非常简单。尽管现实生活中的实例要更复杂得多,但是只要我们掌握了模糊逻辑的思想,一切都会慢慢变得简单的!

最后挂一下书中的算法思想详解:

在这里插入图片描述

1.5 模糊逻辑的应用

模糊计算适用于:

(1)复杂且没有完整数学模型的非线性问题

可在不知晓具体模型的情况下利用经验规则求解。

(2)与其它智能算法结合实现优势互补

提供了将人类在识别、决策、理解等方面的模糊性引入机器及其控制的途径 。

模糊系统与神经网络

模糊系统适合于描述自然语言与人类思维中的模糊性,而神经网络具有学习、联想、记忆的能力。模糊系统与神经网络结合,实现了优势互补。

模糊逻辑与进化计算

(1)在进化计算算法运行时使用模糊控制来调整群智能算法的参数。

(2)在模糊系统中用进化计算算法来产生、挑选和优化模糊控制规则与隶属度函数。

本文参考了很多张军老师《计算智能》的第三章_知识。


模糊逻辑学习 – 模糊推理过程

zsffuture 于 2020-06-30 10:24:47 发布

这里推荐搭建先看这个 ppt,再看后面 matlab 的实现,这样你会很清晰,为了赚点积分,这里设置一下积分,抱歉大家了。

详细讲解模糊逻辑的 ppt

模糊推理是使用模糊逻辑制定从给定输入到输出的映射的过程。然后,映射提供了基础,从中可以做出决策或识别出模式。模糊推理的过程涉及隶属函数,逻辑运算和 If-Then 规则中描述的所有部分。

本节介绍了模糊推理过程,并使用双输入,单输出,三规则小费问题的例子基本小费的问题,你在更详细的介绍看到的。下图显示了此示例的基本结构:

img

信息从左到右,从两个输入流到一个输出。规则的并行性质是模糊逻辑系统更重要的方面之一。逻辑不是从基于断点的模式之间进行尖锐的切换,而是从系统行为受一条规则或另一条规则支配的区域平稳地流动。

模糊推理过程包括五个部分:

  • 模糊化输入变量

  • 模糊算子(AND 或 OR)在先行词中的应用

  • 从前到后的含义

  • 跨规则汇总结果

  • 模糊化

甲 模糊推理图显示模糊推理过程的所有部分 - 从模糊化通过去模糊化。

步骤 1. 模糊化输入

第一步是获取输入,并通过隶属函数确定输入所属的适当模糊集的程度。在 Fuzzy Logic Toolbox™软件中,输入始终是一个清晰的数值,限于输入变量的论述范围(在这种情况下为 0 到 10 之间的间隔),而输出则是合格语言集中的模糊隶属度(总是介于 0 和 1 之间的间隔)。输入的模糊化等于表查找或功能评估。

该示例基于三个规则,每个规则都取决于将输入分解为许多不同的模糊语言集:服务差,服务好,食物腐烂,食物可口,等等。在评估规则之前,必须根据这些语言集中的每一个对输入进行模糊处理。例如,食物在多大程度上真正美味?下图显示了假设餐厅的食物(等级从 0 到 10)通过语言的隶属度,其作为语言变量的美味程度。在这种情况下,我们将食物的等级评定为 8,根据您对美味的图形化定义,美味成员关系函数的 µ = 0.7。

img

以这种方式,每个输入都模糊了规则要求的所有合格成员资格函数。

步骤 2. 应用模糊运算符

在对输入进行模糊处理之后,您将知道每个规则对前提的每个部分的满意程度。如果给定规则的前提有一个以上的部分,则应用模糊算子获得一个数字,该数字表示该规则的前提的结果。然后将此数字应用于输出功能。模糊运算符的输入是来自模糊输入变量的两个或多个隶属度值。输出是单个真值。

如 “逻辑运算” 部分所述,可以为 AND 运算或 OR 运算填充任意数量的定义明确的方法。在工具箱中,支持两种内置的 AND 方法:min(最小)和 prod(乘积)。还支持两种内置的 OR 方法:max(最大)和概率 OR 方法 probor

probor ( a ,   b ) = a + b − a b \text {probor}(a,\,b) = a + b - ab probor(a,b)=a+bab

除了这些内置方法之外,您还可以通过编写任何函数并将其设置为选择的方法来为 AND 和 OR 创建自己的方法。

下图显示了工作中的 OR 运算符 max,它评估了小费计算的规则 3 的前提。前项的两个不同部分(服务非常好,食物也很美味)的模糊隶属度值分别为 0.0 和 0.7。模糊或运算符只需选择两个值中的最大值 0.7,即可完成规则 3 的模糊运算。概率 OR 方法仍将得到 0.7。

img

步骤 3. 应用蕴涵方法

在应用隐含方法之前,必须确定规则的权重。每个规则都有一个 权重(0 到 1 之间的一个数字),该权重将应用于前一个给定的数字。通常,此权重为 1(如本例所示),因此对暗示过程完全没有影响。您可能会不时地想通过将一个规则的权重值更改为 1 而不是其他来加权。

在为每个规则分配了适当的权重之后,便会实施隐含方法。结果是由隶属度函数表示的模糊集,该模糊集适当地加权了归因于该模糊集的语言特征。结果使用与该前提关联的功能(单个数字)进行整形。隐含过程的输入是一个由先决条件给出的数字,而输出是一个模糊集。隐含实现每个规则。支持两种内置方法,它们与 AND 方法使用的功能相同:min(最小)将截断输出模糊集,而 prod(乘积)将缩放输出模糊集。

img

步骤 4. 汇总所有输出

由于决策基于对 FIS 中所有规则的测试,因此必须以某种方式组合规则才能做出决策。聚合是将代表每个规则的输出的模糊集组合为单个模糊集的过程。对于每个输出变量,聚合仅发生一次,就在第五个也是最后一步,即去模糊化之前。聚合过程的输入是隐含过程为每个规则返回的截断输出函数的列表。聚合过程的输出是每个输出变量的一个模糊集。

只要聚合方法是可交换的(始终应该如此),那么执行规则的顺序就不重要了。支持三种内置方法:

  • max (最大值)

  • probor (概率 OR)

  • sum (仅是每个规则的输出集的总和)

在下图中,所有这三个规则已放在一起,以显示每个规则的输出如何组合或聚合到单个模糊集中,该模糊集的隶属函数为每个输出(提示)值分配权重。

img

第 5 步 。

输入解模糊处理是一个模糊集(合计输出模糊集),并且输出是单个数字。尽管模糊有助于中间步骤中的规则评估,但每个变量的最终期望输出通常为单个数字。但是,模糊集的集合包含一系列输出值,因此必须对其进行去模糊处理,以便从该集中解析单个输出值。

支持五种内置的反模糊化方法:质心,平分线,最大值的中间值(输出集最大值的平均值),最大值的最大值和最小值的最大值。也许最流行的去模糊方法是质心计算,它返回曲线下方的区域中心,如下所示:

img

虽然总输出模糊集的覆盖范围是从 0%到 30%,但去模糊值在 5%到 25%之间。这些限制分别对应于 cheapgenerous 隶属函数的质心。

模糊推理图

模糊推理图是本节到目前为止介绍的所有较小图的合成。它同时显示您检查过的模糊推理过程的所有部分。信息流经模糊推理图,如下图所示。

img

在此图中,流程从左下方的输入开始向上,然后跨每一行或每个规则,然后向下的规则输出在右下方完成。从语言变量的模糊化一直到总输出的去模糊化,这种紧凑的流程可以立即显示所有内容。

下图显示了实际的全尺寸模糊推理图。在模糊推理图中有很多可以看的东西,但是当您习惯了它之后,就可以很快地学习到很多关于系统的知识。例如,从带有这些特定输入的图表中,您可以轻松地看到,蕴含方法是使用 最小 功能。该 最大值 函数被用于模糊或操作。规则 3(前面显示的图中最底部的一行)对输出的影响最大。等等。规则浏览器中所描述 的规则浏览器 是一个 MATLAB ® 模糊推理图的实施。

img


在 MATLAB 中使用模糊编辑器实现模糊控制器的设计详解

fpga 和 matlab 于 2022-11-02 21:14:41 发布

一、理论基础

所谓模糊控制技术是指通过模糊集合和模糊逻辑等原理,并且和经典的控制理论相结合,并通过模拟人类的思考方式,对一些难以建模的控制对象进行控制的一种控制策略。模糊控制器的模糊规则的制定是建立在专家经验的基础之上的,即通过具有丰富经验的专家对控制对象进行分析,并基于个人经验建立一套合理的控制机制,通过参数化的方式将这些经验用具体的数学参数和公式进行建模,从而得到一个符合实际情况的控制。这种控制策略通过使用专家经验知识,将专家的经验转换为控制方式,对过程复杂、模型不精确的控制系统进行有效的控制。这种将个人的经验转换为具体的数学公式,并通过模糊数学理论将其转换为模糊控制的过程,就是模糊控制理论。通常情况下,模糊控制器的基本结构如图所示。
img

从图的模糊控制器的基本结构图可知,模糊控制器的核心部分包括控制变量计算,模糊量化处理,模糊控制规则,模糊决策以及逆模糊化处理五个模块。整个控制系统通过计算机编程来实现,将模糊控制器的反馈输出信号和参考输入信号的误差作为整个模糊控制器的输入控制信号,将误差信号转换为模糊量,并通过模糊语言来表示,从而得到的模糊语言集合的一个子集 e,然后由子集 e 和模糊控制规则 R,然后根据模糊推理的合成规则进行模糊决策,得到模糊控制量 u,u 的关系。

一个标准的模糊控制系统和传统的控制方法相比有如下几个优点:首先,模糊控制器具有较为广泛的应用范围,这种特性比较适合应用在非线性系统中;其次,模糊控制器的控制过程独立于控制对象,且对于一些较为复杂的难以建模的控制对象,可以通过模糊控制器进行有效的控制。模糊控制器具有较好的鲁棒性,对被控对象的特征变化不敏感,而且模糊控制器的设计参数可随时根据需要进行调整。模糊控制以计算机为主,模糊控制的数学计算都由计算机来完成,得到的结果精确,表现出很强的智能性,操作简单易实现。

模糊控制器中的模糊控制规则表格的制定是通过模糊条件语句来设计的,所以模糊控制器本质上也是一种模糊语言控制器,即一个标准的模糊化控制器包括模糊接口、知识库和推理以及解模糊接口。

对于一个模糊输入变量,模糊子集的划分主要有三种类型:

  • 五个模糊集合的控制变量,即负大 (Negative big,NB),负小 (Negative small,NS),零 (Zero,ZO),正小 (Positive small,PS),正大 (Positive big,PB);
  • 六个模糊集合的控制变量,即负大 (Negative big,NB),负中 (Negative middle,NM),负小 (Negative small,NS),零 (Zero,ZO),正小 (Positive small,PS),正中 (Positive middle,PM),正大 (Positive big,PB);
  • 七个模糊集合的控制变量,即负大 (Negative big,NB),负中 (Negative middle,NM),负小 (Negative small,NS),零负 (Negative Zero,NZ),零正 (Positive Zero,NZ),正小 (Positive small,PS),正中 (Positive middle,PM),正大 (Positive big,PB)。

根据控制器控制精度的不同需求,选择不同划分精度的模糊输入变量。

首先对于模糊控制库,其结构上由一个规则库和一个数据库两个部分构成。其中规则库中保存的是模糊规则,模糊规则是一种基于专家经验知识,并根据某种推理获得的模糊语言表现;而数据库中保存的是输入、输出的模糊子集的隶属函数值。

其次对于模糊控制器的推理过程,其主要通过模糊控制器所输入的模糊变量,通过模糊规则来实现模糊推理来获得模糊控制输出量。此输出量是一种模糊矢量信号,需要通过模糊清晰化处理获得精确的控制输出作为最终的控制量,即解模糊过程。

在一个完整的模糊控制系统中,通过根据输入控制器的个数,将模糊控制器划分为一维模糊控制器,二维模糊控制器以及多维模糊控制器,即通过模糊控制器的输入个数定位模糊控制器的维度,图 2 所示的是不同输入格式的模糊控制器结构图。
img

模糊控制器的语言等级,从负最大到正最大依次为:NB 负大、NM 负中、NS 负小、ZO 零、PS 正小、PM 正中、PB 正大。选取模糊语言输入变量 EEc 和输出变量的模糊值域分别为 {NB,NM,NS,ZO,PS,PM,PB}。

在 MATLAB 中,使用模糊函数编辑工具设计上述讲述的模糊模糊集和隶属函数。
img img

在图的模糊控制器工具箱设计界面,根据模糊隶属函数的选择原则,系统中的 NB 和 PB 采用正态型分布;NM、NS、ZO、PS、PM 则采用三角形分布,模糊控制器输入输出参数的隶属度函数图。
img

图 4 模糊控制器输入输出参数隶属度函数

通过上面的设置,可以获得如下结构的模糊控制器:

img

根据模糊规则的性质,并由模糊语言的等级可以得知,模糊控制规则有 49 条模糊条件语句。故本文所建立的模糊规则表如下所示。

Kp 规则控制表

KpEc
ENBNMNSZOPSPMPB
NBPBPBPMPMPSZOZO
NMPBPBPMPSPSZONS
NSPMPMPSPSZONSNS
ZOPMPMPSZONSNSNM
PSPSPSZONSNSNMNM
PMPSZONSNSNMNMNB
PBZOZONSNMNMNBNB

Ki 规则控制表

KpEc
ENBNMNSZOPSPMPB
NBNBNBNMNMNSZOZO
NMNBNBNMNSNSZOZO
NSNBNMNSNSZOPSPS
ZONMNMNSZOPSPMPM
PSNMNSZOPSPSPBPB
PMZOZOPSPSPMPBPB
PBZOZOPSPMPMPBPB

上述模糊规则,其相应的判决条件如下所示:

  • if (E is NB) and (Ec is NB) then (Kp is PB) and (Ki is NB)
  • if (E is NM) and (Ec is NB) then (Kp is PB) and (Ki is NB)
  • if (E is NS) and (Ec is NB) then (Kp is PM) and (Ki is NB)
  • if (E is ZO) and (Ec is NB) then (Kp is PM) and (Ki is NM)
  • if (E is PS) and (Ec is NB) then (Kp is PS) and (Ki is NM)
  • if (E is PM) and (Ec is NB) then (Kp is PS) and (Ki is ZO)
  • if (E is PB) and (Ec is NB) then (Kp is ZO) and (Ki is ZO)
  • if (E is NB) and (Ec is NM) then (Kp is PB) and (Ki is NB)
  • if (E is NM) and (Ec is NM) then (Kp is PB) and (Ki is NB)
  • if (E is NS) and (Ec is NM) then (Kp is PM) and (Ki is NM)
  • if (E is ZO) and (Ec is NM) then (Kp is PM) and (Ki is NM)
  • if (E is PS) and (Ec is NM) then (Kp is PS) and (Ki is NS)
  • if (E is PM) and (Ec is NM) then (Kp is ZO) and (Ki is ZO)
  • if (E is PB) and (Ec is NM) then (Kp is ZO) and (Ki is ZO)

反模糊化处理运算主要是根据模糊推理模块所产生的模糊集求出控制器的输出。目前为止,较为常用的反模糊化处理算法有最大隶属度法、加权平均法、隶属度限幅元素平均法以及重心法等。本文将使用重心法来进行反模糊化处理运算,该方法通过选择模糊隶属函数曲线与横坐标围成面积的重心为代表点输出,其数学计算公式为:img

u = ∫ x μ N ( x ) d x ∫ μ N ( x ) d x \Large u=\frac{\int{x\mathop{\mu }_{N}\left( x \right)dx}}{\int{\mathop{\mu }_{N}\left( x \right)dx}} u=μN(x)dxxμN(x)dx

最后,对于一个二维输入的模糊控制器,通过一个三维坐标图绘制出模糊控制的输出与输入之间的关系。该三维坐标图的纵坐标表示模糊控制器输出控制量的曲面。曲面用简洁的形式表现出模糊控制器的所有信息,采用 MATLAB 模糊控制工具箱绘制本文所设计的模糊控制器的控制面如图所示。
img

二、核心程序

img

我们的模糊规则 fis 文件如下:

[System]
Name = 'files2'
Type = 'mamdani'
Version = 2.0
NumInputs = 2
NumOutputs = 2
NumRules = 49
AndMethod = 'min'
OrMethod = 'max'
ImpMethod = 'min'
AggMethod = 'max'
DefuzzMethod = 'centroid'

[Input1]
Name = 'E'
Range = [-6 6]
NumMFs = 7
MF1 = 'NB':'gauss2mf',[0.5182 -6.39 0.5182 -5.61]
MF2 = 'NM':'trimf',[-6 -4 -2]
MF3 = 'NS':'trimf',[-4 -2 0]
MF4 = 'ZO':'trimf',[-2 0 2]
MF5 = 'PS':'trimf',[0 2 4]
MF6 = 'PM':'trimf',[2 4 6]
MF7 = 'PB':'gauss2mf',[0.5182 5.61 0.5182 6.39]

[Input2]
Name = 'Ec'
Range = [-6 6]
NumMFs = 7
MF1 = 'NB':'gauss2mf',[0.5182 -6.39 0.5182 -5.61]
MF2 = 'NM':'trimf',[-6 -4 -2]
MF3 = 'NS':'trimf',[-4 -2 0]
MF4 = 'ZO':'trimf',[-2 0 2]
MF5 = 'PS':'trimf',[0 2 4]
MF6 = 'PM':'trimf',[2 4 6]
MF7 = 'PB':'gauss2mf',[0.5182 5.61 0.5182 6.39]

[Output1]
Name = 'Kp'
Range = [-6 6]
NumMFs = 7
MF1 = 'NB':'trimf',[-8 -6 -4]
MF2 = 'NM':'trimf',[-6 -4 -2]
MF3 = 'NS':'trimf',[-4 -2 0]
MF4 = 'ZO':'trimf',[-2 0 2]
MF5 = 'PS':'trimf',[0 2 4]
MF6 = 'PM':'trimf',[2 4 6]
MF7 = 'PB':'trimf',[4 6 8]

[Output2]
Name = 'Ki'
Range = [-6 6]
NumMFs = 7
MF1 = 'NB':'trimf',[-8 -6 -4]
MF2 = 'NM':'trimf',[-6 -4 -2]
MF3 = 'NS':'trimf',[-4 -2 1.776e-015]
MF4 = 'ZO':'trimf',[-2 0 2]
MF5 = 'PS':'trimf',[1.776e-015 2 4]
MF6 = 'PM':'trimf',[2 4 6]
MF7 = 'PB':'trimf',[4 6 8]

[Rules]
1 1, 7 1 (1) : 1
2 1, 7 1 (1) : 1
3 1, 6 1 (1) : 1
4 1, 6 2 (1) : 1
5 1, 5 2 (1) : 1
6 1, 5 4 (1) : 1
7 1, 4 4 (1) : 1
1 2, 7 1 (1) : 1
2 2, 7 1 (1) : 1
3 2, 6 2 (1) : 1
4 2, 6 2 (1) : 1
5 2, 5 3 (1) : 1
6 2, 4 4 (1) : 1
7 2, 4 4 (1) : 1
1 3, 6 2 (1) : 1
2 3, 6 2 (1) : 1
3 3, 6 3 (1) : 1
4 3, 5 3 (1) : 1
5 3, 4 4 (1) : 1
6 3, 3 5 (1) : 1
7 3, 2 5 (1) : 1
1 4, 6 2 (1) : 1
2 4, 5 3 (1) : 1
3 4, 5 3 (1) : 1
4 4, 4 4 (1) : 1
5 4, 3 5 (1) : 1
6 4, 2 5 (1) : 1
7 4, 2 6 (1) : 1
1 5, 5 3 (1) : 1
2 5, 5 3 (1) : 1
3 5, 4 4 (1) : 1
4 5, 3 5 (1) : 1
5 5, 3 5 (1) : 1
6 5, 2 6 (1) : 1
7 5, 2 6 (1) : 1
1 6, 4 4 (1) : 1
2 6, 4 4 (1) : 1
3 6, 3 5 (1) : 1
4 6, 2 6 (1) : 1
5 6, 2 6 (1) : 1
6 6, 2 7 (1) : 1
7 6, 1 7 (1) : 1
1 7, 4 4 (1) : 1
2 7, 3 4 (1) : 1
3 7, 3 5 (1) : 1
4 7, 2 6 (1) : 1
5 7, 2 7 (1) : 1
6 7, 1 7 (1) : 1
7 7, 1 7 (1) : 1

三、测试结果

img

08-54


基于 MATLAB 的模糊逻辑系统设计

qq_54808408 2023-01-31 14:28:29

1 引言

1.1 MATLAB 简介

MATLAB 软件是一款广泛应用于工程设计、自动化控制、信号与图像处理、金融财务分析建模等领域的数学计算建模软件。它使用贴近 Windows 标准界面与视窗环境,能实现函数运算、数值分析、数值信号的界面可视化、非线性动态系统的建模仿真以及与其他编程软件的接口等专业功能,为众多专业领域提供强大的工具箱与建模集。

MATLAB 提供了一些函数命令来实现模糊控制逻辑系统,这些函数不仅能完全实现图形化方式所提供的功能,还可以实现图形化方式难以实现的功能,特别是对于复杂的模糊推理系统优势明显。

1.2 系统设计要求

2)1). 输入变量:偏差 e e e、偏差变化率 d e de de;输出变量: u u u。相应隶属度函数为:

img

2). 规则要求

d e / u / e de / u / e de/u/e N N N Z Z Z P P P
N N N P B PB PB Z E ZE ZE N S NS NS
Z Z Z P S PS PS Z E ZE ZE N S NS NS
P P P Z E ZE ZE N S NS NS N B NB NB

3). 模糊化方法:平均最大隶属度函数法 mom。

4).编程实现:程序运行后要求用图形显示输入、输出变量的隶属度函数曲线;显示模糊控制系统的推理过程结构框图,并把此系统保存到 fuzzy.fis 文件中。

2 模糊控制器设计

在 MATLAB 模糊逻辑工具箱中包含 trimf 型、smf 型、zmf 型等 11 种隶属度函数类型,在工具箱给出的函数类型之外也可以自行设计满足用户不同需求的函数类型。

2.1 隶属度函数建立

本文根据题目要求建立该两输入 - 一输出系统结构相应的控制器输入 / 输出参数模糊集和隶属度函数。隶属度函数的取值范围必须满足 [ 0 , 1 ] [0,1] [0,1] 区间,函数方式可分为数值描述方式(论域为离散型)和函数描述方式(论域为连续性)。

1). 输入变量偏差 e ∈ [ − 3 , 3 ] e\in [-3,3] e[3,3],将偏差模糊集细分为负、零、正三种类型,分别用 N N N Z Z Z P P P 表示,隶属度函数使用三角型隶属度函数。

2). 输入变量偏差变化率 d e ∈ [ − 3 , 3 ] de\in [-3,3] de[3,3],将偏差变化率模糊集细分为负、零、正三种类型,分别用 N N N Z Z Z P P P 表示,隶属度函数采用三角型隶属度函数。

3). 输出变量 u ∈ [ − 4 , 4 ] u\in [-4,4] u[4,4],将输出变量模糊集细分为负大、负小、零、正小、正大五种类型,分别用 N B NB NB N S NS NS Z E ZE ZE P S PS PS P B PB PB 表示, N B NB NB 的隶属度函数采用 Z Z Z 函数, N S NS NS Z E ZE ZE P S PS PS 的隶属度函数采用三角型隶属度函数, P B PB PB 的隶属度函数采用 S S S 函数。

2.2 模糊控制规则建立

在 MATLAB 模糊逻辑工具箱中,模糊控制规则用 if - then 的形式来表示,根据题目要求,可以得出以下 9 条模糊控制规则:

  1. If ( e e e is N N N) and ( d e de de is N N N) then ( u u u is P B PB PB)
  2. If ( e e e is N N N) and ( d e de de is Z Z Z) then ( u u u is P S PS PS)
  3. If ( e e e is N N N) and ( d e de de is P P P) then ( u u u is Z E ZE ZE)
  4. If ( e e e is Z Z Z) and ( d e de de is N N N) then ( u u u is Z E ZE ZE)
  5. If ( e e e is Z Z Z) and ( d e de de is Z Z Z) then ( u u u is Z E ZE ZE)
  6. If ( e e e is Z Z Z) and ( d e de de is P P P) then ( u u u is N S NS NS)
  7. If ( e e e is P P P) and ( d e de de is N N N) then ( u u u is N S NS NS)
  8. If ( e e e is P P P) and ( d e de de is Z Z Z) then ( u u u is N S NS NS)
  9. If ( e e e is P P P) and ( d e de de is P P P) then ( u u u is N B NB NB)

2.3 平均最大隶属度函数法

通常的模糊集合并非都是正规的和凸的,隶属函数也并非都是一条连续曲线。因此,用隶属度最大点对应的函数值,代表这个模糊集合也是一种简单的方法,称为最大隶属度法。

如果在模糊集合的论域上,有多个点取得最大隶属度值,取这些点的平均值 u m o m u_{mom} umom 的横坐标作为模糊集合的代表点,这个方法成为最大隶属度平均值。设

A ( u j ) = max ⁡ ( A ( u ) ) , j = 1 , 2 , ⋯   , n A\left (u_{j}\right)=\max (A (u)), j = 1,2,\cdots,n A(uj)=max(A(u)),j=1,2,,n

u m o m = ∑ j = 1 n u j n u_{mom}=\frac {\sum_{j = 1}^{n} u_{j}}{n} umom=nj=1nuj

n n n 个点的隶属度都取最大。

2.4 模糊控制器的 MATLAB 编程实现

在 MATLAB 中建立一个 2Input - 1Output 类型的 fuzzy 模糊控制结构,其输入、输出变量分别为偏差 e e e、偏差变化率 d e de de、输出 u u u。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: e=[-3,+3], de=[-3,+3]'); % 显示矩阵和数组内容
% 推理
Ulist = zeros (7,7); % 创立一个 7x7 的全零矩阵
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);

2.5 程序运行结果

2.5.1 输入输出变量隶属度函数曲线

img

图1 e 的隶属度函数曲线 图2 de 的隶属度函数曲线

img

图3 u 的隶属度函数曲线 图4 模糊控制系统结构框图

2.5.2 规则和 Ulist 矩阵

MATLAB 运行规则:

  1. If ( e e e is N N N) and ( d e de de is N N N) then ( u u u is P B PB PB)(1)
  2. If ( e e e is N N N) and ( d e de de is Z Z Z) then ( u u u is P S PS PS)(1)
  3. If ( e e e is N N N) and ( d e de de is P P P) then ( u u u is Z E ZE ZE)(1)
  4. If ( e e e is Z Z Z) and ( d e de de is N N N) then ( u u u is Z E ZE ZE)(1)
  5. If ( e e e is Z Z Z) and ( d e de de is Z Z Z) then ( u u u is Z E ZE ZE)(1)
  6. If ( e e e is Z Z Z) and ( d e de de is P P P) then ( u u u is N S NS NS)(1)
  7. If ( e e e is P P P) and ( d e de de is N N N) then ( u u u is N S NS NS)(1)
  8. If ( e e e is P P P) and ( d e de de is Z Z Z) then ( u u u is N S NS NS)(1)
  9. If ( e e e is P P P) and ( d e de de is P P P) then ( u u u is N B NB NB)(1)

Ulist 矩阵:

Ulist = [
    4 4 2 2 2 1 0;
    4 4 2 2 2 1 1;
    1 1 1 1 1 -1 -1;
    0 1 1 0 1 -1 -2;
    1 1 1 1 1 -1 -1;
    -1 -1 -1 -1 -1 -3 -3;
    -2 -1 -1 -2 -1 -3 -4
];

根据 Ulist 矩阵可知,
e = − 1 e = -1 e=1 d e = 2 de = 2 de=2 时, i = 3 i = 3 i=3 j = 6 j = 6 j=6,则 u = − 1 u = -1 u=1
e = 2 e = 2 e=2 d e = 1 de = 1 de=1 时, i = 6 i = 6 i=6 j = 5 j = 5 j=5,则 u = − 1 u = -1 u=1

2.6 输入输出关系曲面

将该系统保存到 fuzzy.fis 文件中,并把已保存的 fuzzy.fis 文件导入到图形界面可视化工具中。

img

​ 图7 工具箱中的模糊推理系统

通过曲面观察器(Surface Viewer)查看该模糊推理系统的输入输出关系曲面,如图8所示:

img

​ 图8 输入输出关系曲面

2.7 用规则观察器查看模糊推理情况

通过规则观察器(Rule Viewer)查看对具体输入的模糊推理及输出情况,输入各种不同的数据,查看模糊推理情况及输出数据。

img

img

img

img

img

通过规则观察器可以更加形象地看到对输入变量的模糊推理及输出情况,与前面设置的 9 条规则完全吻合。

2.8 结论

通过本次基于 MATLAB 的模糊逻辑系统设计,进一步熟悉了模糊控制系统的设计步骤,对模糊系统的两要素论域和隶属函数有了更直观的理解,同时对模糊控制系统的工作原理体会更深刻,并且学会了基于模糊控制系统的 MATLAB 编程,以及如何使用模糊逻辑工具箱。

参考文献

[1] 张德丰编著. MATLAB R2017a 人工智能算法 [M]. 北京:电子工业出版社,2018.05.

[2] 楼顺天,胡昌华等编著。基于 MATLAB 的系统分析与设计 6 模糊系统 [M]. 西安:西安电子科技大学出版社,2001.05.

[3] 李根。基于 MATLAB 的模糊逻辑控制系统设计 [J]. 机电信息,2020 (06):72 - 73.

[4] 李洪涛。模糊逻辑系统设计分析 [J]. 小型微型计算机系统,1995 (05):57 - 62.

[5] 韦巍,何衍编著。智能控制基础 [M]. 北京:清华大学出版社,2005.61 - 65


模糊控制器在 Simulink 的使用

求学之路漫长于 2022-05-09 10:28:53 发布

模糊控制器的使用

最近做课题需要用到模糊 PID 控制,因此对模糊控制器做一些尝试,记录在此,便于以后查阅。

一、模糊控制工具箱介绍

在命令行输入 Fuzzy 回车就可以调出模糊工具箱。

模糊工具箱

简单来说,模糊工具箱包括输入隶属度函数、模糊规则、输出隶属度函数三部分。

(一)输入隶属度函数

  • 点击 编辑 -> 添加变量 -> 输入,可以添加输入变量。
  • 双击输入变量可以进入隶属度函数编辑画面。

隶属度函数编辑

  1. 输入的范围:根据输入值的范围选择,Simulink 中一般配合饱和函数防止报错。
  2. 当前隶属曲线的名字:一般用 N(负)、Z(零或中间)、P(正)、S(小)、M(中)、B(大)等进行直观表示,也可以直接写汉字,如“低”“高”。
  3. 当前隶属曲线的类型

隶属度函数类型

包括以下类型:

  • trimf(三角形)
  • trapmf(梯形)
  • gbellmf(钟形)
  • gaussmf(高斯型)
  • gauss2mf
  • sigmf
  • dsigmf
  • psigmf
  • pimf
  • smf
  • zmf

例如:

  • trimf(三角形)

trimf

  • trapmf(梯形)

trapmf

  • gbellmf(钟形)

gbellmf

  • gaussmf(高斯型)

gaussmf

  • gauss2mf

gauss2mf

  • sigmf

sigmf

  • psigmf

psigmf

  • pimf

pimf

  • smf

smf

  • zmf

zmf

  1. 当前隶属曲线的参数:不同的曲线类型有不同的参数选择。以 trimf(三角形)为例,[-0.4 0 0.4] 代表以 0 点为中心点,左右端点在 -0.4 和 0.4 的等腰三角形。

(二)模糊规则

模糊规则是按照 if 语句来编写的,其中:

  1. 第一列是条件;
  2. 第二列是条件之间的逻辑关系;
  3. 第三列是输出。

一般逻辑关系需要包含所有输入的所有条件,且不能有冲突,否则可能会报错。

模糊规则

(三)输出隶属度函数

与输入的情况几乎一致。

输出隶属度函数

(四)模糊规则查看器

  • 点击 View -> Rules,通过二维图的方式展现编辑的模糊规则效果,便于直观查看。
  • 点击 View -> Surface,通过三维图展现模糊规则。

模糊规则查看器

三维图

二、模糊控制器的使用流程(Simulink)

  1. 选择输入输出个数
  2. 选择输入和输出的隶属度函数
  3. 列出模糊规则表,编辑模糊规则
  4. 通过查看器查看效果情况
  5. 导出 .fis 文件
  6. 在 Simulink 模型中选择 Fuzzy Logic Controller

Simulink 中的 Fuzzy Logic Controller

FIS name 中写上导出的 .fis 文件即可。


via:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值