fcm模糊聚类matlab实例_模糊控制
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
- %水位模糊控制算法
- clear all;
- close all;
- a = newfis('fuzzy tank');
- a = addvar(a,'input','e',[-3,3]);
- a = addmf(a,'input',1,'NB','zmf',[-3,-1]);
- a =addmf(a,'input',1,'NS','trimf',[-3,-1,1]);
- a =addmf(a,'input',1,'ZO','trimf',[-2,0,2]);
- a =addmf(a,'input',1,'PS','trimf',[-1,1,3]);
- a = addmf(a,'input',1,'PB','smf',[1,3]);
- a = addvar(a,'output','u',[-4,4]);
- a = addmf(a,'output',1,'NB','zmf',[-4,-2]);
- a =addmf(a,'output',1,'NS','trimf',[-4,-2,0]);
- a =addmf(a,'output',1,'ZO','trimf',[-2,0,2]);
- a =addmf(a,'output',1,'PS','trimf',[0,2,4]);
- a = addmf(a,'output',1,'PB','smf',[2,4]);
- %建立模糊规则
- rulelist=[1 1 1 1;
- 2 2 1 1;
- 3 3 1 1;
- 4 4 1 1;
- 5 5 1 1];
- a = addrule(a,rulelist);
- %设置反模糊化算法
- a1 = setfis(a,'DefuzzMethod','mom');
- writefis(a1,'tank');
- a2 = readfis('tank');
- figure(1);
- plotfis(a2);
- figure(2);
- plotmf(a,'input',1);
- figure(3);
- plotmf(a,'output',1);
- showrule(a);
- ruleview('tank');
- for i=1:1:7
- e(i)=i-4;
- Ulist(i)=evalfis([e(i)],a2);
- end
- Ulist = round(Ulist); %对决策结果四舍五入取整
- disp('------------------------------------------------------');
- disp('----------模糊控制表:e =[-3,3], u = [-4,4]-----------');
- disp('------------------------------------------------------');
- fprintf('| a |');
- fprintf(' %d |',e);
- fprintf('n');
- fprintf('| u |');
- fprintf(' %d |',Ulist);
- 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实例_模糊控制相关推荐
- fcm模糊聚类matlab实例_一文学会使用MATLAB将仿真、试验数据可视化附带源程序
科研人员.在校学生和走向工作岗位的同事,一定需要对仿真数据和实验数据进行可视化,用于论文发表或.申请专利或向领导汇报工作. 在进行数据可视化展示过程中,我们也可以选择其他的工具PPT.Excel.Or ...
- fcm模糊聚类matlab实例_MATLAB图论实例——最短路径
问 题 求上图V1至个点的最短路径. 分 析 图表示网络连接的图形,该类图形广泛应用于各种物理.生物和信息系统.可以使用图形表示大脑中的神经元.航空公司的飞行模式及更多领域的相关内容.图形的结构由 ...
- m基于ACO蚁群优化的FCM模糊聚类算法matlab仿真
目录 1.算法概述 2.仿真效果预览 3.核心MATLAB程序 4.完整MATLAB程序 1.算法概述 蚁群算法是通过对自然界中真实蚂蚁的集体行为的观察,模拟而得到一种仿生优化算法,它具有很好的并行性 ...
- 【毕设教程】FCM模糊聚类算法
文章目录 0 前言 1 如何理解模糊聚类 2 模糊C-means聚类算法 3 FCM算法原理 4 Python FCM支持 4.1 安装相关库 4.2 skfuzzy.cmeans函数说明 4.3 代 ...
- FCM模糊聚类 学习笔记
就总结注释一下 怕忘了 我看的博客地址(模糊聚类算法 - 知乎) 逐步模糊聚类: 逐步聚类法类是中心点聚类法.(上述博客原话) 逐步聚类法是一种基于模糊划分的模糊聚类分析法.它是预先确定好待分类的样本 ...
- c均值聚类matlab程序_机器学习笔记-9-聚类
1 K-means算法 K-means是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组. 它是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为: 选择K个随机的点,称 ...
- c均值聚类matlab程序_聚类算法之kmeans算法
一.k-means算法介绍 k-means最早是由James MacQueen在1967年提出的,这一观点能够追溯到1957年Hugo Steinhaus所提出的想法.1957年,斯图亚特最先提出这一 ...
- 层次聚类 matlab代码_聚类算法解析一
01 概述 本次针对聚类算法进行讲解,因为内容较多,会分多篇文章进行讲解,主要的内容包括聚类算法的整体介绍,针对不同类别的聚类算法比如划分聚类.层次聚类.密度聚类等算法进行介绍,在讲解每类算法时会结合 ...
- lle matlab 实例_数据降维方法LLE算法matlab代码
LLE算法代码 % LLE ALGORITHM (using K nearest neighbors) % % [Y] = lle(X,K,dmax) % % X = data as D x N ma ...
最新文章
- html5新知识点,Html5基本知识点
- 链路层的网卡聚合-基于Linux bonding
- python 代码片段6
- 数量场的等值面与矢量场的矢量线的一些基本的东西(写得不好)
- python aiohttp百万并发
- 一种破解静态链接库(.lib)的简单方法
- 机器学习常见算法分类汇总
- C# 创建基于TCP、HTTP协议的JsonRpc 2.0(可跨平台、跨语言)
- python实现最长公共子串
- faketime实现游戏服务器时间定制
- JavaScript基础知识
- 常用的银行卡验证API接口——银行卡三元素API接口
- Python 自动化办公 —— PyPDF2 库的基本使用
- 带你快速入门AXI4总线--AXI4-Full篇(2)----XILINX AXI4-Full接口IP源码仿真分析(Slave接口)
- 基于JAVA高校教材征订管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 利用telemetry进行权限维持
- NOI2017退役记
- “为了买台手机,研究大半个月后仍然无从选择”
- Skywalking概述
- MySQL——INSERT INTO
热门文章
- 【Elasticsearch】基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化
- Flink : Cannot find compatible factory for specified execution.target (=local)
- 60-150-044-使用-Sink-Flink自定义RetractStreamTableSink
- 95-138-010-源码-Function-AggregateFunction
- 【Antlr】Antlr 在语法中嵌入任意动作
- Spring : Bean依赖注解(@DependsOn)
- Maven 单元测试报错:错误: 找不到或无法加载主类 @{failsafeArgLine}
- 【Flink】分布式快照算法—— Chandy-Lamport 算法
- Task 'compileDebugSource' not found in root project 'kafka'
- spark学习-SparkSQL一些函数的使用