精华内容
下载资源
问答
  • 数学建模方法——层次分析法(AHP)

    万次阅读 多人点赞 2019-12-04 17:10:33
    层次分析法(Analytic Hierarchy Process,简称AHP)主要是对于定性的决策问题进行定量分析的方法。举个例子,在日常生活中,我们经常需要进行感性的判断,比如报高考志愿,感觉清华北大都很好,到底要报哪个;再...

    目录:

    1. 层次分析法简介
    2. 层次分析法基本原理
    3. 构造判断矩阵
    4. 一致性检验
    5. 一致性检验通过的判断矩阵求权重
      4.1 算数平均法求权重
      4.2 几何平均法求权重
      4.3 特征值法求权重
    6. 总结

    0. 层次分析法简介
    层次分析法(Analytic Hierarchy Process,简称AHP)主要是对于定性的决策问题进行定量化分析的方法。举个例子,在日常生活中,我们经常需要进行感性的判断,比如报高考志愿,感觉清华北大都很好,到底要报哪个;再比如去市场买菜,到底是买青椒做青椒炒鸡蛋,还是买黄瓜做黄瓜炒鸡蛋;再比如想去出游,到底是去公园A还是公园B。上面提到的这些问题,都是决策,也叫做评价类问题,最终的目的就是要评价到底哪个更好。这个方法在数学建模比赛,比如美赛等比赛中有时会用到,另外对日常的生活也有一定的指导。

    那么如何用数学的评价体系去解决这类看似非常感性的问题呢,这就诞生了我们今天要讲的层次分析法。这里我们从浅入深对于层次分析法进行一个讲解。

    1. 层次分析法基本原理

    这里我们举一个例子让大家大致的了解层次分析法的基本原理。假如,小明想买一瓶饮料喝,他在纠结到底是买可乐好,还是雪碧好,还是汇源果汁,他非常的纠结,于是想建个模型来分析到底买哪种饮料好。

    为了实现这个评价,首先我们要确定评价的指标,比如这里我们设定三种指标:饮料的口味,饮料的价格和饮料健康程度,那么最直观的量化方法就是给各个因素一个权重,然后给各个饮料进行打分,如下表:
    在这里插入图片描述

    表格中相同颜色的区域加和需要为1,这是为了标准化。所以我们来看一下这个表格,在评价指标方面,小明很注重健康因为给了健康0.5的权重,其次是口味0.3,最后是价格0.2; 具体的在口味方面,小明觉得可乐和雪碧差不多(0.35),果汁稍微差一点是0.3 以此类推,小明就只做了这张表格,为了计算每种饮料的得分,我们只需要把备选方案的权重乘对应的评价指标的权重并且加和即可,也就是:

    可乐的最终得分是0.35×0.3+0.4×0.2+0.1×0.5 = 0.1005;
    雪碧的最终得分是 0.35×0.3+0.4×0.2+0.2×0.5 = 0.1505;
    汇源果汁的最终得分是 0.3×0.3+0.2×0.2+0.7×0.5 = 0.379;

    通过比大小我们就看得出来汇源果汁的最终得分最高,所以小明应该选择汇源果汁。

    回顾一下,为了量化的评价,我们需要确定评价指标,和备选方案两个重要的因素,接着分配权重(记得加和为1),最终通过乘法然后加和的方式得到最终的量化得分,从而做出最终的评价。

    2. 构造判断矩阵

    层级分析法就是简单的编造几个权重然后进行抉择么?当然不是,如何客观合理的设定表格中的权重才是重中之重,因此,我们这里介绍如何构造判断矩阵。

    在现实问题中,往往存在很多个评价指标,让小明从饮料的口味,价格,健康,瓶盖能不能兑奖,瓶子是不是好看,自己是不是汇源果汁的代言人……等很多评价指标中给出合理的权重是一个非常困难的事情,也许小明现在给出的权重和一会儿给出的权重就完全不同,所以,为了简化思维过程,我们首先进行评价指标的两两比较,再将比较结果汇总成最终的权重。

    为了量化两两比较的结果,我们要祭出一个评价体系表格(不要问我从哪里来~它的故乡在远方)说白了,就是在A和B两者比较中划分了一个1到9的重要等级。
    在这里插入图片描述

    举个例子,假如说饮料的健康性(A)和口味(B)相比,健康要明显重要,则我们就可以说A比B的权重是5。之后我们开始构建我们的判断矩阵。

    在这里插入图片描述

    上述的表格就是一个判断矩阵,我们可以看到这个判断矩阵有几个特点,对角线都为1,而且对角线对称的元素相乘都为1,这样的矩阵也被称为正互反矩阵。
    为了更加数学的描述,我们设定矩阵的元素定义为a_ij代表了与j相比i的重要性,其中i表示行,j表示列, 其中a_ij>0而且a_ij×a_ji=1即对称元素相乘为1。当i=j时,也就是元素在对角线上时,元素为1。另外理想的情况下要满足a_ij=a_ik×a_kj 这个理想的条件我们在以后说明

    在构造判断矩阵的过程中我们的元素是两两进行判断的,所以是不是有可能出现问题呢?答案是有可能的,我们将表格中的元素进行一个更改,并用绿色标记出,随后得到了如下的表格

    在这里插入图片描述

    我们看第一行,口味比价格重要(口味>价格)同时健康比口味重要(健康>口味),那么按照正常的推理我们是不是应该得到健康比价格重要(健康>口味>价格)然而实际上表格中填写的是价格比健康重要(价格>健康)这就出现了矛盾,也就是不一致现象。在理想情况下,在这里插入图片描述
    ,所以说,在理想的情况下a_ij=a_ik×a_kj 。理想的情况下的判断矩阵也有一些很好的性质,比如行列成比例,也就是说矩阵的秩为1,这里不进行深入的讨论。但是大部分的情况下,没办法达到如此的完美,那么为了量化评价这种不一致现象的大小,就需要在运算权重之前进行一致性的检验。

    回顾一下,为了更合理的得到层次分析法表格中的权重,我们引入了数值为1-9的标度体系,并且用两两比较的方法构建了一个判断矩阵用于之后的权重计算,然而判断矩阵存在不一致的问题,因此我们要从数值的角度评价不一致的大小,以此引出一致性的检验。

    3. 一致性检验

    为了构建一个一致性的指标来验证矩阵的一致性,学者们主要参考了线性代数中的两个定理:

    定理1:若A为一致性矩阵,则A的最大特征值λ_max⁡ = n,其中n为矩阵A的阶,A的其余特征值均为0。

    定理2:n阶正互反矩阵为一致性矩阵,当且仅当其最大特征值λ_max⁡ = n,并且当正互反矩阵非一致时,必有λ_max⁡ > n。

    从定理2的后半句中,我们可以看到,当一个正互反矩阵为非一致的矩阵的时候必有最大的特征值大于矩阵的阶,所以就想到可以使用最大特征值和矩阵的阶的差值来定义不一致性。这种想法看似复杂,其实超级朴素,比如时间不能倒流,所以出生后经过的年数就定义为你的年龄(年数-0)。

    为此就定义了一致性指标CI,CI = (λ_max – n) / (n -1)。也就是说一致性指标CI越大,整个矩阵就越不一致,当CI是0的时候是完全理想的一直矩阵。(难道这不应该叫不一致性指标么???)

    另外,为了得到计算出来的一致性指标到底是大还是小,我们又构建了平均随机一致性指标RI,该指标的构建方法是随机构建1000个正互反矩阵,并计算一致性指标的平均值。这里的RI也就是说当矩阵的阶数为n的时候随机的平均一致性。这相当于一把尺子,告诉大家如果完全随机(瞎蒙)的填写这个判断矩阵的结果的话,那么你的一致性指标的期望就大概是这个RI的值。RI如何计算呢?查表就可以了。
    在这里插入图片描述
    当CI和RI的比值小于0.1的时候,我们认为这个矩阵是一致的,也就是说你矩阵的一致性指标,要比平均的瞎蒙的一致性指标小一个数量级的时候,我们认为你就不是乱猜的了。这样我们就构建了我们的一致性比例CR = CI/ RI。如果说一个正互反矩阵的一致性比例没有小于0.1,那么就需要调整矩阵以满足要求。

    在这里插入图片描述

    举个例子,我们以这个判断矩阵为例,计算它是否满足一致性的要求,第一步是计算其最大的特征值,在matlab中,我们可以使用[x,y] = eig([1,3,1/5;1/3,1,1/6;5,6,1]); l_max = max(diag(y)); 计算得到,最后计算得到的最大特征值为3.0940, 我们可以看到这个值满足我们定理2中所说的要比矩阵的阶数3大。CI = (l_max -3) / ( 3 -1 ); 计算CI值是0.0470。RI值通过查表得到是0.52,最后我们的RI值就是CI/RI = 0.0904 < 0.1 所以这个矩阵满足一致性的要求。

    回顾一下,这里主要讲如何验证矩阵的一致性,为了验证一致性构造了一致性比例CR,满足CR小于0.1的就认为该判断矩阵合理,不满足的就要对判断矩阵进行调整,得到合理的判断矩阵,得到合理的判断矩阵之后,就可以进行最初的,层次分析法的计算了。

    4.一致性检验通过的判断矩阵求权重

    得到了合理的判断矩阵我们这里就要计算每个影响因素所占的权重,这里主要有三种方法,算数平均法,几何平均法,和特征值法求权重
    4.1 算数平均法求权重:(列归一化,行平均值)
    对每列进行归一化处理,并且按照行求平均值就得到了我们最终的权重,这是最简单的计算方法,具体的方法如下:step1:列归一化
    最左上角的元素归一化就是1/(1+1/3+5)=0.18;
    第一行第二个元素的计算方法就是3/(3+1+6)=0.30以此类推;

    在这里插入图片描述

    Step2:行平均值
    口味:(0.18+0.30+0.17)/3 = 0.22;
    价格:(0.06+0.10+0.14)/3 = 0.10;
    健康:(0.88+0.60+0.83)/3 = 0.77;
    正常权重的加和是1,这里因为四舍五入的原因有一定的偏差。得到了权重之后,我们就可以写入最开始的表格了(还记得嘛?在算了这么多之后一定要牢记使命,别忘了最开始计算这些东西的目的是什么)

    在这里插入图片描述

    4.2 几何平均法求权重:(行相乘开n次方,列归一化)

    这里的计算方法就是将行的元素都相乘,然后再开对应的n次方,并对得到的n个数字进行归一化即可。

    4.3 特征值法求权重:(最大特征值的特征向量归一化)

    特征值法其实是应用最多的一个方法,就是求最大特征值所对应的特征向量并进行归一化处理,matlab的计算方法如下:[x,y] = eig([1,3,1/5;1/3,1,1/6;5,6,1]); vec_max = x(:,1);得到的vec_max就是最大特征值对应的特征向量了。在本例中是0.26,0.12,0.96在对其进行归一化的处理,得到0.19,0.09,0.72 这样我们就用另一种方法求得了权重。

    回顾一下这里介绍了三种不同的方法对判断矩阵的权重进行计算。除了这三个影响因素的判断矩阵以外,具体的表格中可乐,雪碧和汇源果汁的判断矩阵构造方法也是一样的。只需要列出以下的表格,检验一致性并最终计算即可。

    在这里插入图片描述

    5. 总结
    以上就是层次分析法的全部过程,有几个小的问题需要进一步的讲解,当判断矩阵不满足一致性的时候我们调整的方法就是重新梳理整个矩阵的各个元素,可以利用理想状态下,行和列的元素成比例的性质进行微调。另外,层次分析法考虑的因素不能过多,不论是候选的种类,还是评价的指标都不能太多。除此之外,层次分析法主要是在主观的评价体系中进行决策,或者满意度的评价,当在一个问题中,已经有很多已知的数据的时候,这种方法就显得不太好了。

    展开全文
  • 层次分析法

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

     

    概念:

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

    一、步骤

    1、建立递阶层次结构模型

    2、构造出各层次中的所有判断矩阵

    3、层次单排序及一致性检验

    4、层次总排序及一致性检验

    二、递阶层次的建立与特点

    1、分层:

    (1)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标和理想结果。

    (2)中间层:这一层次中包含为了实现目标所涉及的中间环节,主要是一些考虑指标和一些准则。

    (3)最底层:这一层次中包含为了实现目标可供选择的各种方案。

    2、注意点:

          一般不要1层不要超过9个因素

    3、一个demo

    imageimage是三个旅游景点

    二、构造判断矩阵

          由于准则层中的各准侧的权值可能不同,所以应该设置一个权重。

    1、比较判别矩阵的元素意义

         设现在要比较n个因子image对某因素Z的影响大小,采用两两比较建立比较判别矩阵image,xi与xj对Z的影响之比为aij。然后反过来xj与xi的影响之比为aji=1/aij。

    2、比较判别矩阵的定义

    image

    3、关于比较判别矩阵元素的确定

          使用数字1-9以及其倒数作为标度。

    image

    三、层次单排序及一致性检验

    1、原理

           判断矩阵A对应于最大特征值image得特征向量W,经归一化即为同一层次相应元素对于上一层次元素相对重要性的排序权值。称为层次单排序

    image

    image

             因此,我们通过image来检验A是否为一致矩阵,当image比n大的越多,A的非一致性程度也就越严重,所以我们可以通过这种方法来检验一致性。

    2、步骤

    (1)计算一致性指标CI

    image

    (2)查询平均随机一致性指标RI,对应n=1到9,RI值分别为

    image

           这是通过随机的方法生成的一组标准指标。

    (3)计算一致性比例CR

    image

          当CR<0.1,认为矩阵的一致性是可以接受的。

    四、层次总排序及一致性检验

    image

    1、说明

    (1)A为上一层次(高的层次),B为当前层次

    (2)a1,a2,a3……am为A层次的总排序权重。

    (3)b1j……bnj是B层对Aj的单排序权重

    (4)从最高层到最底层

         现求B层中各因素关于总目标的权重,即求B层各因素的层次总排序权重b1,b2……bn。就按照上图中的方法进行计算。

    2、然后对于层次总排序也要进行一致性检验。

    image

            当CR<0.10,认为层次总排序结果具有较满意的一致性并接受该分析结果。

    (二)层次分析法的应用

    image

    1、准则层的排序矩阵

    image

    2、方案层的排序矩阵

    image

    3、层次排序总结果

    image

          所以最满意的工作是1。

    展开全文
  • 层次分析法 (The analytic hierarchy process,简称AHP)(hierarchy n. 层级;等级制度) 建模中最基础的方法之一,主要用于解决评价类问题。 评价类问题: 举例:选择哪个方案更好,哪位运动员或者职工表现的更优秀 ...

    层次分析法
    (The analytic hierarchy process,简称AHP)(hierarchy n. 层级;等级制度)
    建模中最基础的方法之一,主要用于解决评价类问题。
    评价类问题:
    举例:选择哪个方案更好,哪位运动员或者职工表现的更优秀
    解决评价类问题首先三个条件:
    ①我们的评价目标是什么?
    ②为了达到目标可选的几种方案?
    ③评价的准则或者说指标是什么?
    一般来说,评价的指标或者准则可以根据题目中的背景材料,常识,以及网上收集到的参考资料进行结合,从而筛选合适目标

    收集资料
    ①优先选择知网(万方,百度学术,谷歌学术等平台)搜索相关内容文件,借鉴别人的方法

    ②https://search.chongbuluo.com/ 虫部落——快搜
    在平台上搜索别人的看法

    ③注意查询时关键字要准确

    一,模型介绍

    1.直接权重法

    两个事物对比,直接比较出权重
    例如:
    在这里插入图片描述
    这里权重比例可以直接通过Excel表格进行计算,同时注意计算时将指标权重进行绝对引用(绝对引用的快捷键F4)在这里插入图片描述这样固然简单,仍有很多弊端。

    • 得到的数据往往比较片面不周全

    • 在确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难 是这些比重常常不易定量化。此外,当影响某因素的因子较多时,直接
      考虑各因子对该因素有多大程度的影响时,常常会因考 虑不周全、顾此 失彼而使决策省提出与他实际认为的重要性程度不相-致的數据,甚至
      有可能提出一组隐含矛盾的数据。
      –选自司守奎[kui]老师的《数学建模算法与应用教材》
      2.间接权重法(分而治之)

    • 目的:为了改善直接权重法的片面性

    • 解决方法:两个两个指标进行比较,最终根据两两比较的结果来计算权重
      重要程度表:
      在这里插入图片描述
      层次分析法中的判断矩阵:
      例如:在这里插入图片描述
      类似这样的表格我们记为A,对元素为aij.判断
      (1)aij表是的意义是,与j指标相比,i的重要程度
      (2)当i=j时,两个指标相同,同等重要因此为1,对角线元素为1、
      (3)aij>0且满足aij*aji=1,满足这一条件即可判断为正互反矩阵

    首先判断填写景色一栏
    在这里插入图片描述
    在这里插入图片描述
    根据重要程度表进行填写 ,主要填写右上角的数字,当右上角的数字填写后根据正互反矩阵的性质即可得到左下角与右上角互为倒数。即可填写完整个表格。
    类比填完其他比较项目:
    在这里插入图片描述
    五个维度:景色,花销,饮食,居住,交通。我们已经填写完毕。但是大家仔细看还是会发现问题,在景色比较表格中,我们会发现苏杭景色比北戴河好,苏杭比桂林景色好很多,也就是北戴河不如桂林,但是第二行可以看出,北戴河的景色比桂林好,出现了矛盾。
    也就是作为不一致矩阵
    一致矩阵
    满足以下规律:在这里插入图片描述
    特点
    各行各列之间成倍数关系

    与之前所讲述的正互反矩阵的关系
    ①aij>0且满足aijaji=1,满足这一条件即可判断为正互反矩阵,并且在层次分析法中我们过早的判断矩阵是正互反矩阵
    ②若同时,正互反矩阵也满足aij
    ajk=aik,则称其为一致矩阵。

    注意:在使用判断矩阵求权重之前必须对其进行一致性检验

    接下来介绍一致性检验:
    一致性检验

    在这里插入图片描述
    引理: A为n阶方阵, r(A)=1,则A有一个特征值为tr(A),其余特征值均为0.
    因为一致知阵的各行成比例,所以一致矩阵的秩定为1.

    由引理可知:一致矩阵有一 个特征值为n, 其余特征值均为0.

    另外,我们很容易得到,特征值为n时,对应的特征向量刚好为在这里插入图片描述

    不知道大家是否还记得线性代数,这里进行补充:

    特征值:设 A 是n阶方阵,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是矩阵A的一个特征值(characteristic value)或本征值(eigenvalue)。

    当判断矩阵越不一致时,最大特征值与n就相差越大。

    总结一致性检验的步骤:
    第一步:计算一致性指标CI
    在这里插入图片描述
    第二步:查找对应的平均随机一致性指标RI
    在这里插入图片描述
    第三步:计算一致性比例CR
    在这里插入图片描述
    如果CR < 0.1,则可认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修正。

    如果CR>1应该如何让修正?
    往一致矩阵上调,一致矩阵的各行各列成倍数关系

    化为一致矩阵后应如何进行计算权重?
    在这里插入图片描述
    还是以景色为例:当我们以将苏州看为1,则北戴河为1/2,桂林为1/5,因此每一列都有一个重要性为1的数,怎样才能更方便呢?进行归一化!
    综合以上进行计算平均权重:

    计算平均权重 三种方法:

    ①算术法计算平均权重

    ②几何平均法求权重

    ③特征值法求解

    ①算术法计算平均权重

    归一化
    第一列:
    苏杭:1/(1+0.5+0.25)=0.5882
    北戴河:1/(1+0.5+0.25)=0.2941
    桂林:1/(1+0.5+0.25)=0.1177
    第二列:
    苏杭:2/(2+1+0.5)=0.5714
    北戴河:1/(2+1+0.5)=0.2857
    桂林:0.5/(2+1+0.5)=0.1429

    第三列:
    苏杭:5/(5+2+1)=0.625
    北戴河:2/(5+2+1)=0.25
    桂林:1/(5+2+1)=0.125

    得到平均权重为:
    苏杭= (0.5882+0.5714+0.625)/3=0.5949

    北戴河= (0.2941+0.2857+0. 25)/3=0.2766

    桂林= (0.1177+0.1429+0.125)/3=0.1285

    ②几何平均法求权重

    第一步:将A的元素按照行相乘的得到新的行向量
    第二步:将新的向量的每个分量开n次方
    第三步:对该向量进行归一化处理

    在这里插入图片描述
    ③特征值法求解
    首先明白一致矩阵有一个特征值为n,其余特征值为0.另外我们可以看出当特征值为n时,对应的特征向量为在这里插入图片描述

    第一步:求出矩阵A的最大特征值以及其对应特征向量
    第二步:对求出的特征向量进行归一化即可得到权重
    在这里插入图片描述
    在这里插入图片描述

    最后用三种方法得出的权重:
    在这里插入图片描述
    所以我们就得到了在景色这一方它的权重
    在这里插入图片描述

    一此类推即可得到其他方面的参数最后在经过国计算分别得到苏杭北戴河桂林的所占权重即可。

    总结层次分析第三个步骤:
    ①分析系统中各因之间关系,建立系统递阶层次结构
    (层次分析法一定要配层次结构图)PPT中SMARTART可以生成

    ②对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较构造两两比较矩阵(判断矩阵)

    ③由判断矩阵计算被比较元素对于该准则相对权重并进行一致性检验,检验通过权重才能用。
    三种计算权重方法:
    (1)算术平均法(2)几何平均法(3)特征值法(比较常用)
    为了保证结果稳健性建议三种方法都使用。

    层次法一些局限性
    (1)评价决策层不能太多,太多话n会很大,判断矩阵和一致矩阵差异可能会很多大

    (平均随机一致性指标RI的表格中N最多是15)

    (2)如果决策层中指标的数据是已知,那么我们如何利用这些数据来使得贫家更加准确呢?

    完更,大家都看到这里了,如果觉得不错的话点个赞嘛

    展开全文
  • 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));
    
        }
    }
    

     

     

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

    千次阅读 2021-03-16 17:12:26
    层次分析法的原理,层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同的层次聚集组合,形成一个多层次的分析结构模型,从而最终 使问题...
  • 层次分析法(AHP)详细步骤

    万次阅读 多人点赞 2019-01-07 13:01:10
    构造判断矩阵 层次分析法中构造判断矩阵的方法是一致矩阵法,即:不把所有因素放在一起比较,而是两两相互比较;对此时采用相对尺度,以尽可能减少性质不同因素相互比较的困难,以提高准确度。 判断矩阵 aija_{ij}...
  • 数学建模--层次分析法

    千次阅读 2020-07-19 22:36:09
    层次分析法的求解步骤 1.建立层次结构模型 模型分为三层。分别为最高层(决策问题最终要解决什么,即决策的目的)、中间层(考虑的因素,决策的准则。比如买衣服要考虑价格、尺寸、款式等因素)和最低层(决策时的...
  • 时间 2020年4月15日 组别 数学建模 姓名 Zkaisen 本 周 完 成 作 总 结 本周我主要学习了层次分析法(AHP)的基本原理及其在企业资金分配方案、太阳镜产品质量评价等案例中的应用,并学习使用visio绘制所需图形以及...
  • 目录层次分析法概述定义步骤归纳例子应用实例Python实现程序如下:运行结果截图 层次分析法概述 定义 本文所有图片均来自本人的OneNote笔记 步骤归纳 例子 建立层次结构模型 构造判断(成对比较)矩阵 第...
  • 《数学建模》之层次分析法

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

    千次阅读 多人点赞 2020-04-12 22:30:09
    笔记来自清风老师的数学建模系列课程,课程链接:层次分析法 层次分析法例题,IMMC2020https://blog.csdn.net/yanyanwenmeng/article/details/104907412 1. 指标选择途径 (1)题目背景 (2)中国知网、百度学术...
  • 层次分析法,简称AHP,是指将与决策总是有关的元素分解成目标、准肌、方案等层次,在此基础之上进行定性和定量分析的决策方法,该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年初提出。 接下来,我会分为四个...
  • 层次分析法中判断矩阵的填写方法、一致性检验的步骤、以及根据判断矩阵计算权重的方法
  • 特征向量归一化

    千次阅读 2020-11-25 19:49:21
    在使用KNN之前需要对所有的变量进行归一化处理。下面介绍几种归一化的方法: 1、线性函数转换,表达式如下: y=(x-MinValue)/(MaxValue-MinValue) 2、对数函数转换,表达式如下: y=log10 (x) 3、反余切函数转换 ,...
  • 数学建模:层次分析法实例以及代码

    万次阅读 多人点赞 2020-11-22 22:06:09
    目录层次分析法的思想层次分析法...层次分析法的思想:将所有要分析的问题层次; 根据问题的性质和所要到达的总目标,将问题分为不同的组成因素,并按照这些因素间的关联影响即其隶属关系,将因素按不同层次聚集组.
  • AHP(层次分析法)的全面讲解及python实现

    千次阅读 多人点赞 2020-05-09 13:58:30
    一、层次分析法的使用流程: 1. 建立层次结构模型 首先绘出层次结构图,正常三层是比较常见的:决策的目标、考虑的决策准则因素和决策对象。按它们之间的相互关系分为最高层、中间层和最低层(如下图是四层结构的...
  • 层次分析法的代码

    2021-09-20 16:41:09
    先输入一个矩阵A clear;clc disp('请输入判断矩阵A: ')% A = input('判断矩阵A=') %我这里以一个矩阵A为例,大家在用的时候可以把下面这个矩阵A换掉 A =[1 1 4 1/3 3; 1 1 4 1/3 3; 1/4 1/4 1 1/3 1/2; 3 3 3 1 3...
  • 层次分析法(AHP)

    万次阅读 多人点赞 2017-08-30 15:54:54
    层次分析法(AHP)问题的提出日常生活中有许多决策问题。决策是指在面临多种方案时需要依据一定的标准选择某一种方案。 购物:买钢笔,一般要依据质量、颜色、实用性、价格等方面的因素来选择某一只钢笔。 买饭,则...
  • 针对传统攻击树模型在计算攻击事件发生概率时未考虑各安全属性权值的不足,设计了一种基于层次分析法的攻击树模型。在计算攻击事件发生概率时,首先给每个叶节点赋予不同安全属性;然后根据攻击者意图和系统特征比较...
  • clear;clc disp('请输入判断矩阵A: ') A = input('判断矩阵A=') % 输入判断矩阵 ... %第一步:将判断矩阵按列归一化(每个元素除以其所在列的和) Sum_A = sum(A,1) %矩阵按列求和形成一行向量 n = size(A,1) %...
  • 层次分析法的理解

    千次阅读 2020-08-07 11:39:31
    AHP层次分析法层次分析法的特点基本概念重要性表判断矩阵为什么要引入判断矩阵呢?判断矩阵的特点一致矩阵为什么要定义一致矩阵呢?一致矩阵的特点:一致矩阵的引理:一致性检验的步骤判断矩阵计算权重算术平均法求...
  • 层次分析法计算权重

    千次阅读 2020-11-26 11:13:02
    初学者搞的层次分析法,先放代码再放图 import numpy as np import pandas as pd import pymysql import math import time import datetime from sqlalchemy import create_engine class AHP: """ 相关信息的传入...
  • 层次分析法步骤及代码编写 1. 输入判断矩阵 有两种写法 可以直接写一行 也可以写成多行 多行输入的时候两行之间以分号结尾(最后一行的分号可加可不加),同行元素之间以空格(或者逗号)分开。 clear;clc %...
  • 层次分析法计算步骤 计算权重矩阵 构造新矩阵 aij=aij∑n=1naij a_{ij}=\frac{a_{ij}}{\sum^{n}_{n=1}a_{ij}} aij​=∑n=1n​aij​aij​​ 计算权重矩阵 aij=∑n=1naij∑n=1n∑n=1naij a_{ij}=\frac{\sum_{n=1}^{n...
  • 层次分析法步骤及源代码

    千次阅读 2020-08-04 23:18:03
    层次分析法步骤及matlab源码层次分析法步骤例题matlab源代码 层次分析法步骤 建立层次结构模型。在深入分析实际问题的基础上,将有关的各个因素按照不同属性自上而下地分解成若干层次,同一层的诸因素从属于上一层...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,922
精华内容 1,968
关键字:

层次分析法矩阵归一化