FIS学习——利用Matlab创建模糊推理系统Ⅰ
FIS——利用Matlab创建模糊推理系统Ⅰ
模糊推理是在很多地方都会用到一种方法,可以很好模拟人对于不确定事物的认识和判断,尤其是在模拟人的认识决策这方面,可以十分简洁的表达出来,可以说是人工智能的在很早的时候的表现。matlab中就有官方的工具包供我们使用,使用方法也很简单,这里简单概括一下。
这里来介绍一下matlab中fuzzy logic toolbox的使用方法。有关模糊推理的基础知识这里就不去详细介绍了,这里仅就相关代码操作方面给予总结介绍。更详细的了解,可以在matlab的help document中找到十分详细的介绍,本文就是对其的简要总结。
Fuzzy Logic Designer
通过Fuzzy Logic Designer应用程序创建和编辑模糊推理系统,是最简单直观的创建模糊推理系统的方式了,网络上这些教程很多。我这里也就简单说一下。
要打开Fuzzy Logic Designer,请在MATLAB提示符下键入以下命令:fuzzyLogicDesigner
Fuzzy Logic Designer将打开并显示一个模糊推理系统的图,其左侧为每个输入变量的名称,右侧为每个输出变量的名称,如下图所示。
整个界面很简单直观,是一个双输入单输出的结构,黄色区域为输入变量,蓝色区域为输出变量,双击这些区域可以进入输入(输出)的参数设置界面,如下。其中可以设置是变量的取值范围(range)、隶属度函数类型以及参数、或者更改隶属度函数数量。
白色区域是规则设置,用来编辑if-then逻辑规则
Import and Export Fuzzy Inference Systems
将模糊系统保存到文件时,将使用文件后缀保存该系统的ASCII文本FIS文件表示形式.fis。不要手动编辑**.fis**
文件的内容。这样做会在加载文件时产生意外的结果。将模糊系统保存到MATLAB工作区时,您将创建一个变量,用作模糊系统的MATLAB对象。
Build Fuzzy Systems at the Command Line
利用FIS Designer创建模糊系统虽然很简单直观,但还是需要了解一下它根本的代码,才好!
我们用上面也用到的例子FIS-tipper,这个例子是matlab内置的一个fis
fis = readfis('tipper.fis');
可以使用fis.
访问FIS属性。例如,查看模糊系统的input。
fis.Inputs
#ans = 1x2 fisvar array with properties:NameRangeMembershipFunctionsDetails:Name Range MembershipFunctions_________ _______ ___________________1 "service" 0 10 {1x3 fismf} 2 "food" 0 10 {1x2 fismf}
更进一步的理解,其实设计的整个模糊推理系统,无论使用应用程序创建还是代码命令创建,其实在matlab中的数据结构就是一个对象,FIS object。
这些对象包含所有模糊推理系统信息,包括变量名称,隶属函数定义和模糊推理方法。每个FIS本身都是对象的层次结构。在模糊系统中使用以下对象:
fisvar
对象代表输入和输出变量。fismf
对象代表每个输入和输出变量中的隶属函数。fisrule
对象表示将输入映射到输出的模糊规则。
通过直接列出其属性来查看FIS的所有信息。
fis
#fis = mamfis with properties:Name: "gratuity"AndMethod: "min"OrMethod: "max"ImplicationMethod: "min"AggregationMethod: "max"DefuzzificationMethod: "centroid"Inputs: [1x2 fisvar]Outputs: [1x1 fisvar]Rules: [1x3 fisrule]DisableStructuralChecks: 0
还可以使用plotfis
,plotmf
和gensurf
功能。plotfis将整个系统显示为框图,就和Fuzzy Logic Designer中所显示的图一致。
plotfis(fis) #整个系统流程图
plotmf(fis,'input',1) #输入量的隶属度函数
plotmf(fis,'output',1) #输出的隶属度函数
fis.Rules #模糊规则if-then
gensurf(fis) #输出三维图像
现在说下怎么新建一个FIS object,下面是输入输出变量以及隶属度函数
fis = mamfis('Name',"tipper");#添加第一个输入变量,论域,高斯函数(方差,均值)
fis = addInput(fis,[0 10],'Name',"service");
fis = addMF(fis,"service","gaussmf",[1.5 0],'Name',"poor");
fis = addMF(fis,"service","gaussmf",[1.5 5],'Name',"good");
fis = addMF(fis,"service","gaussmf",[1.5 10],'Name',"excellent");#Add the second input variable for the food quality, 梯形隶属度函数
fis = addInput(fis,[0 10],'Name',"food");
fis = addMF(fis,"food","trapmf",[-2 0 1 3],'Name',"rancid");
fis = addMF(fis,"food","trapmf",[7 9 10 12],'Name',"delicious");#Add the output variable for the tip, 三角隶属度函数
fis = addOutput(fis,[0 30],'Name',"tip");
fis = addMF(fis,"tip","trimf",[0 5 10],'Name',"cheap");
fis = addMF(fis,"tip","trimf",[10 15 20],'Name',"average");
fis = addMF(fis,"tip","trimf",[20 25 30],'Name',"generous");
接下来介绍一下模糊规则是如何定义的,是以一个矩阵的形式进行定义,以tipper.fis
中的规则为例介绍一下。
tipper
的规则如下:
- If (service is poor) or (food is rancid), then (tip is cheap).
- If (service is good), then (tip is average).
- If (service is excellent) or (food is delicious), then (tip is generous).
矩阵每一列的含义如下:
- Column 1 - Index of membership function for first input
- Column 2 - Index of membership function for second input
- Column 3 - Index of membership function for output
- Column 4 - Rule weight (from
0
to1
) - Column 5 - Fuzzy operator (
1
for AND,2
for OR)
可以对应到3×5的矩阵
ruleList = [1 1 1 1 2;2 0 2 1 1;3 2 3 1 2];fis = addRule(fis,ruleList);
Evaluate Fuzzy Inference System 结果输出
evalfis(fis,[1 2])
ans = 5.5586inputs = [3 5;2 7;3 1];
evalfis(fis,inputs)
ans = 3×112.21847.78858.9547
参数标定
对于FIS中隶属度函数的确定或是模糊规则if-then的确定,一般都是凭借设计人员的经验来确定这些参数,参数包括隶属度函数的类型,函数中的参数,规则的确定。但人的经验在模糊的问题上起到的作用很小,很难去确定系统的准确性。
因此,有许多参数标定的方法可以被使用,这方面的论文也有蛮多。一般都是利用大量的数据集去训练模型,让模型学习到一个最佳的参数集合状态。还有一种就是在没有输入输出训练数据集的时候,自定义cost函数,通过评估输出的cost,来优化参数。
这一部分内容留到下一部分详细说一下。
参考资料:
[1]matlab help document
https://www.mathworks.com/help/fuzzy/what-is-fuzzy-logic.html
FIS学习——利用Matlab创建模糊推理系统Ⅰ相关推荐
- 如何在MATLAB下把模糊推理系统转化为查询表(转载)
如何在MATLAB下把模糊推理系统转化为查询表(原创) http://foundy.blog.163.com/blog/static/2633834420090212202156/?mode=edit ...
- matlab 动态存储图片,利用matlab创建动态图并保存为AVI格式
利用matlab创建动态图并保存为AVI格式. MATLAB中,创建电影动画的过程分为以下四步: step1:调用moviein函数对内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个 ...
- matlab模糊推理,模糊推理系统的matlab代码
[实例简介] 该文件包中包含了6个文件,分别为不同的模糊推理系统,主要是用matlab编写的 [实例截图] [核心代码] fuzzy └── fuzzy ├── 158113737anfisExamp ...
- matlab神经模糊推理系统
%数据点个数51 numpts=51; x1=linspace(0,1,numpts); y=.6*sin(pi*x1)+.3*sin(3*pi*x1)+.1*sin(5*pi*x1); data=[ ...
- 利用MATLAB模糊控制器实现对水位高度调节SIMULINK仿真(隶属度7分级)
A.理论分析与设计 (1)确定模糊控制器的输入.输出变量 模糊控制器的两个输入变量,分别选为液位偏差E(设定液位高度r-实测液位高度y)和液位偏差变化率EC,输出模糊变量为控制阀门开度U: (2)确定 ...
- HFSS学习笔记(四)利用MATLAB脚本进行HFSS快速建模
HFSS学习笔记(四)利用MATLAB脚本进行HFSS快速建模 在HFSS中,我们经常会遇到复杂且重复的模型,比如你要画30个不同的矩形块,每个矩形块都有自己的参数比如,a1,a2,-,a30,那么此 ...
- ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码
我们前边四个部分已经完成了框架需要的基础配置, 现在我们来完成项目 1.Subsonic 配置,首先在OraSurvey.DAO中添加App.config配置相关信息 View Code 1 < ...
- RN学习笔记02:利用WebStorm创建RN项目
RN学习笔记02:利用WebStorm创建RN项目 在RN学习笔记01里,安装了node.js与react-native-cli,而且配置了环境变量. 在命令行环境,利用react-native in ...
- 5G NR学习理解系列——利用matlab工具生成5G NR信源
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 5G NR学习理解系列--利用matlab工具生成5G NR信源 前言 NR工具箱的使用 直接使用代码 前言 既然发现了4G LTE ...
最新文章
- Wireshark如何选择多行
- mybatis源码_MyBatis架构和源码
- shell 脚本逻辑判断
- 解决ubuntu下eclipse 经常崩溃的问题
- HDU 4609 3-idiots(FFT)
- Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化
- h5 神策埋点_咕咚技术总监唐平麟:神策使我们的数据平台成本降低约 75%,迭代效率提升 2~3 倍...
- pHp30充电宝能用快充吗,65W快充 30分钟充满电 是时候淘汰充电宝了吗?
- 计算机网络基础大学教材,《计算机网络技术及应用——大学计算机基础教育规划教材》低价购书_教材教辅考试_孔网...
- mysql 5.7.18源码包下载_MYSQL数据库CentOS6.9+Mysql5.7.18源码安装详细教程
- java输入一个字符给c赋值_C语言字符串的输入输出
- 直接访问WEB-INF目录下的JSP页面的方法
- 9个月宝宝还不会爬怎么办?
- 小 C 的数学(math)详解
- 2020职场自顾自说
- IAR设置flash偏移地址问题icf文件
- 怎么用c语言让电脑定时开关机,电脑定时开关机,教您怎么设置电脑定时开关机...
- 微信公众号 php sdk,GitHub - yuanchenglu/wechat-php-sdk: 微信公众平台 PHP SDK
- settextstyle() 设置文本型式函数
- 输入、输出电阻与带负载能力的总结
热门文章
- 选择应该会从这里开始改变你,眼袋
- 高层建筑结构健康监测:智能监测与预警守护建筑安全
- 抓取FTP登录名和密码
- [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720A
- python中下列表达式中返回true的是_下列表达式中,返回True的是()。
- C++函数指针定义及调用
- lambda函数式接口方法引用Sream
- (我决定发N个在线播放的电影出来,当然是免费以稳定,速度又快的)□ 影片名:《艺妓回忆录-新片》(3099)
- vulnhub靶机 Os-ByteSec
- 微信聊天机器人(推送天气早报、睡前故事、精美图片分享)