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

注:本文为几位功夫博主关于 “模糊逻辑学习 / 推理 / 控制” 的相关几篇文章合辑。


初学模糊逻辑控制(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)的具体步骤也不相同。

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

规则 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


via:

  • 一文搞懂什么是模糊逻辑【附应用举例】 报告,今天也有好好学习 于 2020-10-21 00:56:45 发布
    https://blog.csdn.net/qq_44186838/article/details/109193143

  • 模糊逻辑学习 – 模糊推理过程 zsffuture 于 2020-06-30 10:24:47 发布
    https://blog.csdn.net/weixin_42398658/article/details/106997448

  • 初学模糊逻辑控制(Fuzzy Logic Control)ziqian__ 已于 2022-08-19 20:30:25 修改
    https://blog.csdn.net/ziqian__/article/details/125237790

  • 【人工智能】模糊推理 烂尾主教 已于 2023-04-23 20:06:46 修改
    https://blog.csdn.net/qq_25218219/article/details/130123556

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923861.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mvn-mac操作小记

1.安装brew 如果报错,Warning: /opt/homebrew/bin is not in your PATH. vim ~/.zshrc,最后一行追加 export PATH“/opt/homebrew/bin:$PATH” source ~/.zshrc 2.安装brew install maven mvn -version查看路径 Maven home: /opt/homebrew/Cellar/mav…

SAP开发语言ABAP开发入门

1. 了解ABAP开发环境和基础知识 - ABAP简介 - ABAP(Advanced Business Application Programming)是SAP系统中的编程语言,主要用于开发企业级的业务应用程序,如财务、物流、人力资源等模块的定制开发。 - 开发环境搭建 - 首先需…

英语知识网站开发:Spring Boot框架应用

3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架,JAVA作为开发语…

非协议默认端口的:NAT alg需配置port-mapping

参考解释文章: https://zhiliao.h3c.com/Theme/details/167990 https://zhiliao.h3c.com/Theme/details/44359 nat的alg和port-mapping - 知了社区 NAT alg的功能 NAT ALG(Application Level Gateway,应用层网关)主要完成对应用…

三六零[601360]行情数据接口

1、三六零:实时行情 Restful API # 测试接口:可以复制到浏览器打开 https://tsanghi.com/api/fin/stock/XSHG/realtime?tokendemo&ticker601360获取股票实时行情(开、高、低、收、量)。 请求方式:GET。 Python示例…

Xilinx Blockset Gateway In 和Gateway out模块使用及参数配置

目录 一、Gateway InSimulink数据到System Generator数据的转换Gateway BlocksBlock Parameters(模块参数)Basic选项卡参数Implementation选项卡参数 二、Gateway OutGateway BlocksBlock Parameters(模块参数)Basic选项卡参数Imp…

三格电子—EtherNet IP转Modbus RTU网关

EtherNet/IP转Modbus RTU网关 SG-EIP-MOD-210 产品用途 SG-EIP-MOD-210网关可以实现将Modbus接口设备连接到 EtherNet/IP网络中。用户不需要了解具体的Modbus和 EtherNet/IP协议即可实现将Modbus设备挂载到 EtherNet/IP接口的PLC上,并和Modbus设备进行数据交互。拓…

使用 Jina Embeddings v2 在 Elasticsearch 中进行后期分块

作者:来自 Elastic Gustavo Llermaly 在 Elasticsearch 中使用 Jina Embeddings v2 模型并探索长上下文嵌入模型的优缺点。 在本文中,我们将配置和使用 jina-embeddings-v2,这是第一个开源 8K 上下文长度嵌入模型,首先使用 semant…

【西瓜书】剪枝与样本值处理——预剪枝、后剪枝、连续值、缺失值

目录 预剪枝 后剪枝 处理连续值 处理缺失值 剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。 在决策树学习过程中,有时会造成决策树分枝过多,就可能造成过拟合,可通过主动去掉一些分支来降低过离合的风…

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化? 重要性:★★ NLP Github 项目: NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&am…

H3C OSPF 多区域实验

目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验,建议先食用OSPF单区域实验,理解实验原理 学习基本配置,再来使用此篇,效果更佳!(当然如果你已经了解原理与基…

基于Spring Boot的装饰工程管理系统论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大,容错率低&#x…

DNS高速缓存污染

DNS高速缓存污染,也称为DNS缓存投毒,是一种网络攻击手段,攻击者通过篡改DNS服务器中的缓存记录,使得用户访问的域名被错误地解析到攻击者控制的IP地址,从而将用户重定向到恶意网站或阻止用户访问目标网站。这种攻击破坏…

一文详解“分治—快排“在算法中的应用

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 分治算法是利用分而治之的思想来实现的。典型代表,递归,将一个大问题转换为多个与其类似的小问题&#…

【三维生成】Edify 3D:可扩展的高质量的3D资产生成(英伟达)

标题:Edify 3D: Scalable High-Quality 3D Asset Generation 项目:https://research.nvidia.com/labs/dir/edify-3d demo:https://build.nvidia.com/Shutterstock/edify-3d 文章目录 摘要一、前言二、多视图扩散模型2.1.消融研究 三、重建模型…

基于机器视觉的表面缺陷检测

基于机器视觉的表面缺陷检测存在的问题与难点 - AVT相机|AVT红外相机|万兆网相机EVT|VIEWORKS线扫相|映美精相机|Specim多光谱相机|Adimec相机|Basler相机|富士能FUJINON镜头|理光RICOH镜头|OPTO远心镜头|SPO远心镜头|Navtar镜头|VST镜头|CCS光源|3D视觉引导机床上下料系统 (完…

SpringBoot整合MQTT利用EMQX完成消息的发布与接收+Python模拟硬件测试通信

教程说明 本教程主要内容为使用SpringBoot整合MQTT利用EMQX代理服务完成MQTT的消息发送与接收,然后用Python模拟硬件与SpringBoot应用进行了MQTT消息的通信,教程详细,并在最后讲解了开发中的注意事项,本教程适用于物联网领域、Ja…

IntelliJ IDEA 中,自动删除无用导包

在 IntelliJ IDEA 中,自动删除无用导包是一个提升代码整洁性和开发效率的重要功能。以下是实现这一功能的详细步骤: 一、通过快捷键手动删除无用导包 打开Java文件:在IDEA中打开你需要操作的Java文件。 使用快捷键: 在Windows系…

表格数据处理中大语言模型的微调优化策略研究

论文地址 Research on Fine-Tuning Optimization Strategies for Large Language Models in Tabular Data Processing 论文主要内容 这篇论文的主要内容是研究大型语言模型(LLMs)在处理表格数据时的微调优化策略。具体来说,论文探讨了以下…

如何编写一个 Vue 3 应用:模板插值示例

Vue.js 是一个渐进式的 JavaScript 框架,用于构建用户界面。在本篇博客中,我们将通过一个简单的示例来学习如何使用 Vue 3 创建一个基本的应用。这个示例将展示如何使用 Vue 的模板插值和事件处理来构建一个简单的点击计数器。 步骤 1: 准备工作 首先&…