精华内容
下载资源
问答
  • 多中间层层次分析法(一)

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

    一、层次分析法概述

    层次分析法(Analytical Hierarchy Process 简称 AHP 是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标能否实现的标准之间的相对重要程度,并合理地给出每个决策方案的优劣次序,比较有效的应用于那些难以用定量方法解决的课题。它的基本思想是在对复杂的决策问题的本质、影响因素及其内在关系等进行深入分析的基础上,利用较少的定量信息是决策的思维过程数学化,从而为多目标、多准则或者无结构特性的复杂决策问题提供简便的决策方法。

    二、基本原理

    层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同层次聚集组合,形成一个多层次的分析结构模型,从而最终使问题归结为最低层(供决策的方案、措施等)相对于最高层(总目标)的相对重要权值的确定或相对优劣次序的排定。

    三、层次分析法的步骤和方法

    运用层次分析法构造系统模型时,大体可以分为以下四个步骤:

    1. 建立层次结构模型
    2. 构造判断(成对比较)矩阵
    3. 层次单排序及其一致性检验
    4. 层次总排序及其一致性检验

    1. 建立层次结构模型

    将决策的目标、考虑的因素(决策准则)和决策对象按它们之间的相互关系分为最高层、中间层和最底层,绘出层次结构图。

    • ==最高层:目标层。==表示解决问题的目的,即层次分析要达到的总目标。通常只有一个总目标。
    • ==中间层:准则层、指标层等。==表示采取某种措施、政策、方案等实现预定总目标所涉及的中间环节;一般又分为准则层、指标层、策略层、约束层等。
    • ==最低层:方案层。==表示将选用的解决问题的各种措施、政策、方案等。通常有几个方案可选。
    • 对于相邻的两层,称高层为目标层,低层为因素层。

    例题

    某研究所现有三个科研课题,限于人力及物力,只能研究一个课题。有三个须考虑的因素:

    1. 科研成果贡献大小(包括实用价值和科学意义);
    2. 人才培养;
    3. 课题的可行性(包括课题的难易程度、研究周期及资金)

    在这些因素的影响下,如何选择课题?

    层次结构模型

    层次结构模型

    构造判断(成对比较)矩阵

    判断矩阵是表示本层所有因素针对上一层某一个因素的相对重要性的比较。判断矩阵的元素aij用1-9标度方法给出。如下表:
    判断矩阵元素aij的标度方法

    标度 含义
    1 表示两个因素相比,具有同样重要性
    3 表示两个因素相比,一个因素比另一个因素稍微重要
    5 表示两个因素相比,一个因素比另一个因素明显重要
    7 表示两个因素相比,一个因素比另一个因素 强烈重要
    9 表示两个因素相比,一个因素比另一个因素极端重要
    2,4,6,8 上述相邻判断的中间值
    倒数 因素iijj比较的判断aija_{ij},则因素j与i比较的判断aji=1/aija_{ji} =1/a_{ij}

    对于不一致(但在允许范围内)的成对比较矩阵A,可使用最大特征根lambda的特征向量作为权向量w,即
    Aλ=λwA\lambda=\lambda w

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

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

    参考文献

    层次分析法基本原理、实施步骤、应用实例

    展开全文
  • 层次分析法(AHP)详细步骤

    万次阅读 多人点赞 2019-01-07 13:01:10
    1. 算法简介 层次分析法(AHP)是美国运筹学家萨蒂于上世纪70年代初,为美国国防部研究“根据各个工业部门对国家福利的贡献大小而进行电力分配”课题时,应用网络系统理论和目标综合评价方法,提出的一种层次权重...

    1. 算法简介

    层次分析法(AHP)是美国运筹学家萨蒂于上世纪70年代初,为美国国防部研究“根据各个工业部门对国家福利的贡献大小而进行电力分配”课题时,应用网络系统理论和多目标综合评价方法,提出的一种层次权重决策分析方法。
    层次分析法是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标之间能否实现的标准之间的相对重要程度,并合理地给出每个决策方案的每个标准的权数,利用权数求出各方案的优劣次序,比较有效地应用于那些难以用定量方法解决的课题。

    2. 算法基本原理

    例子:
    在这里插入图片描述

    2.1. 解决问题的思路

    层次分析法的基本思路是将所要分析的问题层次化;根据问题的性质和所要达成的总目标,将问题分解为不同的组成因素,并按照这些因素的关联影响及其隶属关系,将因素按不同层次凝聚组合,形成一个多层次分析结构模型;最后,对问题进行优劣比较并排列。

    2.2. 层次分析法的步骤

    1.建立层次结构模型

    • 将决策的目标、考虑的因素(决策准则)和决策对象按照他们之间的相互关系分为最高层、中间层和最低层,绘出层次结构图。
    • 最高层: 决策的目的、要解决的问题。
      最低层: 决策时的备选方案。
      中间层: 考虑的因素、决策的准则。
    • 对相邻的两层,称高层为目标层,低层为因素层

    层次分析法所要解决的问题是关于最低层对最高层的相对权重的问题,按此相对权重可以对最低层中的各种方案、措施进行排序,从而在不同的方案中做出选择或形成选择方案的原则。

    2.构造判断矩阵
    层次分析法中构造判断矩阵的方法是一致矩阵法,即:不把所有因素放在一起比较,而是两两相互比较;对此时采用相对尺度,以尽可能减少性质不同因素相互比较的困难,以提高准确度。

    判断矩阵aija_{ij}的标度方法

    标度 含义
    1 表示两个因素相比,具有同样重要性
    3 表示两个因素相比,一个因素比另一个因素稍微重要
    5 表示两个因素相比,一个因素比另一个因素明显重要
    7 表示两个因素相比,一个因素比另一个因素强烈重要
    9 表示两个因素相比,一个因素比另一个因素极端重要
    2,4,6,8 上述两相邻判断的中值
    倒数 因素iijj比较的判断aija_{ij},则因素jjii比较的判断aji=1/aija_{ji}=1/a_{ij}

    3.层次单排序及其一致性检验
    对应于判断矩阵最大特征根λmax\lambda max的特征向量,经归一化(使向量中各元素之和为1)后记为WWWW的元素为同一层次元素对于上一层因素某因素相对重要性的排序权值,这一过程称为层次单排序

    定义一致性指标CI=λnn1CI=\frac {\lambda-n}{n-1}
    CI=0CI=0,有完全的一致性;
    CICI接近于0,有满意的一致性;
    CICI越大,不一致越严重。

    为了衡量CICI的大小,引入随机一致性指标RIRI

    随机一致性指标RI
    n 1 2 3 4 5 6 7 8 9 10 11
    RI 0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51

    定义一致性比率:CR=CIRICR=\frac{CI}{RI},一般认为一致性比率CR<0.1CR<0.1时,认为A的不一致程度在容许范围之内,有满意的一致性,通过一致性检验。可用其归一化特征向量作为权向量,否则要重新构造成对比较矩阵A,对aija_{ij}加以调整。

    示例:
    在这里插入图片描述在这里插入图片描述

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

    • 计算某一层次所有因素对于最高层(总目标)相对重要性的权值,称为层次总排序。
    • 这一过程是从最高层次到最低层次依次进行的。
      在这里插入图片描述
      A层mm个因素A1,A2,,Am,A_{1},A_{2},···,A_{m},对总目标Z的排序为a1,a2,,ama_{1},a_{2},···,a_{m}
      B层nn个因素对上层A中因素为AjA_{j}的层次单排序为b1j,b2j,,bnj(j=1,2,3,,m)b_{1j},b_{2j},···,b_{nj}(j=1,2,3,···,m)

    B层的层次总排序(即B层第ii个因素对总目标的权值为:j=1majbij\sum_{j=1}^{m}a_{j}b_{ij})为:
    B1:a1b11+a2b12++amb1m,B_{1}:a_{1}b_{11}+a_{2}b_{12}+···+a_{m}b_{1m},
    B2:a1b21+a2b22++amb2m,B_{2}:a_{1}b_{21}+a_{2}b_{22}+···+a_{m}b_{2m},
    ···
    Bn:a1bn1+a2bn2++ambnm,B_{n}:a_{1}b_{n1}+a_{2}b_{n2}+···+a_{m}b_{nm},

    层次总排序的一致性比率为:CR=a1CI1+a2CI2++amCIma1RI1+a2RI2++amRImCR=\frac{a_{1}CI_{1}+a_{2}CI_{2}+···+a_{m}CI_{m}}{a_{1}RI_{1}+a_{2}RI_{2}+···+a_{m}RI_{m}},当CR<0.1CR<0.1时,认为层次总排序通过一致性检验。
    例子:
    在这里插入图片描述在这里插入图片描述

    3.算法总结

    • 应用领域:经济计划个管理,能源政策和分配,人才选拔和评价,生产决策,交通运输,科研选题,产业结构,教育,医疗,环境,军事等。
    • 处理问题类型:决策、评价、分析、预测等。
    • 建立层次分析结构模型是关键一步,要有主要决策层参与。
    • 构造成对比较矩阵是数量依据,应由经验丰富、判断力强的专家给出。

    4.参考

    1. 层次分析法建模——《百度文库》
    展开全文
  • 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));
    
        }
    }
    

     

     

    展开全文
  • 层次分析法(The analytic hierarchy process)简称AHP,它是将与决策有关的因素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。 本文为简明AHP学习笔记,并通过Python实践构建多层权重...

    层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(TLsaaty)正式提出。它是将与决策有关的因素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。

    1. 层次分析法

    1.1. AHP模型构建

    在深入分析问题的基础上,将决策的目标、考虑的因素和决策对象按相关关系分为最高层、中间层和最低层。

    最高层:决策的目的、要解决的问题
    中间层:主因素,考虑的因素、决策的准则
    最低层:决策时的备选方案,也可为中间层的子因素

    在这里插入图片描述

    1.2. 构造判断矩阵

    构造判断矩阵的方法是一致矩阵法,即:不把所有因素放在一起比较,而是两两相互比较;对此时采用相对尺度,以尽可能减少性质不同因素相互比较的困难,以提高准确度。

    标度AijA_{ij} 含义
    1 i 指标比 j 指标同样重要
    3 i 指标比 j 指标略微重要
    5 i 指标比 j 指标明显重要
    7 i 指标比 j 指标重要的多
    9 i 指标比 j 指标重要很多
    2,4,6,8 介于上述两个判断的中值
    倒数 i 指标与 j 指标比较得AijA_{ij}, j 指标与 i指标比较判断得Aji=1AijA_{ji}=\frac{1}{A_{ij}}

    按照前面建立的层次递阶结构模型,每一层因素以相邻上一层因素为基准,按照表 1 标度取值方法两两比较构造判断矩阵。指标的标度值由专家取定,构造判断矩阵A=[aij]m×nA=\left [ a_{ij}\right ]_{m\times n}

    因素两两比较,比较次数为:n(n1)2\frac{n(n-1)}{2}

    判断思想:整体判断,n个因素两两比较;定性判断,定量标识(标量);
    构造判断矩阵规则:填补右上三角为有规则;
    判断矩阵元素有如下特征:aij>0a_{ij}>0aij=1aija_{ij}=\frac{1}{a_{ij}}aii=1a_{ii}=1

    1.2.1. 构造准则层判断矩阵

    按专家投票打分等方式,构造准则层判断矩阵。在这里插入图片描述

    1.2.2. 构造因素层判断矩阵

    以“合规管理”为例,专家投票打分等人为方式构造因素层判断矩阵。
    在这里插入图片描述

    1.3. 层次单排序及其一致性检验

    对应于判断矩阵最大特征根λmaxλ_{max}的特征向量,经归一化(使向量中各元素之和为1)后记为WWWW的元素为同一层次元素对于上一层因素某因素相对重要性的排序权值,这一过程称为层次单排序。

    1.3.1. 规范化

    将判断矩阵按列规范化,即对判断矩阵 A 每一列归一化:aˉij=aiji=1naij\bar{a}_{ij} = \frac{a_{ij}}{\sum_{i=1}^{n}a_{ij}}

    按行相加得和向量:Wi=i=1naˉijW_{i} ={\sum_{i=1}^{n}\bar{a}_{ij}}

    1.3.2. 特征向量(权重)

    将得到的和向量正规化,可得权重向量:Wˉi=Wii=1nWi\bar{W}_{i}=\frac{W_{i}}{\sum_{i=1}^{n}W_{i}},近似为特征向量。

    1.3.3. 最大特征根

    计算最大特征根λmaxλ_{max},采用“和积法”:λmax=1ni=1n(AWˉ)iWˉiλ_{max}=\frac{1}{n} \sum_{i=1}^{n} \frac{(A \bar{W})_{i}}{\bar{W}_{i}}

    这里(AWˉ)i(A \bar{W})_{i}是指矩阵乘法,原始矩阵AA与特征矩阵Wˉ\bar{W}相乘。

    1.3.4. 一致性检验

    一致性检验是指对判断矩阵AA确定不一致的允许范围。nn阶一致阵的唯一非零特征根为nnnn阶正互反阵AA的最大特征根λmaxnλ_{max}\geqslant n 时,AA为非一致矩阵,比nn 大的越多,AA的不一致性越严重; 当且仅当λmax=nλ_{max}=n 时,AA为一致矩阵。因此可由λmaxλ_{max} 是否等于 n 来检验判断矩阵AA是否为一致矩阵。

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

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

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

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

    检验成对比较矩阵A一致性的步骤如下:
    定义一致性指标CI=λmaxnn1CI=\frac{λ_{max}−n}{n−1}
    CI=0CI=0,有完全的一致性;
    CICI接近于0,有满意的一致性;
    CICI越大,不一致越严重。

    为了衡量CICI的大小,引入随机一致性指标RIRI,按照 Saaty 给出的关于平均随机一致性指标:

    n 1 2 3 4 5 6 7 8 9 10 11
    RI 0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51

    注解:从有关资料查出检验成对比较矩阵A 一致性的标准RI:RI称为平均随机一致性指标,它只与矩阵阶数n 有关(一般不超过9个)。

    定义一致性比率:CR=CIRICR=\frac{CI}{RI},一般认为一致性比率$CR<0.111时,认为A的不一致程度在容许范围之内,有满意的一致性,通过一致性检验。可用其归一化特征向量作为权向量,否则要重新构造成对比较矩阵A,对a_{ij} 加以调整。

    1.4. 层次总排序及其一致性检验

    计算某一层次所有因素对于最高层(总目标)相对重要性的权值,称为层次总排序。这一过程是从最高层次到最低层次依次进行的。

    2. Python代码实现

    2.1. 准则层与因素层权重实现代码

    代码中到判断矩阵,为上文中举例内容,但是因素层内容只在文中列出“合规管理”部分,其他以代码为准。

    import numpy as np
    import pandas as pd
    import warnings
    
    class AHP:
        def __init__(self, criteria, factors):
            self.RI = (0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49)
            self.criteria = criteria               #准则
            self.factors = factors                 #因素
            self.num_criteria = criteria.shape[0]
            self.num_factors = factors[0].shape[0]
    
        def cal_weights(self, input_matrix):
            input_matrix = np.array(input_matrix)
            n, n1 = input_matrix.shape
            assert n == n1, '不是一个方阵'
            for i in range(n):
                for j in range(n):
                    if np.abs(input_matrix[i, j] * input_matrix[j, i] - 1) > 1e-7:
                        raise ValueError('不是反互对称矩阵')
    
            eigenvalues, eigenvectors = np.linalg.eig(input_matrix)
    
            max_idx = np.argmax(eigenvalues)
            max_eigen = eigenvalues[max_idx].real
            eigen = eigenvectors[:, max_idx].real
            eigen = eigen / eigen.sum()
    
            if n > 9:
                CR = None
                warnings.warn('无法判断一致性')
            else:
                CI = (max_eigen - n) / (n - 1)
                CR = CI / self.RI[n]
            return max_eigen, CR, eigen
    
        def run(self):
            max_eigen, CR, criteria_eigen = self.cal_weights(self.criteria)
            print('准则层:最大特征值{:<5f},CR={:<5f},检验{}通过'.format(max_eigen, CR, '' if CR < 0.1 else '不'))
            print('准则层权重={}\n'.format(criteria_eigen))
    
            max_eigen_list, CR_list, eigen_list = [], [], []
            k = 1
            for i in self.factors:
                max_eigen, CR, eigen = self.cal_weights(i)
                max_eigen_list.append(max_eigen)
                CR_list.append(CR)
                eigen_list.append(eigen)
                print('准则 {} 因素层:最大特征值{:<5f},CR={:<5f},检验{}通过'.format(k,max_eigen, CR, '' if CR < 0.1 else '不'))
                print('因素层权重={}\n'.format(eigen))
    
                k = k + 1
                
            return criteria_eigen ,eigen_list
    
    def main():
        # 准则重要性矩阵
        criteria = np.array([[1, 7, 5, 7, 5],
                             [1 / 7, 1, 2, 3, 3],
                             [1 / 5, 1 / 2, 1,  2,  3],
                             [1 / 7, 1 / 3, 1 / 2, 1, 3],
                             [1 / 5, 1 / 3, 1 / 3, 1 / 3, 1]])
    
        # 对每个准则,方案优劣排序
        b1 = np.array([[1, 5], [1 / 5, 1]])
        b2 = np.array([[1, 2, 5], [1 / 2, 1, 2], [1 / 5, 1 / 2, 1]])
        b3 = np.array([[1, 5, 6, 8], [1 / 5, 1 ,2, 7], [1 / 6, 1 / 2, 1 ,4],[1 / 8, 1 / 7, 1 / 4, 1]])
        b4 = np.array([[1, 3, 4], [1 / 3, 1, 1], [1 / 4, 1, 1]])
        b5 = np.array([[1, 4, 5, 5], [1 / 4, 1, 2, 4], [1 /5 , 1 / 2, 1, 2], [1 / 5,1 /4,1 / 2, 1]])
    
        b = [b1, b2, b3, b4, b5]
        a,c = AHP(criteria, b).run()
        #下一段将用到此函数
        #fuzzy_eval(a,c)
        
    if __name__ == '__main__':
    
        main()
    

    2.2. 运行结果

    准则层:最大特征值5.418198,CR=0.084314,检验通过
    准则层权重=[0.58293141 0.16396029 0.11819176 0.08112143 0.05379511]
    
    准则 1 因素层:最大特征值2.000000,CR=0.000000,检验通过
    因素层权重=[0.83333333 0.16666667]
    
    准则 2 因素层:最大特征值3.005535,CR=0.003075,检验通过
    因素层权重=[0.59537902 0.27635046 0.12827052]
    
    准则 3 因素层:最大特征值4.236855,CR=0.070493,检验通过
    因素层权重=[0.63674151 0.20373312 0.11691427 0.04261111]
    
    准则 4 因素层:最大特征值3.009203,CR=0.005113,检验通过
    因素层权重=[0.63370792 0.19192062 0.17437146]
    
    准则 5 因素层:最大特征值4.131108,CR=0.039020,检验通过
    因素层权重=[0.58810136 0.21808417 0.11971903 0.07409544]
    

    2.3. 关于权重的使用

    一是用用模糊层次综合分析,给出综合评价(在上文获取权重的基础上,人为或者客观数据等方式给出各个因素评价,构成因素评价矩阵,因素评价矩阵与权重矩阵做矩阵积,这个结果将是综合评价,后续文章将逐步展开写);
    二是配合神经网络使用,作为模型训练提供数据。

    由于编制水平有限,欢迎反馈指点。

    参考:

    [1]《AHP | 层次分析法原理及Python实现》 简书 PurePlayer 2020年2月
    [2]《层次分析法(AHP)详细步骤》 CSDN博客 我的她像朵花 2019年1月
    [3]《【AHP】层次分析法原理与Python实现》 CSDN博客 ,guofei9987 ,2020年1月

    展开全文
  • 层次分析法

    万次阅读 2015-06-11 18:11:53
    层次分析法(Analytic Hierarchy Process,简称AHP)是将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初...
  • 层次分析法在matlab上的实现

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

    千次阅读 2017-05-06 20:34:38
    Analytic Hierarchy Process(AHP),层次分析法,由T.L.Saaty于上世纪70年代提出,是一种层次权重决策分析方法。 根据问题的性质和要达到的总目标,将问题分解为不同的组成要素。 按照因素之间的相互影响及隶属关系,...
  • 机器学习 | 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 ...
  • 层次分析法原理和matlab代码

    千次阅读 2020-06-15 21:16:56
    文章目录一、层次分析法简述二、求解过程1、建立层次结构模型2、构造成对比较矩阵3、计算权向量并做一致性检验4、计算组合权向量并做组合一致性检验三、参考文献 一、层次分析法简述 层次分析法(The analytic ...
  • 层次分析法准则决策方法)

    千次阅读 2020-08-05 23:07:05
    运用层次分析法建模,大体上可按下面四个步骤进行: 建立递阶层次结构模型; 构造出各层次中的所有判断矩阵; 层次单排序及一致性检验; 层次总排序及一致性检验。 建立递阶层次结构模型 (每一层次中各元素所支配...
  • 层次分析法原理及应用案例

    万次阅读 2020-10-30 15:04:00
    层次分析法是指将一个复杂的目标决策问题作为一个系统,将目标分解为个目标或准则,进而分解为指标(或准则、约束)的若干层次,通过定性指标模糊量化方法算出层次单排序(权数)和总排序,以作为目标(指标...
  • 层次分析法(AHP)

    万次阅读 多人点赞 2017-08-30 15:54:54
    层次分析法(AHP)问题的提出日常生活中有许多决策问题。决策是指在面临多种方案时需要依据一定的标准选择某一种方案。 购物:买钢笔,一般要依据质量、颜色、实用性、价格等方面的因素来选择某一只钢笔。 买饭,则...
  • 层次分析法 AHP

    千次阅读 2019-04-22 15:49:37
    层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家 T. L. Saaty 教授于上世纪 70 年代初期提出...
  • 【AHP】层次分析法 | 过程解读 案例实践

    千次阅读 多人点赞 2020-08-20 19:56:21
    AHP,即层次分析法(Analytic Hierarchy Process,AHP)是一种系统化的、层次化的目标综合评价方法。在评价对象的待评价属性复杂多样,结构各异,难以量化的情况下AHP层次分析法也能发挥作用。 AHP 基本思想 [1] ...
  • 数学建模 01层次分析法(AHP)

    千次阅读 2019-07-18 09:16:21
    层次分析法 什么是层次分析法 层次分析法,属于运筹学理论。简称AHP,是指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。该方法是美国运筹学家匹茨堡大学教授...
  • 数学建模之层次分析法及其应用

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

    万次阅读 多人点赞 2016-08-22 23:59:05
    1.层次分析法与数学建模 在数学建模中,通常解决的问题是:“影响某一问题的几个因素的权重大小”、“产生某一问题的主要的因素分析”、“权重的大小分析”。当然在现实生活中的应用也是十分广泛而且一样的不知...
  • 数学建模学习笔记之评价问题层次分析法 我们评价的目标是什么? 我们为了达到目标有哪几种可选的方案? 评价的准则或者指标是什么?(我们根据什么来评价好坏) 层次分析法(AHP) 模型建立 ...
  • 数学建模——层次分析法AHP

    千次阅读 2015-02-04 11:22:25
    层次分析法(AnalyticHierarchy Process,简称AHP)是将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初,...
  • 数学建模--层次分析法

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

    千次阅读 2020-05-20 09:09:25
      层次分析法(AHP)是美国运筹学家Saaty于上世纪70年代初,应用网络系统理论和目标综合评价方法,提出的一种层次权重决策分析方法。层次分析法是一种解决目标的复杂问题的定性与定量相结合的决策分析方法。该...
  • 层次分析法建模

    千次阅读 2015-08-07 16:34:40
    层次分析法建模 1:他针对 的问题是:适合解决定性的问题, 适合为目标,准则而无结构特性的复杂问题作出决策。它主要是利用利用较少的定量信息使决策的思维过程数学化。 2:利用层次分析法建模最重要的得到成对...
  • 层次分析法(AHP)——matlab代码实现

    万次阅读 多人点赞 2019-04-17 10:02:45
    层次分析法(AHP)的主要思想是根据研究对象的性质将要求达到的目标分解为个组成因素,并按组成因素间的相互关系,将其层次化,组成一个层次结构模型,然后按分析,最终获得最高层的重要性权值。层次分析法把一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,954
精华内容 11,181
关键字:

多中间层层次分析法