1.层次分析法解决问题及步骤
- 问题:评价类问题
- 步骤:
1)建立递阶层次结构模型
2)构造出各层次中的所有判断矩阵
3)层次单排序及一致性检验
4)层次总排序及一致性检验
2.建立层次结构图
1)一般情况
针对问题建立3个层次:
1)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也称为目标层。
2)中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。
3)最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等,因此也称为措施层或方案层
- 注意:每一层次中各元素所支配的元素一般不要超过 9 个
示例:
2)其他情况
- 若层次超过三层,继续构造判断矩阵即可
- 若两层之间不是完全的连接(比如图中桂林不考虑交通),将其权重视为0即可
3.构造判断矩阵
(i)先构造准则层之间的判断矩阵;
(ii)再构造再每一个准则层之下方案层的判断矩阵。
1) 构造
通过对元素之间两两比较得出一个用于显示元素之间重要性的矩阵
示例:
注意:
(1) 𝑎ij表示的意义是,与指标𝑗相比, 𝑖的重要程度。
(2)当𝑖= 𝑗时,两个指标相同,因此同等重要记为1,这就解释了主对角线元素为1。
(3) 𝑎ij>0且满足𝑎ij × \times × 𝑎ji= 1 (我们称满足这一条件的矩阵为正互反矩阵)
(4)总共要进行n(n-1)/2次比较,n为准则层或方案层的元素总数(即填写矩阵的上三角即可)
2) 判断是否为一致矩阵&一致性检验
引理:一致矩阵为n阶方阵,且r(A )=1,则A有一个特征值为tr(A),其余特征值均为0.因为一致矩阵的各行成比例,所以一致矩阵的秩一定为1
判断一致矩阵
λ m a x = n \lambda _{max} = n λmax=n(最大特征值)
一致性检验
- 计算一致性指标CI
- 查找对应n的平均随机一致性指标RI
- 计算一致性比例CR
注:如果CR < 0.1, 则可认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修正。
3) 计算权重
- 算术平均法:
根据每一列的权重 计算 算术平均和
- 几何平均法:
- 特征值法:
第一步:求矩阵A的最大特征值和其特征矩阵
第二步:进行归一化处理
4.层次单排序及一致性检验
判断矩阵A对应于最大特征值 λ m a x \lambda _{max} λmax的特征向量W,经过归一化处理后即为同一层次相应因素对于上一层次某因素相对重要性的权重。
5.层次总排序及一致性检验
C
R
=
∑
j
=
1
m
C
I
(
j
)
a
j
∑
j
=
1
m
R
I
(
j
)
a
j
CR=\frac{\displaystyle\sum_{j=1}^{m}{CI(j)a_j}}{\displaystyle\sum_{j=1}^{m}{RI(j)a_j}}
CR=j=1∑mRI(j)ajj=1∑mCI(j)aj
其中
a
j
a_j
aj表示上一层中次的权重
6 matlab代码
clc,clear
fid=fopen('txt3.txt','r');%打开文件,r读取文件
n1=6;n2=3;%指标层和方案层
a=[];
for i=1:n1
tmp=str2num(fgetl(fid));%将字符数组或字符串转换为数值数组
%fgetl(fid)从文件中读取一行数据,并去掉行末的换行符
a=[a;tmp]; %读准则层判断矩阵/a矩阵一行一行加上去
end
for i=1:n1
str1=char(['b',int2str(i),'=[];']);
str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']);
eval(str1);
%eval函数的功能是将字符串转换为matlab可执行语句
for j=1:n2%注意,这个for循环是嵌套的
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);% 返回指标之间的特征值组成的方阵(y),特征向量(x)
lamda=max(diag(y)); %找出最大的特征值,diag表示由对角线元素组成的列向量。
num=find(diag(y)==lamda);%返回最大特征值对应的下标
w0=x(:,num)/sum(x(:,num)); %对最大特征值对应的特征向量进行标准化,得出权重表
cr0=(lamda-n1)/(n1-1)/ri(n1)%计算出CR
for i=1:n1%这个循环是对方案层的判断矩阵进行相同的操作
[x,y]=eig(eval(char(['b',int2str(i)])));%重新对x和y进行赋值,再计算每个指标下方案间的判断矩阵的特征值和特征向量
lamda=max(diag(y));%找出最大的特征值,
num=find(diag(y)==lamda);%返回最大特征值对应的下标
w1(:,i)=x(:,num)/sum(x(:,num));%对最大特征值对应的特征向量进行标准化,得出权重表;并6个权重放到一个矩阵之中
cr1(i)=(lamda-n2)/(n2-1)/ri(n2);%计算出CR,放到一个矩阵中
end
cr1, ts=w1*w0, cr=cr1*w0
1.利用特征值法求权重
w0=x(:,num)/sum(x(:,num));
7.注意事项
比赛时最好用三种方法求权重
并加上:为了保证结果的稳健性,本文采用了三种方法分别求出了权重后计算平均值,再根据得到的权重矩阵计算各方案的得分,并进行排序和综合分析,这样避免了采用单一方法所产生的偏差,得出的结论将更全面、更有效。