层次分析法(AHP)——matlab代码实现

   

       层次分析法(AHP)的主要思想是根据研究对象的性质将要求达到的目标分解为多个组成因素,并按组成因素间的相互关系,将其层次化,组成一个层次结构模型,然后按层分析,最终获得最高层的重要性权值。层次分析法把一个复杂的无结构问题分解组合成若干部分或若干因素,上一层次对相邻的下一层次的全部或某些元素起支配作用,这样就形成了自上而下的层次结构,通过相关指标之间的两两比较对系统中各指标进行优劣判断,利用判断结果来综合计算各指标间的权重,从而对主要的影响因素进行排序。基本流程如下:

 

应用AHP解决问题的思路是:首先,把解决的问题分层系列化,即根据问题分解为不同的组成因素,按照因素之间的相互影响和隶属关系将其分层聚类组合,形成一个递阶的、有序的层次结构模型;然后,对模型中每一层次因素的相对重要性,依据人们对客观显示的判断给予定量表示,再利用数学方法确定每一层次全部因素相对重要性次序的权值;最后,通过综合计算各层因素相对重要性的权值,得到最底层值,以此作为评价和选择方案的依据。AHP方法将人们的思想过程和主观判断数学化,不仅简化了系统分析和计算工作,而且有助于决策者保持其思维过程和决策过程的一致性,所以,对于一些复杂问题能得到比较好的结果。AHP方法往往能够和其他模型相结合使用。

1.建立层次结构模型

确定问题所包含的指标,并根据各指标的相互关系将各因素分组、分层。按照最高层、中间层和最低层的形式进行排列,建立反映各指标关联隶属关系建立起层次结构模型。

2.建立判断矩阵

进行层次分析就要在建立问题层次模型的基础上,对层次结构中各指标的相对重要性做出判断,并将判断结果用一定的数值表示出来,写成矩阵形式,即所谓的判断矩阵。判断矩阵是进行层次分析的数据来源,构建判断矩阵是层次分析法的关键。

3.层次单排序和一致性检验

层次单排序是根据判断矩阵计算出对于上一层指标而言求层次与之有联系的指标的重要性权值。计算判断矩阵的特征值和特征向量,即对判断矩阵 计算满足下列关系的特征值和特征向量:

在实际分析中,由于客观事物的复杂性以及不同专家认识上的差异,使每一个判断矩阵都具有完全一致性是不可能的,为考察判断矩阵能否适用于层次分析,就要判断矩阵做一致性检验。为检验判断矩阵的一致性,需要计算一致性指标:

计算综合权重

计算目标准则层权重向量为:

以上来好久之前做的一个体系贡献率中部分用到的ahp方法,由于部分是公式所以就直接粘图了。

以下是我自己编的matlab程序:

function [Q]=AHP(B)
%Q为权值,B为对比矩阵
%导入判别矩阵B
[n,m]=size(B);
%判别矩阵具有完全一致性
for i=1:n
    for j=1:n
        if B(i,j)*B(j,i)~=1   
        fprintf('i=%d,j=%d,B(i,j)=%d,B(j,i)=%d\n',i,j,B(i,j),B(j,i))  
        end  
    end
end
%求特征值特征向量,找到最大特征值对应的特征向量
[V,D]=eig(B);
tz=max(D);
tzz=max(tz);
c1=find(D(1,:)==max(tz));
tzx=V(:,c1);%特征向量
%权
quan=zeros(n,1);
for i=1:n
quan(i,1)=tzx(i,1)/sum(tzx);
end
Q=quan;
%一致性检验
CI=(tzz-n)/(n-1);
RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59];
%判断是否通过一致性检验
CR=CI/RI(1,n);
if CR>=0.1
   fprintf('没有通过一致性检验\n');
else
  fprintf('通过一致性检验\n');
end

end

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页