层次分析法

基本步骤

(i)建立递阶层次结构模型;
(ii)构造出各层次中所有的判断矩阵;
(iii)层次单排序及一致性检验;
(iv)层次总排序及一致性检验。

使用条件

评价的决策层(方案层)不能太多,判断矩阵和一致矩阵差异可能会很大。

递阶层次结构的建立

对复杂问题中的元素进行分解,分为三个层次。

(i)目标层:这一层中只有一个元素,一般它是分析问题的预定目标或理想结果。
(ii)准则层:这一层中包含了为实现目标所涉及的中间环节(常见的有考虑方面等),它可以由若干个层次组成,包括所需考虑的准则、子准则。
(iii)方案层:这一层包括了可以实现目标的各种措施或者决策等。

注意:每一层中各个元素所支配的元素一般不要超过9个,不然会给两两判断带来太大困难。

示例:
在这里插入图片描述

构造判断矩阵

(i)先构造准则层之间的判断矩阵;
(ii)再构造再每一个准则层之下方案层的判断矩阵。

注意:判断矩阵为正互反矩阵
(1): a i j > 0 a_{ij}>0 aij>0;
(2): a i j = 1 a i j ( i , j = 1 , 2 , . . . , n ) a_{ij}=\frac{1}{a_{ij}}(i,j=1,2,...,n) aij=aij1(i,j=1,2,...,n)

总共要进行 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1)次比较,n为准则层或方案层的元素总数(即填写矩阵的上三角即可)。

层次单排序及一致性检验

判断矩阵A对应于最大特征值 λ m a x \lambda_{max} λmax的特征向量W,经过归一化处理后即为同一层次相应因素对于上一层次某因素相对重要性的权重

判断正互反矩阵是否为一致矩阵。

若A为一致矩阵:
(i)A 必为正互反矩阵;
(ii)A的转置矩阵 A T A^T AT也是一致矩阵;
(iii)A的任意两列成比例,比例因子大于零,从而rank(A) = 1(同样地,A地任意两列也成比例)
(iv)A 的最大特征值λ max = n ,其中n 为矩阵 A 的阶。A 的其余特征根均为零。

当A为正互反矩阵时,它地最大特征根为n,我们可以根据这一条来检验A是否为一致矩阵。

步骤:
(i):计算一致性指标 C I CI CI
C I = λ m a x − n n − 1 CI=\frac{\lambda_{max}-n}{n-1} CI=n1λmaxn
(ii)查找相应地平均随机一致性指标 R I RI RI。(RI问度娘)
(iii)计算一致性比例 C R CR CR
C R = C I R I CR=\frac{CI}{RI} CR=RICI
C R < 0.10 CR<0.10 CR<0.10时,认为判断矩阵的一致性是可以接受的,即便不是完美的一致性矩阵,如果不是,则要对判断矩阵进行修正。

层次总排序及一致性检验

C R = ∑ j = 1 m C I ( j ) a j ∑ j = 1 m R I ( j ) a j CR = \frac{\sum\limits_{j=1}^mCI(j)a_j}{\sum\limits_{j=1}^mRI(j)a_j} CR=j=1mRI(j)ajj=1mCI(j)aj
其中 a j a_j aj表示上一层中次的权重。

代码示例:

clc,clear 
fid=fopen('txt3.txt','r');  %打开文本文件 
n1=6;n2=3;      %建立指标层和方案层
a=[];           %建立空数组
for i=1:n1      %从文件中读取准则层判断矩阵
 tmp=str2num(fgetl(fid));
 a=[a;tmp];     %读准则层判断矩阵
end 
for i=1:n1 
 str1=char(['b',int2str(i),'=[];']);                    %为用eval函数创建判断矩阵的雏形空矩阵 
 str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']); %为用eval函数为每个判断矩阵赋值提供前提
 eval(str1);
 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))            %对最大特征值进行标准化,得出权重表
 cr1(i)=(lamda-n2)/(n2-1)/ri(n2);           %计算出相应的CR
end 
cr1, ts=w1*w0, cr=cr1*w0

实战分析:

挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型,如图 2 所示。
在这里插入图片描述
准则层的判断矩阵如表 4 所示。
在这里插入图片描述
方案层的判断矩阵如表 5 所示。在这里插入图片描述
层次总排序的结果如表 6 所示。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值