精华内容
下载资源
问答
  • AHP层次分析法

    万次阅读 多人点赞 2014-02-21 01:07:12
    在比赛中,我们运用了层次分析法(AHPAnalytic Hierarchy Process)进行建模,好不容易理解了这一方法的思想,在自己的博客里记录一下,希望可以帮助初次接触层次分析法的人,更快地理解这一的整体思想,也利于...

    2014年参加数学建模美赛, 其中一道题是选出5大优秀教练,数据来源要求自行寻找。 在比赛中,我们运用了层次分析法(AHPAnalytic Hierarchy Process)进行建模,好不容易理解了这一方法的思想,在自己的博客里记录一下,希望可以帮助初次接触层次分析法的人,更快地理解这一的整体思想,也利于进一步针对细节进行学习。文章内容主要参阅 《matlab数学建模算法实例与分析》,部分图片来源于WIKI

     

     

    文章分为2部分:

    1第一部分以通俗的方式简述一下层次分析法的基本步骤和思想

    2第二部分介绍一下我们队伍数学建模过程中,对层次分析法的应用,中间有些地方做了不严谨的推理,例如关于一致性的检验,如有人发现不正确,希望可以指正

     

    第一部分:

     

    层次分析法(Analytic Hierarchy Process ,简称 AHP )是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家T. L. Saaty 教授于上世纪 70 年代初期提出的一种简便、灵活而又实用的多准则决策方法。

    人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 


    运用层次分析法建模,大体上可按下面四个步骤进行: 
    (i )建立递阶层次结构模型; 
    (ii )构造出各层次中的所有判断矩阵; 
    (iii )层次单排序及一致性检验; 
    (iv )层次总排序及一致性检验。 

     

    这四个步骤中,前两个步骤最容易理解,后两个步骤需要一点时间理解

     

    首先从层次结构模型说起

    层次分析法是用来根据多种准则,或是说因素从候选方案中选出最优的一种数学方法

    最顶层是我们的目标,比如说选leader,选工作,选旅游目的地

    中间层是判断候选方物或人优劣的因素或标准

    选工作时有:发展前途  ,待遇 ,工作环境等

    选leader时有:年龄,经验,教育背景,魅力

     

    在分层以后,为了选出最优候选

    给目标层分配值1.000

    然后将这一值作为权重,分配给不同因素,对应因素的权重大小代表该因素在整个选择过程中的重要性程度

    然后对于候选方案,每一个标准再将其权重值分配给所有的候选方案,每一方案获得权重值,来源于不同因素分得的权重值的和

     

    如下图:

                目标层分配值为1, 然后我们给了4个候选方案评估标准 criterion 1 、 criterion 2、criterion 3、criterion 4

                假设我们认为这四个标准同等重要, 于是目标层的值1 就被均分到 4个准则上, 每个准则获得的值为 0.25

                然后我们从评估标准 criterion 1 出发, 考虑在该评估标准下, 3 个候选方案的优劣比如何。 假如我们认为在标准1 的衡量下,   3 个方案完全平等, 方案1 在该标准下的得分就应该是: 0.25 * (1/3) 

               同理, 如果我们假设剩下的 3 个标准下, 3个候选方案都是平分秋色, 那么方案 1 的最终得分就应该是

               0.33 =  0.25 * (1/3)   +   0.25 * (1/3)   +  0.25 * (1/3)  +  0.25 * (1/3) 

               最终获得的各个方案的的权重值的和依然为1

     

    这不就是一个简单的权重打分的过程吗?为什么还要层次分析呢。这里就有两个关键问题:

    1每个准则(因素)权重具体应该分配多少

    2每一个候选方案在每一个因素下又应该获得多少权重

     

    这里便进入层次分析法的第二个步骤,也是层次分析法的一个精华(构造比较矩阵(判断矩阵)comparison matrix):

     

    首先解决第一个问题:每个准则(因素)权重具体应该分配多少?

    如果直接要给各个因素分配权重比较困难,在不同因素之间两两比较其重要程度是相对容易的

     

    现在将不同因素两两作比获得的值aij  填入到矩阵的 i 行 j 列的位置,则构造了所谓的比较矩阵,对角线上都是1, 因为是自己和自己比

    这个矩阵容易获得,我们如何从这一矩阵获得对应的权重分配呢

    这里便出现了一个比较高级的概念,正互反矩阵和一致性矩阵

    首先正互反矩阵的定义是:

     

    我们目前构造出的矩阵很明显就是正互反矩阵

     

    而一致性矩阵的定义是:


    这里我们构造出的矩阵就不一定满足一致性,比如我们做因素1:因素2= 4:1  因素2:因素3=2:1    因素1:因素3=6:1(如果满足一致性就应该是8:1),我们就是因为难以确定各因素比例分配才做两两比较的,如果认为判断中就能保证一致性,就直接给出权重分配了

     

    到了关键部分,一致性矩阵有一个性质可以算出不同因素的比例

     

    这里的w就是我们想要知道的权重,所以通过 求比较矩阵的最大特征值所对应的特征向量,就可以获得不同因素的权重,归一化一下(每个权重除以权重和作为自己的值,最终总和为1)就更便于使用了。(实际上写这篇博客就是因为,重新翻了线代的书才好不容易理解这里的,就想记录下来)

     

    这里补充一点线性代数的知识:

        n阶矩阵有n个特征值,每个特征值对应一个n维特征列向量,特征值和特征向量的计算方法这里就省略了,反正书中的程序是直接用matlab 的eig函数求的

     

    这里不能忘了,我们给出的比较矩阵一般是不满足一致性的,但是我们还是把它当做一致矩阵来处理,也可以获得一组权重,但是这组权重能不能被接受,需要进一步考量

    例如在判断因素1,2,3重要性时,可以存在一些差异,但是不能太大,1比2重要,2比3 重要,1和3比时却成了3比1重要,这显然不能被接受

     

    于是引入了一致性检验:

              一致性的检验是通过计算一致性比例CR 来进行的

              

              当 10 . 0 < CR 时,认为判断矩阵的一致性是可以接受的,否则应对判断矩阵作适当修正。 

     

    CI的值由判断矩阵计算获得,RI的值查表获得,具体的计算公式这里就略去,重点是理解为什么要做一致性检验

     

     

    接下来解决第二个问题:每一个候选方案在每一个因素下又应该获得多少权重

     

    这里则需要将不同候选方案,在不同因素下分别比较,具体的比较方法,还是使用比较矩阵,只不过之前准则层的比较矩阵比较的对象是因素,这里比较的是某一因素下,候选方案的优劣, n个因素则需构造出来n个比较矩阵

    例如在工作环境的因素下,工作1与工作2相比为 :4:2,工作2与工作3=2:1  工作1:工作3=6:1.,这样构造一个矩阵,再用之前的一致性矩阵的方法就可以求出一个权重,然后相对应因素(这里是工作环境)所拥有的权值就可以按这个权重比例分配给不同候选物或人。

     

    其他因素同理

     

     

    至此两个问题就都得到了解决

    最终将每个候选物、人从不同因素获得的权值求和,就可以得到不同候选对于目标层的权值大小,继而可以根据值的大小,来选出优劣

     

    对于第一部分的总结:

     

    • 通过对层次分析法的基本了解,不难发现层次分析法对人们的思维过程进行了加工整理,提出了一套系统分析问题的方法,为科学管理和决策提供了较有说服力的依据。 

     

    • 但很明显的缺点是,整个分析过程似乎都是依赖于人的主观判断思维,一来不够客观,二来两两比较全部人为完成,还是非常耗费精力的,尤其是当候选方案比较多的时候

     

     

     

    文章的第二部分:


    层次分析法的变形应用(也可能本来就是这样用的,只不过参考书上没这样说,外语
    论文没细看)解决最优教练选择问题

     

    目标:选最优教练

     

    准则:  

     

     

    1. 职业生涯所带队伍的胜率      
    2. 职业生涯所带队伍的胜场            
    3. 从教时长(年)          
    4. 职业生涯所带队伍获奖状况(化成分数)

     

      

    候选:  众多教练

     

    准则层比较矩阵获得

     

     

    • 准则层的比较矩阵好构造 ,作6次两两比较,就可以获得4*4的比较矩阵

     

     

    候选层比较矩阵

     

    每一个准则对应下来的 候选层 已经有定量的数据了。 这里其实就不再需要候选层比较矩阵了, 因为有4000个教练的话, 得比4000*3999次,可以直接利用定量的数据计算权重

    • 例如“职业生涯所带队伍的胜场” 这一准则对应到每个教练都有直接相应数据的,例如教练 A, B, C 职业生涯所带队伍胜场数为 100,150, 90. 此时该准则下得到的分数, 就应当按照 10:5:9 的比例来进一步划分。 

     

    类似的,胜率准则 下就根据  “胜率   计算权重分配比例。 从教时长准则下就根据 “从教时间的年数” 计算权重分配比例

     

    这里又有两点可以注意:

     

    1.不同因素下数据的量纲和性质不一样,直接用数据作比来分配,不一定合适,比如胜率越要接近1越难,0.7比胜率0.5  和胜率0.9比0.7  ,后者比值比前者小,这显然不合适。这里可以利用指数函数和对数函数对数据先做一次处理, 再作为权重分配的依据。

     

    2.这里的用定量数据作比获得的矩阵显然满足一致性要求,不需要做一致性检验。以职业生涯所带队伍的胜场数为例,如果教练 A, B, C 职业生涯所带队伍胜场数为 100,150, 90。 那么 A:B :C 无论怎么作比, 都不会违反 10:15:9 的一致性。 

     

    综上就对层次分析法完成了定性定量结合的应用,以及对多个候选方案的比较(其实只是就是用程序控制数据作比,我们水平有限,能成功应用该方法已经不容易了)

     

    很遗憾的是比赛时编写的代码存放的优盘不慎丢失, 没有办法把代码共享出来, 这里只能将书中的代码贴出。比赛建模时, 就是在这个代码基础上进行修改实现。 只要理解了下列代码,编写符合自己需求的程序, 应当是水到渠成的事。

     

     

     

     matlab 代码(对应于文章第一部分选 Leader 的内容):

     

     

    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);  % matlab eig(a) 返回矩阵的特征值和特征向量, 这里的 x 为矩阵 a 的 n 个特征向量, y 为矩阵 a 的 n 个特征值
    lamda=max(diag(y));  %  eig 函数返回的 y 是矩阵形式保存的, dig(y) 提取对角线上的n 个特征值到一个数组中, 求出最大特征值 lamda
    num=find(diag(y)==lamda);  % 返回最大特征的索引
    w0=x(:,num)/sum(x(:,num));  % x( :num) 为最大特征值所对应的那一列特征向量。 w0 中准则层计算出的 包含归一化后的n 个权重值
    cr0=(lamda-n1)/(n1-1)/ri(n1)
    
    for i=1:n1 % 循环 n 个维度, 针对每个维度, 都计算一次方案层的比较矩阵及其权重值
    	[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 中的内容, 前6行为准则层的 6 x 6 比较矩阵, 后 18 行则为 6 个准则下, 各自的 3 x 3 的比较矩阵。 

    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

     

    再上一段 JAVA 代码, 方便 JAVA 童鞋参考, 这部分仅仅展示了如何用JAVA 代码进行准则层比较矩阵计算 。 

     

    import org.apache.commons.math3.linear.*;
    
    
    public class MatrixTester {
        public static void main(String[] args) {
    
            // Create a real matrix with two rows and three columns, using a factory
            // method that selects the implementation class for us.
            double[][] matrixData = {   {1d,    1d,     1d,     4d,     1d,     1d/2d},
                                        {1d,    1d,     2d,     4d,     1d,     1d/2d},
                                        {1d,    1d/2d,  1d,     5d,     3d,     1d/2d },
                                        {1d/4d, 1d/4d,  1d/5d,  1d,     1d/3d,  1d/3d },
                                        {1d,   1d,     1d/3d,  3d,     1d,     1d },
                                        {2d,    2d,     2d,     3d,     3d,     1d },
                                    };
            RealMatrix m = MatrixUtils.createRealMatrix(matrixData);
    
    
    
            // One more with three rows, two columns, this time instantiating the
            // RealMatrix implementation class directly.
            double[][] matrixData2 = {{1d, 2d}, {2d, 5d}, {1d, 7d}};
            RealMatrix n = new Array2DRowRealMatrix(matrixData2);
    
            // Note: The constructor copies  the input double[][] array in both cases.
            // Now multiply m by n
    //        RealMatrix p = m.multiply(n);
    //        System.out.println(p.getRowDimension());    // 2
    //        System.out.println(p.getColumnDimension()); // 2
    //
    //        // Invert p, using LU decomposition
    //        RealMatrix pInverse = new LUDecomposition(p).getSolver().getInverse();
    
    
            RealMatrix D = new EigenDecomposition(m).getD();
            RealMatrix V = new EigenDecomposition(m).getV();
    
            for(int i=0; i<D.getRowDimension();i++)
            {
                System.out.println(D.getRowMatrix(i));
            }
    
            for(int i=0; i<V.getRowDimension();i++)
            {
                System.out.println(V.getRowMatrix(i));
            }
    
            // 特征值
            double maxLamda;
            int columIndexForMaxLamda=0;
            maxLamda=D.getEntry(0,0);
    
            for(int i =0, j=0; i<D.getRowDimension()&&j<D.getColumnDimension();i++,j=i)
            {
                double lamda = D.getEntry(i,j);
                if(maxLamda<lamda)
                {
                    maxLamda=lamda;
                    columIndexForMaxLamda = j;
                }
                System.out.println(lamda);
            }
    
            // 输出尚未做归一化 w1, w2, w3, w4, w5, w6 , 
            System.out.println(V.getColumnMatrix(columIndexForMaxLamda));
    
        }
    }
    

     

     

    展开全文
  • 层次分析法

    万次阅读 2015-06-11 18:11:53
    层次分析法(Analytic Hierarchy Process,简称AHP)是将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初...
            层次分析法(Analytic Hierarchy Process,简称AHP)是将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和 定量分析 的决策方法。该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初,在为 美国国防部 研究"根据各个工业部门对国家福利的贡献大小而进行电力分配"课题时,应用网络系统理论和多目标综合评价方法,提出的一种层次权重决策分析方法。
     
    应用实例编辑
    1、建立递阶层次结构;
    2、构造两两比较判断矩阵;( 正互反矩阵
    购物层次分析模型                      购物层次分析模型
    对各指标之间进行两两对比之后,然后按9分位比率排定各评价指标的相对优劣顺序,依次构造出评价指标的判断矩阵。
    3、针对某一个标准,计算各备选元素的权重;
    关于判断矩阵权重计算的方法有两种,即几何平均法(根法)和规范列平均法(和法)。
    (1)几何平均法(根法)
    计算矩阵A各行各个元素的乘积,得到一个n行一列的矩阵B;
    计算矩阵每个元素的n次方根得到矩阵C;
    对矩阵C进行归一化处理得到矩阵D;
    该矩阵D即为所求权重向量。
    (2)规范列平均法(和法)
    矩阵A每一列归一化得到矩阵B;
    将矩阵B每一行元素的平均值得到一个一列n行的矩阵C;
    矩阵C即为所求权重向量。
     

    2定义

    所谓层次分析法,是指将一个复杂的多目标决策问题作为一个系统,将目标分解为多个目标或准则,进而分解为多指标(或准则、约束)的若干层次,通过定性指标模糊量化方法算出层次单排序(权数)和总排序,以作为目标(多指标)、多方案优化决策的系统方法。
    层次分析法是将决策问题按总目标、各层子目标、评价准则直至具体的备投方案的顺序分解为不同的层次结构,然后得用求解判断矩阵特征向量的办法,求得每一层次的各元素对上一层次某元素的优先权重,最后再加权和的方法递阶归并各备择方案对总目标的最终权重,此最终权重最大者即为最优方案。这里所谓“优先权重”是一种相对的量度,它表明各备择方案在某一特点的评价准则或子目标,标下优越程度的相对量度,以及各子目标对上一层目标而言重要程度的相对量度。层次分析法比较适合于具有分层交错评价指标的目标系统,而且目标值又难于定量描述的决策问题。其用法是构造 判断矩阵 ,求出其最大 特征值 。及其所对应的 特征向量 W, 归一化 后,即为某一层次指标对于上一层次某相关指标的相对重要性权值。
     

    3优缺点

    优点

    1. 系统性的分析方法
    层次分析法把研究对象作为一个系统,按照分解、比较判断、综合的思维方式进行决策,成为继机理分析、统计分析之后发展起来的系统分析的重要工具。系统的思想在于不割断各个因素对结果的影响,而层次分析法中每一层的权重设置最后都会直接或间接影响到结果,而且在每个层次中的每个因素对结果的影响程度都是量化的,非常清晰、明确。这种方法尤其可用于对无结构特性的系统评价以及多目标、多准则、多时期等的系统评价。
    2. 简洁实用的决策方法
    这种方法既不单纯追求高深数学,又不片面地注重行为、逻辑、推理,而是把定性方法与定量方法有机地结合起来,使复杂的系统分解,能将人们的思维过程数学化、系统化,便于人们接受,且能把多目标、多准则又难以全部量化处理的决策问题化为多层次单目标问题,通过两两比较确定同一层次元素相对上一层次元素的数量关系后,最后进行简单的数学运算。即使是具有中等文化程度的人也可了解层次分析的基本原理和掌握它的基本步骤,计算也经常简便,并且所得结果简单明确,容易为决策者了解和掌握。
    3. 所需定量数据信息较少
    层次分析法主要是从评价者对评价问题的本质、要素的理解出发,比一般的定量方法更讲求定性的分析和判断。由于层次分析法是一种模拟人们决策过程的思维方式的一种方法,层次分析法把判断各要素的相对重要性的步骤留给了大脑,只保留人脑对要素的印象,化为简单的权重进行计算。这种思想能处理许多用传统的最优化技术无法着手的实际问题。[1]

    缺点

    1. 不能为决策提供新方案
    层次分析法的作用是从备选方案中选择较优者。这个作用正好说明了层次分析法只能从原有方案中进行选取,而不能为决策者提供解决问题的新方案。这样,我们在应用层次分析法的时候,可能就会有这样一个情况,就是我们自身的创造能力不够,造成了我们尽管在我们想出来的众多方案里选了一个最好的出来,但其效果仍然不够企业所做出来的效果好。而对于大部分决策者来说,如果一种分析工具能替我分析出在我已知的方案里的最优者,然后指出已知方案的不足,又或者甚至再提出改进方案的话,这种分析工具才是比较完美的。但显然,层次分析法还没能做到这点。
    2. 定量数据较少,定性成分多,不易令人信服
    在如今对科学的方法的评价中,一般都认为一门科学需要比较严格的数学论证和完善的定量方法。但现实世界的问题和人脑考虑问题的过程很多时候并不是能简单地用数字来说明一切的。层次分析法是一种带有模拟人脑的决策方式的方法,因此必然带有较多的定性色彩。这样,当一个人应用层次分析法来做决策时,其他人就会说:为什么会是这样?能不能用数学方法来解释?如果不可以的话,你凭什么认为你的这个结果是对的?你说你在这个问题上认识比较深,但我也认为我的认识也比较深,可我和你的意见是不一致的,以我的观点做出来的结果也和你的不一致,这个时候该如何解决?
    比如说,对于一件衣服,我认为评价的指标是舒适度、耐用度,这样的指标对于女士们来说,估计是比较难接受的,因为女士们对衣服的评价一般是美观度是最主要的,对耐用度的要求比较低,甚至可以忽略不计,因为一件便宜又好看的衣服,我就穿一次也值了,根本不考虑它是否耐穿我就买了。这样,对于一个我原本分析的‘购买衣服时的选择方法’的题目,充其量也就只是‘男士购买衣服的选择方法’了。也就是说,定性成分较多的时候,可能这个研究最后能解决的问题就比较少了。
    对于上述这样一个问题,其实也是有办法解决的。如果说我的评价指标太少了,把美观度加进去,就能解决比较多问题了。指标还不够?我再加嘛!还不够?再加!还不够?!不会吧?你分析一个问题的时候考虑那么多指标,不觉得辛苦吗?大家都知道,对于一个问题,指标太多了,大家反而会更难确定方案了。这就引出了层次分析法的第三个不足之处。
    3. 指标过多时数据统计量大,且权重难以确定
    当我们希望能解决较普遍的问题时,指标的选取数量很可能也就随之增加。这就像系统结构理论里,我们要分析一般系统的结构,要搞清楚关系环,就要分析到基层次,而要分析到基层次上的相互关系时,我们要确定的关系就非常多了。指标的增加就意味着我们要构造层次更深、数量更多、规模更庞大的判断矩阵。那么我们就需要对许多的指标进行两两比较的工作。由于一般情况下我们对层次分析法的两两比较是用1至9来说明其相对重要性,如果有越来越多的指标,我们对每两个指标之间的重要程度的判断可能就出现困难了,甚至会对层次单排序和总排序的一致性产生影响,使一致性检验不能通过,也就是说,由于客观事物的复杂性或对事物认识的片面性,通过所构造的判断矩阵求出的特征向量(权值)不一定是合理的。不能通过,就需要调整,在指标数量多的时候这是个很痛苦的过程,因为根据人的思维定势,你觉得这个指标应该是比那个重要,那么就比较难调整过来,同时,也不容易发现指标的相对重要性的取值里到底是哪个有问题,哪个没问题。这就可能花了很多时间,仍然是不能通过一致性检验,而更糟糕的是根本不知道哪里出现了问题。也就是说,层次分析法里面没有办法指出我们的判断矩阵里哪个元素出了问题。[1]  
    4. 特征值和特征向量的精确求法比较复杂
    在求判断矩阵的特征值和特征向量时,所用的方法和我们多元统计所用的方法是一样的。在二阶、三阶的时候,我们还比较容易处理,但随着指标的增加,阶数也随之增加,在计算上也变得越来越困难。不过幸运的是这个缺点比较好解决,我们有三种比较常用的近似计算方法。第一种就是和法,第二种是幂法,还有一种常用方法是根法。
     

    4基本步骤

    建立层次结构模型
    在深入分析实际问题的基础上,将有关的各个因素按照不同属性 自上而下 地分解成若干层次,同一层的诸因素从属于上一层的因素或对上层因素有影响,同时又支配下一层的因素或受到下层因素的作用。最上层为目标层,通常只有1个因素,最下层通常为方案或对象层,中间可以有一个或几个层次,通常为准则或指标层。当准则过多时(譬如多于9个)应进一步分解出子准则层。
    构造成对比较阵
    从层次结构模型的第2层开始,对于从属于(或影响)上一层每个因素的同一层诸因素,用 成对比较法 和1—9比较尺度构造成对比较阵,直到最下层。
    计算权向量并做一致性检验
    对于每一个成对比较阵计算最大特征根及对应 特征向量 ,利用一致性指标、随机一致性指标和一致性比率做一致性检验。若检验通过,特征向量( 归一化 后)即为权向量:若不通过,需重新构造成对比较阵。
    计算组合权向量并做组合一致性检验
    计算最下层对目标的组合权向量,并根据公式做组合一致性检验,若检验通过,则可按照组合权向量表示的结果进行决策,否则需要重新考虑模型或重新构造那些一致性比率较大的成对比较阵。
    美国运筹学家T.L.saaty于20世纪70年代提出的层次分析法(Analytic Hierarchy Process,简称AHP方法),是对方案的多指标系统进行分析的一种层次化、结构化决策方法,它将决策者对复杂系统的决策思维过程模型化、数量化。应用这种方法,决策者通过将复杂问题分解为若干层次和若干因素,在各因素之间进行简单的比较和计算,就可以得出不同方案的权重,为最佳方案的选择提供依据。运用AHP方法,大体可分为以下三个步骤:
    步骤1:分析系统中各因素间的关系,对同一层次各元素关于上一层次中某一准则的重要性进行两两比较,构造两两比较的判断矩阵;
    步骤2:由判断矩阵计算被比较元素对于该准则的相对权重,并进行判断矩阵的一致性检验;
    步骤3:计算各层次对于系统的总排序权重,并进行排序。
    最后,得到各方案对于总目标的总排序。
    构造判断矩阵
    层次分析法的一个重要特点就是用两两重要性程度之比的形式表示出两个方案的相应重要性程度等级。如对某一准则,对其下的各方案进行两两对比,并按其重要性程度评定等级。记为第 和第 因素的重要性之比,表3列出Saaty给出的9个重要性等级及其 赋值 。按两两比较结果构成的矩阵 称作判断矩阵。判断矩阵 具有如下性质:
    且 / ( =1,2,… ) 即 为 正互反矩阵
    表3比例标度表
    因素 比因素
    量化值
    同等重要
    1
    稍微重要
    3
    较强重要
    5
    强烈重要
    7
    极端重要
    9
    两相邻判断的中间值
    2,4,6,8
    计算权重向量
    为了从判断矩阵中提炼出有用信息,达到对事物的规律性的认识,为决策提供出科学依据,就需要计算判断矩阵的权重向量。
    定义:判断矩阵 ,如对 … ,成立 ,则称 满足一致性,并称 为一致性矩阵。
    一致性矩阵A具有下列简单性质:
    1、 存在唯一的非零特征值 ,其对应的特征向量归一化后 记为 ,叫做权重向量,且 ;
    2、 的列向量之和经规范化后的向量,就是权重向量;
    3、 的任一列向量经规范化后的向量,就是权重向量;
    4、对 的全部列向量求每一分量的几何平均,再规范化后的向量,就是权重向量。
    因此,对于构造出的判断矩阵,就可以求出最大特征值所对应的特征向量,然后归一化后作为权值。根据上述定理中的性质2和性质4即得到 判断矩阵 满足一致性的条件下求取权值的方法,分别称为和法和根法。而当 判断矩阵 不满足一致性时,用和法和根法计算权重向量则很不精确。
    一致性检验
    判断矩阵 的阶数 时,通常难于构造出满足一致性的矩阵来。但判断矩阵偏离 一致性条件 又应有一个度,为此,必须对判断矩阵是否可接受进行鉴别,这就是一致性检验的内涵。
    定理:设 是正互反矩阵 的最大特征值则必有 ,其中等式当且仅当 为一致性矩阵时成立。
    应用上面的定理,则可以根据 是否成立来检验矩阵的一致性,如果 比 大得越多,则 的非一致性程度就越严重。因此,定义一致性指标
    (1)
    CI越小,说明一致性越大。考虑到一致性的偏离可能是由于随机原因造成的,因此在检验 判断矩阵 是否具有满意的一致性时,还需将CI和平均随机一致性指标RI进行比较,得出检验系数CR,即
    (2)
    如果CR<0.1 ,则认为该判断矩阵通过一致性检验,否则就不具有满意一致性。
    其中,随机一致性指标RI和判断矩阵的阶数有关,一般情况下,矩阵阶数越大,则出现一致性随机偏离的可能性也越大,其对应关系如表4:
    表4 平均随机一致性指标RI标准值(不同的标准不同,RI的值也会有微小的差异)
    矩阵阶数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    RI
    0
    0
    0.58
    0.90
    1.12
    1.24
    1.32
    1.41
    1.45
    1.49
    可见,AHP方法不仅原理简单,而且具有扎实的理论基础,是定量与定性方法相结合的优秀的决策方法,特别是定性因素起主导作用的决策问题。

    5注意事项

    如果所选的要素不合理,其含义混淆不清,或要素间的关系不正确,都会降低AHP法的结果质量,甚至导致AHP法决策失败。
    为保证递阶层次结构的合理性,需把握以下原则:
    1、分解简化问题时把握主要因素,不漏不多;
    2、注意相比较元素之间的强度关系,相差太悬殊的要素不能在同一层次比较。
     
     
     
    展开全文
  • 机器学习 | AHP层次分析法

    千次阅读 多人点赞 2019-05-15 20:39:47
    聊聊AHP层次分析法1 什么是AHP层次分析法?2 这方法是干吗呢?在什么场景使用?3 AHP层次分析法的实现3.1 步骤3.2 实际的例子3.2.1 背景3.2.2 Step1 构建层次结构模型3.2.3 Step2 构造成对比较矩阵3.2.4 Step3 ...

    1 什么是AHP层次分析法?

    大家直接Google层次分析法,会发现一条令人哭笑不得,十分尴尬的结果:
    在这里插入图片描述
    想到自己原来参加数学建模竞赛的时候也是经常用AHP层次分析法。。。真的low吗?(笑哭)

    那究竟什么是貌似很low的层次分析法呢?

    • 层次分析法:AHP(The analytic hierarchy process),从英文名可以看出来这个方式是一个分析层级的过程,啥叫层级?这么拗口?别急,下面详细解释一波!
    • 提出者:在20世纪70年代中期由美国运筹学家托马斯·塞蒂(T.L.saaty)正式提出
    • 层次分析法是将决策问题按总目标、各层子目标、评价准则直至具体的备投方案的顺序分解为不同的层次结构,然后用求解判断矩阵特征向量的办法,求得每一层次的各元素对上一层次某元素的优先权重,最后再加权和的方法递阶归并各备择方案对总目标的最终权重,此最终权重最大者即为最优方案。

    2 这个方法是干吗呢?在什么场景使用?

    • 确定指标权重
    • 确定最优方案(本质也是确定各个方案的权重,一般选取权重最大的为最优方案)

    3 AHP层次分析法的实现

    3.1 步骤

    1. 建立层次结构模型

    对决策对象调查研究,将目标体系所包含的因素划分为不同的层次。一般有三层:最高层(总目标),中间层(目标层),最低层(方案层)。【说人话:就是构建一个指标体系,分一二三级指标!】

    1. 构造成对比较矩阵

    按照层次结构模型,从上到下逐层构造判断矩阵。每一层元素都以相邻上一层次各元素为准则,按1-9标度方法两两比较构造判断矩阵。【说人话:构建一个矩阵,里面的数值是业务人员对两两指标的评分!】

    1. 一致性检验

    【下面单独解析】
    【说人话:就是上面第二步构建的矩阵如果不符合要求,就要重打!检验的过程就是一致性检验!如何检验?见下面单独解析】

    1. 确定权重和最优方案

    一旦上面一致性检验通过之后,就可以根据矩阵特征向量来确定二级指标和三级指标的权重!

    3.2 实际的例子

    下面以具体的例子来实现上述的步骤

    3.2.1 背景

    问题背景:

    • 我们现在需要给商户进行评分,作为筛选白名单的依据。
    • 商户的评分维度现在假设有6个,记为[企业B1 交易B2 活跃B3 经营B4 风险B5 成长B6]
    • 现在假设已经算出了各个维度的评分,需要根据这6项得分算出商户的总得分,在计算的过程中,6个维度的指标权重就显得尤为重要了,是1/6吗?还是有不同的权重?如果不同的,如何得到呢?
    • 基于这个问题的背景,AHP层次分析法就闪亮登场了!

    3.2.2 Step1 构建层次结构模型

    注:为了保护公司隐私,下述信息为真实项目案例脱敏之后的结果!
    在这里插入图片描述
    同时每一个二级指标下面对应着有很多三级指标
    在这里插入图片描述
    这样第一步层次结构模型就搭建完毕了!可以看到:

    • 总目标:给商户进行评分
    • 目标层:即评估商户的6个维度的指标
    • 方案层:即商户每个二级指标下对应的三级指标!

    3.2.3 Step2 构造成对比较矩阵

    以商户评分-交易-C21~C27为例,专家打分结果见下表:
    在这里插入图片描述
    这个表的含义是什么呢?怎么打出来的呢?

    • C22-C21为8 表示 指标C22 是 C21重要性的8倍。

    • 判断矩阵(成对比较矩阵)构造采用Saaty引用的1-9标度方法,各级标度含义见下表:
      在这里插入图片描述
      也就是说我们评判矩阵的重要性就按照1-9打分即可,如果变量A对B重要性是x,那么B对A就是1/x!

    • 同时可以看到判断矩阵是有一些特殊的性质的,知道了下三角,上三角都是它的倒数,且对角线元素都是1

    这样,我们分别对二级指标(B1~B6)以及对应的各三级指标进行评分,构建判断矩阵,本案例应构建的判断矩阵应该有1+6=7个,但企业仅一个维度无需判别,所以应该是构造6个判断矩阵

    3.2.4 Step3 一致性检验

    问题:什么叫一致性检验呢?为什么要进行一致性检验呢?

    首先给出判断矩阵一致性的定义:
    在这里插入图片描述
    可以看出:

    • 判断矩阵都是互反矩阵
    • 但是互反矩阵不一定都是一致性矩阵,需要再多一个条件,也就是条件(3):
      在这里插入图片描述
      这个条件的含义是什么呢?当时刚看的时候小编也一脸懵逼,但仔细想想,从现实的含义出发理解也就不难了。下面小编就尝试用通俗的语言解释一下:

    ① 如果k=j,则条件(3)肯定成立,分母为1

    ② 如果k=i,则条件(3)也成立,即和条件(2)重合了

    ③ 如果 k≠i 且 k≠j 这时候表示什么意思呢?举两个例子就很清楚了!
    在这里插入图片描述
    通过上面两个矩阵的对比,可以得出条件(3)的含义就是:

    • 如果变量2对1的重要性是4,变量3对1的重要性是8,那么变量3对2的重要性应该就是8/4=2 这是符合我们常理的,如果结果不为2,那么就不是一致性矩阵了。

    既然知道了矩阵一致性的含义,那么如何去检验和判断呢?是不是都得这么一个一个去算?3×3矩阵还是ok的 但维度提升后,一个一个手算就会很耗时了。那有没有其余的方法呢?答案是有的:
    在这里插入图片描述
    对了,这里有两个重要的线代结论:

    • 矩阵对角线元素之和为特征值之和。
    • 矩阵特征值的乘积等于矩阵行列式结果。

    但是就像人无完人一样,判断矩阵完全符合一致性的可能性也比较小,所以能否尝试放松条件?答案那必须阔以哈!
    思路如下:

    • 如果判断矩阵为一致性矩阵,那么1个特征值就为矩阵的维数,其余特征值均为0。
    • 但是现在上述情况不成立,可我们还是希望1个特征值尽可能接近矩阵的维数,其余接近0,如何衡量呢?我们的做法是将(最大特征值)- 特征值之和(矩阵维数)再除以(矩阵维数-1),记为C.I 作为检验判断矩阵一致性的指标。
    • 可以看出C.I应该是越小越好。即分子越接近于0

    根据上面的分析,我们知道,计算出这个矩阵的 C.I 然后再判断一致性即可!但又遇到了一个问题:就是C.I的计算结果和矩阵的维数是有关系的。

    • 判断矩阵的阶数m越大,判断的主观因素造成的偏差越大,偏离一致性也就越大,反之,偏离一致性越小。
    • 阶数m≤2时,C.I=0
    • 基于上述两点原因,引入平均随机一致性指标R.I,随判断矩阵的阶数而变化。

    故我们的一致性判别指标变成了:一致性指标C.I除以同阶随机一致性指标R.I的比值,称为一致性比率。
    C.R = C.I / R.I

    随机一致性指标R.I的取值见下方:
    在这里插入图片描述
    注:不同的地方对于这个R.I的取值稍有不同,不过影响不大!

    具体到本案例,对于上面的判断矩阵,是否通过一致性的检验呢?检验的方法有两种:一种是Excel来判断,一种是Python来判断。

    Python判断的思路:

    • 首先求解判断矩阵的特征值
    • 计算C.I 将 (最大特征值-维数) /(维数-1)
    • 查表得R.I
    • 计算C.R ,如果小于0.1,可视为通过一致性检验!否则不通过,继续调整判断矩阵。
    import numpy as np
    x = np.array([[1, 1/8, 1/5, 1/2, 1/8, 1/5, 1/2],
                [8,1,1/2,1,1/2,1/2,1],
                [5,2,1,1,1/2,1,1],
                [2,1,1,1,1/4,1/2,1],
                [8,2,2,4,1,0.5,1],
                [5,2,1,2,2,1,1/2],
                [2,1,1,1,1,2,1]])
    x
    
    array([[1.   , 0.125, 0.2  , 0.5  , 0.125, 0.2  , 0.5  ],
           [8.   , 1.   , 0.5  , 1.   , 0.5  , 0.5  , 1.   ],
           [5.   , 2.   , 1.   , 1.   , 0.5  , 1.   , 1.   ],
           [2.   , 1.   , 1.   , 1.   , 0.25 , 0.5  , 1.   ],
           [8.   , 2.   , 2.   , 4.   , 1.   , 0.5  , 1.   ],
           [5.   , 2.   , 1.   , 2.   , 2.   , 1.   , 0.5  ],
           [2.   , 1.   , 1.   , 1.   , 1.   , 2.   , 1.   ]])
    
    a,b=np.linalg.eig(x) ##特征值赋值给a,对应特征向量赋值给b 
    print(a)
    print(b)
    
    [ 7.66748795+0.j          0.03940202+1.87298751j  0.03940202-1.87298751j
      0.05735978+1.26682712j  0.05735978-1.26682712j -0.59654648+0.j
     -0.26446506+0.j        ]
    [[ 8.98495759e-02+0.j         -1.18246709e-01-0.01263084j
      -1.18246709e-01+0.01263084j  3.98351769e-04+0.13474951j
       3.98351769e-04-0.13474951j -6.03676850e-02+0.j
       3.56785054e-02+0.j        ]
     [ 3.09527955e-01+0.j         -9.23924468e-02+0.3397639j
      -9.23924468e-02-0.3397639j   6.18132774e-01+0.j
       6.18132774e-01-0.j          1.47584293e-01+0.j
      -3.38554025e-01+0.j        ]
     [ 3.70552823e-01+0.j          1.21048811e-01+0.01895149j
       1.21048811e-01-0.01895149j  1.17043949e-01-0.54495727j
       1.17043949e-01+0.54495727j  4.62647077e-02+0.j
       6.66602397e-01+0.j        ]
     [ 2.45301866e-01+0.j         -9.37531583e-02-0.05462322j
      -9.37531583e-02+0.05462322j -2.36156222e-01-0.16043371j
      -2.36156222e-01+0.16043371j -2.55128037e-01+0.j
      -3.64760465e-01+0.j        ]
     [ 5.54526869e-01+0.j          1.25504484e-01+0.41339602j
       1.25504484e-01-0.41339602j -3.92432327e-01+0.04185286j
      -3.92432327e-01-0.04185286j  5.80407359e-01+0.j
       4.49197914e-01+0.j        ]
     [ 4.85303610e-01+0.j          5.72831146e-01+0.j
       5.72831146e-01-0.j         -2.76707723e-02+0.02135125j
      -2.76707723e-02-0.02135125j -5.82755720e-01+0.j
      -3.07080830e-01+0.j        ]
     [ 3.94483785e-01+0.j          8.24130634e-02-0.55993026j
       8.24130634e-02+0.55993026j -1.98177832e-01+0.10638157j
      -1.98177832e-01-0.10638157j  4.80486159e-01+0.j
       1.03062419e-01+0.j        ]]
    
    CI = (max(a) - x.shape[0]) / (x.shape[0]-1)
    RI = 1.36
    CR = CI / RI
    if CR < 0.1:
        print('判断矩阵x一致性检验通过, 值为 %.2f' % CR)
    else:
        print('一致性检验未通过,继续调整判断矩阵')
    
    判断矩阵x一致性检验通过, 值为 0.08
    
    
    /Users/apple/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:5: ComplexWarning: Casting complex values to real discards the imaginary part
    

    Excel判断的思路和上述Python类似,不过在Excel中进行求解判断的时候可以采用几种近似的方法进行处理,具体有根法,和法,幂法,具体可以参考:https://wenku.baidu.com/view/96cc92ac195f312b3069a54e.html

    3.2.5 Step4 确定权重和最优方案

    如何确定上述C21~C27 7个指标的权重呢?

    • 根据递阶层次结构权重解析:将特征向量和特征值相乘,结果即为权重
    import numpy as np
    np.set_printoptions(suppress=True)
    
    b
    
    array([[ 0.08984958+0.j        , -0.11824671-0.01263084j,
            -0.11824671+0.01263084j,  0.00039835+0.13474951j,
             0.00039835-0.13474951j, -0.06036768+0.j        ,
             0.03567851+0.j        ],
           [ 0.30952795+0.j        , -0.09239245+0.3397639j ,
            -0.09239245-0.3397639j ,  0.61813277+0.j        ,
             0.61813277-0.j        ,  0.14758429+0.j        ,
            -0.33855403+0.j        ],
           [ 0.37055282+0.j        ,  0.12104881+0.01895149j,
             0.12104881-0.01895149j,  0.11704395-0.54495727j,
             0.11704395+0.54495727j,  0.04626471+0.j        ,
             0.6666024 +0.j        ],
           [ 0.24530187+0.j        , -0.09375316-0.05462322j,
            -0.09375316+0.05462322j, -0.23615622-0.16043371j,
            -0.23615622+0.16043371j, -0.25512804+0.j        ,
            -0.36476046+0.j        ],
           [ 0.55452687+0.j        ,  0.12550448+0.41339602j,
             0.12550448-0.41339602j, -0.39243233+0.04185286j,
            -0.39243233-0.04185286j,  0.58040736+0.j        ,
             0.44919791+0.j        ],
           [ 0.48530361+0.j        ,  0.57283115+0.j        ,
             0.57283115-0.j        , -0.02767077+0.02135125j,
            -0.02767077-0.02135125j, -0.58275572+0.j        ,
            -0.30708083+0.j        ],
           [ 0.39448379+0.j        ,  0.08241306-0.55993026j,
             0.08241306+0.55993026j, -0.19817783+0.10638157j,
            -0.19817783-0.10638157j,  0.48048616+0.j        ,
             0.10306242+0.j        ]])
    
    w = np.dot(b,a)
    print(w)
    
    [0.41213046-0.j 1.16568062+0.j 3.97002508+0.j 2.70613214+0.j
     2.09704971+0.j 4.13778295+0.j 4.52252119+0.j]
    

    所以C21~C27对应的权重见上方!

    结果很奇怪,试验一下其余的矩阵

    x2 = np.array([[1,1/4,1/8],
                 [4,1,1/3],
                 [8,3,1]])
    x2
    
    array([[1.        , 0.25      , 0.125     ],
           [4.        , 1.        , 0.33333333],
           [8.        , 3.        , 1.        ]])
    
    a,b=np.linalg.eig(x2) ##特征值赋值给a,对应特征向量赋值给b 
    print(a)
    print(b)
    
    [ 3.01829471+0.j         -0.00914735+0.23480874j -0.00914735-0.23480874j]
    [[ 0.1014959 +0.j          0.05074795+0.08789803j  0.05074795-0.08789803j]
     [ 0.35465936+0.j          0.17732968-0.30714401j  0.17732968+0.30714401j]
     [ 0.92947045+0.j         -0.92947045+0.j         -0.92947045-0.j        ]]
    
    w = np.dot(b,a)
    (w/sum(w) )[0]
    
    (0.0614556613808721+0j)
    
    应该没啥问题。但不过Python结果还是有点奇怪,可以以下面这个Python版本为准!
    

    3.3 Python实现

    import numpy as np
    
    #  建立平均随机一致性指标R.I
    RI_dict = {1: 0, 2: 0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49}
    
    def get_w(array):
        print('' * 50)
        print('*' * 50)
        print('我是炫酷的分割线')
        print('-' * 50)
        print('' * 50)
        # 1、计算出阶数 看这个数组是几维的 也就是后面对应字典查询!
        row = array.shape[0]  
        # 2、按列求和
        a_axis_0_sum = array.sum(axis=0) 
        # 3、得到新的矩阵b 就是把每一个数都除以列和 
        b = array / a_axis_0_sum  
        # 4、计算新矩阵b行和
        b_axis_1_sum = b.sum(axis=1)  
        # 5、将b_axis_1_sum每一个值除以总和
        W = b_axis_1_sum / sum(b_axis_1_sum)
        # 6、将原始矩阵乘以W
        a_W = np.dot(array, W)
        # 7、求解最大特征值 
        lambda_max = 0
        for i in range(len(a_W)):
            lambda_max += (a_W[i] / W[i])
        lambda_max = lambda_max / len(a_W)
        # 8、检验判断矩阵的一致性
        C_I = (lambda_max - row) / (row - 1)
        R_I = RI_dict[row] 
        C_R = C_I / R_I 
        if C_R < 0.1:
            print('矩阵 %s 一致性检验通过' % (array))
            print('判断矩阵对应的指标的权重为:%s' % W)
            print('判断矩阵对应的最大特征值为 %.2f' % lambda_max)
            print('大功告成!!!')
            return W
        else:
            print('矩阵 %s 一致性检验未通过,需要重新进行调整判断矩阵' % (array))
        
    def main(array):
        if type(array) is np.ndarray:
            return get_w(array)
        else:
            print('请输入正确的numpy对象')
    
    
    if __name__ == '__main__':
        # 由于地方问题,矩阵我就写成一行了
        # 检验以下判断矩阵的一致性并输出权重
        a = np.array([[1, 1 / 3, 1 / 8], [3, 1, 1 / 3], [8, 3, 1]])
        b = np.array([[1, 3, 6], [1 / 3, 1, 4], [1 / 5, 1 / 2, 1]])
        c = np.array([[1, 1, 3], [1, 1, 3], [1 / 3, 1 / 3, 1]])
        d = np.array([[1, 3, 4], [1 / 3, 1, 1], [1 / 4, 1, 1]])
        e = np.array([[1, 2, 7, 5, 5], [1 / 2, 1, 4, 3, 3], [1 / 7, 1 / 4, 1, 1 / 2, 1 / 3], [1 / 5, 1 / 3, 2, 1, 1], [1 / 5, 1 / 3, 3, 1, 1]])
        f = np.array([[1, 4, 1 / 2], [1 / 4, 1, 1 / 4], [2, 4, 1]])
        
        main(a)
        main(b)
        main(c)
        main(d)
        main(e)
        main(f)
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.         0.33333333 0.125     ]
     [3.         1.         0.33333333]
     [8.         3.         1.        ]] 一致性检验通过
    判断矩阵对应的指标的权重为:[0.08199023 0.23644689 0.68156288]
    判断矩阵对应的最大特征值为 3.00
    大功告成!!!
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.         3.         6.        ]
     [0.33333333 1.         4.        ]
     [0.2        0.5        1.        ]] 一致性检验未通过,需要重新进行调整判断矩阵
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.         1.         3.        ]
     [1.         1.         3.        ]
     [0.33333333 0.33333333 1.        ]] 一致性检验通过
    判断矩阵对应的指标的权重为:[0.42857143 0.42857143 0.14285714]
    判断矩阵对应的最大特征值为 3.00
    大功告成!!!
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.         3.         4.        ]
     [0.33333333 1.         1.        ]
     [0.25       1.         1.        ]] 一致性检验通过
    判断矩阵对应的指标的权重为:[0.63274854 0.19239766 0.1748538 ]
    判断矩阵对应的最大特征值为 3.01
    大功告成!!!
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.         2.         7.         5.         5.        ]
     [0.5        1.         4.         3.         3.        ]
     [0.14285714 0.25       1.         0.5        0.33333333]
     [0.2        0.33333333 2.         1.         1.        ]
     [0.2        0.33333333 3.         1.         1.        ]] 一致性检验通过
    判断矩阵对应的指标的权重为:[0.47439499 0.26228108 0.0544921  0.09853357 0.11029827]
    判断矩阵对应的最大特征值为 5.07
    大功告成!!!
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.   4.   0.5 ]
     [0.25 1.   0.25]
     [2.   4.   1.  ]] 一致性检验通过
    判断矩阵对应的指标的权重为:[0.34595035 0.11029711 0.54375254]
    判断矩阵对应的最大特征值为 3.05
    大功告成!!!
    
    main(x)
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.    0.125 0.2   0.5   0.125 0.2   0.5  ]
     [8.    1.    0.5   1.    0.5   0.5   1.   ]
     [5.    2.    1.    1.    0.5   1.    1.   ]
     [2.    1.    1.    1.    0.25  0.5   1.   ]
     [8.    2.    2.    4.    1.    0.5   1.   ]
     [5.    2.    1.    2.    2.    1.    0.5  ]
     [2.    1.    1.    1.    1.    2.    1.   ]] 一致性检验通过
    判断矩阵对应的指标的权重为:[0.03787191 0.12641825 0.15144125 0.10278494 0.22816213 0.19300904
     0.16031248]
    判断矩阵对应的最大特征值为 7.67
    大功告成!!!
    
    
    
    
    
    array([0.03787191, 0.12641825, 0.15144125, 0.10278494, 0.22816213,
           0.19300904, 0.16031248])
    
    main(x2)
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.         0.25       0.125     ]
     [4.         1.         0.33333333]
     [8.         3.         1.        ]] 一致性检验通过
    判断矩阵对应的指标的权重为:[0.0738203  0.25718595 0.66899375]
    判断矩阵对应的最大特征值为 3.02
    大功告成!!!
    
    
    
    
    
    array([0.0738203 , 0.25718595, 0.66899375])
    

    3.3.1 直接将打分ok的excel表格读入并进行一致性检验以及权重的计算

    import pandas as pd
    df = pd.read_excel('data/层次分析法打分表.xlsx', sheet_name='Sheet2')
    df
    
    C21C22C23C24C25C26C27
    C2110.1250.20.50.1250.20.5
    C2281.0000.51.00.5000.51.0
    C2352.0001.01.00.5001.01.0
    C2421.0001.01.00.2500.51.0
    C2582.0002.04.01.0000.51.0
    C2652.0001.02.02.0001.00.5
    C2721.0001.01.01.0002.01.0
    df_array = np.array(df)
    df_array
    
    array([[1.   , 0.125, 0.2  , 0.5  , 0.125, 0.2  , 0.5  ],
           [8.   , 1.   , 0.5  , 1.   , 0.5  , 0.5  , 1.   ],
           [5.   , 2.   , 1.   , 1.   , 0.5  , 1.   , 1.   ],
           [2.   , 1.   , 1.   , 1.   , 0.25 , 0.5  , 1.   ],
           [8.   , 2.   , 2.   , 4.   , 1.   , 0.5  , 1.   ],
           [5.   , 2.   , 1.   , 2.   , 2.   , 1.   , 0.5  ],
           [2.   , 1.   , 1.   , 1.   , 1.   , 2.   , 1.   ]])
    
    main(df_array)
    
    **************************************************
    我是炫酷的分割线
    --------------------------------------------------
    
    矩阵 [[1.    0.125 0.2   0.5   0.125 0.2   0.5  ]
     [8.    1.    0.5   1.    0.5   0.5   1.   ]
     [5.    2.    1.    1.    0.5   1.    1.   ]
     [2.    1.    1.    1.    0.25  0.5   1.   ]
     [8.    2.    2.    4.    1.    0.5   1.   ]
     [5.    2.    1.    2.    2.    1.    0.5  ]
     [2.    1.    1.    1.    1.    2.    1.   ]] 一致性检验通过
    判断矩阵对应的指标的权重为:[0.03787191 0.12641825 0.15144125 0.10278494 0.22816213 0.19300904
     0.16031248]
    判断矩阵对应的最大特征值为 7.67
    大功告成!!!
    
    
    
    
    
    array([0.03787191, 0.12641825, 0.15144125, 0.10278494, 0.22816213,
           0.19300904, 0.16031248])
    

    3.4 Excel实现

    这个可以见附件上传数据,均为简单excel函数,近似求解特征值和特征向量,不难。

    3.5 如何得到总权重

    这个得看具体需求是否需要。

    • 已经计算出二级指标对应权重
    • 已经计算出二级指标下对应的三级指标对应权重
    • 如果需要考虑三级指标的整体权重,把二级权重×三级权重即可!这样的目的就是所有指标的权重之和为1!

    4 参考

    5 附录:AHP层次分析法的Excel版本实现

    注:一般实际业务场景中,用Excel版本的AHP会更加实用,上面的Python版本仅作为验证以及练习。原因如下:

    • Excel中一旦专家将分数打完之后,会出一个R.I结果,如果大于0.1,可以自行调整判断矩阵,直至符合条件为止
    • Excel进行操作易于专家打分以及结果汇总。

    AHP层次分析法_Excel实现

    展开全文
  • 层次分析法在matlab上的实现

    万次阅读 多人点赞 2018-06-12 10:36:17
    层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯.塞蒂(T.L.saaty)正式提出。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它在处理复杂的决策问题...

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

    计算步骤

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

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

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

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

    案例

    (1)建立层次结构模型

            层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一样的。不妨用选拔干部为例:对三个干部候选人y1、y2 、y3,按选拔干部的五个标准:品德、才能、资历、年龄和群众关系,构成如下层次分析模型: 假设有三个干部候选人y1、y2 、y3,按选拔干部的五个标准:品德,才能,资历,年龄和群众关系,构成如下层次分析模型

    (2)构造判断矩阵

           在确定各层次各因素之间的权重时,如果只是定性的结果,则常常不容易被别人接受,因而Saaty等人提出:一致矩阵法,即:不把所有因素放在一起比较,而是两两相互比较。对比时采用相对尺度,以尽可能减少性质不同因素相互比较的困难,以提高准确度。

           比较第 i 个元素与第 j 个元素相对上一层某个因素的重要性时,使用数量化的相对权重aij来描述。设共有 n 个元素参与比较,则A=(a_{ij})_{n\times n}称为成对比较矩阵。

      成对比较矩阵中aij的取值可参考 Satty 的提议,按下述标度进行赋值。aij在 1-9 及其倒数中间取值。

    • aij = 1,元素 i 与元素 j 对上一层次因素的重要性相同;
    • aij = 3,元素 i 比元素 j 略重要;
    • aij = 5,元素 i 比元素 j 重要;
    • aij = 7, 元素 i 比元素 j 重要得多;
    • aij = 9,元素 i 比元素 j 的极其重要;
    • aij = 2n,n=1,2,3,4,元素 i 与 j 的重要性介于aij = 2n − 1与aij = 2n + 1之间;
    • a_{ij}=\frac{1}{n},n=1,2,...,9, 当且仅当aji = n

      成对比较矩阵的特点:a_{ij}>0,a_{ij}=1,a_{ij}=\frac{1}{a_{ji}}。(备注:当i=j时候,aij = 1)

           对该例 2, 选拔干部考虑5个条件:品德x1,才能x2,资历x3,年龄x4,群众关系x5。某决策人用成对比较法,得到成对比较阵如下:

      \begin{pmatrix}1&2&7&5&5\\\frac{1}{2}&1&4&3&3\\\frac{1}{7}&\frac{1}{4}&1&\frac{1}{2}&\frac{1}{3}\\\frac{1}{5}&\frac{1}{3}&2&1&1\\\frac{1}{5}&\frac{1}{3}&3&1&1\end{pmatrix}

      a14 = 5 表示品德与年龄重要性之比为 5,即决策人认为品德比年龄重要。

    (3)判断矩阵的一致性检验

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

           从理论上分析得到:如果A是完全一致的成对比较矩阵,应该有

      a_{ij}a_{jk}=a_{ik},1\le i,j,k\le n.

      但实际上在构造成对比较矩阵时要求满足上述众多等式是不可能的。因此退而要求成对比较矩阵有一定的一致性,即可以允许成对比较矩阵存在一定程度的不一致性。

      由分析可知,对完全一致的成对比较矩阵,其绝对值最大的特征值等于该矩阵的维数。对成对比较矩阵 的一致性要求,转化为要求: 的绝对值最大的特征值和该矩阵的维数相差不大。

      检验成对比较矩阵A一致性的步骤如下:

    • 计算衡量一个成对比较矩阵 A (n>1 阶方阵)不一致程度的指标CI:

      CI=\frac{\lambda_{max}(A)-n}{n-1}

      RI是这样得到的:对于固定的n,随机构造成对比较阵A, 其中aij是从1,2,…,9,1/2,1/3,…,1/9中随机抽取的. 这样的A是不一致的, 取充分大的子样得到A的最大特征值的平均值

    n123456789
    RI000.580.901.121.241.321.411.45

      注解:

    • 从有关资料查出检验成对比较矩阵 A 一致性的标准RI:RI称为平均随机一致性指标,它只与矩阵阶数 n 有关。
    • 按下面公式计算成对比较阵 A 的随机一致性比率 CR:

      CR=\frac{CI}{RI} 。

    • 判断方法如下: 当CR<0.1时,判定成对比较阵 A 具有满意的一致性,或其不一致程度是可以接受的;否则就调整成对比较矩阵 A,直到达到满意的一致性为止。

      例如对例 2 的矩阵

      \begin{pmatrix}1&2&7&5&5\\\frac{1}{2}&1&4&3&3\\\frac{1}{7}&\frac{1}{4}&1&\frac{1}{2}&\frac{1}{3}\\\frac{1}{5}&\frac{1}{3}&2&1&1\\\frac{1}{5}&\frac{1}{3}&3&1&1\end{pmatrix}

      计算得到\lambda_{max}(A)=5.073,CI=\frac{\lambda_{max}(A)-5}{5-1}=0.018,查得RI=1.12,

      CR=\frac{CI}{RI}=\frac{0.018}{1.12}=0.016<0.1

      这说明 A 不是一致阵,但 A 具有满意的一致性,A 的不一致程度是可接受的。

      此时A的最大特征值对应的特征向量为U=(-0.8409,-0.4658,-0.0951,-0.1733,-0.1920)。 这个向量也是问题所需要的。通常要将该向量标准化:使得它的各分量都大于零,各分量之和等于 1。该特征向量标准化后变成U = (0.475,0.263,0.051,0.103,0.126)Z。经过标准化后这个向量称为权向量。这里它反映了决策者选拔干部时,视品德条件最重要,其次是才能,再次是群众关系,年龄因素,最后才是资历。各因素的相对重要性由权向量U的各分量所确定。

      求A的特征值的方法,可以用 MATLAB 语句求A的特征值:〔Y,D〕=eig(A),D为成对比较阵 的特征值,Y的列为相应特征向量。

      在实践中,可采用下述方法计算对成对比较阵A = (aij)的最大特征值λmax(A)和相应特征向量的近似值。

      定义

      U_k=\frac{\sum_{j=1}^{n}a_{kj}}{\sum_{i=1}^{n}\sum_{j=1}^{n}a_{ij}}U=(u_1,u_2,\ldots,u_n)^z

      可以近似地看作A的对应于最大特征值的特征向量。

      计算

      \lambda=\frac{1}{n}\sum^{n}_{i=1}\frac{(AU)_i}{u_i}=\frac{1}{n}\sum^{n}_{i=1}\frac{\sum^{n}_{i=1}}\frac{\sum^n_{j=1}a_{ij}u_{j}}{u_i}

      可以近似看作A的最大特征值。实践中可以由λ来判断矩阵A的一致性

    (4) 层次总排序及决策

           现在来完整地解决例 2 的问题,要从三个候选人y1,y2,y3中选一个总体上最适合上述五个条件的候选人。对此,对三个候选人y = y1,y2,y3分别比较他们的品德(x1),才能(x2),资历(x3),年龄(x4),群众关系(x5)。

      先成对比较三个候选人的品德,得成对比较阵

      B_1=\begin{pmatrix}1&\frac{1}{3}&\frac{1}{8}\\3&1&\frac{1}{3}\\8&3&1\end{pmatrix}

      经计算,B1的权向量

      ωx1(Y) = (0.082,0.236,0.682)z

      \lambda_{max}(B_1)=3.002,CI=0.001,\frac{CI}{RI}=\frac{0.001}{0.58}<0.1

      故B1的不一致程度可接受。ωx1(Y)可以直观地视为各候选人在品德方面的得分。

      类似地,分别比较三个候选人的才能,资历,年龄,群众关系得成对比较阵

      B_2=\begin{pmatrix}1&2&5\\\frac{1}{2}&1&2\\\frac{1}{5}&\frac{1}{2}&1\end{pmatrix}   B_3=\begin{pmatrix}1&1&3\\1&1&3\\\frac{1}{3}&\frac{1}{3}&1\end{pmatrix}

      B_4=\begin{pmatrix}1&3&4\\\frac{1}{3}&1&1\\\frac{1}{4}&1&1\end{pmatrix}

      B_5=\begin{pmatrix}1&4&\frac{1}{4}\\1&1&\frac{1}{4}\\4&1&1\end{pmatrix}

      通过计算知,相应的权向量为

       \omega_{x_2}(Y)=(0.606,0.265,0.129)^z

       \omega_{x_3}(Y)=(0.429,0.429,0.143)^z

       \omega_{x_4}(Y)=(0.636,0.185,0.179)^z

       \omega_{x_5}(Y)=(0.167,0.167,0.667)^z

      它们可分别视为各候选人的才能分,资历分,年龄分和群众关系分。经检验知B2,B3,B4,B5的不一致程度均可接受。

      最后计算各候选人的总得分。y1的总得分

       \omega_z(y_1)=\sum{5}{j=1}u_j\omega_{xj}(y_1)=0.457\times 0.082+0.263\times 0.606+0.051\times 0.429+0.104\times 0.6366+0.162\times 0.1670.306

      从计算公式可知,y1的总得分ω(y1)实际上是y1各条件得分ωx1(y1) ,ωx2(y1) ,...,ωx5(y1) ,的加权平均, 权就是各条件的重要性。同理可得y2,Y3 的得分为

      ωz(y2) = 0.243,ωz(y3) = 0.452

     0.4570.2630.0510.1030.126总得分
    Y10.0820.6060.4290.6360.1670.305
    Y20.2440.2650.4290.1850.1670.243
    Y30.6740.1290.1430.1790.6670.452

      即排名:Y3 > Y1 > Y2

      比较后可得:候选人y3是第一干部人选。

    优缺点

    (一)优点

    1. 系统性的分析方法:

           层次分析法把研究对象作为一个系统,按照分解、比较判断、综合的思维方式进行决策,成为继机理分析、统计分析之后发展起来的系统分析的重要工具。

    2. 简洁实用的决策方法:

           这种方法既不单纯追求高深数学,又不片面地注重行为、逻辑、推理,而是把定性方法与定量方法有机地结合起来。

    3. 所需定量数据信息较少:

    层次分析法主要是从评价者对评价问题的本质、要素的理解出发,比一般的定量方法更讲求定性的分析和判断。

    (二)缺点

    1. 不能为决策提供新方案:

           层次分析法的作用是从备选方案中选择较优者。这个作用正好说明了层次分析法只能从原有方案中进行选取,而不能为决策者提供解决问题的新方案。

    2. 定量数据较少,定性成分多,不易令人信服:

           在如今对科学的方法的评价中,一般都认为一门科学需要比较严格的数学论证和完善的定量方法。但现实世界的问题和人脑考虑问题的过程很多时候并不是能简单地用数字来说明一切的。

    3. 指标过多时数据统计量大,且权重难以确定:

           当我们希望能解决较普遍的问题时,指标的选取数量很可能也就随之增加。

    4. 特征值和特征向量的精确求法比较复杂:

           在求判断矩阵的特征值和特征向量时,所用的方法和我们多元统计所用的方法是一样的。

    注意事项

           如果所选的要素不合理,其含义混淆不清,或要素间的关系不正确,都会降低AHP法的结果质量,甚至导致AHP法决策失败。

      为保证递阶层次结构的合理性,需把握以下原则:

      1、分解简化问题时把握主要因素,不漏不多;

      2、注意相比较元素之间的强度关系,相差太悬殊的要素不能在同一层次比较。

    四层AHP

          上面例子是只有目标层、准则层、方案层,下面的结构多了子准则层,并且准则层对应不同的子准则层

    如果对你有帮助,请点下赞,予人玫瑰手有余香!

    时时仰望天空,理想就会离现实越来越近!

     

    展开全文
  • 层次分析法(AHP)

    千次阅读 2020-06-17 15:35:39
    层次分析法 Topic 解决评价类问题,需要想到一下三问题: 评价目标是什么 为达到这目标有哪种可选方案 评价准则或指标是什么 引例 高考结束,选择旅游地: 评价目标——选择最佳旅游景点 可选方案...
  • 《数学建模》之层次分析法

    万次阅读 多人点赞 2016-08-22 23:59:05
    1.层次分析法与数学建模 在数学建模中,通常解决的问题是:“影响某一问题的几个因素的权重大小”、“产生某一问题的主要的因素分析”、“权重的大小分析”。当然在现实生活中的应用也是十分广泛而且一样的不知...
  • 层次分析法的理解

    2020-08-07 11:39:31
    评价类问题可用打分来解决,也就是说通过分数来量化一评价指标,层次分析法就是一量化指标的方法。 解决评价类问题的思路: 评价的目标是什么? 达到这目标有哪种可选的方案? 评价的准则或者说评价的指标...
  • 层次分析法比较简单,是一入门级的评价算法模型,模型的建立过程如下。 建立层次结构模型 层次一般分为三种: 最高层,准则层和方案层 一般而言层次结构模型用软件亿图图示画出(强烈建议使用9.0版本...
  • 多中间层的层次分析法(一)

    千次阅读 2019-06-18 00:16:12
    一、层次分析法概述 层次分析法(Analytical Hierarchy Process 简称 AHP 是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标能否...
  • 数学建模--层次分析法

    千次阅读 2020-07-19 22:36:09
    层次分析法的求解步骤 1.建立层次结构模型 模型分为三层。分别为最高层(决策问题最终要解决什么,即决策的目的)、中间层(考虑的因素,决策的准则。比如买衣服要考虑价格、尺寸、款式等因素)和最低层(决策时的...
  • 层次分析法的运用主要分为以下几个步骤: 将问题条理化,层次化,构造出一个有层次的结构模型。层次分为三层:目标层,准则层和方案层。 比较同一层次元素对上一层次同一目标的影响,从而确定它们在目标中所占的...
  • (四)层次分析法

    千次阅读 2018-12-28 16:16:04
    层次分析法 层次分析法(The analytic ...层次分析法的基本思路与人对一复杂的决策问题的思维、判断过程大体上是一样的。不妨用假期旅游为例:假如有3旅游胜地A、B、C供你选择,你会根据诸如景色、费用...
  • MATLAB-层次分析法

    千次阅读 2019-08-23 11:35:47
    AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家T. L. Saaty教授于二十世纪70年代提出的一种实用的多方案或多目标的决策方法,是一种定性与定量相结合的决策分析方法。常被运用于多目标、多准则、多要素...
  • 层次分析法(The analytic hierarchy process)简称AHP,它是将与决策有关的因素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。 本文为简明AHP学习笔记,并通过Python实践构建多层权重...
  • php语言如何制作一个层次分析法的网站第一篇前端界面实现1.1引出1.2层次分析法1.21什么是层次分析法1.22层次分析法实例1.23层次分析法如何在网站进行实现1.3对用户输入需求分析1.4层次分析法功能对恋爱匹配的实现的...
  • 层次分析法基本介绍

    2020-11-01 16:23:05
    层次分析法 1.主要解决哪类问题? 评价类 评价类问题要明确:评价的目标是什么?为达到这目标的可选方案?评价的准则或标准是什么? 2.原理/思路是啥? eg.小明高考完如何选择一学校?/如何选择一旅游目的地? ...
  • 层次分析法将一复杂目标分为三层:A.目标层:这一层一般只有一元素,就是最后要实现的目标,因而叫做目标层。B.准则层:这一层的元素,一般是实现上一层目标要考虑到的多因素。比如我们的目标层是买一套合适的...
  • 层次分析法两种实现方法

    千次阅读 2011-04-10 15:08:08
    天看了看层次分析法,这是一比较经典的算法,一般在评价和数据融合方面应用比较多,网上也有很多针对这算法改进也是比较多的,大多数只是给这方法加了点模糊运算。其实在现在的系统中单用它做评价或是评估...
  • 层次分析法解决手机选择困难症

    千次阅读 2015-10-15 20:42:28
    最近一舍友,想换一部手机,价格1000上下,向我咨询应该选什么手机?... 于是乎,就想着通过层次分析法来帮他做理智的判断,并通过这篇文章帮助大家在以后做出选择时提供一些依据.现在把选择的过程
  • 2.层次分析法的具体用法: 1.分层。建立问题目标,影响因素,备选方案等。以选择游玩地点为例,则问题的目标是选择游玩地点,而游玩地点由多因素所决定,所以这些决定因素就可以被分为第二层。 举例可以列出如下...
  • 层次分析法分析如何选购电脑

    千次阅读 2020-04-24 14:17:39
    我在层次分析法的基础上建立了模型,它是以三品牌,即国内一线品牌联想,美国品牌戴尔,台湾创立的品牌华硕为方案层,以配置、外观、价格、功能作为准则层,定义选购一台合适的电脑为目标层。经准则层,得出...
  • 层次分析法初探

    千次阅读 2007-04-05 21:28:00
    层次分析法 层次分析法(AHP)是将决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。该方法是美国运筹学家匹茨堡大学教授萨蒂于本世纪70年代初,在为美国国防部研究...
  • 该文章讲述了多层次分析法代码讲解,以及如何应用到楼盘综合水平分析当中
  • 数学建模模型学习(1)--层次分析法

    千次阅读 2020-02-22 19:19:09
    这是我第一次参加美赛,没有啥经验,而且我没有任何基础,没有比赛经验就参加美赛。...层次分析法模型主要解决评价类问题,评价类问题可以用一种打分的形式作为一解决方式,比如方案A6,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,817
精华内容 22,726
关键字:

层次分析法分为几个层次