学习知识要实时简单回顾,我把学习的层次分析法简单梳理一下,方便入门与复习。
AHP
层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家 T. L. Saaty 教授于上世纪 70 年代初期提出的一种简便、灵活而又实用的多准则决策方法。
层次分析法的基本原理与步骤
  人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是
 一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次
 分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。
 运用层次分析法建模,大体上可按下面四个步骤进行:
 (i)建立递阶层次结构模型;
 (ii)构造出各层次中的所有判断矩阵;
 (iii)层次单排序及一致性检验;
 (iv)层次总排序及一致性检验。
 下面分别说明这四个步骤的实现过程。
递阶层次结构的建立与特点
  应用 AHP 分析决策问题时,首先要把问题条理化、层次化,构造出一个有层次
 的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属
 性及关系形成若干层次。上一层次的元素作为准则对下一层次有关元素起支配作用。
 这些层次可以分为三类:
   (i)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结
 果,因此也称为目标层。
   (ii)中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干
 个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。
   (iii)最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等,
 因此也称为措施层或方案层。递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地层次数不受限制。每一层次中各元素所支配的元素一般不要超过 9 个。这是因为支配的元素过多会给两两比较判断带来困难。
 下面结合一个实例来说明递阶层次结构的建立。
 假期旅游有  
     
      
       
        
        
          P 
         
        
          1 
         
        
       
         、 
        
        
        
          P 
         
        
          2 
         
        
       
         、 
        
        
        
          P 
         
        
          3 
         
        
       
      
        P_1、P_2、P_3 
       
      
    P1、P2、P3 3 个旅游胜地供你选择,试确定一个最佳地点。
 在此问题中,你会根据诸如景色、费用、居住、饮食和旅途条件等一些准则去反
 复比较 3 个侯选地点。可以建立如图 1 的层次结构模型。
 
构造判断矩阵
  层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重
 并不一定相同,在决策者的心目中,它们各占有一定的比例。
   在确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难是这些比重常常不易定量化。此外,当影响某因素的因子较多时,直接考虑各因子对该因素有多大程度的影响时,常常会因考虑不周全、顾此失彼而使决策者提出与他实际认为的重要性程度不相一致的数据,甚至有可能提出一组隐含矛盾的数据。为看清这一点,可作如下假设:将一块重为 1 千克的石块砸成 n 小块,你可以精确称出它们的重量,设为  
     
      
       
        
        
          w 
         
        
          1 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          w 
         
        
          n 
         
        
       
      
        w_1,\cdots,w_n 
       
      
    w1,⋯,wn,现在,请人估计这 n 小块的重量占总重量的比例(不能让他知道各小石块的重量),此人不仅很难给出精确的比值,而且完全可能因顾此失彼而提供彼此矛盾的数据。
   设现在要比较 n 个因子 
     
      
       
       
         X 
        
       
         = 
        
       
         { 
        
        
        
          x 
         
        
          1 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          x 
         
        
          n 
         
        
       
         } 
        
       
      
        X=\{x_1,\cdots,x_n\} 
       
      
    X={x1,⋯,xn} 对某因素 Z 的影响大小,怎样比较才能提供可信的数据呢?Saaty 等人建议可以采取对因子进行两两比较建立成对比较矩阵的
 办法。即每次取两个因子  
     
      
       
        
        
          x 
         
        
          i 
         
        
       
      
        x_i 
       
      
    xi和 
     
      
       
        
        
          x 
         
        
          j 
         
        
       
      
        x_j 
       
      
    xj ,以  
     
      
       
        
        
          a 
         
        
          i 
         
        
       
         j 
        
       
      
        a_ij 
       
      
    aij 表示  
     
      
       
        
        
          x 
         
        
          i 
         
        
       
      
        x_i 
       
      
    xi 和  
     
      
       
        
        
          x 
         
        
          j 
         
        
       
      
        x_j 
       
      
    xj 对 Z 的影响大小之比,全部比较结果用矩阵 
     
      
       
       
         A 
        
       
         = 
        
        
         
         
           ( 
          
          
          
            a 
           
           
           
             i 
            
           
             j 
            
           
          
         
           ) 
          
         
         
         
           n 
          
         
           × 
          
         
           n 
          
         
        
       
      
        A=\left(a_{ij}\right)_{n\times n} 
       
      
    A=(aij)n×n表示,称 A 为 Z −X 之间的成对比较判断矩阵(简称判断矩阵)。容易看出,若 
     
      
       
        
        
          x 
         
        
          i 
         
        
       
      
        x_i 
       
      
    xi 与 
     
      
       
        
        
          x 
         
        
          j 
         
        
       
      
        x_j 
       
      
    xj 对 Z 的影响之比为 
     
      
       
        
        
          a 
         
        
          i 
         
        
       
         j 
        
       
      
        a_ij 
       
      
    aij ,则  
     
      
       
        
        
          x 
         
        
          j 
         
        
       
      
        x_j 
       
      
    xj 与  
     
      
       
        
        
          x 
         
        
          i 
         
        
       
      
        x_i 
       
      
    xi 对 Z 的影响之比应为 
     
      
       
        
        
          a 
         
         
         
           j 
          
         
           i 
          
         
        
       
         = 
        
        
        
          1 
         
         
         
           a 
          
          
          
            i 
           
          
            j 
           
          
         
        
       
      
        a_{j i}=\frac{1}{a_{i j}} 
       
      
    aji=aij1
   关于如何确定 
     
      
       
        
        
          a 
         
        
          i 
         
        
       
         j 
        
       
      
        a_ij 
       
      
    aij的值,Saaty 等建议引用数字 1~9 及其倒数作为标度。表 1 列出了 1~9 标度的含义
 
   从心理学观点来看,分级太多会超越人们的判断能力,既增加了作判断的难度,又容易因此而提供虚假数据。Saaty 等人还用实验方法比较了在各种不同标度下人们判断结果的正确性,实验结果也表明,采用 1~9 标度最为合适。
   最后,应该指出,一般地作  
     
      
       
        
         
         
           n 
          
         
           ( 
          
         
           n 
          
         
           − 
          
         
           1 
          
         
           ) 
          
         
        
          2 
         
        
       
      
        \frac{n(n-1)}{2} 
       
      
    2n(n−1)次两两判断是必要的。有人认为把所有元素都和某个元素比较,即只作 n-1 次比较就可以了。这种作法的弊病在于,任何一个判断的失误均可导致不合理的排序,而个别判断的失误对于难以定量的系统往往是难以避免的。进行 
     
      
       
        
         
         
           n 
          
         
           ( 
          
         
           n 
          
         
           − 
          
         
           1 
          
         
           ) 
          
         
        
          2 
         
        
       
      
        \frac{n(n-1)}{2} 
       
      
    2n(n−1)次比较可以提供更多的信息,通过各种不同角度的反复比较,从而导出一个合理的排序。
层次单排序及一致性检验
  判断矩阵 A 对应于最大特征值  
     
      
       
        
        
          λ 
         
        
          max 
         
        
           
         
        
       
      
        \lambda_{\max} 
       
      
    λmax的特征向量W ,经归一化后即为同一层次相应因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。
   上述构造成对比较判断矩阵的办法虽能减少其它因素的干扰,较客观地反映出一对因子影响力的差别。但综合全部比较结果时,其中难免包含一定程度的非一致性。如果比较结果是前后完全一致的,则矩阵 A 的元素还应当满足:
a i j a j k = a i k , ∀ i , j , k = 1 , 2 , ⋯ n a_{ij}a_{jk}=a_{ik},\quad\forall i,j,k=1,2,\cdots n aijajk=aik,∀i,j,k=1,2,⋯n
对判断矩阵的一致性检验的步骤如下:
 (i)计算一致性指标 CI
C I = λ max  − n n − 1 CI=\frac{\lambda_{\max}-n}{n-1} CI=n−1λmax−n
(ii)查找相应的平均随机一致性指标 RI 。对 
     
      
       
       
         n 
        
       
         = 
        
       
         1 
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
       
         9 
        
       
      
        n=1,\cdots,9 
       
      
    n=1,⋯,9 ,Saaty 给出了 RI 的值,
 如表 2 所示。
 
   RI 的值是这样得到的,用随机方法构造 500 个样本矩阵:随机地从 1~9 及其倒数中抽取数字构造正互反矩阵,求得最大特征根的平均值  
     
      
       
        
        
          λ 
         
        
          max 
         
        
           
         
        
          ′ 
         
        
       
      
        \lambda'_{\max} 
       
      
    λmax′ ,并定义
R I = λ max  ′ − n n − 1 RI=\frac{\lambda'_{\max}-n}{n-1} RI=n−1λmax′−n
(iii)计算一致性比例 CR
C R = C I R I CR=\frac{CI}{RI} CR=RICI
当 C R < 0.10 CR < 0.10 CR<0.10 时,认为判断矩阵的一致性是可以接受的,否则应对判断矩阵作适当修正。
层次总排序及一致性检验
  上面我们得到的是一组元素对其上一层中某元素的权重向量。我们最终要得到各
 元素,特别是最低层中各方案对于目标的排序权重,从而进行方案选择。总排序权重要自上而下地将单准则下的权重进行合成。
 
   设上一层次( A 层)包含  
     
      
       
        
        
          A 
         
        
          1 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          A 
         
        
          m 
         
        
       
      
        A_1,\cdots,A_m 
       
      
    A1,⋯,Am 共 m 个因素,它们的层次总排序权重分别为 
     
      
       
        
        
          a 
         
        
          1 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          a 
         
        
          m 
         
        
       
      
        a_1,\cdots,a_m 
       
      
    a1,⋯,am。又设其后的下一层次( B 层)包含 n 个因素  
     
      
       
        
        
          B 
         
        
          1 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          B 
         
        
          n 
         
        
       
      
        B_1,\cdots,B_n 
       
      
    B1,⋯,Bn ,它们关于 
     
      
       
        
        
          A 
         
        
          j 
         
        
       
      
        A_j 
       
      
    Aj的层次单排序权重分别为  
     
      
       
        
        
          b 
         
         
         
           1 
          
         
           j 
          
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          b 
         
         
         
           n 
          
         
           j 
          
         
        
       
      
        b_{1j},\cdots,b_{n_j} 
       
      
    b1j,⋯,bnj(当 
     
      
       
        
        
          B 
         
        
          i 
         
        
       
      
        B_i 
       
      
    Bi 与 
     
      
       
        
        
          A 
         
        
          j 
         
        
       
      
        A_j 
       
      
    Aj无关联时, 
     
      
       
        
        
          b 
         
         
         
           i 
          
         
           j 
          
         
        
       
         = 
        
       
         0 
        
       
      
        b_{ij}=0 
       
      
    bij=0)。现求 B 层中各因素关于总目标的权重,即求 B 层各因素的层次总排序权重  
     
      
       
        
        
          b 
         
        
          1 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          b 
         
        
          n 
         
        
       
      
        b_1,\cdots,b_n 
       
      
    b1,⋯,bn ,计算按表 3 所示方法,即 
     
      
       
        
        
          b 
         
        
          i 
         
        
       
         = 
        
        
        
          ∑ 
         
         
         
           j 
          
         
           = 
          
         
           1 
          
         
        
          m 
         
        
        
        
          b 
         
        
          j 
         
        
        
        
          a 
         
        
          j 
         
        
       
         , 
        
       
         i 
        
       
         = 
        
       
         1 
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
       
         n 
        
       
      
        b_i=\sum_{j=1}^m b_ja_j,i=1,\cdots,n 
       
      
    bi=∑j=1mbjaj,i=1,⋯,n。
   对层次总排序也需作一致性检验,检验仍象层次总排序那样由高层到低层逐层进
 行。这是因为虽然各层次均已经过层次单排序的一致性检验,各成对比较判断矩阵都
 已具有较为满意的一致性。但当综合考察时,各层次的非一致性仍有可能积累起来,
 引起最终分析结果较严重的非一致性。
   设 B 层中与 
     
      
       
        
        
          A 
         
        
          j 
         
        
       
      
        A_j 
       
      
    Aj相关的因素的成对比较判断矩阵在单排序中经一致性检验,求得单排序一致性指标为 
     
      
       
       
         C 
        
       
         I 
        
       
         ( 
        
       
         j 
        
       
         ) 
        
       
         , 
        
       
         ( 
        
       
         j 
        
       
         = 
        
       
         1 
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
       
         m 
        
       
         ) 
        
       
      
        CI(j), (j=1,\cdots,m) 
       
      
    CI(j),(j=1,⋯,m),相应的平均随机一致性指标为 
     
      
       
       
         R 
        
       
         I 
        
       
         ( 
        
       
         j 
        
       
         ) 
        
       
      
        RI(j) 
       
      
    RI(j)
  
     
      
       
       
         ( 
        
       
         C 
        
       
         I 
        
       
         ( 
        
       
         j 
        
       
         ) 
        
       
         , 
        
       
         R 
        
       
         I 
        
       
         ( 
        
       
         j 
        
       
         ) 
        
       
      
        (CI(j),RI(j) 
       
      
    (CI(j),RI(j) 已在层次单排序时求得),则 B 层总排序随机一致性比例为
  
      
       
        
        
          C 
         
        
          R 
         
        
          = 
         
         
          
           
           
             ∑ 
            
            
            
              j 
             
            
              = 
             
            
              1 
             
            
           
             m 
            
           
          
            C 
           
          
            l 
           
          
            ( 
           
          
            j 
           
          
            ) 
           
           
           
             a 
            
           
             j 
            
           
          
          
           
           
             ∑ 
            
            
            
              j 
             
            
              = 
             
            
              1 
             
            
           
             m 
            
           
          
            R 
           
          
            I 
           
          
            ( 
           
          
            j 
           
          
            ) 
           
           
           
             a 
            
           
             j 
            
           
          
         
        
       
         CR=\frac{\sum\limits_{j=1}^m Cl(j)a_j}{\sum\limits_{j=1}^m RI(j)a_j} 
        
       
     CR=j=1∑mRI(j)ajj=1∑mCl(j)aj
 当  
     
      
       
       
         C 
        
       
         R 
        
       
         < 
        
       
         0.10 
        
       
      
        CR < 0.10 
       
      
    CR<0.10 时,认为层次总排序结果具有较满意的一致性并接受该分析结果。
层次分析法的应用
  在应用层次分析法研究问题时,遇到的主要困难有两个:
 (i)如何根据实际情况
 抽象出较为贴切的层次结构;
 (ii)如何将某些定性的量作比较接近实际定量化处理。
   层次分析法对人们的思维过程进行了加工整理,提出了一套系统分析问题的方法,为科学管理和决策提供了较有说服力的依据。但层次分析法也有其局限性,主要表现在:
 (i)它在很大程度上依赖于人们的经验,主观因素的影响很大,它至多只能排除思维
 过程中的严重非一致性,却无法排除决策者个人可能存在的严重片面性。
 (ii)比较、判断过程较为粗糙,不能用于精度要求较高的决策问题。AHP 至多只能算是一种半定量(或定性与定量结合)的方法。
找工作问题实战
挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型,如图所示
 
 
 
找工作问题实战代码如下
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),'=[];']);
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
纯文本文件txt3.txt中的数据格式如下:
1 1 1 4 1 1/2
1 1 2 4 1 1/2
1 1/2 1 5 3 1/2
1/4 1/4 1/5 1 1/3 1/3
1 1 1/3 3 1 1
2 2 2 3 3 1
1 1/4 1/2
4 1 3
2 1/3 1
1 1/4 1/5
4 1 1/2
5 2 1
1 3 1/3
1/3 1 1/7
3 7 1
1 1/3 5
3 1 7
1/5 1/7 1
1 1 7
1 1 7
1/7 1/7 1
1 7 9
1/7 1 1
1/9 1 1
编写不易,求个点赞!!!!!!!
“你是谁?”
“一个看帖子的人。”
“看帖子不点赞啊?”
“你点赞吗?”
“当然点了。”
“我也会点。”
“谁会把经验写在帖子里。”
“写在帖子里的那能叫经验贴?”
“上流!”
cheer!!!


















![[Golang] 爬虫实战-用多层嵌套结构体去接收多层嵌套数据](https://img-blog.csdnimg.cn/a9509c5ed06e491a970eb764f66f6f60.png)
