层次分析法 什么时候用?
层次分析法是将决策问题按目标层、决策层(可含多个决策层)、方案层的顺序分为不同的层次结构,然后用求解判断矩阵特征向量的办法,求得每一层次的各元素对上一层次某元素的优先权重,最后再用加权和的方法,观察每个方案层对目标层的最终权重,此最终权重最大者即为最优方案
层次分析法特别适用于那些难于完全定量分析的问题,因为它是对一些较为复杂、较为模糊的问题作出决策的简易方法
什么是一致性矩阵?
举个例子就明白了
下面这个矩阵就是一致性矩阵
1 2 4
1/2 1 2
1/4 1/2 1
比如 a 的坐标是(1,2),元素值为 2
b 的坐标是(3,1),元素值为 1/4
那么它们相乘得 1/2,而它们平移相交处的坐标(3,2)的元素值也是 1/2,说明这对数据满足一致性
同理,任意坐标(i,j)与(j,k)的元素值乘积 等于 它们相交处的坐标(i,k)的元素值
则说明这个矩阵为一致性矩阵
再来举个反例
下面这个矩阵不是一致性矩阵
1 2 3
1/2 1 2
1/3 1/2 1
比如 a 的坐标是(1,3),元素值为 3
b 的坐标是(2,1),元素值为 1/2
那么它们相乘得 3/2,而它们平移相交处的坐标(2,3)的元素值却是 2,说明这对数据不满足一致性
那这个矩阵就不是一致性矩阵
什么是正互反矩阵?
举个例子
下面这个矩阵就是正互反矩阵
1 2 4
1/2 1 2
1/4 1/2 1
下面这个矩阵不是正互反矩阵
1 2 3
1/2 1 2
1/4 1/2 1
因为坐标(1,3)乘以坐标(3,1)的元素值不为 1
下面这个矩阵也不是正互反矩阵
1 2 4
1/2 1 2
1/4 1/2 2
因为坐标(1,3)与坐标(3,1)所对应的坐标(3,3)的元素值不为 1
结论:当坐标(i,j)乘以坐标(j,i)的元素值为 1 ,且对应的坐标(j,j)的元素值为 1 时,该矩阵为正互反矩阵
作业解答
一、判断矩阵是否为正互反矩阵?
if sum(sum(A'.* A ~= ones(n))) > 0
disp('不是正互反矩阵')
end
提示: 在 层次分析法代码的编写 视频中的 1:17:34 中会有详细的讲解
二、输入二阶判断矩阵会有什么问题?如何修正?
从图中我们看出当 n=2 时 RI=0
而计算一致性的公式为 CR=CI/RI(n)
这显然是错误的,修改方法如下:
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];
将 n=2 时 RI=0.00001 即可
判断矩阵的元素规定
层次分析法的判断矩阵中,仅能包含 1 – 9 的整数及其倒数,不能出现类似 0.3、4.5、11 等不符合要求的元素
判断矩阵的顺序
① 先进行一致性检验(必须通过)
② 再求权重
③ 最后归一化
注意:准则层都是关联性较小的
具体步骤演示可以参考 清风数学建模作业讲解的视频 的前半部分视频(内容精简与准确)
判断矩阵的代码部分
disp(' 请输入判断矩阵A ')
A=input('A=');
ERROR = 0;
[r,c]=size(A);
if r ~= c || r <= 1
ERROR = 1;
end
if ERROR == 0
[n,n] = size(A);
if sum(sum(A <= 0)) > 0
ERROR = 2;
end
end
if ERROR == 0
if n > 15
ERROR = 3;
end
end
if ERROR == 0
if sum(sum(A' .* A ~= ones(n))) > 0
ERROR = 4;
end
end
if ERROR == 0
% % % % % % % % % % % % %方法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))
% % % % % % % % % % % % %方法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);
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];
% 注意哦,这里的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
elseif ERROR == 1
disp('请检查矩阵A的维数是否不大于1或不是方阵')
elseif ERROR == 2
disp('请检查矩阵A中有元素小于等于0')
elseif ERROR == 3
disp('A的维数n超过了15,请减少准则层的数量')
elseif ERROR == 4
disp('请检查矩阵A中存在i、j不满足A_ij * A_ji = 1') % 说明不是正互反矩阵
end
切记不能直接用于论文中,要根据题目适当的修改,避免查重
建议三种求权重的方法都用在论文上,并且强调一句:为了保证结果的稳健性,本文采用了三种方法分别求出了权重后计算平均值,再根据得到的权重矩阵计算各方案的得分,并进行排序和综合分析,这样避免了采用单一方法所产生的偏差,得出的结论将更全面、更有效
层次分析法的评估
层次分析法 的优点:
层次分析法具有系统性、简洁实用、所需定量数据信息较少,这种方法尤其可用于对无结构特性的系统评价以及多目标、多准则、多时期等的系统评价,而且结果简单明确、可信度较高
层次分析法 的缺点:
在权重的确定方面主观性太强,因此通过构造出来的判断矩阵所求出来的权值不一定可靠从而不能客观的评价目标层的影响指标
同理,层次分析法的评估也要做适当修改避免查重