层次分析法(The Analytic Hierarchy Process即AHP)是一种系统分析与决策的综合评价方法,其较合理地解决了定性问题定量化的处理过程。AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因素两两之间重要度的比较上,从而把难以量化的定性判断转化为可操作的重要度的比较上面。
步骤:
- 建立递阶的层次结构,将因素分为目标层、准则层、方案层等多个层次。
- 建立两两判断矩阵
- 计算各元素权重
以层次分析法在太阳镜产品质量评价中的应用这篇文章中的评价数据为例展示计算过程:
下图是太阳镜产品质量评价体系结构图:左中右分别为目标层、准则层和方案层
为便于表述,将准则层六个因素记为B1,...,B6,将方案层的因素记为C1,...,C20。
随后列出判断矩阵,以外观与结构(B1)为例
B1 | C1 | C2 | C3 |
C1 | 1 | 5 | 3 |
C2 | 0.2 | 1 | 0.3333 |
C3 | 0.3333 | 3 | 1 |
(判断矩阵中数据采用九分制标度法),记为
表示与指标j相比,i的重要程度
- 当i=j,两个指标相同,故记为1
且满足
(我们称满足这一条件的矩阵为正互反矩阵)
在使用判断矩阵求权重之前,必须对其进行一致性检验。
若正互反矩阵满足
,我们称其为一致矩阵。
一致性检验,即检验我们构造的判断矩阵和一致矩阵是否有太大的差别。
引理:n阶正互反矩阵A为一致矩阵时当且仅当最大特征值
且当正互反矩阵A非一致时,一定满足
一致性检验的步骤:
- 计算一致性指标CI:
(若特征值中有虚数,比较的是特征值的模长
- 查找对应的平均随机一致性指标RI
- 计算一致性比例CR:
如果CR<0.1,则可认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修正。
disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A);
[V,D] = eig(A);
Max_eig = max(max(D));
CI = (Max_eig - n) / (n-1);
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];
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
接下来用三种不同的方法求权重
算术平均法
clc,clear
disp('请输入判断矩阵A')
A=input('A=');
[n,n]=size(A);
Sum_A=sum(A); %得到总和的列向量
SUM_A=repmat(Sum_A,n,1); %得到与原矩阵相匹配的总和矩阵
Stand_A = A ./ SUM_A; %得到权重向量
disp('算术平均法求权重的结果为:');
disp(sum(Stand_A,2)./n)
几何平均法
clc,clear
disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A);
Prduct_A = prod(A,2); %得到一个包含每一行乘积的列向量。
Prduct_n_A = Prduct_A .^ (1/n);
disp('几何平均法求权重的结果为:');
disp(Prduct_n_A ./ sum(Prduct_n_A))
特征值法
clc,clear
disp('请输入判断矩阵A')
A=input('A=');
[V,D] = eig(A);
Max_eig = max(max(D)); %得到最大特征值
[r,c]=find(D == Max_eig , 1); %得到最大特征值所在行列
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) )
论文中采取数据与后两个方法相同,可根据需求进行选择。
将所有判断矩阵所得权重向量综合称一个权重矩阵,再乘以目标层到准则层得到的指标权重,可获得需要的结果。
为了保证结果的稳健性,本文采用了三种方法分别求出了权重后计算平均值,再根据得到的权重矩阵计算各方案的得分,并进行排序和综合分析,这样避免了采用单一方法所产生的偏差,得出的结论将更全面、更有效。