层次分析法:Analytic Hierarchy Process(AHP)
一、致谢
本文得益于王莲芬老师、许树柏老师著作《层次分析法引论》(中国人民大学出版社1990年6月第1版)良多,在此致谢。
二、运用层次分析法的一般步骤
1.分析系统中各因素之间的关系,建立系统更多解题层次结构
首先把问题条理化、层次化,构造出一个层次分析的结构模型。在这个结果模型下,复杂问题被分解为可以被称之为元素的组成部分。这些元素又按照其属性分为若干组,形成不同层次。同一层次的元素作为准则对下一层次的某些元素起支配作用,同时又受上一层次元素的支配。这些层次大体上可以分为3类:
(1)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也称为结果层。
(2)中间层:这一层次包括了为实现目标所涉及的中间节,它可以由若干个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。
(3)最底层:表示为实现目标可供选择的各种措施、决策方案等因此也称为措施层或方案层。
2.对同一层次的各元素关于上一层次中某一准则的重要性进行两两比较,构造两两比较判断矩阵
假定以上一层元素 C C C为准则,所支配的下一层次的元素为 u 1 , u 2 , . . . , u n u_1,u_2,...,u_n u1,u2,...,un,我们的目的是要按照它们对于准则 C C C的相对重要性赋于 u 1 , . . . , u n u_1,...,u_n u1,...,un相应的权重。
在赋于权重的这一步中,决策者需要反复回答问题:针对准则 C C C,两个元素 u i u_i ui和 u j u_j uj哪一个更重要,重要多少,并按照表一比例标度对重要性程度赋值。
例如选择旅行目的地下支配的元素为景色与居住。如果认为景色比居住强烈重要,那么它们的重要性之比的标度应取为 7 7 7,而居住与景色重要性的比例标度应取为 1 7 \frac{1}{7} 71。这样对于准则 C C C, n n n个被比较元素构成了一个两两比较判断矩阵:
A = ( a i j ) n × n A=(a_{ij})_{n×n} A=(aij)n×n、
其中, a i j a_{ij} aij就是元素 u i u_i ui与 u j u_j uj相对于 C C C的重要性的比例标度。
显然判断矩阵具有下列性质:
a i j > 0 , a i j a j i = 1 , a i i = 1 a_{ij}>0,a_{ij}a_{ji}=1,a_{ii}=1 aij>0,aijaji=1,aii=1
我们称这样的矩阵 A A A为正互反矩阵。
特殊地,如果矩阵 A A A中的所有元素具有传递性,即满足等式时:
a i j ⋅ a j k = a i k a_{ij}·a_{jk}=a_{ik} aij⋅ajk=aik
我们称矩阵 A A A为一致性矩阵
标度 含义 1 表示两个元素相比,具有同样重要性 3 表示两个元素相比,前者比后者稍重要 5 表示两个元素相比,前者比后者明显重要 7 表示两个元素相比,前者比后者强烈重要 9 表示两个元素相比,前者比后者极端重要 2,4,6,8 表示上述相邻判断的中间值 倒数 若元素 i i i和元素 j j j的重要性之比为 a i j a_{ij} aij,那么元素 j j j和元素 i i i的重要性之比为 1 a i j \frac{1}{a_{ij}} aij1 表一
3.由判断矩阵计算被比较元素对于该准则的相对权重并进行一致性检验
此部分分为两个部分:
(1)计算相对权重
事实上,计算相对权重有和法、根法、特征根方法、对数最小二乘法等方法,但考虑到特征根方法在层次分析法中具有特别重要的理论意义及使用价值,此处我们只介绍使用特征根方法计算相对权重。
记在准则 C C C下得到的两两比较判断矩阵为 A A A。而矩阵 A A A的最大特征根为 λ m a x \lambda_{max} λmax,对应的特征项为 ω \omega ω,将 ω \omega ω归一化[1]后即可作为相对权重向量。补充知识:向量的归一化
记向量 α ⃗ = ( a 1 , a 2 , . . . , a n ) \vec{\alpha}=(a_1,a_2,...,a_n) α=(a1,a2,...,an),且 s = ∑ i = 1 n a i s=\sum_{i=1}^na_i s=∑i=1nai
则向量 α ′ ⃗ = 1 s α ⃗ = ( a 1 s , . . . , a n s ) \vec{\alpha'}=\frac{1}{s}\vec{\alpha}=(\frac{a_1}{s},...,\frac{a_n}{s}) α′=s1α=(sa1,...,san)即为向量 α ⃗ \vec{\alpha} α的归一化向量(2)一致性检验
前面我们介绍了一致性矩阵的定义,但是在实际判断矩阵的构造中,我们并不要求判断矩阵一定要具有传递性(即一致性),这是由客观事物的复杂性与人的认识的多样性所决定的。但判断矩阵既然是我们计算相对权重向量的依据,那么我们要求判断矩阵具有大体上的一致性是应该的。
事实上,上面提到的权重向量的计算方法只是一种近似算法。当判断矩阵偏离一致性过大时,这种近似算法的可靠程度就值得怀疑了。从这个角度上来说,对判断矩阵进行一致性检验就显得十分必要了。
一致性检验的步骤如下:
a . a. a.计算一致性指标 C . I . ( c o n s i s t e n c y i n d e x ) C.I.(consistency\ index) C.I.(consistency index)
C . I . = λ m a x − n n − 1 C.I.=\frac{\lambda_{max}-n}{n-1} C.I.=n−1λmax−n
b . b. b.查找相应的平均随机一致性指标 R . I . ( r a n d o m i n d e x ) R.I.(random\ index) R.I.(random index)
表二给出了 1 − 15 1-15 1−15阶正互反矩阵计算 1000 1000 1000次得到的平均随机一致性指标
c . c. c.计算一致性比例 C . R . ( c o n s i s t e n c y r a t i o ) C.R.(consistency\ ratio) C.R.(consistency ratio)
C . R . = C . I . R . I . C.R.=\frac{C.I.}{R.I.} C.R.=R.I.C.I.
当 C . R . < 0.1 C.R.<0.1 C.R.<0.1时,认为判断矩阵的一致性是可以接受的。当 C . R . ≥ 0.1 C.R.\geq 0.1 C.R.≥0.1时应该对判断矩阵进行适当修正。对于一阶、二阶矩阵总是一致的,此时 C . R . = 0 C.R.=0 C.R.=0
矩阵阶数 1 2 3 4 5 6 7 8 R . I . R.I. R.I. 0 0 0.52 0.89 1.12 1.26 1.36 1.41
矩阵阶数 9 10 11 12 13 14 15 R . I . R.I. R.I. 1.46 1.49 1.52 1.54 1.56 1.58 1.59 表二
4.计算各层元素对系统目标的合成权重,并进行排序。
上面我们得到的仅仅是一组元素对其上一层中某元素的权重向量。我们最终要得到的是各元素对于总目标的相对权重,特别是要得到最底层中各方案对于目标的排序权重,即所谓的“合成权重”,从而进行方案选择。
事实上,我们还需要在进行权重合成时,逐层并在最后进行总的一致性检验。但是在实际应用中,整体一致性检验常常可以忽略(这也是为什么此处不介绍总的一致性检验)。事实上在考虑决策者在给出但准则下判断矩阵时,是难以对整体进行考虑的,当整体一致性不满足要求时,进行调整也比较困难,因此目前大多数实际工作都没有对整体一致性进行严格检验。其必要性有待于进一步探讨。
三、简单举例进行应用
以该背景为例:
想要去苏州、常州、南京三个地方游玩,但受限于预算时间等只能选择一个地方游玩,而选择的因素又包括风景、居住、饮食等,我们要在综合考虑这些因素的情况下选择最佳旅行目的地。
1.分析系统中各因素之间的关系,建立系统更多解题层次结构
图1表示这一背景的层次结构模型(此处只是简单的一层准则,之后再添加还有子准则的情况)
A
=
[
1
7
5
9
1
7
1
2
2
1
5
1
2
1
1
1
9
1
2
1
1
]
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ A=\begin{bmatrix} 1 & 7 & 5 & 9\\ \frac{1}{7} & 1 & 2& 2 \\ \frac{1}{5} & \frac{1}{2} & 1 & 1 \\ \frac{1}{9} & \frac{1}{2}& 1 & 1\end{bmatrix}
A=⎣⎢⎢⎡171519171212152119211⎦⎥⎥⎤
3.由判断矩阵计算被比较元素对于该准则的相对权重并进行一致性检验
(1)计算相对权重:
由
A
ω
=
λ
ω
A\omega=\lambda\omega
Aω=λω计算得最大特征值
λ
m
a
x
=
4.1017
\lambda_{max}=4.1017
λmax=4.1017
对应特征向量
ω
=
(
−
0.9659
−
0.1972
−
0.1289
−
0.1079
)
\omega=(-0.9659 \ \ -0.1972\ \ -0.1289\ \ -0.1079)
ω=(−0.9659 −0.1972 −0.1289 −0.1079)
归一化得到权重向量
ω
′
=
(
0.69
0.14
0.09
0.08
)
\omega'=(0.69\ \ 0.14\ \ 0.09\ \ 0.08)
ω′=(0.69 0.14 0.09 0.08)
(2)一致性检验
C
.
I
.
=
4.1071
−
4
4
−
1
=
0.0339
C.I.=\frac{4.1071-4}{4-1}=0.0339
C.I.=4−14.1071−4=0.0339
R
.
I
.
=
0.89
R.I.=0.89
R.I.=0.89
C
.
R
.
=
0.0339
0.89
≈
0.038
<
0.1
C.R.=\frac{0.0339}{0.89}≈0.038<0.1
C.R.=0.890.0339≈0.038<0.1,因此我们认为该判断矩阵的一致性是可以接受的。
4.计算各层元素对系统目标的合成权重,并进行排序。
由于此例子只存在单一准则,并不存在合成权重,因此第三步得到的唯一权重向量即可视为合成权重。
之后博主会在空闲时更新此文介绍多准则下的合成权重计算。
四、部分步骤的matlab实现
A=[];%这是某一个判断矩阵,记维度为n
[Omega,Lambda]=eig(A);%计算方阵A的特征向量和特征值
mx=-99999.99999;
id=0;%变量mx是为了找出最大特征值,id记录当前最大特征值对应的特征向量所在的位置
for i=1:n
if(Lambda(i,i)>mx)
mx=lambda(i,i);
id=i;
end
end
O=zeros(n,1);%建立n维向量记录归一化后的权重向量
sum=0;
for i=1:n
sum=sum+Omega(i,id);
end
for i=1:n
O(i,1)=Omega(i,id)/sum;
end%这两个循环是为了计算归一化后的特征向量,即权重向量