天天看点

层次分析法原理和matlab代码

文章目录

    • 一、层次分析法简述
    • 二、求解过程
      • 1、建立层次结构模型
      • 2、构造成对比较矩阵
      • 3、计算权向量并做一致性检验
      • 4、计算组合权向量并做组合一致性检验
    • 三、参考文献

一、层次分析法简述

层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯.塞蒂(T.L.saaty)正式提出。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。

适用于解决多个备选方案决策以及在选择过程中各个因素的重要性比较。 比如说经常举的例子:选择旅游地,有3个选择方案,苏杭、北戴河和桂林,选择过程需要考虑多个因素,比如景色、费用、居住、饮食和旅途。江苏省2019年研究生数模比赛B题,高校学生选择高铁还是火车回家,在里程、时长、个人可支配收入、舒适度等多个因素中分析主要因素。

二、求解过程

1、建立层次结构模型

在深入分析实际问题的基础上,将有关的各个因素按照不同属性自上而下地分解成若干层次,同一层的诸因素从属于上一层的因素或对上层因素有影响,同时又支配下一层的因素或受到下层因素的作用。最上层为目标层,通常只有1个因素,最下层通常为方案或对象层,中间可以有一个或几个层次,通常为准则或指标层。当准则过多时(譬如多于9个)应进一步分解出子准则层。

以旅游问题为例,我们就可以建立如下模型:

层次分析法原理和matlab代码

2、构造成对比较矩阵

从层次结构模型的第2层开始,对于从属于(或影响)上一层每个因素的同一层诸因素,用成对比较法和1-9比较尺度构造成对比较阵,直到最下层。

成对比较法是指,不把所有因素放在一起比较,而是两两相互比较。并且为了方便定量分析,把比较的结果用1-9进行标识。如果用 a i j a_{ij} aij​表示因素i与因素j对上一层因素的重要程度,1-9比较尺度的含义如下:

层次分析法原理和matlab代码

两两因素比较的结果可用成对比较矩阵表示:

A = ( a i j ) n × n , a i j > 0 , a j i = 1 a i j A=(a_{ij})_{n\times n}, a_{ij}>0, a_{ji}=\frac{1}{a_{ij}} A=(aij​)n×n​,aij​>0,aji​=aij​1​

其中n是参与对比的元素的个数。

成对比较矩阵因没有专门的数据,往往具有很强的主观性,为了增强数据的科学性(尤其是参加比赛)可以:

  1. 查找相关资料和文献,确定主要因素(定性)以及哪个因素更重要(减少问卷问题数量);
  2. 设置调查问卷(定量);

旅游问题中,成对比较矩阵示例:

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即可。如果是想要确定最终去哪个目的地,还得确定方案层对准则层的重要程度,即把苏杭、北戴河和桂林作为比较因素,生成对景色和费用等的比较矩阵,分别记为 B 1 B 2 … B 5 B_{1}B_{2}…B_{5} B1​B2​…B5​,示例如下:

#三个城市作为比较因素,所以n(矩阵维度)=3
#因为要分析城市对景色、费用、居住、饮食和旅途各自的重要程度,所以就有5个比较矩阵
B1=[ 1 2 5;
1/2 1 2;
1/5 1/2 1]

B2=[1 1/3 1/8;
3 1 1/3;
8 3 1]

B3=[1 1 3;
1 1 3;
1/3 1/3 1]

B4=[1 3 4;
1/3 1 1;
1/4 1 1]

B5=[1 1 1/4;
1 1 1/4;
4 4 1]
           

3、计算权向量并做一致性检验

对于每一个成对比较阵计算最大特征根及对应特征向量,利用一致性指标、随机一致性指标和一致性比率做一致性检验。若检验通过,特征向量(归一化后)即为权向量:若不通过,需重新构造成对比较阵。

所谓一致性是指判断思维的逻辑一致性。如当甲比丙是强烈重要,而乙比丙是稍微重要时,显然甲一定比乙重要。这就是判断思维的逻辑一致性,否则判断就会有矛盾。

如果A是完全一致的成对比较矩阵,应该有:

a i j a j k = a i k , 1 ≤ i , j , k ≤ n a_{ij}a_{jk}=a_{ik}, 1\le i,j,k \le n aij​ajk​=aik​,1≤i,j,k≤n

但由于客观事物的复杂性、人们认识上的多样性和片面性, 即使有九级标度, 也不能保证每个判断矩阵具有完全一致性。因此, 为了保证层次分析法 的结论基本合理, 还必须对形成的判断矩阵进行一致性检验。方法是:

  1. 先计算比较矩阵的最大特征值 λ m a x \lambda_{max} λmax​, 然后计算一致性指标: C I = λ m a x − n n − 1 CI=\frac{\lambda_{max}-n}{n-1} CI=n−1λmax​−n​;
  2. 如果 C I = 0 CI=0 CI=0, 则表明该判断矩阵具有完全一致性, 检验结束,否则进行下一步;
  3. 计算随机一致性比率, C R = C I R I CR=\frac{CI}{RI} CR=RICI​,如果 C R < 0.1 CR<0.1 CR<0.1,就认为一致性可以接受,否则重新设定比较矩阵,重新验证一致性。

其中矩阵的平均随机一致性指标RI(rand index),只与矩阵阶数n有关,常用的如下:

层次分析法原理和matlab代码

计算一致性的matlab代码:

disp('请输入判断矩阵A(n阶)');
A=input('A=');
[n,n]=size(A);
x=ones(n,100);y=ones(n,100);m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=A*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;i=2;k=abs(m(2)-m(1));
while  k>p
  i=i+1;
  x(:,i)=A*y(:,i-1);
  m(i)=max(x(:,i));
  y(:,i)=x(:,i)/m(i);
  k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
w=y(:,i)/a;
t=m(i);
disp('w=');disp(w);
%以下是一致性检验
CI=(t-n)/(n-1);
RI=[0 0 0.52 0.89 1.12 1.26 1.36  1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR=CI/RI(n);
if CR<0.1
    disp('此矩阵的一致性可以接受!');
    disp('CI=');disp(CI);
    disp('CR=');disp(CR);
else
    disp('此矩阵的一致性不可以接受!');
end
           

matlab的运行过程和结果:

>> ahp
请输入判断矩阵A(n阶)
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]
w=
    0.2636
    0.4758
    0.0538
    0.0981
    0.1087

此矩阵的一致性可以接受!
CI=
    0.0180

CR=
    0.0161
           

得到权向量:

至于说RI取值不同 [ 1 ] _{[1]} [1]​,差别没那么大,应该是精度和随机数取值的问题。

4、计算组合权向量并做组合一致性检验

计算最下层对目标的组合权向量,并根据公式做组合一致性检验,若检验通过,则可按照组合权向量表示的结果进行决策,否则需要重新考虑模型或重新构造那些一致性比率较大的成对比较阵。

一致性检验的方法和前面的一样,不再赘述,计算出各自权重。

w1=[0.5954,0.2764,0.1283]
w2=[0.0819,0.2363,0.6817]
w3=[0.4286,0.4286,0.1429]
w4=[0.6337,0.1919,0.1744]
w5=[0.1667,0.1667,0.6667]
           

去苏杭的概率=0.26360.5954+0.47580.0819+0.05380.0981+0.09810.6337+0.10870.1667=0.2815;

去北戴河的概率=0.26360.2764+0.47580.2363+0.05380.4268+0.09810.1919+0.10870.1667=0.2452;

去桂林的概率=0.26360.1283+0.47580.6817+0.05380.1429+0.09810.1744+0.1087*0.6667=0.4554

权重矩阵:

层次分析法原理和matlab代码

注:0.2815+0.2452+0.4554=0.9821不等于1,是因为精度,如果写论文,逻辑自洽,去桂林的概率最好改为1-0.2815-0.2452=0.4733

所以选择去桂林

三、参考文献

[ 1 ] [1] [1] 洪志国, 李焱, 范植华,等. 层次分析法中高阶平均随机一致性指标(RI)的计算[J]. 计算机工程与应用, 2002, 038(012):45-47,150.

其它参考内容:

层次分析法

matlab-层次分析法

继续阅读