🤵♂️ 个人主页:@艾派森的个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
目录
模型引出
模糊数学
模型原理
经典集合基本概念
模糊集合和隶属函数
模糊集合的表示方法
模糊集合的分类
隶属函数的确定方法
评价问题概述
一级模糊综合评价模型
多层次模糊综合评价模型
Python代码实现
模型引出
模糊数学
- 如果我们问一个人的性别、身高、体重,可能很容易的得到答案,性别一般而言非男即女,身高和体重是可以精确测量的,这些是确定性概念。
- 但是如果问到大与小,长与短,美与丑等概念,就不好确定了,多大算大?多小算小?多长算长?怎么界定美丑?这种问题感觉有点儿抬杠似的,不过正是因为没有一个精确的范围,我们只能发出这样的疑问,这些就是模糊性概念。
模糊是指客观事物差异的中间过渡中的“不分明性”或“亦此亦彼性”。如高个子与矮个子、年轻人与老年人、热水与凉水、环境污染严重与不严重等。在决策中,也有这种模糊的现象,如选举一个好干部,但怎样才算一个好干部?好干部与不好干部之间没有绝对分明和固定不变的界限。这些现象很难用经典的数学来描述。
实际中,我们处理现实的数学模型可以分成三大类:第一类是确定性数学模型,即模型的背景具有确定性,对象之间具有必然的关系。第二类是随机性的数学模型,即模型的背景具有随机性和偶然性。第三类是模糊性模型,即模型的背景及关系具有模糊性。
1965 年,美国著名计算机与控制专家查德(L.A.Zadeh)教授提出了模糊的概念,并在国际期刊《Information and Control》发表了第一篇用数学方法研究模糊现象的论文“Fuzzy Sets”(模糊集合)开创了模糊数学的新领域。
模型原理
经典集合基本概念
集合:具有相同属性的事物的集体。例如:自然数集、实数集、颜色等。
集合的基本属性:
- 1)互斥性:若a∈A,b∈A,则a≠b
- 2)确定性:a∈A,a∉A有且仅有之一发生(非此即彼)
数学上对于经典集合的刻画特征函数::U→{0,1} U:论域 表示A集合的特征函数
模糊集合和隶属函数
模糊集合:用来描述模糊性概念的集合(美、丑、高、矮、年轻、年长)
与经典集合相比,模糊集合承认亦此亦彼
数学上对于模糊集合的刻画:
举一个简单的例子,我们要衡量“年轻”的概念A=“年轻”,X=(0,150)表示年龄的集合
在这里我们不好直接在0-150之间画个线把年轻和不年轻区分开,我们应该给一个隶属函数来进行描述。
对于X中的每一个元素,均对应A中的一个隶属度,隶属度介于[0,1],越大表示越属于这个集合。当年龄在0-20岁之间,它隶属度为1,意思就是当年龄小于20岁时,该年龄百分百属于年轻这个集合;当年龄在20-40岁之间,可以看出这是一个关于x的线性函数且单调递减,意思就是随着年龄的升高,它属于年轻的程度越来越低;当年龄x大于40岁时,隶属度为0,那就是完全属于不年轻的概念了。右边是两个隶属函数的图像,当x属于20-40之间,我们不仅可以用线性也可以用非线性来表示,但是大概趋势就是那样,毕竟是模糊的,我们很难去准确的描述。
上面的隶属函数,只是为了方便理解随意构造出来的,并不等同于真实的调查结果,但是依然反映了构造者的主观想法。事实上,隶属函数也不是唯一的,不同的人,不同大小的样本,得出的隶属函数很可能是不同的。简单来说,我理解的隶属度,就是元素属于某个模糊集合的程度,而隶属函数就是用来确定隶属度的函数。
模糊集合的表示方法
当论域为有限集时,以身高为例:
当论域为无限集时,
模糊集合的分类
模糊集合主要有三类,分别为偏小型,中间型和偏大型。其实也就类似于TOPSIS方法中的极大型、极小型、中间型、区间型指标。
举个例子,“年轻”就是一个偏小型的模糊集合,因为岁数越小,隶属度越大,就越“年轻”;“年老”则是一个偏大型的模糊集合,岁数越大,隶属度越大,越“年老”;而“中年”则是一个中间型集合,岁数只有处在某个中间的范围,隶属度才越大。总结来说,就是考虑“元素”与“隶属度”的关系,再类比一下,就是考虑隶属函数的单调性。
下图可以代表“年轻”、“中年”、“年老”这三个模糊集合的隶属函数图像:
不管模糊集合是哪一种类型,隶属度越大,属于这个集合的程度也越大。
隶属函数的确定方法
1)模糊统计法
模糊统计法的原理是,找多个人对同一个模糊概念进行描述,用隶属频率去定义隶属度例如我们想知道30岁相对于“年轻”的隶属度,那就找来n个人问一问,如果其中有m个人认为30岁属于“年轻”的范畴,那m/n就可以用来作为30岁相对于“年轻”的隶属度。 n越大时,越符合实际情况,也就越准确。这个方法比较符合实际情况,但是往往需要通过发放问卷或者其他手段进行调查。
2)借助已有的客观尺度
对于某些模糊集合,我们可以用已经有的指标去作为元素的隶属度。例如“小康家庭”这个模糊集合,就可以用“恩格尔系数(食品支出总额/家庭总支出)”衡量相应的隶属度。显而易见,家庭越接近小康水平,其恩格尔系数应该越低,那“1-恩格尔系数”就越大,我们便可以把“1-恩格尔系数”看作家庭相对于“小康家庭”的隶属度。注意:隶属度是在[0,1]之间的。如果找的指标不在,可以进行归一化处理。
3)指派法
指派法是一个主观性比较强的方法,即凭主观意愿,在确定模糊集合的所属分类后,给它指派一个隶属函数,得到元素的隶属度。这是最常用的方法之一,只需进行选择,便可得到隶属函数。下图是常用的模糊分布:
可以看出,对于偏小型模糊集合,隶属函数总体上递减,也就是元素的某个特征越大,隶属度越小;对于偏大型集合,隶属函数总体上递增,也就是元素的某个特征越大,隶属度越大;对于中间型集合,隶属函数总体上先递增后递减,中间一部分或是某个点取到最大值。
以上就是确定隶属函数的几种方法了。还有一些其他的方法,比如德尔菲法,二元对比排序法,综合加权法等等,有兴趣可以自己查阅。
评价问题概述
模糊评价问题是要把论域中的对象对应评语集中一个指定的评语或者将方案作为评语集并选择一个最优的方案。
在模糊综合评价中,引入三个集合:
例:评价一名学生的表现
U ={专业排名、课外实践、志愿服务、竞赛成绩}
V={优、良、差}
A={0.4、0.2、0.1、0.3}
模糊综合评价模型就是给定对象,用因素集的指标进行评价,从评语集中找到一个最适合它的评语。如果评语集中是方案的话,就是选出一个最恰当的方案。那这种“合适”用什么来衡量呢?显而易见嘛,就是隶属度,隶属于某个模糊集合的程度。
一级模糊综合评价模型
例1:在对企业员工进行考核时,在指标个数较少的考核中,可以运用一级模糊综合评判。
1)确定因素集:评判的因素构成的评价指标体系集合称为因素集
对员工的表现,需要从多个方面进行综合评判,如员工的工作业绩、工作态度、沟通能力、政治表现等记为 U={u1,u2,…,un}。这里取因素集 U={政治表现u1、工作能力u2、工作态度u3、工作成绩u4}
2)确定评语集:由各种不同决断构成的集合称为评语集
评价往往有不同的等级,对员工评价可能有好、较好、中等、较差、很差等记为 V={v1,v2,…,vn}这里取评语集 V={优秀v1、良好v2、一般v3、较差v4、差v5}
3)确定各因素的权重:因素集中各因素的评价中作用不同,需要确定权重,它是U上的模糊向量
判断权重的方法很多,如Delphi法等,也可以用我们讲过过的层次分析法和熵权法来确定权重记为 A=[a1,a2,…,an]。这里取 A=[0.25,0.2,0.25,0.3]
4)确定模糊综合判断矩阵
对指标来说,对各个评语的隶属度为V上的模糊子集,对指标的评判记为 =[] 各指标的模糊综合判断矩阵为:
这是一个从U到V的模糊关系矩阵。
对员工的评定如果由模糊统计法来确定:
①u1比如由群众打分确定
r1=[0.1,0.5,0.4,0,0]上式表示,参与打分的群众中,10%的人认为该员工政治表现优秀,50%的人认为其政治表现良好等。
②u2,u3由部门领导打分来确定
r2=[0.2,0.5,0.2,0.1,0] r3=[0.2,0.5,0.3,0,0]
③u4由单位考核组成员打分来确定
r4=[0.2,0.6,0.2,0,0]
形成以为第i行构成评价矩阵(模糊综合判断矩阵)
5)模糊综合评判,进行矩阵合成运算:
所有这里我们采用第四种方法进行矩阵相乘运算
得到的B行向量就是该员工对于评语集的一个隶属度,取数值最大的评语作为综合评判结果,则评判结果为“良好”。
例2:某露天煤矿有五个边坡设计方案,其各项参数根据分析计算结果得到边坡设计方案如下表:
据勘探,该矿探明储量8800吨,开采总投资不超过8000万元,试做出各方案的优劣排序,选出最佳方案。
分析:对于这个问题,我们首先要找到各个参数的隶属度,上个例题我们选择的是打分法,那这里打分法显然没那么合适,所以我们可以去构造隶属函数。
1)首先确定可采矿量的隶属函数
因为勘探的储量为8800吨(越多越好,为偏大型),故可用资源的利用函数作为隶属函数
2)基建投资的隶属函数
投资约束是8000万元(越少越好,为偏小型),所以隶属函数为
3)采矿成本的隶属函数
根据专家意见,采矿成本≤5.5元/吨为低成本,=8.0元/吨为高成本,故
4)不稳定费用的隶属函数
从前面的表数据可知,最大的不稳定费用为200万元,故
5)净现值的隶属函数
取上限1500万元,下限50万元,采用线性隶属函数
6)根据各个隶属函数计算出5个方案所对应的不同隶属度
接着把表格转为矩阵形式,即确定单因素评判矩阵
根据专家评价,诸因素在决策中占的权重为A=(0.25,0.20,0.20,0.10,0.25)
注:没有专家可以用熵权法、层次分析法等。
7)综合评价
B=A·R=(0.7435,0.5919,0.6789,0.3600,0.3905)
由此可知:方案1最佳,方案3次之,方案4最差。
多层次模糊综合评价模型
1)给出被评价的对象集合X={x1,X2,…,Xk}
2)确定因素集(亦称指标体系)U ={u,uz,…,un}
若因素众多,往往将U={u1,u2,…,un}按某些属性分成s个子集
3)确定评语集V = {v1,V2,…,vm}
4)由因素集与评语集V,可获得一个评价矩阵
5)对每一个,分别作出综合决策
6)将每个视为一个元素,记U ={U,U2,…,Us},于是U又是单因素集,U的单因素判断矩阵为
每个作为U的一部分,反映了U的某种属性,可以按他们的重要性给出权重分配
A =(a1,a2,.,as)
于是得到二级模糊综合评价模型为:
B=A·R=(b1,b2,…,bm)
若每个子因素(i=1,2,…,s)仍有较多因素,则可将再划分,于是有三级或更高级模型。
这里我们还是结合例题进行讲解
例:对某陶瓷厂生产的6种产品的销售前景进行评判
1)影响评判对象因素集的选取
从产品情况、销售能力、市场需求三个方面考虑,根据专家评判法,得到评判对象因素集及子因素组成下图,因素后面数据表示权重
2)备择集V={1,2,3,4,5,6}代表6种不同的陶瓷产品
3)一级模糊综合评价
“运行费用”下属的三级指标是定量指标,有具体数据,对这些数据归一化即求出各种产品的该指标与总指标的比重,得到单因素隶属度;由于其他因素均为定性指标,通过市场调查,把消费者的满意度作为单因素的隶属度,6种产品的单因素隶属度如下表:
影响运行费用的各因素的单因素评价矩阵为:
权重分配为:=[0.20,0.15,0.10,0.10,0.20 ,0.15, 0.10],则运行费用的一级评判为:
==[0.1910,0.1565,0.1595,0.1465,0.1505, 0.1960]
4)二级模糊综合评判
对产品情况、销售能力、市场需求下属的单因素指标进行二级评判
产品情况的二级评判如下:
将运行费用的一级评判结果作为二级评判的单因素评价值,即评判矩阵的第三行,则销售能力二级评判如下:
市场需求的二级评判:
5)三级模糊综合评价
将二级评判结果作为行,组成三级评判的单因素评判矩阵
权重及A=[0.40,0.30,0.30]
B=A·R=[0.1480,0.1428,0.1562,0.1863,0.1575,0.2093]
由结果可知,产品6得分最高,可加大投资,产品1、2得分较低,应减少投资。
Python代码实现
这里我们以多层次模糊综合评价模型里的例题进行代码演示,代码里的运算很简单,主要为矩阵之间的乘法,将对应的评价矩阵和权重给出即可。
import numpy as np
# 1、一级模糊综合评判
# 影响运行费用的各因素的单因素评价矩阵为:
R23 = np.array([
[0.18,0.14,0.18,0.14,0.13,0.23],
[0.15,0.20,0.15,0.25,0.10,0.15],
[0.25,0.12,0.13,0.12,0.18,0.20],
[0.16,0.15,0.21,0.11,0.20,0.17],
[0.23,0.18,0.17,0.16,0.15,0.11],
[0.19,0.13,0.12,0.12,0.11,0.33],
[0.17,0.16,0.15,0.08,0.25,0.19]])
# 权重分配为
A23 = np.array([0.20,0.15,0.10,0.10,0.20,0.15,0.10])
# 评价结果
# np.dot是Numpy库中的一个函数,用于计算两个数组的点积。对于一维数组,它计算的是这两个效组的内积。
# 对于二维效组(矩阵),它计算的是阵乘法。
B23 = np.dot(A23,R23)
print('B23=',B23)
# 2、二级模糊综合评判
# 产品情况的二级评判如下,
R1 = np.array([
[0.12,0.18,0.17,0.23,0.13,0.17],
[0.15,0.13,0.18,0.25,0.12,0.17],
[0.14,0.13,0.16,0.18,0.20,0.19],
[0.12,0.14,0.15,0.17,0.19,0.23],
[0.16,0.12,0.13,0.2,0.18,0.16]])
A1 = np.array([0.15,0.40,0.25,0.10,0.10])
B1 = np.dot(A1,R1)
print('B1=',B1)
# 销售能力二级评判如下,
R2 = np.array([
[0.13,0.15,0.14,0.18,0.16,0.25],
[0.12,0.16,0.13,0.17,0.19,0.23],
B23,
[0.14,0.13,0.15,0.16,0.18,0.24],
[0.16,0.15,0.15,0.17,0.18,0.19]])
A2 = np.array([0.2,0.15,0.25,0.25,0.15])
B2 = np.dot(A2, R2)
print('B2=',B2)
# 市场需求的二级评判
R3 = np.array([
[0.15,0.14,0.13,0.18,0.14,0.26],
[0.16,0.15,0.18,0.14,0.16,0.21]])
A3 = np.array([0.55,0.45])
B3 = np.dot(A3,R3)
print('B3=',B3)
# 3、三级模糊综合评判
R = np.array([B1,B2,B3])
A = np.array([0.4,0.3,0.3])
B = np.dot(A,R)
print('B=',B)
运行结果:
可以发现结果与上面的例题是一样的,最终还是产品6得分最高。
资料获取,更多粉丝福利,关注下方公众号获取