1、模糊控制的基本原理

模糊控制是以模糊集理论、模糊语言变量和模糊逻辑推理为基础的一种智能控制方法,它是从行为上模仿人的模糊推理和决策过程的一种智能控制方法。该方法首先将操作人员或专家经验编成模糊规则,然后将来自传感器的实时信号模糊化,将模糊化后的信号作为模糊规则的输入,完成模糊推理,将推理后得到的输出量加到执行器上

2、模糊控制器

模糊控制器(Fuzzy Controller—FC):也称为模糊逻辑控制器(Fuzzy Logic Controller—FLC),由于所采用的模糊控制规则是由模糊理论中模糊条件语句来描述的,因此模糊控制器是一种语言型控制器,故也称为模糊语言控制器(Fuzzy Language Controller—FLC)。

(1)模糊化接口(Fuzzy interface)

模糊控制器的输入必须通过模糊化才能用于控制输出的求解,因此它实际上是模糊控制器的输入接口。它的主要作用是将真实的确定量输入转换为一个模糊矢量。

(2)知识库(Knowledge Base—KB)

知识库由数据库和规则库两部分构成。

①数据库(Data Base—DB) 数据库所存放的是所有输入、输出变量的全部模糊子集的隶属度矢量值(即经过论域等级离散化以后对应值的集合),若论域为连续域则为隶属度函数。在规则推理的模糊关系方程求解过程中,向推理机提供数据。

②规则库(Rule Base—RB) 模糊控制器的规则司基于专家知识或手动操作人员长期积累的经验,它是按人的直觉推理的一种语言表示形式。模糊规则通常有一系列的关系词连接而成,如if-then、else、also、end、or等,关系词必须经过“翻译”才能将模糊规则数值化。最常用的关系词为if-then、also,对于多变量模糊控制系统,还有and等。

(3)推理与解模糊接口(Inference and Defuzzy-interface)

推理是模糊控制器中,根据输入模糊量,由模糊控制规则完成模糊推理来求解模糊关系方程,并获得模糊控制量的功能部分。在模糊控制中,考虑到推理时间,通常采用运算较简单的推理方法。最基本的有Zadeh近似推理,它包含有正向推理和逆向推理两类。正向推理常被用于模糊控制中,而逆向推理一般用于知识工程学领域的专家系统中。推理结果的获得,表示模糊控制的规则推理功能已经完成。但是,至此所获得的结果仍是一个模糊矢量,不能直接用来作为控制量,还必须作一次转换,求得清晰的控制量输出,即为解模糊。通常把输出端具有转换功能作用的部分称为解模糊接口

3、模糊控制系统的工作原理(实例)

来看一个实例,控制进水阀S1和出水阀S2,使水箱水位保持在目标水位O处。

按照日常操作经验,有以下规则:

1、 若当前水位高于目标水位,则向外排水,差值越大,排水越快;

2、 若当前水位低于目标水位,则向内注水,差值越大,注水越快;

3、 若当前水位和目标水位相差很小,则保持排水速度和注水速度相等。

下面来设计一个模糊控制器

以水位的模糊控制为例,如图4-4所示。设有一个水箱,通过调节阀可向内注水和向外抽水。设计一个模糊控制器,通过调节阀门将水位稳定在固定点附近。按照日常的操作经验,可以得到基本的控制规则:

“若水位高于O点,则向外排水,差值越大,排水越快”;

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

根据上述经验,按下列步骤设计模糊控制器:

1)确定观测量和控制量

定义理想液位O点的水位为h0,实际测得的水位高度为h,选择液位差:

将当前水位对于O点的偏差e作为观测量。

2)输入量和输出量的模糊化

将偏差e分为五个模糊集:负大(NB),负小(NS),零(O),正小(PS),正大(PB)。根据偏差e的变化范围分为七个等级:-3,-2,-1,0,+1,+2,+3。得到水位变化模糊表4-1。

控制量u为调节阀门开度的变化。将其分为五个模糊集:负大(NB),负小(NS),零(ZO),正小(PS),正大(PB)。并将u的变化范围分为九个等级:-4,-3,-2,-1,0,+1,+2,+3,+4。得到控制量模糊划分表4-2。

3)模糊规则的描述

根据日常的经验,设计以下模糊规则:

(1)“若e负大,则u负大”

(2)“若e负小,则u负小”

(3)“若e为0,则u为0”

(4)“若e正小,则u正小”

(5)“若e正大,则u正大”

其中,排水时,u为负,注水时,u为正。

上述规则采用“IF A THEN B”形式来描述:

(1) if e=NB then u=NB

(2) if e=NS then u=NS

(3) if e=0 then u=0

(4) if e=PS then u=PS

(5) if e=PB then u=PB

根据上述经验规则,可得模糊控制表4-3。

4)求模糊关系

模糊控制规则是一个多条语句,它可以表示为U×V上的模糊子集,即模糊关系R:

其中规则内的模糊集运算取交集,规则间的模糊集运算取并集。

5)模糊决策

模糊控制器的输出为误差向量和模糊关系的合成:

当误差e为NB时,e=[1,0.5,0,0,0,0,0]控制器输出为:

6、控制量的反模糊化

由模糊决策可知,当误差为负大时,实际液位远高于理想液位,e=NB,控制器的输出为一模糊向量,可表示为:

如果按照“隶属度最大原则”进行反模糊化,则选择控制量为 u=-4,即阀门的开度应关大一些,减少进水量。

7、matlab实现

所幸的是,在matlab模糊控制工具箱中已经帮我们实现了4-6步求解矩阵运算的操作,只需要直接调用evalfis函数就可以得到相应的决策控制量。

通过matlab集成的模糊控制模块,我们能够更加方便地对应偏差e和控制量u的关系,并可以调节e在不同值下u的对应输出。

Matlab程序

[cpp] view plain copy

  1. %水位模糊控制算法
  2. clear all;
  3. close all;
  4. a = newfis('fuzzy tank');
  5. a = addvar(a,'input','e',[-3,3]);
  6. a = addmf(a,'input',1,'NB','zmf',[-3,-1]);
  7. a =addmf(a,'input',1,'NS','trimf',[-3,-1,1]);
  8. a =addmf(a,'input',1,'ZO','trimf',[-2,0,2]);
  9. a =addmf(a,'input',1,'PS','trimf',[-1,1,3]);
  10. a = addmf(a,'input',1,'PB','smf',[1,3]);
  11. a = addvar(a,'output','u',[-4,4]);
  12. a = addmf(a,'output',1,'NB','zmf',[-4,-2]);
  13. a =addmf(a,'output',1,'NS','trimf',[-4,-2,0]);
  14. a =addmf(a,'output',1,'ZO','trimf',[-2,0,2]);
  15. a =addmf(a,'output',1,'PS','trimf',[0,2,4]);
  16. a = addmf(a,'output',1,'PB','smf',[2,4]);
  17. %建立模糊规则
  18. rulelist=[1 1 1 1;
  19. 2 2 1 1;
  20. 3 3 1 1;
  21. 4 4 1 1;
  22. 5 5 1 1];
  23. a = addrule(a,rulelist);
  24. %设置反模糊化算法
  25. a1 = setfis(a,'DefuzzMethod','mom');
  26. writefis(a1,'tank');
  27. a2 = readfis('tank');
  28. figure(1);
  29. plotfis(a2);
  30. figure(2);
  31. plotmf(a,'input',1);
  32. figure(3);
  33. plotmf(a,'output',1);
  34. showrule(a);
  35. ruleview('tank');
  36. for i=1:1:7
  37. e(i)=i-4;
  38. Ulist(i)=evalfis([e(i)],a2);
  39. end
  40. Ulist = round(Ulist); %对决策结果四舍五入取整
  41. disp('------------------------------------------------------');
  42. disp('----------模糊控制表:e =[-3,3], u = [-4,4]-----------');
  43. disp('------------------------------------------------------');
  44. fprintf('| a |');
  45. fprintf(' %d |',e);
  46. fprintf('n');
  47. fprintf('| u |');
  48. fprintf(' %d |',Ulist);
  49. fprintf('n');

备注:

1、模糊规则矩阵rulelist的含义:模糊矩阵是由模糊规则转化而来,这里矩阵规模为5*4,矩阵第一列表示输入e(5个模糊集合PB/PS/ZO/NS/NB依次对应1-5),矩阵第二列表示输出u(含义同理),第三列为规则的权重weight,第四列为AND模糊运算(1对应AND,2对应OR),如果是多输入多数出模糊控制器,规则列表的含义请参考:

The first mcolumns refer to the inputs of the system. Each column contains a number thatrefers to the index of the membership function for that variable.
The next n columns refer to the outputs of thesystem. Each column contains a number that refers to the index of themembership function for that variable.
The m + n + 1 column contains the weight that isto be applied to the rule. The weight must be a number between zero and one andis generally left as one.
The m + n + 2 column contains a 1 if the fuzzyoperator for the rule's antecedent is AND. It contains a 2 if the fuzzyoperator is OR.

2、设置反模糊化方法setfis(a,'DefuzzMethod','mom');反模糊化方法不同最终输出控制量也不同。

mom 最大隶属度平均法

centroid 面积重心法

bisector 面积等分法

som 最大隶属度取小法

lom 最大隶属度去大法

3、如果要对决策结果取整有三种方法:round(四舍五入)、ceil(向上取整)、floor(向下取整)。

最后总结一下模糊控制器的设计步骤:

fcm模糊聚类matlab实例_模糊控制相关推荐

  1. fcm模糊聚类matlab实例_一文学会使用MATLAB将仿真、试验数据可视化附带源程序

    科研人员.在校学生和走向工作岗位的同事,一定需要对仿真数据和实验数据进行可视化,用于论文发表或.申请专利或向领导汇报工作. 在进行数据可视化展示过程中,我们也可以选择其他的工具PPT.Excel.Or ...

  2. fcm模糊聚类matlab实例_MATLAB图论实例——最短路径

    问  题 求上图V1至个点的最短路径. 分  析 图表示网络连接的图形,该类图形广泛应用于各种物理.生物和信息系统.可以使用图形表示大脑中的神经元.航空公司的飞行模式及更多领域的相关内容.图形的结构由 ...

  3. m基于ACO蚁群优化的FCM模糊聚类算法matlab仿真

    目录 1.算法概述 2.仿真效果预览 3.核心MATLAB程序 4.完整MATLAB程序 1.算法概述 蚁群算法是通过对自然界中真实蚂蚁的集体行为的观察,模拟而得到一种仿生优化算法,它具有很好的并行性 ...

  4. 【毕设教程】FCM模糊聚类算法

    文章目录 0 前言 1 如何理解模糊聚类 2 模糊C-means聚类算法 3 FCM算法原理 4 Python FCM支持 4.1 安装相关库 4.2 skfuzzy.cmeans函数说明 4.3 代 ...

  5. FCM模糊聚类 学习笔记

    就总结注释一下 怕忘了 我看的博客地址(模糊聚类算法 - 知乎) 逐步模糊聚类: 逐步聚类法类是中心点聚类法.(上述博客原话) 逐步聚类法是一种基于模糊划分的模糊聚类分析法.它是预先确定好待分类的样本 ...

  6. c均值聚类matlab程序_机器学习笔记-9-聚类

    1 K-means算法 K-means是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组. 它是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为: 选择K个随机的点,称 ...

  7. c均值聚类matlab程序_聚类算法之kmeans算法

    一.k-means算法介绍 k-means最早是由James MacQueen在1967年提出的,这一观点能够追溯到1957年Hugo Steinhaus所提出的想法.1957年,斯图亚特最先提出这一 ...

  8. 层次聚类 matlab代码_聚类算法解析一

    01 概述 本次针对聚类算法进行讲解,因为内容较多,会分多篇文章进行讲解,主要的内容包括聚类算法的整体介绍,针对不同类别的聚类算法比如划分聚类.层次聚类.密度聚类等算法进行介绍,在讲解每类算法时会结合 ...

  9. lle matlab 实例_数据降维方法LLE算法matlab代码

    LLE算法代码 % LLE ALGORITHM (using K nearest neighbors) % % [Y] = lle(X,K,dmax) % % X = data as D x N ma ...

最新文章

  1. html5新知识点,Html5基本知识点
  2. 链路层的网卡聚合-基于Linux bonding
  3. python 代码片段6
  4. 数量场的等值面与矢量场的矢量线的一些基本的东西(写得不好)
  5. python aiohttp百万并发
  6. 一种破解静态链接库(.lib)的简单方法
  7. 机器学习常见算法分类汇总
  8. C# 创建基于TCP、HTTP协议的JsonRpc 2.0(可跨平台、跨语言)
  9. python实现最长公共子串
  10. faketime实现游戏服务器时间定制
  11. JavaScript基础知识
  12. 常用的银行卡验证API接口——银行卡三元素API接口
  13. Python 自动化办公 —— PyPDF2 库的基本使用
  14. 带你快速入门AXI4总线--AXI4-Full篇(2)----XILINX AXI4-Full接口IP源码仿真分析(Slave接口)
  15. 基于JAVA高校教材征订管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  16. 利用telemetry进行权限维持
  17. NOI2017退役记
  18. “为了买台手机,研究大半个月后仍然无从选择”
  19. Skywalking概述
  20. MySQL——INSERT INTO

热门文章

  1. 【Elasticsearch】基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化
  2. Flink : Cannot find compatible factory for specified execution.target (=local)
  3. 60-150-044-使用-Sink-Flink自定义RetractStreamTableSink
  4. 95-138-010-源码-Function-AggregateFunction
  5. 【Antlr】Antlr 在语法中嵌入任意动作
  6. Spring : Bean依赖注解(@DependsOn)
  7. Maven 单元测试报错:错误: 找不到或无法加载主类 @{failsafeArgLine}
  8. 【Flink】分布式快照算法—— Chandy-Lamport 算法
  9. Task 'compileDebugSource' not found in root project 'kafka'
  10. spark学习-SparkSQL一些函数的使用