引例
就拿旅游来讲吧,有3个目的地(A,B,C)在你的旅游清单上,但是由于你精力有限,你只能选择其中一个。而等下讲的层次分析法,便能很好地解决这种问题。
层次分析法介绍
首先我们的目标就是选择一个要去的旅游地,而我们在选择过程中会考虑一些参考准则,比如景色,费用,居住,饮食和旅途等因素。而我们要选择的有三个方案:A、B、C三地。
上图是用visio画出来的描述。其为层次分析法的框架。
成对比较阵和一致性检验
分别成对地比较各个准则D1,D2,D3,D4,D5对于目标G的重要程度。对于重要程度的评判标准给出下面1~9尺度表。
尺度 a i j a_{ij} aij | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
D i : D j D_i:D_j Di:Dj的重要性 | 相同 | 稍强 | 强 | 明显强 | 绝对强 |
比如,如果对D2费用看得比较重,可以令D2费用的重要程度是D1景色的2倍,是D4饮食和D5旅途的5倍,是D3居住的7倍,设置权重。
如此,我们记
D
i
:
D
j
=
a
i
j
,
A
=
(
a
i
j
)
n
×
n
D_i:D_j=a_{ij},A={(a_{ij})}_{n\times n}
Di:Dj=aij,A=(aij)n×n,其中
a
i
j
>
0
,
a
j
i
=
(
a
i
j
)
−
1
a_{ij}>0,a_{ji}={(a_{ij})}^{-1}
aij>0,aji=(aij)−1。按照我们自己的重要性评价标准得到下面的矩阵A,A为正互反矩阵(即对角线对称的两个数互为倒数)。
A
=
[
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
]
A=\begin{bmatrix} {1}&{\frac{1}{2}}&4&3&3\\ {2}&{1}&7&5&5\\ {\frac{1}{4}}&\frac{1}{7}&1&\frac{1}{2}&\frac{1}{3}\\ {\frac{1}{3}}&\frac{1}{5}&2&{1}&{1}\\ {\frac{1}{3}}&\frac{1}{5}&3&{1}&{1}\\ \end{bmatrix}
A=⎣⎢⎢⎢⎢⎡1241313121171515147123352111353111⎦⎥⎥⎥⎥⎤
允许矩阵A是不一致矩阵,即允许
a
i
j
≠
a
i
k
⋅
a
k
j
a_{ij}\ne a_{ik}\cdot a_{kj}
aij=aik⋅akj。 比如说D2费用是D1景色的重要度的2倍,而D1景色是D3 居住重要度的4倍,如果一致的话D2费用是D3居住重要度的8倍,这里给出的矩阵A是不一致的,为7倍。
这种不一致是有一定的允许范围的,需要做一致性检验。
- n阶正互反阵的最大特征根 λ m a x ≥ n \lambda _{max}\geq n λmax≥n,当 λ m a x = n \lambda _{max}= n λmax=n 时,即为一致阵。
衡量该矩阵一致性的指标记作 C I = λ m a x − n n − 1 CI=\frac {\lambda _{max}-n}{n-1} CI=n−1λmax−n , C I CI CI 越小,就越一致。那么怎样衡定越小呢?这里进一步引入随机一致性指标记作 R I RI RI(用计算机随机模拟得到矩阵A。计算出的 C I CI CI 即为 R I RI RI), R I RI RI的值列表如下:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
RI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 | 1.49 |
则有一致性比例 C R = C I R I CR=\frac {CI}{RI} CR=RICI, 当 C R < 0.1 CR<0.1 CR<0.1时,则通过一致性检验。我们旅游实例中的矩阵A 的最大特征值 λ m a x \lambda_{max} λmax为5.0721, C I CI CI的值为0.0180, C R CR CR为 0.0161 < 0.1 0.0161<0.1 0.0161<0.1, 通过了一致性检验。
组合权向量
建议用最大特征根 λ m a x \lambda_{max} λmax对应的特征向量作为第2层的权向量 w ( 2 ) w^{(2)} w(2), 可得旅游实例中的第二层权向量为: w ( 2 ) = ( 0.263 , 0.475 , 0.055 , 0.090 , 0.110 ) T w^{(2)}={(0.263,0.475,0.055,0.090,0.110)}^T w(2)=(0.263,0.475,0.055,0.090,0.110)T。
采取同样的方法依次求得第3 层方案层对第2层每一准则的权向量 w 1 ( 3 ) , w 2 ( 3 ) , w 3 ( 3 ) , w 4 ( 3 ) , w 5 ( 3 ) w_1^{(3)},w_2^{(3)},w_3^{(3)},w_4^{(3)},w_5^{(3)} w1(3),w2(3),w3(3),w4(3),w5(3) 。
就以第三层方案层(A、B和C地)对第二层的D2的准则费用为例,求出权向量 w 2 ( 3 ) w_2^{(3)} w2(3)。
游玩C地的费用是A地的8倍,是B地的3倍,游玩B地的费用是A地的3 倍,则此成对比较阵为:
B 2 = [ 1 1 3 1 8 3 1 1 3 8 3 1 ] B_2=\begin{bmatrix} {1}&{\frac{1}{3}}&\frac{1}{8}\\ {3}&{1}&\frac{1}{3}\\ 8&3&1\\ \end{bmatrix} B2=⎣⎡138311381311⎦⎤
则 B 2 B_2 B2的最大特征根对应的特征向量为 w 2 ( 3 ) = ( 0.082 , 0.236 , 0.682 ) T w_2^{(3)}={(0.082,0.236,0.682)}^T w2(3)=(0.082,0.236,0.682)T
第3层的3个方案对于第2层的5个准则求出的5个权向量列出下表。
k | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
wk3 | 0.595 | 0.082 | 0.43 | 0.633 | 0.17 |
0.277 | 0.236 | 0.43 | 0.193 | 0.17 | |
0.129 | 0.682 | 0.14 | 0.175 | 0.67 | |
λmaxk | 3.005 | 3.002 | 3 | 3.009 | 3 |
CIk | 0.003 | 0.001 | 0 | 0.005 | 0 |
当 n = 3 n=3 n=3时, R I = 0.58 {RI}=0.58 RI=0.58, C I k {CI}_k CIk均可通过一致性检验。
第三层权向量矩阵为: W ( 3 ) = ( w 1 ( 3 ) , w 2 ( 3 ) , w 3 ( 3 ) , w 4 ( 3 ) , w 5 ( 3 ) ) W^{(3)}={(w_1^{(3)},w_2^{(3)},w_3^{(3)},w_4^{(3)},w_5^{(3)})} W(3)=(w1(3),w2(3),w3(3),w4(3),w5(3))
W ( 3 ) = [ 0.595 0.082 0.43 0.633 0.17 0.277 0.236 0.43 0.193 0.17 0.129 0.682 0.14 0.175 0.67 ] W^{(3)}=\begin{bmatrix} {0.595}&{0.082}&0.43&0.633&0.17\\ {0.277}&{0.236}&0.43&0.193&0.17\\ 0.129&0.682&0.14&0.175&0.67\\ \end{bmatrix} W(3)=⎣⎡0.5950.2770.1290.0820.2360.6820.430.430.140.6330.1930.1750.170.170.67⎦⎤
那么方案层对于目标层的组合权向量为 w ( 3 ) = W ( 3 ) . w ( 2 ) = ( 0.300 , 0.246 , 0.456 ) T w^{(3)}=W^{(3)}.w^{(2)}={(0.300,0.246,0.456)}^{T} w(3)=W(3).w(2)=(0.300,0.246,0.456)T,由此可知,根据层次分析法得到的三个旅游地的定量比较结果,C地0.456 高于A地0.300 又高于B地0.246,所以结果是去C地游玩。
在本例子中,采用的层次分析法是3 层,如果更为一般的是s 层的话,最终组合权向量的求法就是 w ( s ) = W ( s ) ⋅ W ( s − 1 ) ⋯ W ( 3 ) ⋅ w ( 2 ) w^{(s)}=W^{(s)}\cdot W^{(s-1)}\cdots W^{(3)}\cdot w^{(2)} w(s)=W(s)⋅W(s−1)⋯W(3)⋅w(2),其中 W ( j ) W^{(j)} W(j)就是第j 层对于第j-1 层的权向量组成的权向量矩阵。
层次分析法步骤
- 建立层次分析结构模型:深入分析实际问题,进行分层,其中上层受下层影响,而层内基本相互独立;
- 构造成对比较阵:用1~9尺度构造各层对上一层每个因素的成对比较阵;
- 计算权向量并作一致性检验:对每一个成对比较阵计算最大特征根和其对应的特征向量。若通过一致性检验,则令此特征向量为权向量;
- 计算组合权向量:计算出组合权向量可以作为决策的定量依据。
代码实现
RI
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
RI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 | 1.49 |
一致性检验
clear all
clc
A=[1/1 1/2 4/1 3/1 3/1
2/1 1/1 7/1 5/1 5/1
1/4 1/7 1/1 1/2 1/3
1/3 1/5 2/1 1/1 1/1
1/3 1/5 3/1 1/1 1/1]; %判断矩阵
[V,D]=eig(A); %计算特征向量V和特征值D:A*V=V*D
[lambda, i]=max(diag(D)); %最大特征值lambda及其位置i
CI=(lambda-5)/(5-1); %一致性指标
CR=CI/1.12 %一致性比例=0.0161
层次单排序
clear all
clc
A=[1/1 1/2 4/1 3/1 3/1
2/1 1/1 7/1 5/1 5/1
1/4 1/7 1/1 1/2 1/3
1/3 1/5 2/1 1/1 1/1
1/3 1/5 3/1 1/1 1/1]; %判断矩阵
[V,D]=eig(A); %计算特征向量V和特征值D:A*V=V*D
[lambda, i]=max(diag(D)); %最大特征值lambda及其位置i
W=V(:,i); %最大特征值对应的特征向量
w=W/sum(W) %归一化=[0.2636,0.4758,0.0538,0.0981,0.1087]'
计算组合权向量(层次总排序)
clear;clc
A=[1/1 1/2 4/1 3/1 3/1;2/1 1/1 7/1 5/1 5/1
1/4 1/7 1/1 1/2 1/3;1/3 1/5 2/1 1/1 1/1
1/3 1/5 3/1 1/1 1/1]; %判断矩阵
[w,CI,CR,lambda]=ahp(A)
B2=[1/1 1/3 1/8;3/1 1/1 1/3;8/1 3/1 1/1];
[w1,CI1,CR1,lambda1]=ahp(B2)
function [w,CI,CR,lambda]=ahp(A)
RI=[0.00 0.00 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49];
n=size(A,1);
[V,D]=eig(A);
[lambda,i]=max(diag(D));
CI=(lambda-n)/(n-1);
CR=CI/RI(n);
W=V(:,i);
w=W/sum(W);
这里解出来的 w 1 w1 w1便是 w 2 ( 3 ) w_2^{(3)} w2(3),并检验了一致性。其他计算同理。
经典案例
挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型如下:
准则层的判断矩阵如表所示:(n个准则就是n*n矩阵)
A A A | B 1 B_1 B1 | B 2 B_2 B2 | B 3 B_3 B3 | B 4 B_4 B4 | B 5 B_5 B5 | B 6 B_6 B6 |
---|---|---|---|---|---|---|
B 1 B_1 B1 | 1 | 1 | 1 | 4 | 1 | 1 2 \frac {1}{2} 21 |
B 2 B_2 B2 | 1 | 1 | 2 | 4 | 1 | 1 2 \frac {1}{2} 21 |
B 3 B_3 B3 | 1 | 1 2 \frac {1}{2} 21 | 1 | 5 | 3 | 1 2 \frac {1}{2} 21 |
B 4 B_4 B4 | 1 4 \frac {1}{4} 41 | 1 4 \frac {1}{4} 41 | 1 5 \frac {1}{5} 51 | 1 | 1 3 \frac {1}{3} 31 | 1 3 \frac {1}{3} 31 |
B 5 B_5 B5 | 1 | 1 | 1 3 \frac {1}{3} 31 | 3 | 1 | 1 |
B 6 B_6 B6 | 2 | 2 | 2 | 3 | 3 | 1 |
方案层的判断矩阵如表所示。(n个准则就要有n个方案)
B1 | C1 | C2 | C3 | B2 | C1 | C2 | C3 |
---|---|---|---|---|---|---|---|
C1 | 1 | 1/4 | 1/2 | C1 | 1 | 1/4 | 1/5 |
C2 | 4 | 1 | 3 | C2 | 4 | 1 | 1/2 |
C3 | 3 | 1/3 | 1 | C3 | 5 | 2 | 1 |
B3 | C1 | C2 | C3 | B4 | C1 | C2 | C3 |
C1 | 1 | 1/3 | 5 | C1 | 1 | 1 | 7 |
C2 | 3 | 1 | 7 | C2 | 1 | 1 | 7 |
C3 | 1/5 | 1/7 | 1 | C3 | 1/7 | 1/7 | 1 |
层次总排序的结果如表 6 所示:
准则 | 研究 课题 | 发展 前途 | 待遇 | 同事 情况 | 地理 位置 | 单位 名气 | 总排序权值 | |
---|---|---|---|---|---|---|---|---|
准则层权值 | 0.1507 | 0.1792 | 0.1886 | 0.0472 | 0.1464 | 0.2879 | ||
方案层 | 工作1 | 0.1365 | 0.0974 | 0.2426 | 0.2790 | 0.4667 | 0.7986 | 0.3952 |
单排序 | 工作2 | 0.6250 | 0.3331 | 0.0879 | 0.6491 | 0.4667 | 0.1049 | 0.2996 |
权值 | 工作3 | 0.2385 | 0.5695 | 0.6694 | 0.0719 | 0.0667 | 0.0965 | 0.3052 |
根据层次总排序权值,得到该生最满意的工作为工作 1。
代码实现
clc,clear
fid=fopen('txt3.txt','r'); %读取文件
n1=6;n2=3;
a=[];
%读取判断矩阵
for i=1:n1
tmp=str2num(fgetl(fid));
%str2num将字符数组或字符串转换为数值数组
%fgetl读取文件中的行,并删除换行符
a=[a;tmp]; %读准则层判断矩阵
end
for i=1:n1
%C = char(A) 将数组 A 转换为字符数组。
%int2str将整数转换为字符
str1=char(['b',int2str(i),'=[];']);
str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']);
%eval计算 MATLAB 表达式
eval(str1);
for j=1:n2
%str2num将字符数组或字符串转换为数值数组
tmp=str2num(fgetl(fid));
eval(str2); %读方案层的判断矩阵
end
end
ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标
[x,y]=eig(a);
lamda=max(diag(y));
%find查找非零元素的索引和值
%diag创建对角矩阵或获取矩阵的对角元素
num=find(diag(y)==lamda);
w0=x(:,num)/sum(x(:,num));
cr0=(lamda-n1)/(n1-1)/ri(n1)
for i=1:n1
%eig特征值和特征向量
[x,y]=eig(eval(char(['b',int2str(i)])));
lamda=max(diag(y));
num=find(diag(y)==lamda);
w1(:,i)=x(:,num)/sum(x(:,num));
cr1(i)=(lamda-n2)/(n2-1)/ri(n2);
end
cr1, ts=w1*w0, cr=cr1*w0
写入txt3.txt的数据格式
1 1 1 4 1 1/2
1 1 2 4 1 1/2
1 1/2 1 5 3 1/2
1/4 1/4 1/5 1 1/3 1/3
1 1 1/3 3 1 1
2 2 2 3 3 1
1 1/4 1/2
4 1 3
2 1/3 1
1 1/4 1/5
4 1 1/2
5 2 1
1 3 1/3
1/3 1 1/7
3 7 1
1 1/3 5
3 1 7
1/5 1/7 1
1 1 7
1 1 7
1/7 1/7 1
1 7 9
1/7 1 1
1/9 1 1
练习训练
A
=
[
1
1
4
6
4
1
5
1
6
1
5
1
]
A=\begin{bmatrix} {1}&{\frac{1}{4}}&6\\ {4}&{1}&5\\ {\frac{1}{6}}&\frac{1}{5}&1\\ \end{bmatrix}
A=⎣⎡146141151651⎦⎤
(1)试着对 A 进行一致性检验
(2)如 A 的非一致性较严重,应如何作修正
参考文献
1、层次分析法原理及计算过程详解 - 子木的文章 - 知乎
https://zhuanlan.zhihu.com/p/266405027
2、数模系列(1):层次分析法 - 00木水的文章 - 知乎
https://zhuanlan.zhihu.com/p/32662422