01【评价类】模型——层次分析法
目录
一、引述
引例:
小明在高考之后填报志愿在华中科技大学和武汉大学之间纠结,请你帮助小明如何抉择?
小明关心的指标及其权重:
学习氛围(0.4)
就业前景(0.3)
男女比例(0.2)
校园景色(0.1)
再让小明根据个指标给这两个学校打分(即得到这两个学校相对于某一指标的权重):
小明的打分如下:
指标\学校
华科
武大
学习氛围
0.7 0.3
就业前景
0.5 0.5
男女比例
0.3 0.7
校园景色
0.25 0.75
得到
权重表
,
再根据权重表计算两个学校的得分:
华科最终得分:0.515
0.7 * 0.4 + 0.5 * 0.3 + 0.3 * 0.2 + 0.25 * 0.1 = 0.515
武大最终得分:0.485
0.3 * 0.4 + 0.5 * 0.3 + 0.7 * 0.2 + 0.75 * 0.1 = 0.485
小结:
二、 层次分析法的应用
例题:填好志愿后,小明同学想出去旅游。在查阅了网上的攻略后,他初步选择 了苏杭、北戴河和桂林三地之一作为目标景点。 请你确定评价指标、形成评价体系来为小明同学选择最佳的方案。
评价的目标:选择最佳旅游景点;
评价的指标(准则):
未知
;评价的方案:苏杭、北戴河、桂林。
题目中并未告诉我们评价的指标是什么,因此需要我们自己查找(
背景材料、常识以及网上搜集到的参考资料
),可以得到这五个指标(
景色、花费、居住、饮食、交通
)。
最终我们是为了得到一个
权重表
(如图1-1)来计算各个方案的得分,那我们可以像引例中的小明选择学校那样让小明自己给学校打分来确定权重表吗?显然是不行的,因为那样主观性较强,不容易使人所接受,因此提出
一致矩阵法
。
一致矩阵法:
1.不把所有因素放在一起比较,而是
两两相互比较
;2.对此时采用相对尺度,以尽可能减少性质不同的诸多因素相互比较的困难以提高准确度。
2.1 建立层次结构模型
2.2 构造判断矩阵
2.2.1 求指标间的判断矩阵
根据小明的回答再依照这张表来构造
判断矩阵
(成对比较矩阵):
Q1: 根据右边这个表,请你在选择旅游目的地时,比较景色和花费的重要程度。
A1: 我认为花费比景色略微重要(介于同等重要1和稍微重要3之间吧) 1/2
Q2: 根据右边这个表,请你在选择旅游目的地时,比较景色和居住的重要程度。
A2: 我认为景色比居住要重要一点(介于稍微重要3和明显重要5之间吧
… …
因此得到A1~A5这五个指标之间的判断矩阵:
2.2.2 求对于各指标的方案之间的判断矩阵
Q1:你觉得苏杭的风景和北戴河相比如何?
A1:稍微好一点点吧(介于1‐3之间)
Q2:你觉得苏杭的风景和桂林相比如何?
A2:要明显的好哦(5)
Q3:你觉得北戴河的风景和桂林相比如何?
A3:稍微好一点点吧(介于1‐3之间)
… …
对于各指标的三个方案之间的判断矩阵:
2.3 一致性检验
为什么要对判断矩阵进行一致性检验?
判断矩阵具有传递性,即:
以图2-7为例,
:苏杭,
:北戴河,
:桂林
(苏杭/北戴河=3)
(北戴河/桂林=1)
(
苏杭/桂林=4
)理论上:
=3*1=3,但实际上
=4,所以出现了不一致的现象。
注明:允许不一致,但要确定不一致允许的范围。
1.若矩阵中每个元素
> 0且满足
*
= 1 ,则我们称该矩阵为
正互反矩阵
。2.在层次分析法中,我们构造的判断矩阵均是正互反矩阵。 若正互反矩阵满足
*
=
,则我们称其为
一致矩阵
2.3.1 计算一致性指标CI
注明:
是n阶正互反矩阵A的最大特征值
(不太理解)
2.3.2 查找对应的平均随机一致性指标RI
2.3.3 计算一致性比例CR
如果CR < 0.1, 则可认为判断矩阵的一致性可以接受;否则需要对 判断矩阵进行修正。
2.4 计算判断矩阵的权重
2.4.1 算术平均法求权重
对于图2-4(对于景色指标的三个方案之间的判断矩阵):
仅使用第一列的数据,计算出来的权重:
苏杭 = 1 /(1+0.5+0.2)= 0.5882
北戴河 = 0.5 /(1+0.5+0.2)= 0.2941
桂林 = 0.2 /(1+0.5+0.2)= 0.117
使用第二列的数据,计算出来的权重:
苏杭 = 2 /(2+1+0.5)= 0.5714
北戴河 = 1 /(2+1+0.5)= 0.2857
桂林 = 0.5 /(2+1+0.5)= 0.142
使用第三列的数据,计算出来的权重:
苏杭 = 5 /(5+2+1)= 0.625
北戴河 = 2 /(5+2+1)= 0.25
桂林 = 1 /(5+2+1)= 0.125
由此可得到
归一化
的判断矩阵
将归一化的矩阵
按行求和
将求和之后的矩阵
除以判断矩阵的阶数n
2.4.2 几何平均法求权重
几何平均法求权重有三步:
第一步:将A的元素
按照行相乘
得到一个新的列向量第二步:将新的向量的每个分量
开n次方
第三步:对该列向量进行
归一化
即可得到权重向
2.4.3 特征值法求权重
暂略
三、层次分析法程序实现(MATLAB)
下面代码只用了
算术平均法
方法计算权重:
disp('请输入判断矩阵:');
A=input('A=');
[n1,n2]=size(A);
error=0;
%检查该判断矩阵的合法性
if(n1~=n2)
disp('矩阵A不是一个方阵');
error=1;
end
if(sum(A<0,"all")>0)
disp('矩阵A中的元素存在负数');
error=1;
end
if(n1==n2 && sum(A'.*A~=1,"all")>0)
disp('矩阵A不是一个正互反矩阵,即不是一个判断矩阵');
error=1;
end
if(n1==n2 && n1>15)
disp('矩阵A的阶数不能超过15');
error=1;
end
if(error==0)
%检查判断矩阵的一致性
[~,n]=size(A);
D=eig(A);
max_D=max(D);
CI=(max_D-n)/(n-1);
RI=[0 0.00001 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR=CI/RI(n);
if(CR>=0.1)
disp('判断矩阵A一致');
else
%算术平均法求权重
s1=sum(A);
A_rep=repmat(s1,n,1);
s2=A./A_rep;
s3=sum(s2,2);
weight=s3/n;
disp(weight);
end
end
以图2-4的判断矩阵为例:
命令行窗口代码,
>> AHP
请输入判断矩阵:
A=[1,2,5;1/2,1,2;1/5,1/2,1;]
0.5949
0.2766
0.1285
四、总结
层次分析法的实现流程:
小结:
- 一般层次分析的得评价指标(准则)需要自己上网翻阅资料查找来确定;
- 因为判断矩阵是人为构造,因此主观性太强(层次分析法的
缺点
);- 在计算判断矩阵的权重时,可以三种方法都计算一遍以增强说服力。
疑问:
- 若一致性检验不通过该如何修改判断矩阵?
- 需要解释如何构造每个判断矩阵的过程吗?
- 构造每个判断矩阵需要查找相关资料并且用相关数据做支撑吗?
- 计算一致性指标CI的公式不太理解。
结束语:本文部分内容来自于B站“数学建模学习交流”以及疯学网数学建模系列教程