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

简介: 原文:模糊集合和隶属度函数--AForge.NET框架的使用(一)什么是AForge.NET? AForge.NET是一个为开发人员和研究人员开发的框架,它可以用于计算机视觉,遗传算法,图像处理,神经网络,机器人学习与控制,机器学习和模糊系统。
原文: 模糊集合和隶属度函数--AForge.NET框架的使用(一)

什么是AForge.NET?

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

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

模糊系统和模糊理论简述

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

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

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

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

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

membership1

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

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

membership2

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

c1

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

c2

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

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

c3

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

c4

 

c5

这是热。

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

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

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

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

membership3

AForge.Fuzzy在NuGet没有哈。

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

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

c3

有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); 

效果:

membership4

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

c4

关键点是(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);

效果:

membership5

三角形的函数:

membership6

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);

效果图:

membership7

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

SingletonFunction membershipFunction = new SingletonFunction(20);

membership8

 

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

目录
相关文章
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
1070 3
|
设计模式 开发框架 JavaScript
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
651 0
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
857 23
|
消息中间件 开发框架 监控
NET任务调度框架Hangfire使用指南
Hangfire 是一个用于 .NET 应用程序的开源任务调度框架,支持长时间运行任务、定时任务等。通过简单的安装配置,即可将任务从主线程分离,提升应用性能。支持多种数据库,提供丰富的任务类型如立即执行、延迟执行和周期性任务,并有可视化管理界面 Hangfire Dashboard。还支持安全性配置及扩展插件,如 Hangfire.HttpJob,适合各种复杂场景下的任务调度需求。
1741 1
NET任务调度框架Hangfire使用指南
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
788 5
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
440 5
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
261 4
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
495 4
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
1053 3
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
560 3