1. 模型建立
1.1 建立层次结构模型
在深入分析实际问题的基础上,将有关的各个因素按照不同属性自上而下地分解成若干层次,同一层的诸因素从属于上一层的因素或对上层因素有影响,同时又支配下一层的因素或受到下层因素的作用。最上层为目标层,通常只有1个因素,最下层通常为方案或对象层,中间可以有一个或几个层次,通常为准则或指标层,当准则过多时(一般为9个时)应进一步分解出子准则层。
利用层次分析法,对大学生毕业后的选择进行排序:
1.2 构造判断矩阵
层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重 并不一定相同。设
x
i
x_i
xi与
y
i
y_i
yi对
z
z
z的影响之比为
a
i
j
a_{ij}
aij,则
x
i
x_i
xi与
y
i
y_i
yi对
z
z
z的影响之比
a
j
i
=
1
/
a
i
j
a_{ji}=1/a_{ij}
aji=1/aij。
若矩阵
A
=
(
a
i
j
)
m
×
n
A=\left(a_{i j}\right)_{m\times n}
A=(aij)m×n满足
(
1
)
a
i
j
>
0
,
(
2
)
a
j
i
=
1
a
i
j
(1)\ a_{i j}>0, \quad (2)\ a_{j i}=\frac{1}{a_{i j}}
(1) aij>0,(2) aji=aij1
则称之为正互反矩阵。
若矩阵A还满足
a
i
j
a
j
k
=
a
i
k
,
∀
i
,
j
,
k
=
1
,
2
,
⋯
,
n
a_{i j} a_{j k}=a_{i k}, \forall i, j, k=1,2, \cdots, n
aijajk=aik,∀i,j,k=1,2,⋯,n
则称之为一致矩阵。
n阶正互反矩阵A为一致矩阵当且仅当其最大特征根
λ
max
=
n
\lambda_{\max }=n
λmax=n ,且当正互反矩阵A非一致时,必有
λ
max
>
n
\lambda_{\max }>n
λmax>n。
关于如何确定
a
i
j
a_{ij}
aij的值,建议引用数字 1-9 及其倒数作为标度。下表列出了 1-9 标度的含义。
现构造准则层的判断矩阵如下:
A | B1 | B2 | B3 | B4 | B5 |
---|---|---|---|---|---|
B1 | 1 | 2 | 1/2 | 1 | 5 |
B2 | 1/2 | 1 | 1/4 | 1/2 | 2 |
B3 | 2 | 4 | 1 | 2 | 3 |
B4 | 1 | 2 | 1/2 | 1 | 4 |
B5 | 1/5 | 1/2 | 1/3 | 1/4 | 1 |
接着构造方案层的判断矩阵如下:
1.3 判断矩阵的一致性检验
对判断矩阵的一致性检验的步骤如下:
(1)计算一致性指标CI。
C
I
=
λ
max
−
n
n
−
1
C I=\frac{\lambda_{\max }-n}{n-1}
CI=n−1λmax−n
(2) 查找相应的平均随机一致性指标 RI,对于
n
=
1
,
2
,
⋯
,
9
n=1,2, \cdots, 9
n=1,2,⋯,9,对应的RI值如下
(3) 计算一致性比例CR。
C
R
=
C
I
R
I
C R=\frac{C I}{R I}
CR=RICI
当CR < 0.10 时,认为判断矩阵的一致性是可以接受的,否则应对判断矩阵作适当修正。
1.4 层次总排序及一致性检验
首先确定准则层对于目标层的权向量
ω
0
\omega_{0}
ω0,由于目标层的数量是一个,所以准则层对于目标层的权向量也是一个。先找到准则层的判断矩阵的最大特征值对应的特征向量,然后将此特征向量标准化,使其中的值分布在0和1之间,得到的结果就是准则层对于目标层的权向量;然后确定方案层对于准则层的权向量
ω
1
\omega_{1}
ω1,由于准则层有5个指标,所以方案层对于准则层的权向量也是5个,使用同样的方法即可确定方案层对于准则层的5个权向量
ω
11
,
ω
12
,
ω
13
,
ω
14
,
ω
15
\omega_{11}, \omega_{12}, \omega_{13}, \omega_{14}, \omega_{15}
ω11,ω12,ω13,ω14,ω15,即
ω
1
=
[
ω
11
,
ω
12
,
ω
13
,
ω
14
,
ω
15
]
\omega_{1}=[\omega_{11}, \omega_{12}, \omega_{13}, \omega_{14}, \omega_{15}]
ω1=[ω11,ω12,ω13,ω14,ω15];最后使用方案层对于准则层的权向量 与准则层对于目标层的权向量 加权平均,即可得到方案层4个方案的得分。
对层次总排序也需作一致性检验,总排序随机一致性比例为
C
R
=
∑
j
=
1
m
C
I
(
j
)
ω
0
(
j
)
∑
j
=
1
m
R
I
(
j
)
ω
0
(
j
)
,
j
=
1
,
⋯
m
C R=\frac{\sum_{j=1}^{m} C I(j) \omega_{0}(j)}{\sum_{j=1}^{m} R I(j) \omega_{0}(j)}, j=1, \cdots m
CR=∑j=1mRI(j)ω0(j)∑j=1mCI(j)ω0(j),j=1,⋯m
其中m为准则层的个数。
2. 模型求解
利用Matlab编程求解得到准则层对于目标层的权向量 ω 0 \omega_{0} ω0为
方案层对于准则层的权向量 ω 1 \omega_{1} ω1为
w1 = 4×5
0.4379 0.2437 0.3890 0.4385 0.3452
0.2437 0.2190 0.3609 0.1096 0.1850
0.0994 0.4379 0.1323 0.2652 0.0997
0.2190 0.0994 0.1177 0.1866 0.3701
准则层各指标的一致性检验结果为
cr1 = 1×5
0.0076 0.0076 0.0727 0.0225 0.0038
均小于0.1,认为判断矩阵的一致性是可以接受的。
层次总排序得分为0.3923,0.2513,0.1850,0.1850,总排序一致性检验结果为0.0349<0.1,认为层次总排序结果具有较满意的一致性并接受该分析结果。
Matlab程序如下:
clc,clear
fid=fopen('ahp.txt','r');
n1=5;n2=4;
a=[];
for i=1:n1
tmp=str2num(fgetl(fid));
a=[a;tmp]; %读准则层判断矩阵
end
for i=1:n1
str1=char(['b',int2str(i),'=[];']);
str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']);
eval(str1);
for j=1:n2
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))
num=find(diag(y)==lamda)
w0=x(:,num)/sum(x(:,num))
cr0=(lamda-n1)/(n1-1)/ri(n1);
for i=1:n1
[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