模糊语意变数、规则和模糊运算--AForge.NET框架的使用(二)

原文:模糊语意变数、规则和模糊运算--AForge.NET框架的使用(二)

语意变数(Linguistic Variable)

语意变数存储了数个语意量(标签),每个语意量包含一个识别名和模糊集合。在宣告陈述时每个语意量只能和在同一变数中的语意比较。

举个很简单的例子,我们有一个名为temperature的语意变数,它包含4个语意量,名为cold、cool、warm、hot,这也是各自的标签名,同时它们还有各自的隶属度函数。

那么我们就在接下来的系统中使用诸如temperature is hot或者temperature is not hot等等了。


//语意变数的声明 LinguisticVariable lvTemperature = new LinguisticVariable("Temperature", 0, 50);

//模糊集合和隶属度函数 TrapezoidalFunction function1 = new TrapezoidalFunction(10, 15, TrapezoidalFunction.EdgeType.Right); FuzzySet fsCold = new FuzzySet("Cold", function1); TrapezoidalFunction function2 = new TrapezoidalFunction(10, 15, 20, 25); FuzzySet fsCool = new FuzzySet("Cool", function2); TrapezoidalFunction function3 = new TrapezoidalFunction(20, 25, 30, 35); FuzzySet fsWarm = new FuzzySet("Warm", function3); TrapezoidalFunction function4 = new TrapezoidalFunction(30, 35, TrapezoidalFunction.EdgeType.Left); FuzzySet fsHot = new FuzzySet("Hot", function4);

//添加标签 lvTemperature.AddLabel(fsCold); lvTemperature.AddLabel(fsCool); lvTemperature.AddLabel(fsWarm); lvTemperature.AddLabel(fsHot);

//获取隶属度 Console.WriteLine("Input; Cold; Cool; Warm; Hot"); for (float x = 0; x < 50; x += 1f) {     float y1 = lvTemperature.GetLabelMembership("Cold", x);     float y2 = lvTemperature.GetLabelMembership("Cool", x);     float y3 = lvTemperature.GetLabelMembership("Warm", x);     float y4 = lvTemperature.GetLabelMembership("Hot", x);

Console.WriteLine(String.Format("{0:N}; {1:N}; {2:N}; {3:N}; {4:N}",x, y1, y2, y3, y4)); }

模糊规则(Fuzzy Rule)与数据库(Fuzzy Database)

在拥有语意变数后,我们就创建表述(Statement),它是一种表达,可以做成判断,比如什么是什么,什么不是什么。

而规则(Rule)是可以被模糊系统执行的语意指令。如什么是什么时,就怎么。最简单的就是这种:

IF antecedent THEN consequent

前提(antecedent )一般由多个由模糊运算符连接的子句组成。如:

...Clause1 AND (Clause2 OR Clause3) AND NOT Clause4 ...

结果(consequent)一般由赋值子句组成,这里的赋值不光是Variable1 IS Value1,Variable1 IS Not Value1同样支持。

举个例子,再创建一个语意变数,Wind,标签有Strong、BreezeAirless。

那么一下规则就是有效的:

IF Wind IS Strong THEN Temperature IS Cold

IF Wind IS AirlessTHEN Temperature IS NOT Cold

数据库(Fuzzy Database)是一个包含语意变数和相应规则的资料集合,它可以被模糊推理系统(Fuzzy Inference System)使用。

//语意变数的声明 LinguisticVariable lvTemperature = new LinguisticVariable("Temperature", 0, 50);

//模糊集合和隶属度函数 TrapezoidalFunction function1 = new TrapezoidalFunction(10, 15, TrapezoidalFunction.EdgeType.Right); FuzzySet fsCold = new FuzzySet("Cold", function1); TrapezoidalFunction function2 = new TrapezoidalFunction(10, 15, 20, 25); FuzzySet fsCool = new FuzzySet("Cool", function2); TrapezoidalFunction function3 = new TrapezoidalFunction(20, 25, 30, 35); FuzzySet fsWarm = new FuzzySet("Warm", function3); TrapezoidalFunction function4 = new TrapezoidalFunction(30, 35, TrapezoidalFunction.EdgeType.Left); FuzzySet fsHot = new FuzzySet("Hot", function4);

//添加标签 lvTemperature.AddLabel(fsCold); lvTemperature.AddLabel(fsCool); lvTemperature.AddLabel(fsWarm); lvTemperature.AddLabel(fsHot);

//语意变数的声明 LinguisticVariable lvWind = new LinguisticVariable("Wind", 0, 50);

//模糊集合和隶属度函数 TrapezoidalFunction functionw1 = new TrapezoidalFunction(25, 40, TrapezoidalFunction.EdgeType.Right); FuzzySet fsStrong = new FuzzySet("Strong", function1); TrapezoidalFunction functionw2 = new TrapezoidalFunction(10, 15, 25, 30); FuzzySet fsBreeze = new FuzzySet("Breeze", function2); TrapezoidalFunction functionw3 = new TrapezoidalFunction(5,10,TrapezoidalFunction.EdgeType.Left); FuzzySet fsAirless = new FuzzySet("Airless", function3);

//添加标签 lvWind.AddLabel(fsStrong); lvWind.AddLabel(fsBreeze); lvWind.AddLabel(fsAirless);

//创建数据库 Database db = new Database(); db.AddVariable(lvTemperature); db.AddVariable(lvWind);

//书写规则 Rule r1 = new Rule(db, "Thinking1", "IF Wind IS Strong THEN Temperature IS Cold"); Rule r2 = new Rule(db, "Thinking2", "IF Wind IS AirlessTHEN Temperature IS NOT Cold"); 

模糊运算

以下全是数学相关物…不喜者勿入。

模糊运算主要针对模糊集合,有3种:联集(union)、补集(complement)与交集(intersection),而依照不同定义有不同的型态。

1.交集中:

标准交集(standard intersection):t (p,q) = min (p,q)

代数乘积(algebraic product):t (p,q) = pq

有界差异(bounded different):t (p,q) = max (0, p+q-1)

彻底交集(drastic intersection):

2.联集中:

标准联集(standard intersection):s (p,q) = max (p,q)

代数加法(algebraic product): s (p,q) = p + q -pq

有界加法(bounded different): s (p,q) = min (1, p+q)

彻底联集(drastic intersection):

本来还想写模糊合成的…但是没找到可以画矩阵的软件,matlab画出来太丑了。

写在最后:

1.本文参考了很多文档和资料,特别是相关英文的对应翻译上,主要参考http://www.academia.edu相关讨论和台湾一些院校的研究报告。

2.有个不错的PPT,可以看一下:http://www.ctdisk.com/file/4479740

时间: 2024-10-29 19:11:35

模糊语意变数、规则和模糊运算--AForge.NET框架的使用(二)的相关文章

人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五)

原文:人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五) 前面4篇文章说的是模糊系统,它不同于传统的值逻辑,理论基础是模糊数学,所以有些朋友看着有点迷糊,如果有兴趣建议参考相关书籍,我推荐<模糊数学教程>,国防工业出版社,讲的很全,而且很便宜(我买成7元钱). 人工神经网络的简介 人工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型.它是一种运算模型,由大量神经元和相互的连接组成,每个神经元代表一种特定的输出函数,称为激励函数(activati

基于AForge.Net框架的扑克牌识别

原文:基于AForge.Net框架的扑克牌识别 © 版权所有 野比 2012 原文地址:点击查看 作者:Nazmi Altun Nazmi Altun著,野比 译  下载源代码 - 148.61 KB  下载demo - 3.1 MB 介绍 (图片上的字:方块4,方块J,黑桃2) 用机器人配上扑克牌识别系统,就可以在二十一点一类的扑克游戏中扮演荷官或是人类玩家的角色.实现这样的程序同样也是学习计算机视觉和模式识别的好途径. 本文涉及到的AForge.NET框架技术有二值化.边缘检测.仿射变换.B

模糊集合和隶属度函数--AForge.NET框架的使用(一)

原文:模糊集合和隶属度函数--AForge.NET框架的使用(一) 什么是AForge.NET? AForge.NET是一个为开发人员和研究人员开发的框架,它可以用于计算机视觉,遗传算法,图像处理,神经网络,机器人学习与控制,机器学习和模糊系统. AForge.NET的官方文档比较丰富,网上也有一些相关文章,但是多是关于视觉和神经网络的,而我个人对模糊系统比较感兴趣,故写下自己的一些感受. 模糊系统和模糊理论简述 模糊系统主要是区别于经典系统(或称为常规系统).在研究人机系统,管理系统,特别是经

位运算简介及实用技巧(二):进阶篇(1)[转]

位运算简介及实用技巧(二):进阶篇(1) 原贴链接:http://www.matrix67.com/blog/archives/264 =====   真正强的东西来了!   ===== 二进制中的1有奇数个还是偶数个    我们可以用下面的代码来计算一个32位整数的二进制中1的个数的奇偶性,当输入数据的二进制表示里有偶数个数字1时程序输出0,有奇数个则输出1.例如,1314520的二进制101000000111011011000中有9个1,则x=1314520时程序输出1.var   i,x,

【OpenCV教程之九】平滑/模糊图片 Smooth / Blur Images及 彩色图转 灰度图和二值化

这一节,谈一谈如何对图像进行平滑,也可以叫做模糊.平滑图像的主要目的是减少噪声,这样采用平滑图像来降低噪声是是非常常见的预处理方法. 1.归一化滤波平滑-Homogeneous Smoothing 2.高斯滤波平滑-Gaussian Smoothing 3.中值滤波平滑-Median Smoothing 4.双边滤波平滑-Bilateral Smoothing 平滑是通过滑动窗口(内核或过滤器)扫描整个图像窗口,计算每个像素的基于核的值的和重叠的原始图像的像素的值的值来完成.这个过程在数学上称为

jQuery模糊匹配checkbox全选 value实现checkbox部分或全部全选

本文章总结jQuery实现checkbox三种情况的全选功能 第一种:等值全选,也称name的等值全选,通过checkbox的名称name实现. 第二种:模糊全选,也称id模糊全选,通过checkbox的id或value值实现. 第三种:值范围全选,也称value值范围全选,通过checkbox的value值实现,或者截取id数字后缀范围判断实现. 等值全选 在工作中经常会用到checkbox的全选功能,平时大家用得最多的全选和反选是第一种,一般都是基于全部名称相同的checkbox进行实现,这

最快速的“高斯”模糊算法(附Android源码)

? 这是一个外国人的算法,本人是搬运工.参考:http://blog.ivank.net/fastest-gaussian-blur.html ? 1:高斯模糊算法(参考:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html) 所谓的模糊算法就是当前像素点和周围像素点进行加权均值之后的结果替换当前像素值.因此均值模糊是最简单的,只要将周围的像素点相加取平均值即可. ????而高斯模糊则是将周围的像素点的权值按照高斯分布进行取值,即根据

iOS实现图像指定区域模糊

在大多图像处理中,我们会应用到高斯模糊处理图像,通常用它来减少图像噪声以及降低细节层次.在此文中介绍了高斯模糊的实现和可选区域的模糊[美图秀秀-背景虚化] 高斯模糊的原理中,它是根据高斯曲线调节像素色值,它是有选择地模糊图像.说得直白一点,就是高斯模糊能够把某一点周围的像素色值按高斯曲线统计起来,采用数学上加权平均的计算方法得到这条曲线的色值,最后能够留下人物的轮廓,即曲线.是指当 Adobe Photoshop 将加权平均应用于像素时生成的钟形曲线.在PS中间,你应该知道所有的颜色不过都是数字

永远要回避模糊的事务和技术的难度

永远不要回避模糊的事务和技术难度 对某件事物或者技术的回避心态,是产生于对事物本身的模糊焦虑,克服这种模糊焦虑的心态给技术或者商务人员所造成的困难,远难于事物或者技术本体的困难,而克服这种模糊焦虑感的关键就是不断的重组各方面发来的情报和零星的技术碎片资料,使其形成一种判断的逻辑链条,然后取证.论证.和反证这个链条,事物将逐步变清晰,执行这个过程的原则在于:一.技术和商务人员自己要有属于自己思想,自身要有判别性,绝不可附庸于大众,因为真相永远很简单,但只有少数人知道,或许这就是所谓的真理只在少数人