模糊控制(FL)算法

article/2025/9/25 11:57:17

模糊控制算法(理论知识)

模糊(Fuzzy)控制是用语言归纳操作人员的控制策略,运用语言变量和模糊集合理论形成控制算法的一种控制。模糊控制的最重要特征是不需要建立被控对象精确的数学模型,只要求把现场操作人员的经验和数据总结成较完善的语言控制规则,从而能够对具有不确定性、不精确性、噪声以及非线性、时变性、时滞等特征的控制对象进行控制。模糊控制系统的鲁棒性强,尤其适用于非线性、时变、滞后系统的控制。模糊控制的基本结构如图所示。
在这里插入图片描述
1.模糊控制器的输入变量与输出变量
(1)模糊控制器的输入、输出变量
模糊控制器是模仿人的一种控制。在对被控对象进行控制的过程中,一般根据设定值与被控量的偏差、偏差变化EC和偏差变化的速率ER进行决策。人对偏差最敏感,其次是偏差的变化,再次是偏差变化的速率。因此,模糊控制器的输入变量通常取、和EC或者, EC和ER,分别构成所谓一维、二维和三维模糊控制器。一维模糊控制器的动态性能不佳,通常用于一阶被控对象,二维模糊控制器的控制性能和控制复杂性都比较好,是目前广泛采用的一种形式。并且,一般选择增量算法作为模糊控制器的输出变量。
(2)描述输入、输出变量的词汇
在模糊控制中,输入、输出变量大小是以语言形式描述的,因此要选择描述这些变量的词汇。我们的日常语言中对各种事物和变量的描述,总是习惯于分为三个等级,例如,物体的大小分为大、中、小;运动的速度分为快、中、慢;年龄的大小分为老、中、青。实际应用中一般都选用“大、中、小”三个词汇来描述模糊控制器的输入、输出变量的状态,再加上正、负两个方向和零状态,共有7个词汇,即{负大,负中,负小,零,正小,正中,正大} 一般用这些词的英文字头缩写,即{NB, NM, NS, O, PS, PM, PB}。一般情况下,选择上述7个词汇比较合适,但也可以多选或少选。选择较多的词汇,可以精确描述变量,提高控制精度,但会使控制规则变得复杂;选择的词汇过少,则对变量的描述过于粗糙,导致控制器的性能变差。
(3)变量的模糊量
某个变量变化的实际范围称为该变量的基本论域。记偏差的基本论域为 [ − X e , X e ] [-Xe,Xe] [Xe,Xe],偏差变化的基本论域为 [ − X c , X c ] [-Xc,Xc] [Xc,Xc],模糊控制器的输出变量(系统的控制量)的基本论域为 [ − Y u , Y u ] [-Yu,Yu] [Yu,Yu]。显然,基本论域内的量是精确量,因而模糊控制器的输入和输出都是精确量,但是模糊控制算法需要模糊量。因此,输入的精确量(数字量)需要转换为模糊量,这个过程称为“模糊化”(Fuzzification);另一方面,模糊算法所得到的模糊控制量需要转换为精确的控制量,这个过程称为“清晰化”或者“反模糊化”(Defuzzification)。
比较实用的模糊化方法是将基本论域分为n个档次,即取变量的模糊子集论域为在这里插入图片描述
从基本论域到模糊子集论域的转换公式为
在这里插入图片描述

增加论域中的元素个数可以提高控制精度,但增大了计算量,而且模糊控制效果的改善并不明显。一般选择模糊论域中所含元素的个数为模糊语言词集总数的两倍以上,以确保各模糊集能较好地覆盖论域,避免出现失控现象。例如在选择上述7个词汇的情况下,可选择E和EC的论域均为在这里插入图片描述
选择模糊控制器的输出变量即系统的控制量U的论域为在这里插入图片描述(4)隶属度
为了实现模糊化,要在上述离散化了的精确量与表示模糊语言的模糊量之间建立关系,即确定论域中的每个元素对各个模糊语言变量的隶属度。
隶属度是描述某个确定量隶属于某个模糊语言变量的程度。例如,在上述和EC的论域中,+6隶属于 P B PB PB(正大),隶属度为1.0;+5也隶属于 P B PB PB,但隶属度要比+6差,可取为0.8;+4隶属于的程度更小,隶属度可取为0.4;显然-6~0就不隶属于了 P B PB PB,所以隶属度取为0。
确定隶属度的值要根据实际问题的具体情况而定。实验研究结果表明,人进行控制活动时的模糊概念一般可以用正态型模糊变量描述。下面给出常用的确定模糊变量隶属度的赋值表,如表3.1、表3.2和表3.3所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.建立模糊控制规则
模糊控制是语言控制,因此要用语言归纳专家的手动控制策略,从而建立模糊控制规则表。手动控制策略一般都可以用条件语句加以描述。条件语句的基本类型为
if A or B and C or D then U
下面介绍一种根据系统输出的误差及误差的变化趋势,消除误差的模糊控制规则。该规则用下述21条模糊条件语句来描述。

[1]if E = NB or NM and EC = NB or NM then U = PB
[2]if E = NB or NM and EC = NS or  O then	 U = PB
[3]if E = NB or NM and EC = PS then	U = PM
[4]if E = NB or NM and EC = PM or PB then	 U = O
[5]if E = NS and EC = NB or NM then	 U = PM
[6]if E = NS and EC = NS or O  then	 U = PM
[7]if E = NS and EC = PS then	 U = O
[8]if E = NS and EC = PM or PB then	 U = NS
[9]if E = NO or  PO and EC = NB or NM then U = PM
[10]if E = NO or PO and EC = NS then U = PS
[11]if E = NO or PO and EC = O  then U = O
[12]if E = NO or PO and EC = PS then U = NS
[13]if E = NO or PO and EC = PM  or PB then U = NM
[14]if E = PS and EC = NB or NM then U = PS
[15]if E = PS and EC = NS then U = O
[16]if E = PS and EC = O or PS then	 U = NM
[17]if E = PS and EC = PM or PB then U = NM
[18]if E = PM or PB and EC = NB or NM then U = O
[19]if E = PM or PB and EC = NS then U = NM
[20]if E = PM or PB and EC = O or PS then	 U = NB
[21]if E = PM or PB and EC = PM or PB then U = NB

以上21条模糊条件语句可以归纳为模糊控制规则表3.4。在这里插入图片描述
3.模糊关系与模糊推理
模糊控制规则实际上是一组多重条件语句,可以表示为从偏差论域到控制论域的模糊关系矩阵 R R R,通过偏差的模糊向量 E ′ E' E和偏差变化的模糊向量 E C ′ EC' EC ,与模糊关系矩阵 R R R的合成进行模糊推理,得到控制量的模糊向量,然后采用“反模糊化”方法将模糊控制向量转换为精确量。
根据模糊集合和模糊关系理论,对于不同类型的模糊规则可用不同的模糊推理方法。下面仅介绍其中的对if A then B类型的模糊规则的推理。
若已知输入为 A A A,则输出为 B B B ;若现在已知输入为 A ′ A' A ,则输出 B ′ B' B 用合成规则求取:

其中模糊关系 R R R定义为 B ′ = A ′ ∗ R B'=A'*R B=AR
在这里插入图片描述
例如,已知当输入的模糊集合和输出的模糊集合分别为
在这里插入图片描述
这里采用模糊集合的Zadeh表示法,其中 a i ai ai, b i bi bi 表示模糊集合所对应的论域中的元素,而 u i ui ui 表示相应的隶属度,“ — — ”不表示分数的意思。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在上述运算中,“∪”为取小运算,“∩”为取大运算。
由于系统的控制规则库是由若干条规则组成的,因此对于每一条推理规则都可以得到一个相应的模糊关系。n条规则就有n个模糊关系: R 1 , R 2... R n R1,R2...Rn R1,R2...Rn ,对于整个系统的全部控制规则所对应的模糊关系可对 n个模糊关系 ( R i , i = 1 , 2 , 3... n Ri,i=1,2,3...n Ri,i=1,2,3...n)取“并”操作得到,即
在这里插入图片描述
4.模糊控制向量的模糊判决
由上述得到的控制量是一个模糊集合,需要采用“反模糊化”方法将模糊控制项转换为精确量。下面介绍两种简单实用的方法。
(1)最大隶属度法
这种方法是在模糊控制向量中,取隶属度最大的控制量作为模糊控制器的输出。例如,当得到模糊控制向量为
(3.24)
由于控制量隶属于等级5的隶属度为最大,所以取控制量为
在这里插入图片描述
这种方法的优点是简单易行,缺点是完全排除了其他隶属度较小的控制量的影响和作用,没有充分利用取得的信息。
(2)加权平均判决法
为了克服最大隶属度法的缺点,可以采用加权平均判决法,即
在这里插入图片描述
例如在这里插入图片描述
在这里插入图片描述
5.模糊控制表
模糊关系、模糊推理以及模糊判决的运算可以离线进行,最后得到模糊控制器输入量的量化等级 , EC与输出量即系统控制量的量化等级之间 的确定关系,这种关系通常称为“控制表”。对应于前面介绍的21条控制规则的“控制表”如表3.5所列。
模糊控制表可以离线求出,作为文件存储在计算机中,计算机实时控制时只要将A/D转换得到的偏差和偏差变化 ec 进行量化,得到相应的等级 E 和 EC ,然后从文件中直接查询所需采取的控制策略。
在这里插入图片描述
6.确定实际的控制量
显然,实际的控制量 应为从控制表中查到的量化等级 乘以比例因子。设实际的控制量 的变化范围为 [ a , b ] [a, b] [a,b],量化等级为 − n , − n + 1 , . . . , 0 , . . . , n − 1 , n { -n,-n+1,...,0,...,n-1,n} n,n+1,...,0,...,n1,n,则实际的控制量应为在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如在上述二维模糊控制器中,当 E 和 EC 的量化等级分别为-3和+1时,由控制表查得 U = 3 U=3 U=3,则模糊控制器输出的实际控制量应为 。

模糊控制器的设计步骤

  1. 选择输入和输出模糊集
  2. 定义输入输出隶属度函数
  3. 建立模糊控制表
  4. 建立模糊控制规则
  5. 模糊推理
  6. 反模糊化

模糊逻辑实现

以洗衣机洗衣粉投放量控制为例,令污渍stain和油渍oil为输入变量,洗衣粉powder为输出。假定输入和输出范围均为1~10。步骤如下:
引用相关模块并设置各个变量范围
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201021143449925.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjc4ODA3OA==,size_16,color_FFFFFF,t_70#pic_center
定义输入输出模糊集和其隶属度函数(使用三角函数),同时定义输出解模糊规则。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
建立模糊控制规则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:系统建立完成后,通过输入变量值来查看系统的输出

令输入污渍为5,油渍为6
在这里插入图片描述
完整代码:

import numpy as np
import skfuzzy as fuzz
import skfuzzy.control as ctrlx_stain_range=np.arange(1,11,1,np.float32)
x_oil_range=np.arange(1,11,1,np.float32)
y_powder_range=np.arange(1,11,1,np.float32)# 创建模糊控制变量
x_stain=ctrl.Antecedent(x_stain_range, 'stain')
x_oil=ctrl.Antecedent(x_oil_range, 'oil')
y_powder=ctrl.Consequent(y_powder_range, 'powder')# 定义模糊集和其隶属度函数
x_stain['N']=fuzz.trimf(x_stain_range,[1,1,5])
x_stain['M']=fuzz.trimf(x_stain_range,[1,5,10])
x_stain['P']=fuzz.trimf(x_stain_range,[5,10,10])x_oil['N']=fuzz.trimf(x_oil_range,[1,1,5])
x_oil['M']=fuzz.trimf(x_oil_range,[1,5,10])
x_oil['P']=fuzz.trimf(x_oil_range,[5,10,10])y_powder['N']=fuzz.trimf(y_powder_range,[1,1,5])
y_powder['M']=fuzz.trimf(y_powder_range,[1,5,10])
y_powder['P']=fuzz.trimf(y_powder_range,[5,10,10])# 设定输出powder的解模糊方法——质心解模糊方式
y_powder.defuzzify_method='centroid'# 输出为N的规则
rule0 = ctrl.Rule(antecedent=((x_stain['N'] & x_oil['N']) |(x_stain['M'] & x_oil['N']) ),consequent=y_powder['N'], label='rule N')# 输出为M的规则
rule1 = ctrl.Rule(antecedent=((x_stain['P'] & x_oil['N']) |(x_stain['N'] & x_oil['M']) |(x_stain['M'] & x_oil['M']) |(x_stain['P'] & x_oil['M']) |(x_stain['N'] & x_oil['P']) ),consequent=y_powder['M'], label='rule M')=# 输出为P的规则
rule2 = ctrl.Rule(antecedent=((x_stain['M'] & x_oil['P']) |(x_stain['P'] & x_oil['P']) ),consequent=y_powder['P'], label='rule P')# 环境初始化
system = ctrl.ControlSystem(rules=[rule0, rule1, rule2])
sim = ctrl.ControlSystemSimulation(system)
sim.input['stain'] = 5
sim.input['oil'] = 6
sim.compute()   # 运行系统
output_powder = sim.output['powder']
# 打印输出结果
print(output_powder)

模糊逻辑python包:

https://github.com/scikit-fuzzy/scikit-fuzzy


http://chatgpt.dhexx.cn/article/3dPwfdhE.shtml

相关文章

【学习笔记】模糊控制算法

本文目录 0. 前言1. 概述2. 模糊集合2.1 集合和论域2.2 模糊集合的概念2.3 模糊集合的表示方式2.4 模糊集合的运算 3. 模糊关系与模糊关系合成3.1 笛卡尔积3.2 关系与模糊关系3.3 模糊关系的运算3.4 模糊关系合成3.5 模糊变换 4. 模糊推理4.1 模糊推理规则【重要!】…

图像处理——乘性噪声和加性噪声

加性噪声一般指热噪声、散弹噪声等,它们与信号的关系是相加,不管有没有信号,该类噪声是一直存在的。一般通信中把加性随机性看成是系统的背景噪声。 乘性噪声一般由信道不理想引起,它们与信号的关系是相乘,信号在它在…

给数据增加噪声

例如在POS-bp算法中增加噪声,优点:使输出更光滑从而提升网络的推理能力,提升泛化能力。添加样本噪声,使线条更光滑。 这个地方是添加了一个正太分布均值为0,方差为0.01的1xSamLnNum的随机数矩阵。

噪声模型

常见的噪声模型有(z是噪声值,m表示均值,s2表示方差): 1、高斯噪声:ma , s2b^2 2、均匀分布噪声 3、伽马噪声 mb/a , s2b/a^2 4、指数分布噪声 m1/a , s21/a^2 5、瑞利噪声 : 6、椒盐噪声 其中盐表示亮点,椒表示暗点。 几…

噪声系数

噪声系数 噪声分类噪声系数的定义电阻(无源器件)的输出噪声功率半导体器件放大器噪声因子噪声系数NF无源器件的噪声系数 噪声系数的级联噪声系数对系统的影响 噪声分类 热噪声(Thermal Noise):最基本的一种噪声,就像冬日里北方的霾一样,可以说…

图像随机加噪声

对于图像,一般做图像增强都是得要求算法/模型去噪效果好。那么对应图像,原始图像一般多多少少有噪声,通过我们自己的创新算法就可以去噪。也可以有很多客观指标来评价去噪后图像的效果的好坏。 下图为我自己的算法处理的图像,包…

向数据中添加高斯噪声

什么是高斯噪声 高斯噪声既是符合高斯正态分布的误差。一些情况下我们需要向标准数据中加入合适的高斯噪声会让数据变得有一定误差而具有实验价值。高斯噪声还有一些其他用途但是我不太了解,这里我是为了实现多项式拟合正弦曲线,生成数据时,…

Python 加性高斯白噪声 AWGN

高斯白噪声 概念 加性高斯白噪声(Additive White Gaussian Noise,简写AWGN) "白"是指功率谱恒定; 高斯指的是概率p (x)满足高斯函数。 在百度百科中的概念是,加性高斯白噪声在通信领域中指的是一种各频谱分…

常见的噪声分类

常见的噪声:高斯、泊松和椒盐噪声以及代码实现 转载的地址:浅析“高斯白噪声”,“泊松噪声”,“椒盐噪声”的区别 - 简书 转载的地址:散粒噪声 shot noise 泊松噪声 - sunny,lee - 博客园 转载的地址:图像…

噪 声

噪 声 一. 噪声定义 从物理学的角度来看:噪声是发声体做无规则振动时发出的声音。在图形学中,我们把各种妨碍人们对其信息接受的因素称为图像噪声 。噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”。因此将图像噪声…

《通信原理》用matlab实现加性高斯白噪声信道实验

目录 一、实验名称 二、实验目的 三、实验原理 四、实验内容及结果 五、实验收获 一、实验名称 加性高斯白噪声信道 二、实验目的 1.掌握matlab语言的基本操作和基本的编程功能; 2.掌握awgn函数和randn函数的用法; 3.了解加性高斯白噪声信道的产生方法&…

加性高斯色噪声信道

1 加性高斯色噪声信道 对于高斯白噪声,不同时刻的样本值是不相关的。为方便,在实际应用中通常将在信号上叠加高斯白噪声,对一些算法性能进行评估。依据评估结果,指导工程设计实现。在实际工程中,高斯白噪声的不相关性并…

噪声是什么?

1.噪声的概念 日常我们说的噪声是——“除了我想听到的声音”以外的声音,就是噪声。比如我想听A君讲话,但是B君和C君在旁边喋喋不休,他们俩说的话是“我不想听到的声音”,那么他们两个的声音就是噪声。而在电路中,噪声…

噪声和信噪比的转换(如何在数据集中添加噪声)

之前参考别人的博客写了一篇,后来用的过程中发现有问题,但是相关理论部分还是可以用的。 之前我写的:https://blog.csdn.net/Kathleen_yuan/article/details/89817487 别人的推论(推论1要加个条件才能用,就是信号强度…

乘性噪声理解

来自:乘性噪声图像处理方法研究 乘性噪声普遍存在于现实世界的图像应用当中,如合成孔径雷达、超声波、激光等相干图像系统当中.与标准加性高斯白噪声相区别,乘性噪声符合瑞利或伽玛分布函数.乘性噪声对图像的污染严重&…

噪声,白噪声,加性噪声和乘性噪声

对于一个学遥感或者说做图像处理的人来说,对噪声应该很敏感。但什么是加性噪声和乘性噪声,估计有部分并不很清楚。下面简要介绍之,内容摘自http://hi.baidu.com/%D2%B9%CB%AE%BE%A7%CD%F5%BD%A8%C7%E0/blog/item/137c42bf243d9c0f19d81f82.ht…

加性噪声和乘性噪声、均值滤波器、方框滤波器、中值滤波器、高斯滤波器、双边滤波器

1.滤波器的作用 滤波,也称平滑或者模糊,主要是为了减小图像噪声和伪影,同时在降低图像分辨率的时候,平滑也是必要的。 2.认识两种噪声 首先我们来认识两种常见噪声: 椒盐噪声,也就是夹杂在图像中的黑色…

java 抽奖 高并发处理_如何设计高并发下的抽奖?

关于抽奖,需要考虑的点有很多,这里稍微整理了下主要需要考虑以下三点: 用户抽奖次数限制 奖品数量限制 奖品发放的分布 中奖的概率的可控性 用户抽象次数限制 一个用户必须限制抽奖的次数,而同一个用户的并发几率其实是很小的,所以这里可以用悲观锁来控制用户的抽奖次数。 奖品…

使用Lua脚本实现高并发处理方案

我们使用 Lua 脚本可以很轻松构建出百万并发的应用系统。 由于 Tomcat 并发处理能力弱,nginx 并发处理能力强,我们可以在 nginx 上结合 Lua 脚本来高效处理业务逻辑,不用经过 Tomcat,就能够通过 Lua 脚本来操作 Redis、Kafka、My…

Android上实现高并发,可延迟处理

目录 1.Thread和线程池优缺点对比 1.1使用Thread 1.2使用线程池 2.实现Android高并发,可延迟处理的解决方案 2.1为什么不推荐无限制创建Thread执行 2.2实现多线程并发处理解决方案 2.3具体实现如下: 2.4模拟测试多线程并发及延迟执行 1.Thread和线…