精华内容
下载资源
问答
  • 一、 问题重述 1、 问题背景: 现今有五大浏览器,Internet Explorer(以下简称IE),微软公司旗下浏览器;google chrome浏览器(以下简称chrome),...综合多方面因素,评价得到最值得用户选择的浏览器。 。。。。。。
  • 数学建模之层次分析法及其应用

    千次阅读 多人点赞 2020-07-28 23:57:16
    层次分析法数学建模中是非常常见的,其原理、应用场景及实例本文里都有。希望能对数学建模爱好者、挑战者提供一些帮助。如有不清楚或错误的地方还望指出。

    概述

    层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模
    糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。常用于相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。
    运用层次分析法建模,大体上可按下面四个步骤进行:

    1. 建立递阶层次结构模型;
    2. 构造出各层次中的所有判断矩阵;
    3. 层次单排序及一致性检验;
    4. 层次总排序及一致性检验

    下面将用实例分别阐述这些步骤。

    递阶层次结构的建立与特点

    我们拿到一个问题,常将其分为若干层次结构,上一层次的元素作为准则对下一层次有关元素起支配作用。
    这些层次可以分为三类:.

    1. 最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也称为目标层。
    2. 中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。
    3. 最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等,因此也称为措施层或方案层。

    如我们想去旅游,现在要选择旅游地点,就可以先这样划分一下:在这里插入图片描述

    递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地层次数不受限制。每一层次中各元素所支配的元素一般不要超过 9 个。这是因为支配的元素过多会给两两比较判断带来困难。

    构造判断矩阵

    构造判断矩阵的方法是一致矩阵法,即:将上述两组权重进行综合,确定各方案对目标的权重。所有元素之间采用相对尺度两两对比,确定权重。

    标度含 义
    1表示两个因素相比,具有相同重要性
    3表示两个因素相比,前者比后者稍重要
    5表示两个因素相比,前者比后者明显重要
    7表示两个因素相比,前者比后者强烈重要
    9表示两个因素相比,前者比后者极端重要
    2,4,6,8表示上述相邻判断的中间值
    倒数若因素i 与因素 j 的重要性之比为 a i j a_{ij} aij ,那么因素 j 与因素i 重要性之比为 a i j = 1 / a i j a_{ij}= 1/a_{ij} aij=1/aij

    确定A1-A5的权重,如A1相对A4来说,A1比A4稍微重要,所以矩阵Z(1,4)=3.其对称位置就是1/3。
    在这里插入图片描述
    注:Z是成对比较、正互反矩阵。

    层次单排序及一致性检验

    所谓层次单排序是指根据判断矩阵计算对于上一层某因素而言本层次与之有联系的因素的重要性次序的权值。它是本层次所有因素相对上一层而言的重要性进行排序的基础。
     在这里插入图片描述
    满足 a i j ∗ a j k = a i k a_{ij}*a_{jk}= a_{ik} aijajk=aik正互反矩阵称为一致矩阵
    定理 1:
    正互反矩阵 A 的最大特征根 λ m a x λ_{max} λmax必为正实数,其对应特征向量的所有分量均为正实数。 A 的其余特征值的模均严格小于 λ m a x λ_{max} λmax
    定理 2
    若 A 为一致矩阵,则

    • A 必为正互反矩阵。
    • A 的转置矩阵 A T A^T AT也是一致矩阵。
    • A 的任意两行成比例,比例因子大于零,从而 rank(A) = 1(同样, A 的任意两列也成比例)。
    • A 的最大特征值 λ m a x λ_{max} λmax = n ,其中n 为矩阵 A 的阶。A 的其余特征根均为零。
    • 若 A 的最大特征值 λ m a x λ_{max} λmax 对应的特征向量为 W = ( w 1 . . . w n ) T W={(w_1 ... w_n)}^T W=(w1...wn)T ,则 s i j = w i w j s_{ij}=\frac{w_i}{w_j} sij=wjwi
      ij ww a = , ∀i, j = 1,2,L,n ,即

    定理 3

    n 阶正互反矩阵 A 为一致矩阵当且仅当其最大特征根 λ m a x = n λ_{max} = n λmax=n ,且当正互反矩阵 A 非一致时,必有 λ m a x > n λ_{max}> n λmax>n
    根据定理 3,我们可以由 λ m a x λ_{max} λmax 是否等于n 来检验判断矩阵 A 是否为一致矩阵。

    对判断矩阵的一致性检验的步骤如下:

    1. 计算一致性指标 C I = λ m a x − n n − 1 CI=\frac{λ_{max}-n}{n-1} CI=n1λmaxn
    2. 查找相应的平均随机一致性指标 RI 。对n = 1 …9,Saaty 给出了 RI 的值,如表 2 所示。在这里插入图片描述
      计算一致性比例 C R = C I R I CR=\frac{CI}{RI} CR=RICI
      C R < 0.10 CR < 0.10 CR<0.10时,认为判断矩阵的一致性是可以接受的,否则应对判断矩阵作适当修正。

    层次总排序及一致性检验

    上面我们得到的是一组元素对其上一层中某元素的权重向量。我们最终要得到各元素,特别是最低层中各方案对于目标的排序权重,从而进行方案选择。总排序权重要自上而下地将单准则下的权重进行合成。
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    对层次总排序也需作一致性检验,检验仍象层次总排序那样由高层到低层逐层进行。这是因为虽然各层次均已经过层次单排序的一致性检验,各成对比较判断矩阵都已具有较为满意的一致性。但当综合考察时,各层次的非一致性仍有可能积累起来,引起最终分析结果较严重的非一致性。
    设 B 层中与 Aj 相关的因素的成对比较判断矩阵在单排序中经一致性检验,求得单排序一致性指标为CI( j) ,( j = 1,L,m ),相应的平均随机一致性指标为 RI( j) (CI( j)、RI( j) 已在层次单排序时求得),则 B 层总排序随机一致性比例为
    在这里插入图片描述

    层次分析法的应用

    在应用层次分析法研究问题时,遇到的主要困难有两个:

    1. 如何根据实际情况抽象出较为贴切的层次结构;
    2. 如何将某些定性的量作比较接近实际定量化处理。

    层次分析法对人们的思维过程进行了加工整理,提出了一套系统分析问题的方法,为科学管理和决策提供了较有说服力的依据。但层次分析法也有其局限性,主要表现在:
    3. 它在很大程度上依赖于人们的经验,主观因素的影响很大,它至多只能排除思维过程中的严重非一致性,却无法排除决策者个人可能存在的严重片面性。
    4. 比较、判断过程较为粗糙,不能用于精度要求较高的决策问题。AHP 至多只能算是一种半定量(或定性与定量结合)的方法。
    在这里插入图片描述

    回顾总结

    在这里插入图片描述

    例题

    挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型,如图所示
    在这里插入图片描述
    标准层的判断矩阵也已给出
    在这里插入图片描述
    方案层的判断矩阵给出
    在这里插入图片描述
    函数文件:

    function [CR,quan]=AHPfun(A)
    n=size(A,1);
    [V,D] = eig(A); %V 是特征向量,D是由特征值构成的对角矩阵(除了对角线元素外,其余位置元素全为0)
    Max_eig = max(D(:)); %那么怎么找到最大特征值所在的位置了?需要用到find函数,它可以用来返回向址或者矩阵中不为0的元素的位置索引。
    %那么问题来了,我们要得到最大特征值的位置,就需婴将包含所有特征值的这个对角矩阵D中,不等于最大特征值的位置全变为
    %这时候可以用到矩阵与常数的大小判断运算
    D = Max_eig;
    [r,c]=find(D == Max_eig,1);
    %找到D中第“个与最大特征值相等的元素的位置,记录它的行和列。
    %第二步:对求出的特征向量进行归-“化即可得到我们的权重
    quan=V(:,c)./sum(V(:,c));
    %我们先根据上面找到的最大特征值的列数c找到对应的特征向量,然后再进行标准化。
    % 计算一致性比例CR
    CI = (Max_eig - 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]; %注意哦,这里的RI最多支持n = 15
    CR=CI/RI(n);
    end
    

    主文件:

    clc;clear
    a0=[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 ];
    a1=[1 1/4 1/2;
        4 1 3;
        2 1/3 1 ];
    a2=[1 1/4 1/5;
        4 1 1/2;
        5 2 1 ];
    a3=[1 3 1/3;
        1/3 1 1/7;
        3 7 1 ];
    a4=[1 1/3 5;
        3 1 7;
        1/5 1/7 1];
    a5=[1 1 7;
        1 1 7;
        1/7 1/7 1 ];
    a6=[1 7 9;
        1/7 1 1;
        1/9 1 1];
    F=cat(3,a1,a2,a3,a4,a5,a6);
    [a,b,c]=size(F);
    all=ones(3,c);
    cr=[];
    [CR,quan]=AHPfun(a0);
    cr0=CR;
    quan0=quan;
    disp('准则层权值为:');disp(quan0');
    disp('准则层一致性比例为:');disp(cr0);
    for i =1:c
        A=F(:,:,i);
        [CR,quan]=AHPfun(A);
        cr=[cr,CR];
        all(:,i)=quan;  
        
    end
    allquan=ones(3,1);
    for j=1:3
        allquan(j,1)=sum(all(j,:).*quan0');
    end
    disp('方案层单排序权值:');disp(all);
    disp('方案层一致性比例为:');disp(cr);
    disp('总排序权值:');disp(allquan);
    
    

    输出:

    准则层权值为:
        0.1507    0.1792    0.1886    0.0472    0.1464    0.2879
    
    准则层一致性比例为:
        0.0981
    
    方案层单排序权值:
        0.1365    0.0974    0.2426    0.2790    0.4667    0.7986
        0.6250    0.3331    0.0879    0.6491    0.4667    0.1049
        0.2385    0.5695    0.6694    0.0719    0.0667    0.0965
    
    方案层一致性比例为:
        0.0176    0.0236    0.0068    0.0624   -0.0000    0.0068
    
    总排序权值:
        0.3952
        0.2996
        0.3052
    
    

    答案
    在这里插入图片描述

    展开全文
  • 有一个毕业生为挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生,该毕业生考虑的因素有6个,研究课题、发展前途、待遇、同事情况、地理位置和单位名气。 那么这六个因素就是准则层...层次分析法算法实例
  • #找到对应的特征向量了,对其进行归一化即是权重向量 sum = 0 for i in range(n): sum +=temp1[i][0] temp1 /=sum print("特征求的权重向量为:",temp1,sep = "\n") qz_feature(a,4) 数学建模比赛使用注意: ①...

    这里用python语言来计算判断矩阵的权重,网上大部分是matlab语言,里面也包含一致性检验的函数,具体各函数使用方法详见代码注释的部分

    import numpy as np
    a=np.array([[1, 1 / 4, 2, 1 / 3], [4, 1, 8, 2], [1 / 2, 1 / 8, 1, 1 / 5], [3, 1 / 2, 5, 1]])
    
    #一致性检验判断矩阵函数,传入矩阵,RI和矩阵的维数,可用返回1否则返回0,注意只有不对称矩阵需要检验
    def consistencyTest(juzhen,RI,n):
        '''一致性检验步骤:
           n阶正互反矩阵
          ①计算CI  CI = (最大特征值-n)/(n-1)
          ②根据n找RI
          ③计算 CI/RI 的值,若小于0.1则说明这个矩阵能用,若大于0.1需要对矩阵的数据进行调整
        '''
        t, temp = np.linalg.eig(juzhen)
        max_eig = max(t)
        CI = (max_eig - n)/(n-1)
        CR = CI/RI
        if CR<0.1:
            return 0
        else:
            return 1
    
    
    '''
    以下是计算权重的部分
    共有三种方法: ①算术平均法 qz_average
                ②几何平均法 qz_geometry
                ③特征值法   qz_deature
    
    '''
    
    #以下是算数平均法求权重,需要传入判断矩阵及矩阵的行数和列数,这个矩阵是方阵因此只传一个就可以了
    def qz_average(juZhen,n):
        '''算数平均法:
                      ①将各列归一化
                      ②将归一化后的矩阵的各列相加成一个列向量
                      ③将这个列向量除以n,n为原列数
        '''
        #先定义一个temp便于存储最后的权重向量
        temp = np.zeros((n, 1))
        #第一步,先归一化操作,每一列都需要归一化
        for i in range(n):
            sum = 0
            for j in range(n):
                sum = sum+ a[j][i]
            for k in range(n):
                juZhen[k][i]=juZhen[k][i]/sum
        #第二步和第三步,然后各列相加求和并除以n
        for i in range(n):
            sum1 = 0
            for j in range(n):
                sum1 += juZhen[i][j]
            temp[i][0] = sum1/n
        print("算数平均法对应的权重向量为:")
        print(temp)
    qz_average(a,4)
    
    #以下是几何平均法,需要传入这个判断方阵和方阵的行
    def qz_geometry(juzhen,n):
        '''几何平均法:
                    ①将各列的元素按行相乘得一个新的列向量
                    ②将这个列向量开n次方,n为原列数
                    ③将这个列向量归一化
        '''
        #这里先创造一个temp的n行一列数组便于存储最后的权重向量
        temp = np.ones((n, 1))
        #然后是第一步,将各列的元素按行相乘存入temp中
        for i in range(n):
            for j in range(n):
                temp[i][0] *= juzhen[i][j]
        #第二步,开n次方
        temp = temp**(1/n)
        #第三步归一化操作,定义个sum存储和,然后将temp的每个元素除以这个和即可成功归一化
        sum = 0
        for i in range(n):
            sum += temp[i][0]
        for i in range(n):
            temp[i][0] /=sum
        print("几何平均法算出的权重向量为")
        print(temp)
    qz_geometry(a,4)
    
    #以下是特征值法求权重
    def qz_feature(juzhen,n):
        '''特征值法:
                    ①求出矩阵A的最大特征值及其对应的特征向量
                    ②对求出的特征向量进行归一化 结果即是我们的权重
        '''
        #第一步,先用下面这个函数求所有的特征值和特征向量,t中存所有的特征值,temp中存这个判断矩阵的特征向量
        t,temp = np.linalg.eig(juzhen)
    
        #找需要的那个特征向量,找最大特征值对应的那一列,一般就是第一列
        temp1 = np.zeros((n, 1))
        for i in range(n):
           temp1 [i][0] = temp[i][0].real  #这里只取实数部分,否则后面会报错复数溢出
    
        #找到对应的特征向量了,对其进行归一化即是权重向量
        sum = 0
        for i in range(n):
            sum +=temp1[i][0]
        temp1 /=sum
        print("特征法求的权重向量为:",temp1,sep = "\n")
    qz_feature(a,4)
    
    
    

    数学建模比赛使用注意:
    ①代码查重问题,自己一定要修改内容
    ②如果数据过于庞大,输入比较麻烦,我在想是否能够用类似matlab的工作区来给给矩阵变量赋值,但是由于python语言学的不精目前我还没找到这种方法,希望会的大佬给蒟蒻分享一下,如果我找到的话我会更新完善这一片博客

    展开全文
  • 数学建模层次分析法案例 关于大学毕业生就业选择问题 传统的常用的研究自然科学和社会科学的方法有
  • 数学建模》之层次分析法

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

    1.层次分析法与数学建模
    在数学建模中,通常解决的问题是:“影响某一问题的几个因素的权重大小”、“产生某一问题的主要的因素分析”、“权重的大小分析”。当然在现实生活中的应用也是十分广泛而且一样的不知不觉。最简单的就是你想去几个地方旅游,但是要综合考虑时间、金钱、当地的风景、当地的旅游数是否较多等等因素。
    2.层次分析法的基本原理与步骤
    层次分析法( Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。直白的说就是那些没有什么数据,基本就是凭空和个人的主观意识让你去选择一个最佳的目标或者判断出对于一个目标,各个因素所占的权重。这样一说,它的优点和缺点也就很明显了:优点就是简单明了,不需要太多数据的处理;缺点就是主观性太强。因此如何尽量客观的两两比较因素之间的相对重要程度就比较重要了。基本上,大家的论文上写的都是”在查阅相关资料后,得到如下判断矩阵”。运用层次分析法建模,大体上可按下面四个步骤进行:
    ( i)建立递阶层次结构模型;
    ( ii)构造出各层次中的所有判断矩阵;
    ( iii)层次单排序及一致性检验;
    ( iv)层次总排序及一致性检验。
    具体来说就是:
    ( i)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也称为目标层。
    ( ii)中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干
    个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。
    ( iii)最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等,因此也称为措施层或方案层。

    需要注意的是:
    递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地
    层次数不受限制。每一层次中各元素所支配的元素一般不要超过 9 个。这是因为支配的元素过多会给两两比较判断带来困难。把三个层次画出来会比较容易理解:

    这里写图片描述

    3.构造判断矩阵
    终于来到了正题,也是最基础和重要的一个环节。层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重并不一定相同,在决策者的心目中,它们各占有一定的比例。所以才会觉得如何判断它们的相对大小很不容易。

    设现在要比较 n 个因子 X = {x1,L, xn} 对某因素 Z 的影响大小, 怎样比较才能提
    供可信的数据呢? Saaty 等人建议可以采取对因子进行两两比较建立成对比较矩阵的办法。即每次取两个因子xi 和 x j ,以 aij 表示 xi 和 x j 对 Z 的影响大小之比,全部比较结果用矩阵A = (aij )n×n 表示,称 A 为 Z − X 之间的成对比较判断矩阵(简称判断矩阵)。容易看出,若xi 与 x j 对 Z 的影响之比为 aij ,则 x j 与 xi 对 Z 的影响之比应为1/aij。
    关于如何确定aij 的值, Saaty 等建议引用数字 1~9 及其倒数作为标度。这里写图片描述
    至于如何分为9个标度,据说是和心理学有关系的。
    4.判断矩阵的一致性检验
    当写出来判断矩阵之后还会存在一个问题,那就是按理来说如果i对j的重要程度是a,j对k的重要程度是b,那么理所应当i对k的重要程度应该a*b,有点符合“传递性”的感觉。但事实上不是这样的。所以需要进行一致性检验,如果在一定的合理范围之内,矩阵不需要修改,如果不在,则需要修改矩阵。我们可以由λmax 是否等于 n 来检验判断矩阵 A 是否为一致矩阵。由于特征根连续地依赖于aij ,故 λmax 比 n 大得越多, A 的非一致性程度也就越严重,λmax 对应的标准化特征向量也就越不能真实地反映出 因素在对目标的影响中所占的比重。因此,对决策者提供的判断矩阵有必要作一次一致性检验,以决定是否能接受它。
    (1)计算一致性指标
    CI=(入-n)/(n-1)

    (2)查找平均随机一致性指标RI
    这里写图片描述

    (3)计算一致性比例
    CR=CI/RI
    当CR < 0.10 时,认为判断矩阵的一致性是可以接受的,否则应对判断矩阵作适当修正
    矩阵符合一致性检验后,可以进行计算了:判断矩阵 A 对应于最大特征值λmax 的特征向量W ,经归一化后即为同一层次相应因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。
    5、层次总排序及一致性检验
    上面我们得到的是一组元素对其上一层中某元素的权重向量。我们最终要得到各元素,特别是最低层中各方案对于目标的排序权重,从而进行方案选择。总排序权重要自上而下地将单准则下的权重进行合成。
    这里写图片描述

    解释一下,比如A1这一列的b11……bn1,分别表示对于A1这一个目标,b11……bn1的重要程度分布。
    对层次总排序也需作一致性检验,检验仍象层次总排序那样由高层到低层逐层进行。这是因为虽然各层次均已经过层次单排序的一致性检验,各成对比较判断矩阵都已具有较为满意的一致性。但当综合考察时,各层次的非一致性仍有可能积累起来,引起最终分析结果较严重的非一致性。设 B 层中与Aj 相关的因素的成对比较判断矩阵在单排序中经一致性检验,求得单排序一致性指标为CI( j) ,(j = 1,L,m ),相应的平均随机一致性指标为 RI( j)( CI( j)、 RI( j) 已在层次单排序时求得),则 B 层总排序随机一致性比例为这里写图片描述
    6、具体举例及代码
    有一个毕业生为挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生,该毕业生考虑的因素有6个,研究课题、发展前途、待遇、同事情况、地理位置和单位名气。
    那么这六个因素就是准则层,三个单位就是方案层,最后要求的就是应该去哪个单位。
    1)准则层判断矩阵(主观性)
    这里写图片描述
    2)方案层判断矩阵(主观性)
    这里写图片描述
    (分别针对每一个B,判断C1、C2、C3之间的相对大小)

    4)计算的 Matlab 程序如下:
    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
    -173-
    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

    展开全文
  • 数学建模之层次分析法(AHP)

    万次阅读 多人点赞 2018-09-05 12:03:08
    层次分析法(Analytic Hierarchy Process) AHP是对一些较为复杂的,较为模糊的问题作出决策的简易方法,它特别适用于那些难以完全定量分析的问题。 它是美国运筹学家T.L.Saaty教授于上世纪70年代初期提出的一种...

    层次分析法(Analytic Hierarchy Process)

    AHP是对一些较为复杂的,较为模糊的问题作出决策的简易方法,它特别适用于那些难以完全定量分析的问题。由美国运筹学家T.L.Saaty教授于上世纪70年代初期提出。


    目录

    层次分析法(Analytic Hierarchy Process)

    一、建模步骤

    二、层次结构模型

    三、层次结构分析法的两个权重

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

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

    总结

    具体举例与代码

    参考链接


    一、建模步骤

    运用层次分析法建模,大体上可按下面四个步骤进行: 

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

    二、层次结构模型

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

     

    问题结构如图。首先做一个归一处理,给目标层(choose a leader)分配值为1或0,然后将这一值作为权重,分配给不同因素(Age,Experience,Education,Charisma),对应因素的权重大小代表该因素在整个选择过程中的重要性程度。

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

      

    例如选工作时,待遇所占的比重为0.8,有工作1,2,3候选, 如果工作1的待遇最高,工作2的待遇次之,工作3最差,则可将0.8的值按0.4,0.3,0.1分给工作1,2,3。

    三、层次结构分析法的两个权重

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

    • 每个准则Criterion的权重具体应该分配多少?
    • 每一个候选方案Alternative在每一个因素下又应该获得多少权重?

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

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

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

    将不同因素两两作比获得的值aij 填入到矩阵的 i 行 j 列的位置,则构造了所谓的比较矩阵,显然比较矩阵对角线上都是1, 因为是自己和自己比。这个矩阵容易获得,我们如何从这一矩阵获得对应的权重分配呢

    这里需要引入概念,正互反矩阵和一致性矩阵

    正互反矩阵定义:

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

    一致性矩阵定义:

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

    一致性矩阵有一个性质可以算出不同因素的比例

    重点:这里的w就是我们想要知道的权重,所以通过求比较矩阵的最大特征值所对应的特征向量,就可以获得不同因素的权重,归一化一下(每个权重除以权重和作为自己的值,最终总和为1)就更便于使用了。

    注:我们给出的比较矩阵一般是不满足一致性的,但是我们还是把它当做一致矩阵来处理,也可以获得一组权重,但是这组权重能不能被接受,需要进一步考量。(即下文的一致性检验)例如在判断因素1,2,3重要性时,可以存在一些差异,但是不能太大,1比2重要,2比3 重要,1和3比时却成了3比1重要,这显然不能被接受。

    一致性检验

    当写出来判断矩阵之后还会存在一个问题,那就是按理来说如果i对j的重要程度是a,j对k的重要程度是b,那么理所应当i对k的重要程度应该a*b,有点符合“传递性”的感觉。但事实上不是这样的。所以需要进行一致性检验,如果在一定的合理范围之内,矩阵不需要修改,如果不在,则需要修改矩阵。

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

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

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

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

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

    注:n个因素则需构造出来n个比较矩阵

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

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

    总结

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

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

     

    具体举例与代码

    有一个毕业生为挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生,该毕业生考虑的因素有6个,研究课题、发展前途、待遇、同事情况、地理位置和单位名气。 
    那么这六个因素就是准则层,三个单位就是方案层,最后要求的就是应该去哪个单位。 
    1)准则层判断矩阵(主观性) 

    这里写图片描述

    2)方案层判断矩阵(主观性) 
    这里写图片描述

    分别针对每一个B,判断C1、C2、C3之间的相对大小

    计算的 Matlab 程序如下: 

    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


    R语言中AHP的应用参考

    https://cran.r-project.org/web/packages/ahpsurvey/vignettes/my-vignette.html

     

    参考与资源

    [1]《数学建模算法与应用》

    [2] https://blog.csdn.net/lengxiao1993/article/details/19575261

    [3]https://blog.csdn.net/fz_851474/article/details/52281849

     

    展开全文
  • 数学建模 层次分析法

    千次阅读 2019-01-17 14:03:58
    该方法在数学建模中运用较多,但是主观因素很大,特别是构造成对比较矩阵的时候,必须要有完全合适正确的理由,不然矩阵构造错误,那么之后的问题结果也会错误。此方法不能完全用来解决数学建模问题,也就是说,一个...
  • 层次分析法简介 层次分析是对一些较为复杂较为模糊的问题作出决策的简易办法,它特别适用于那些难以完全定量分析的问题。 层次分析法,简称AHP,是指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础...
  • 数学建模--层次分析法

    千次阅读 2020-07-19 22:36:09
    层次分析法的求解步骤 1.建立层次结构模型 模型分为三层。分别为最高层(决策问题最终要解决什么,即决策的目的)、中间层(考虑的因素,决策的准则。比如买衣服要考虑价格、尺寸、款式等因素)和最低层(决策时的...
  • 数学建模之机理分析

    千次阅读 2021-07-27 09:18:34
    机理分析:通过对系统内部原因(机理)的分析研究,从而找出其发展变化规律的一种科学研究方法。 机理方法概述 (1)自身存在的发展规律和理由–分析事物的内在因素,研究其内在关系,得到内在规律—机理模型 (2...
  • 数学建模:层次分析法实例以及代码

    万次阅读 多人点赞 2020-11-22 22:06:09
    目录层次分析法的思想层次分析法步骤具体案例(市政工程项目建设决策)1.问题提出2.建立递阶层次结构3.构造判断矩阵(成对比较阵)并赋值4.层次单排序(计算权向量)与检验(一致性检验)计算权向量一致性检验5.层次总...
  • 数学建模MATLAB之分析法(一)

    万次阅读 2020-07-01 01:30:58
    本篇分别有主成分分析,层次分析,聚类分析,因子分析的简单介绍以及在MATLAB(2018a)上使用的简单介绍 ( 附源码 )
  • 数学建模方法——层次分析法(AHP)

    万次阅读 多人点赞 2019-12-04 17:10:33
    0. 层次分析法简介 层次分析法(Analytic Hierarchy Process,简称AHP)主要是对于定性的决策问题进行定量化分析的方法。举个例子,在日常生活中,我们经常需要进行感性的判断,比如报高考志愿,感觉清华北大都很好...
  • 数学建模学习笔记之评价问题层次分析法 我们评价的目标是什么? 我们为了达到目标有哪几种可选的方案? 评价的准则或者指标是什么?(我们根据什么来评价好坏) 层次分析法(AHP) 模型建立 ...
  • 还是老规矩,来介绍介绍介绍灰色关联分析及其在数数学建模中的应用。 (这里强调一下,清风老师说若是参加美赛,千万不要用灰色关联分析) 灰色关联分析百度定义: 灰色关联分析和回归分析、方差分析、主成分分析...
  • 作比较判断时人的主观选择起相当大的作用,各因素的重要性难以量化 ,解决方案的选择问题。
  • 数学建模-层次分析法matlab示例(包含一致性纠错)

    千次阅读 热门讨论 2020-07-02 11:45:59
    中间层:考虑的因素,决策准则 最底层:决策的备选方案 2. 构造判断矩阵 打分依据(两两比较打分,来减少主观的影响): 打分 程度 1 同样重要 3 稍微重要 5 明显重要 7 强烈重要 9 极端重要 2,4...
  • 数学建模】1层次分析法模型部分

    千次阅读 2020-11-08 11:45:49
    层次分析法(The analytic hierarchy process 简称AHP)建模比赛中最基础的模型之一,其主要用于解决评价类问题(例如:选择哪种方案最好、哪位运动员或者员工表现得更优秀) AHP的主要特点是通过建立递阶层次结构,...
  • 数学建模 评价类问题, 层次分析法(AHP)

    千次阅读 多人点赞 2019-09-11 15:53:58
    找评价指标 知网找相关文献 小组头脑风暴 层次分析法的判断矩阵(正互反矩阵) 一致矩阵
  • 层次分析法,Theanalytichierarchyprocess,简称AHP。最基础的模型之一,主要用于解决评价类问题。(打分系统)
  • 以下内容整理来自B站UP主:数学建模学习交流 层次分析法(The Analytic Hierarchy Process即 AHP)是由美国运筹学家、 匹兹堡大学教授T . L. Saaty于20世纪70年代创立的一种系统分析与决策的综合 评价方法,是在...
  • 数学建模问题分析

    千次阅读 2020-04-04 18:49:55
    对数据补全和基本趋势分析(根据某个未知函数(或已知但难于求解的函数)的几个已知数据点求出变化规律和特征相似的近似曲线的过程。) 插值:求过已知有限个数据点的近似函数。 拟合:已知有限个数据点,求近似函数...
  • 层次分析法层次分析法步骤建立层次结构模型构造成对比较矩阵层次单排序及其一致性检验层次总排序及其一致性检验代码——matlab 层次分析法 通常用于多目标决策问题,例如在考虑价格,舒适度,环境,交通便利等方面的...
  • 数学建模常用算法—灰色关联分析法(GRA)

    千次阅读 多人点赞 2020-07-24 18:24:01
    灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小。
  • 主成分分析法主要针对数学建模问题中的一些小的子问题进行求解,如果想直接使用请跳转至——四、五 视频回顾 一、算法介绍  主成分分析(Principal Component Analysis,PCA),将多个变量通过线性变换以选出较少...
  • %(刚刚开始学习数学建模,边学习边总结下,慢慢来,当做学习笔记了)  %(关于如何用这个选择女朋友(梦里)  %选一个研究对象… 比如,你的对象… 为了衡量 Ta 的魅力程度,分别从颜值、身高、体重、财富、...
  • 数学建模常见的一些方法 1. 层次分析法(The analytic hierarchy process, 简称AHP) 建模比赛中最基础的模型之一,其主要用于解决评价类问题(例如:选择哪种方案最好、哪位运动员或者员工表现的更优秀) 通过相关的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,464
精华内容 5,385
关键字:

数学建模因素分析法