层次分析法
方法概述
- 层次分析法是一种针对多目标、多准则问题的决策方法
- 特点:层次化、数量化
主要应用场景
- 选择最佳方案
- 评价类
- 指标体系的优选
层次分析法相关概念
1. 将问题条理化、层次化,建立层次结构模型
(1)最高层(目标层Objective)--- 只有一个元素:决策目标(选择出最终的目标)。
(2)中间层(准则层Criterion)--- 考虑的因素,决策的准则、子准则(考虑选择的要求,因素)。
(3)最底层(方案层Plan)--- 决策时的备选方案、措施(提供几个可行的方案,进行选择评分)。
2. 层次分析法要解决的问题: 权重
求出最底层对最高层的相对权重,以此对最底层的方案、措施进行排序,选择最优方案。
3.确定每个因素之间的重要性,进行构造判断矩阵
层次分析法操作步骤
练习
权重 | P1 | P2 | P2 | |
---|---|---|---|---|
C1 | 0.1047 | 0.2500 | 0.7500 | 0 |
C2 | 0.6370 | 0 | 0.1667 | 0.8333 |
C3 | 0.2583 | 0.3333 | 0.6667 | 0 |
(C1.C2 C3准则层)
请输入判断矩阵A
A=[1 1/5 1/3;
5 1 3;
3 1/3 1]
算术平均法求权重的结果为:
0.1062
0.6333
0.2605
几何平均法求权重的结果为:
0.1047
0.6370
0.2583
特征值法求权重的结果为:
0.1047
0.6370
0.2583
一致性指标CI=
0.0193
一致性比例CR=
0.0370
因为CR<0.10,所以该判断矩阵A的一致性可以接受!
% % 注意:在论文写作中,应该先对判断矩阵进行一致性检验,然后再计算权重,因为只有判断矩阵通过了一致性检验,其权重才是有意义的。
% % 在下面的代码中,我们先计算了权重,然后再进行了一致性检验,这是为了顺应计算过程,事实上在逻辑上是说不过去的。
% % 因此大家自己写论文中如果用到了层次分析法,一定要先对判断矩阵进行一致性检验。
% % 而且要说明的是,只有非一致矩阵的判断矩阵才需要进行一致性检验。
% % 如果你的判断矩阵本身就是一个一致矩阵,那么就没有必要进行一致性检验。
disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A);
% % % % % % % % % % % % %方法3: 特征值法求权重% % % % % % % % % % % % %
[V,D] = eig(A);
Max_eig = max(max(D));%最大特征值
[r,c]=find(D == Max_eig , 1);
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) )
% % % % % % % % % % % % %下面是计算一致性比例CR的环节% % % % % % % % % % % % %
CI = (Max_eig - n) / (n-1); %Max_eig最大特征值
RI=[0 0.0001 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]; %注意哦,这里的RI最多支持 n = 15
% 这里n=2时,一定是一致矩阵,所以CI = 0,我们为了避免分母为0,将这里的第二个元素改为了很接近0的正数
CR=CI/RI(n);
disp('一致性指标CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR<0.10
disp('因为CR<0.10,所以该判断矩阵A的一致性可以接受!');
else
disp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
end
% % % % % % % % % % % % %方法1: 算术平均法求权重% % % % % % % % % % % % %
Sum_A = sum(A);
SUM_A = repmat(Sum_A,n,1);
Stand_A = A ./ SUM_A;
disp('算术平均法求权重的结果为:');
disp(sum(Stand_A,2)./n)
% % % % % % % % % % % % %方法2: 几何平均法求权重% % % % % % % % % % % % %
Prduct_A = prod(A,2);
Prduct_n_A = Prduct_A .^ (1/n);
disp('几何平均法求权重的结果为:');
disp(Prduct_n_A ./ sum(Prduct_n_A))