傻瓜攻略(八)——MATLAB实现模糊综合评判(两种运算方法)

模糊综合评判法

模糊综合评价法是一种基于模糊数学(fuzzy mathematics)的综合评价方法。该综合评价法根据模糊数学的隶属度理论把定性评价转化为定量评价,即用模糊数学对受到多种因素制约的事物或对象做出一个总体的评价。它具有结果清晰,系统性强的特点,能较好地解决模糊的、难以量化的问题,适合各种非确定性问题的解决。

在司守奎《数学建模算法与应用》(第2版)一书的14.2节,介绍了将该方法用于多目标决策的过程,实现了在人事考核中运用模糊综合评判。本文中的数据和步骤都基于此书的内容,重点在于代码。

一级模糊综合评判的步骤

一级评判的运算较为简单,没有专门的程序,重在理解其思路。
(1)确定因素集。对员工的表现,需要从多个方面进行综合评判,如员工的工作业绩、工作态度、沟通能力、政治表现等。所有这些因素构成了评价指标体系集合,即因素集,记为
图1

(2)确定评语集。由于每个指标的评价值的不同,往往会形成不同的等级。如对工作业绩的评价有好、较好、中等、较差、很差等。由各种不同决断构成的集合称为评语集,记为
图2

(3)确定各因素的权重。一般情况下,因素集中的各因素在综合评价中所起的作用是不相同的,综合评价结果不仅与各因素的评价有关,而且在很大程度上还依赖于各因素对综合评价所起的作用,这就需要确定一个各因素之间的权重分配,它是U上的一个模糊向量,记为
图3

其中,所有a的和为1。
权重的确定方法很多,在实际运用中常用的方法有:Delphi法、专家调查法和层次分析法。这一步往往是影响最终结果的重要原因。

(4)确定模糊综合判断矩阵。对n个指标来说,每个指标都有m个评语等级,构成n*m的矩阵R,R是一个从U到V的模糊关系矩阵。
傻瓜攻略(八)——MATLAB实现模糊综合评判(两种运算方法)_第1张图片

(5)综合评判。如果有一个从U到V的模糊关系R,那么利用R就可以得到一个模糊变换
图5

由此变换,就可以得到综合评判结果B = A·R。综合后的评判可以看作是V上的模糊向量,记为
图6

多层级模糊综合评判

对于一些复杂的系统,如人事考核中涉及的指标较多时,需要考虑的因素很多,这时如果仍用一级模糊综合评判,则会出现两个方面的问题:一是因素过多,它们的权数分配难以确定;另一方面,即使确定了权分配,由于需要满足归一化条件,每个因素的权值都小,对这种系统,可以采用多层次模糊综合评判方法。对于人事考核而言,采用二级系统就足以解决问题了,如果实际中要划分更多的层次,那么可以用二级模糊综合评判的方法类推。

实现的思路是将每一个原指标作为一级指标,划分出二级指标,从而可以对一级指标进行评判。然后根据结果再进行一次评判。
只有一级指标时,一级指标的评价分数由其他方法给出。划分出二级指标后,由其他方法给出二级指标的评价分数。下图即为某位员工的二级指标打分情况。将一级评判的结果作为一级指标的打分。具体步骤可见程序。

傻瓜攻略(八)——MATLAB实现模糊综合评判(两种运算方法)_第2张图片

待处理数据

复制以下数据并保存在mhdata.txt文件中,即上图中的二级指标打分表。

0.8	0.15	0.05	0	0
0.2	0.6	0.1	0.1	0
0.5	0.4	0.1	0	0
0.1	0.3	0.5	0.05	0.05
0.3	0.5	0.15	0.05	0
0.2	0.2	0.4	0.1	0.1
0.4	0.4	0.1	0.1	0
0.1	0.3	0.3	0.2	0.1
0.3	0.2	0.2	0.2	0.1
0.1	0.3	0.5	0.1	0
0.2	0.3	0.3	0.1	0.1
0.2	0.3	0.35	0.15	0
0.1	0.3	0.4	0.1	0.1
0.1	0.4	0.3	0.1	0.1
0.3	0.4	0.2	0.1	0
0.1	0.4	0.3	0.1	0.1
0.2	0.3	0.4	0.1	0
0.4	0.3	0.2	0.1	0

原代码

书中实现的代码在其附件的ex14_3.m文件中,其中,一级和二级指标权重都是经过其他方法确定的。

但是其运算的过程是简单的矩阵运算,在前面的步骤介绍中也是B = A·R,由矩阵的相乘得到评判结果。

clc, clear
a=load('mhdata.txt');
% 一级指标权重
w=[0.4  0.3  0.2  0.1];     
% 二级指标权重
w1=[0.2  0.3  0.3  0.2];   
w2=[0.3  0.2  0.1  0.2  0.2];
w3=[0.1  0.2  0.3  0.2  0.2];
w4=[0.3  0.2  0.2  0.3];
% 对子因素进行一级模糊综合评判
b(1,:)=w1*a([1:4],:);
b(2,:)=w2*a([5:9],:);
b(3,:)=w3*a([10:14],:);
b(4,:)=w4*a([15:end],:);
% 进行二级模糊综合评判,c即为评判结果
c=w*b

运行结果为“优秀、良好、一般、较差、差”五个评价等级的打分。

c =

    0.2880    0.3540    0.2355    0.0865    0.0360

可以看到,综合评价结果在“良好”一项分数最高,根据最大隶属度原则,可以认为对该员工的评价良好。

改进代码

对模糊综合评判中的矩阵运算,应该进行模糊运算,将矩阵相乘中的相乘变为取小,相加变为取大。以下代码中变进行了如此操作,遗憾的是由于我的水平原因,实现的方法较为粗笨,希望以后能找到更方便的方法。

clc, clear
a=load('mhdata.txt'); 
% 一级指标权重
w=[0.4  0.3  0.2  0.1];
% 二级指标权重,对应4个一级指标
w1=[0.2  0.3  0.3  0.2];
w2=[0.3  0.2  0.1  0.2  0.2];
w3=[0.1  0.2  0.3  0.2  0.2];
w4=[0.3  0.2  0.2  0.3];
%% 一级模糊综合评判
b1 = [];   %保存一级评判结果

w0 = w1';          %指标权重应为列向量m*1
b0 = a([1:4],:);   %指标应与列向量对应m*n
% 以下为固定操作,进行模糊运算
c0 =[];  %临时结果
for i =1:max(size(b0))
    for j= 1:max(size(w0))
        c0(j,i)= min(w0(j,:),b0(j,i));
    end
    c0(j+1,i) = max(c0(:,i));
end
b1(1,:) = c0(j+1,:);

w0 = w2';            %指标权重应为列向量m*1
b0 = a([5:9],:);     %指标应与列向量对应m*n
c0 =[];%临时结果
for i =1:max(size(b0))
    for j= 1:max(size(w0))
        c0(j,i)= min(w0(j,:),b0(j,i));
    end
    c0(j+1,i) = max(c0(:,i));
end
b1(2,:) = c0(j+1,:);

w0 = w3';            %指标权重应为列向量m*1
b0 = a([10:14],:);   %指标应与列向量对应m*n
c0 =[];%临时结果
for i =1:max(size(b0))
    for j= 1:max(size(w0))
        c0(j,i)= min(w0(j,:),b0(j,i));
    end
    c0(j+1,i) = max(c0(:,i));
end
b1(3,:) = c0(j+1,:);

w0 = w4';            %指标权重应为列向量m*1
b0 = a([15:end],:);  %指标应与列向量对应m*n
c0 =[];%临时结果
for i =1:max(size(b0))
    for j= 1:max(size(w0))
        c0(j,i)= min(w0(j,:),b0(j,i));
    end
    c0(j+1,i) = max(c0(:,i));
end
b1(4,:) = c0(j+1,:);
%% 二级模糊综合评判
w0 = w';
b0 = b1;
c0 =[];
for i =1:max(size(b0))
    for j= 1:max(size(w0))
        c0(j,i)= min(w0(j,:),b0(j,i));
    end
    c0(j+1,i) = max(c0(:,i));
end

c2 = c0(j+1,:)%二级评判结果

运行结果与原代码有区别,但是大体趋势相似。对此员工的综合评价在优秀和良好之间。


c2 =

    0.3000    0.3000    0.2000    0.2000    0.1000

笔者的其他博客,欢迎大家阅读学习,共同进步
傻瓜攻略(一)——MATLAB主成分分析代码及结果分析实例

MATLAB中plotconfusion函数的应用

傻瓜攻略(二)——MATLAB数据挖掘之Apriori算法实现

win10系统中通过conda命令安装tensorflow(cpu版本,不用pip)

你可能感兴趣的:(MATLAB傻瓜攻略,算法,matlab,模糊综合评判)