1、层次分析法:用于评价类模型,建立模型要确定评价目标、实现目标的方案、评价准则。
2、层次分析法具体实现步骤(辅以具体例子说明):
(1)建立层次结构
解决评价类问题想到的问题:
我们评价的目标是什么?
答:为小明同学选择最佳的旅游景点。
我们为了达到这个目标有哪几种可选的方案?
答:三种,分别是去苏杭、去北戴河和去桂林。
评价的准则或者说指标是什么?(我们根据什么东西来评价好坏) 答:景色、花费、居住、饮食、交通
由此得到层次结构如下
(2)构造层次结构图的判断矩阵
判断矩阵是正负反矩阵,数据由专家经验得出,但实际在比赛中是通过查资料得出。对应的元素指相对于j,i的重要程度,,=1,>0。用1-9表示重要程度,如下表所示
标度 | 含义 |
1 | 同样重要性 |
3 | 稍微重要 |
5 | 明显重要 |
7 | 强烈重要 |
9 | 极端重要 |
2,4,6,8 | 上述两相邻判断的中值 |
倒数 | A和B相比如果标度为3那么B和A相比就是1/3 |
(3)对判断矩阵进行一致性检验
这一步即检验构造的判断矩阵与一致矩阵是否有太大差别
方法一
=i的重要程度/j的重要程度,=j的重要程度/k的重要程度
=i的重要程度/k的重要程度=
方法二
判断矩阵各行各列成比例即为一致矩阵
方法三
(1)计算一致性指标
(2) 查找对应的平均随机一致性指标RI
(3)计算一致性比例
n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 RI 0 0 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
程序实现
clear;clc;
A=[1 2 4;0.5 1 2;0.25 0.5 1];
[V,D]=eig(A);
[n,n]=size(A);
Max_eig=max(max(A));
CI=(Max_eig-n)/(n-1);
RI=[0 0 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);
disp('一致性比例CR=');disp(CR);
if(CR<0.1)
disp('判断矩阵一致性可以接受');
else
disp('判断矩阵一致性可以接受')
end
(4)由判断矩阵计算被比较元素对于该准则的相对权重
算术平均法
(1)将判断矩阵按照列归一化即每一个元素除以所在列的和
(2)将归一化各列相加
(3)将相加后得到的每项除n
clear;clc A=[1 2 4;0.5 1 2;0.25 0.5 1]; Sum_A=sum(A); [n,n]=size(A); SUM_A=repmat(Sum_A,n,1); Stand_A=A./SUM_A; sum(Stand_A,2); disp('算术平均法求权重的结果为:'); disp(sum(Stand_A,2)/n) B=[1 1/3 1/8;3 1 1/3;8 3 1]; Sum_B=sum(B); [n,n]=size(B); SUM_B=repmat(Sum_B,n,1); Stand_B=B./SUM_B; sum(Stand_B,2); disp('算术平均法求权重的结果为:'); disp(sum(Stand_B,2)/n) C=[1 1 3;1 1 3;1/3 1/3 1]; Sum_C=sum(C); [n,n]=size(C); SUM_C=repmat(Sum_C,n,1); Stand_C=C./SUM_C; sum(Stand_C,2); disp('算术平均法求权重的结果为:'); disp(sum(Stand_C,2)/n) D=[1 1 1/4;1 1 1/4;4 4 1]; Sum_D=sum(D); [n,n]=size(D); SUM_D=repmat(Sum_D,n,1); Stand_D=D./SUM_D; sum(Stand_D,2); disp('算术平均法求权重的结果为:'); disp(sum(Stand_D,2)/n) E=[1 1/2 4 3 3;2 1 7 5 5;1/4 1/7 1 1/2 1/3;1/3 1/5 2 1 1 ;1/3 1/5 3 1 1]; Sum_E=sum(E); [n,n]=size(E); SUM_E=repmat(Sum_E,n,1); Stand_E=E./SUM_E; sum(Stand_E,2); disp('算术平均法求权重的结果为:'); disp(sum(Stand_E,2)/n)
几何平均法
(1)将判断矩阵按行相乘得到新的列向量
(2)将新的向量每个分量开n次方
(3)对该向量进行均一化得到权重向量
clear;clc; A=[1 2 4;0.5 1 2;0.25 0.5 1]; Product_A=prod(A,2); [n,n]=size(A); Product_n_A=Product_A.^(1/n); disp('几何平均法求权重的结果为:'); disp(Product_n_A ./ sum(Product_n_A)) B=[1 1/3 1/8;3 1 1/3;8 3 1]; Product_B=prod(B,2); [n,n]=size(B); Product_n_B=Product_B.^(1/n); disp('几何平均法求权重的结果为:'); disp(Product_n_B ./ sum(Product_n_B)) C=[1 1 3;1 1 3;1/3 1/3 1]; Product_C=prod(C,2); [n,n]=size(C); Product_n_C=Product_C.^(1/n); disp('几何平均法求权重的结果为:'); disp(Product_n_C./ sum(Product_n_C)) D=[1 1 1/4;1 1 1/4;4 4 1]; Product_D=prod(D,2); [n,n]=size(D); Product_n_D=Product_D.^(1/n); disp('几何平均法求权重的结果为:'); disp(Product_n_D./ sum(Product_n_D)) E=[1 1/2 4 3 3;2 1 7 5 5;1/4 1/7 1 1/2 1/3;1/3 1/5 2 1 1 ;1/3 1/5 3 1 1]; Product_E=prod(E,2); [n,n]=size(E); Product_n_E=Product_E.^(1/n); disp('几何平均法求权重的结果为:'); disp(Product_n_E ./ sum(Product_n_E))
特征值法
(1)求最大特征值以及对应的特征向量,得最大特征值的位置
(2)对得出的特征向量进行归一化处理
clear;clc; A=[1 2 4;0.5 1 2;0.25 0.5 1]; [V,D]=eig(A); Max_eig=max(max(A)); D==Max_eig; find(D,1); [r,c]=find(D,1); V(:,c); disp('特征值法求权重的结果为:') disp(V(:,c)./sum(V(:,c))) B=[1 1/3 1/8;3 1 1/3;8 3 1]; [V,D]=eig(B); Max_eig=max(max(B)); D==Max_eig; find(D,1); [r,c]=find(D,1) V(:,c); disp('特征值法求权重的结果为:') disp(V(:,c)./sum(V(:,c))) C=[1 1 3;1 1 3;1/3 1/3 1]; [V,D]=eig(C); Max_eig=max(max(C)); D==Max_eig; find(D,1); [r,c]=find(D,1); V(:,c); disp('特征值法求权重的结果为:') disp(V(:,c)./sum(V(:,c))) D=[1 1 1/4;1 1 1/4;4 4 1]; [V,D]=eig(D); Max_eig=max(max(D)); D==Max_eig; find(D,1); [r,c]=find(D,1); V(:,c); disp('特征值法求权重的结果为:') disp(V(:,c)./sum(V(:,c))) E=[1 1/2 4 3 3;2 1 7 5 5;1/4 1/7 1 1/2 1/3;1/3 1/5 2 1 1 ;1/3 1/5 3 1 1]; [V,D]=eig(E); Max_eig=max(max(E)); D==Max_eig;
3、层次分析法的局限性
(1)决策层不能过多,n太大时判断矩阵和一致性矩阵差异可能会很大,一般n最大取15
(2)如果决策层中的数据是已知的
本笔记是根据清风老师的数学建模课第一节层次分析法总结出来的,感兴趣的小伙伴可以在B站上看哦~