什么是AForge.NET?

AForge.NET是一个为开发人员和研究人员开发的框架,它可以用于计算机视觉,遗传算法,图像处理,神经网络,机器人学习与控制,机器学习和模糊系统。

AForge.NET的官方文档比较丰富,网上也有一些相关文章,但是多是关于视觉和神经网络的,而我个人对模糊系统比较感兴趣,故写下自己的一些感受。

模糊系统和模糊理论简述

模糊系统主要是区别于经典系统(或称为常规系统)。在研究人机系统,管理系统,特别是经济和社会系统时,由于加入人的逻辑、推理、判断,很多决策很难做到完全精确,这些和人有关的系统就拥有了某种模糊性。

在常规系统中,如果一个系统在某刻的状态和输入一旦决定,下个时刻的状态和输出就可以确定。如果下一个状态不能确定,但是可以给出概率分布,就成为随机系统。如果概率分布都不能给出,但是可以给出所有可能状态的集合,而且所有可能状态的集合使用模糊集合来表示,就成为模糊系统。

客观世界中普遍存在着模糊现象,比如“年轻人”和“老年人”就是模糊概念,它们没有明确内涵和外延,但是使用这些概念时却很少产生误解和歧义。可以说值逻辑只是理想世界的模型,而不是现实世界的模型。

隶属度函数(Membership Function)和模糊集合(Fuzzy sets)

隶属度函数是模糊系统的数学基础,它突破了经典集合理论的局限,模糊概念的定量表示成为可能。

棕色的曲线就是一个隶属度函数,0是不属于,1是完全属于。由于模糊性,所以用[0,1]上的数代替0和1。

而这个值就是就是属于模糊集合的程度。

而一个模糊集合可以分为两个部分,其中一个成为core,它是一个每个X的隶属度都是1的宽松集合。

还有一部分成为boundary,它包含了所有隶属度在0,1之间的元素。

隶属度函数的选择主要由模糊集合决定。如果某个集合含有大量的值或者它是连续的,那么一个参数化表示的隶属度函数是适合的,一般分段的线性隶属度函数(Piecewise linear membership functions)是比较好的,它简单而且在计算上是高效的。较常用的是梯形或者三角形,由4或3个参数定义。

以温度为例,在实际生活中我们常说多少度,冷不冷。多少度可以是一个确定的数值或者区间,但是冷不冷就不能固定化,很难找到固定的爆破值。一般可以大致成为冷,暖和,热。

可以认为该隶属度函数为A(x)=暖和。

这是热。

AForge.NET表示模糊集合和隶属度函数

需要用到到AForge,AForge.Fuzzy和AForge.Controls。

AForge是核心类,AForge.Fuzzy有关模糊系统的,而AForge.Controls是一些控件,比较常用的是表格(chart)控件。

可以去http://code.google.com/p/aforge/下载,然后引用需要的。我直接用的NuGet。

AForge.Fuzzy在NuGet没有哈。

PiecewiseLinearFunction类无疑是最灵活的,但是如果隶属度函数是梯形或者三角形,有个更快捷的类可供使用:TrapezoidalFunction。

比如我们要建立一个梯形的隶属度函数,如果:

有4个点要注意,(10,0)和(40,0),它们是boundary的边界。(20,0)和(30,0)是core的边界。

TrapezoidalFunction functionCool = new TrapezoidalFunction(10, 20, 30, 40);

FuzzySet fsCool = new FuzzySet("COLD", functionCool);

通过FuzzySet.GetMembership(i)获取隶属度。然后给chart控件一个二维数组就可以绘制了。

double[,] coolValues = new double[50, 2]; for (int i = 0; i < 50; i++) {     coolValues[i, 0] = i;     coolValues[i, 1] = fsCool.GetMembership(i); }
chart.UpdateDataSeries("COLD", coolValues); 

效果:

当然缺失一半边界的函数也是常用的

关键点是(30,0)和(40,0)。

TrapezoidalFunction functionCool = new TrapezoidalFunction(30,40,TrapezoidalFunction.EdgeType.Right); FuzzySet fsCool = new FuzzySet("WARM", functionCool);

double[,] coolValues = new double[50, 2]; for (int i = 0; i < 50; i++) {     coolValues[i, 0] = i;     coolValues[i, 1] = fsCool.GetMembership(i); }

chart.UpdateDataSeries("WARM", coolValues); 

效果:

三角形的函数:

TrapezoidalFunction functionCool = new TrapezoidalFunction(20,30,40);

当然PiecewiseLinearFunction可以有更丰富的表现,只需制定其中的关键点就可以构成很多函数了。

AForge.Point[] points = new AForge.Point[6];

points[0] = new AForge.Point(10, 0); points[1] = new AForge.Point(12, 0.8f); points[2] = new AForge.Point(20, 0.9f); points[3] = new AForge.Point(30, 1); points[4] = new AForge.Point(40, 0.1f); points[5] = new AForge.Point(50, 0);

PiecewiseLinearFunction membershipFunction = new PiecewiseLinearFunction(points);

FuzzySet fsCool = new FuzzySet("HOT", membershipFunction);

double[,] coolValues = new double[50, 2]; for (int i = 0; i < 50; i++) {     coolValues[i, 0] = i;     coolValues[i, 1] = fsCool.GetMembership(i); }

chart.UpdateDataSeries("HOT", coolValues); 

效果图:

还有一个特别的隶属度函数:SingletonFunction。它只要用于经典数值。

SingletonFunction membershipFunction = new SingletonFunction(20);

相关下载:http://www.ctdisk.com/file/4466992

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

  1. 模糊数学 1、模糊集、隶属度函数、如何确定隶属度函数

    ------------------------2021.3.14更新------------------------------ 一个关于模糊和概率的趣味小问题 模糊?还是概率?两杯水,一杯模糊有毒 ...

  2. 智能控制导论 # 模糊控制 - 理论基础:模糊数学 1 模糊集合和隶属度

    智能控制中解决控制问题并没有对被控对象进行精确的数学建模. 模糊控制是模拟人类的语言系统来进行控制,人类的语言描述中就具有模糊性. 更完善的引入见我的另一篇文章:link~ 在<智能控制导论&g ...

  3. 模糊集合和隶属度详解

    模糊集合老是喜欢用一堆专业术语来解释,看上去似乎很难懂,所以越看越烦. 下面我来白话解释一下. 论域 什么是论域?出现这个词感觉就很高大上,其实论域就是我们要讨论的集合,比如说,我们要研究人这个物种, ...

  4. matlab常用隶属度函数,常用隶属函数.ppt

    模糊集基本理论 典型隶属函数 如前所述, 构造恰当的隶属函数是模糊集理论应用的基础.一种基本的构造隶属函数的方法是"参考函数法", 即参考一些典型的隶属函数, 通过选择适当的参数, ...

  5. Matlab 中绘制模糊隶属度函数

    6.2模糊推理结构FIS 6.2.1不使用数据聚类方法从数据生成FIS结构 函数 genfis1 格式 fismat=genfis1(data) fismat=genfis1(data,numMFs, ...

  6. matlab 模糊控制 输出隶属度函数,模糊控制中的隶属度函数怎么确定

    满意答案 ZCD1993 2016.12.28 采纳率:47%    等级:12 已帮助:9218人 你说的应该是模糊控制的隶属度函数吧 (1)模糊统计法: 模糊统计法的基本思想是对论域U上的一个确定 ...

  7. matlab如何添加度,matlab里的模糊工具箱绘制隶属度函数曲线导入到word的方法

    在fuzzy logic toolbox里有 fuzzy membership function可以编辑隶属度函数,非常方便,但是我们写论文一般要把相应的曲线导入到word里,怎样将隶属度函数曲线导入 ...

  8. 模糊控制器隶属度函数绘制

    模糊控制器隶属度函数绘制 这里主要介绍两种方法,都是用MATLAB进行绘制,用Python绘图会报encoding编码的问题 隶属度函数有三角形隶属度函数.高斯隶属度函数.梯形隶属度函数等等 这里以三 ...

  9. 博途PLC模糊PID三角隶属度函数指令(含Matlab仿真)

    三角隶属度函数FC,我们采用兼容C99标准的函数返回值写法,在FB里调用会更加直观,下面给大家具体讲解代码.常规写法的隶属度函数FC可以参看下面的博文: 博途PLC模糊PID控制(附SCL完整源代码) ...

最新文章

  1. 2022-2028年中国急救中心行业发展战略规划及未来前景展望报告
  2. Altium Designer笔记2
  3. Java学完后从业薪资怎么样?前景如何?
  4. 2017西安交大ACM小学期数据结构 [分块、二维矩阵]
  5. 英文版Ubuntu 安装中文输入法
  6. 辨别 Python 中 load 和 loads 的小技巧
  7. windows系统nexus3安装和配置
  8. AOJ-351-求最值之差
  9. 如何才能快速提高自己的能力?!
  10. MATLAB编写自己的BP神经网络程序
  11. 两周,好多人的帮助解决select空列不显示的function
  12. RBF神经网络滑模控制
  13. (015) 自动加载
  14. 009_设备树属性的获取-以LED为例
  15. 可汗学院公开课:统计学
  16. win10 搜索本地应用没反应,Cortana显示已挂起 的解决办法
  17. 前端开发中的地理定位问题小总结
  18. mantis 重启mysql_Mantis -- linux
  19. wps底纹去不掉_WPS广告太多,关又关不掉,其实它有无广告的版本
  20. python米和厘米转换代码_用Python写一个朴素的长度单位转换器

热门文章

  1. 线性表的顺序存储结构——顺序表
  2. 基于禁忌搜索算法的TSP问题求解matlab仿真
  3. WORD 使用公式对齐和标注的小技巧
  4. 5613-2-冒泡排序
  5. C++11的更新内容--auto--右值引用和移动构造--1114
  6. 视频教程-区块链算法—共识算法-区块链
  7. 微信公众号获取openid(java后端+html实现)
  8. js判断手机上是否安装某APP
  9. 为什么mos管反相器要用pmos管和nmos管构成
  10. kettle(pdi)数据库连接中的密码的加密与解密