
- 外文名
- Analytic Hierarchy Process
- 简 称
- AHP
- 中文名
- 层次分析
- 性 质
- 一种定性与定量相结合的科学方法
-
层次分析
2020-11-02 10:57:22第三十一讲 层次分析 易数云大数据 2017-05-19 这周我们一起来学习层次分析法。层次分析法属于多指标综合评价方法的一种。多指标综合评价方法包含若干个指标,分别说明被评价对象的不同方面,并用一个总指标来说明...第三十一讲 层次分析
易数云大数据 2017-05-19
这周我们一起来学习层次分析法。层次分析法属于多指标综合评价方法的一种。多指标综合评价方法包含若干个指标,分别说明被评价对象的不同方面,并用一个总指标来说明评价对象的总体水平。
而层次分析法(Analytic Hierarchy Process,简称AHP)是将评价相关元素分解为多层指标,并依此进行定性和定量分析的多指标评价方法。层次分析的大致步骤可以如下概括:
Step 1:建立层次结构模型
Step 2:构造判断矩阵
Step 3:层次单排序及其一致性检验
Step 4:层次总排序及其一致性检验下面我们在R语言中走一遍层次分析的大致流程:
现有13个指标数据,需根据这些指标对广东各市进行综合评价分析。我们用层次分析法来解决这个问题。
假设我们的层次结构如下:Z为总指标;A1,A2,A3为一级指标;B11-B33为二级指标。
对这些指标进行两两比较,按1-9分的评分规则,具体含义是:
根据实际情况或咨询专家,得到如下成对比较矩阵,即判断矩阵:
一级指标:
二级指标:
对各判断矩阵进行一致性检验,以确保所构造的判断矩阵没有自相矛盾。
当随机一致性比率CR小于0.1时,判断矩阵才满足一致性要求,所求得的权重wi才是可用的。
根据所得到的权重计算二级指标的综合得分,其计算公式如下:
其中,
Si表示第i个样本的综合得分;
Wj表示第j指标的权重;
Zij表示第i个样本第j个指标的无量纲化后的数据。
以上就是在R语言中做层次分析的大致流程,感兴趣的朋友可以动手试一试哦。
另外,如果mvstats这个包没有安装资源的话可以联系我哦了解更多数据分析与数据抓取:http://cloud.yisurvey.com:9081//html/37be8794-b79e-4511-9d0a-81f082bac606.html
-
层次分析法(AHP)详细步骤
2019-01-07 13:01:101. 算法简介 层次分析法(AHP)是美国运筹学家萨蒂于上世纪70年代初,为美国国防部研究“根据各个工业部门对国家福利的贡献大小而进行电力分配”课题时,应用网络系统理论和多目标综合评价方法,提出的一种层次权重...1. 算法简介
层次分析法(AHP)是美国运筹学家萨蒂于上世纪70年代初,为美国国防部研究“根据各个工业部门对国家福利的贡献大小而进行电力分配”课题时,应用网络系统理论和多目标综合评价方法,提出的一种层次权重决策分析方法。
层次分析法是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标之间能否实现的标准之间的相对重要程度,并合理地给出每个决策方案的每个标准的权数,利用权数求出各方案的优劣次序,比较有效地应用于那些难以用定量方法解决的课题。2. 算法基本原理
例子:
2.1. 解决问题的思路
层次分析法的基本思路是将所要分析的问题层次化;根据问题的性质和所要达成的总目标,将问题分解为不同的组成因素,并按照这些因素的关联影响及其隶属关系,将因素按不同层次凝聚组合,形成一个多层次分析结构模型;最后,对问题进行优劣比较并排列。
2.2. 层次分析法的步骤
1.建立层次结构模型
- 将决策的目标、考虑的因素(决策准则)和决策对象按照他们之间的相互关系分为最高层、中间层和最低层,绘出层次结构图。
- 最高层: 决策的目的、要解决的问题。
最低层: 决策时的备选方案。
中间层: 考虑的因素、决策的准则。 - 对相邻的两层,称高层为目标层,低层为因素层。
层次分析法所要解决的问题是关于最低层对最高层的相对权重的问题,按此相对权重可以对最低层中的各种方案、措施进行排序,从而在不同的方案中做出选择或形成选择方案的原则。
2.构造判断矩阵
层次分析法中构造判断矩阵的方法是一致矩阵法,即:不把所有因素放在一起比较,而是两两相互比较;对此时采用相对尺度,以尽可能减少性质不同因素相互比较的困难,以提高准确度。判断矩阵的标度方法
标度 含义 1 表示两个因素相比,具有同样重要性 3 表示两个因素相比,一个因素比另一个因素稍微重要 5 表示两个因素相比,一个因素比另一个因素明显重要 7 表示两个因素相比,一个因素比另一个因素强烈重要 9 表示两个因素相比,一个因素比另一个因素极端重要 2,4,6,8 上述两相邻判断的中值 倒数 因素于比较的判断,则因素与比较的判断 3.层次单排序及其一致性检验
对应于判断矩阵最大特征根的特征向量,经归一化(使向量中各元素之和为1)后记为。的元素为同一层次元素对于上一层因素某因素相对重要性的排序权值,这一过程称为层次单排序。定义一致性指标:
,有完全的一致性;
接近于0,有满意的一致性;
越大,不一致越严重。为了衡量的大小,引入随机一致性指标
随机一致性指标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 定义一致性比率:,一般认为一致性比率时,认为A的不一致程度在容许范围之内,有满意的一致性,通过一致性检验。可用其归一化特征向量作为权向量,否则要重新构造成对比较矩阵A,对加以调整。
示例:
4.层次总排序及其一致性检验
- 计算某一层次所有因素对于最高层(总目标)相对重要性的权值,称为层次总排序。
- 这一过程是从最高层次到最低层次依次进行的。
A层个因素对总目标Z的排序为。
B层个因素对上层A中因素为的层次单排序为。
B层的层次总排序(即B层第个因素对总目标的权值为:)为:
层次总排序的一致性比率为:,当时,认为层次总排序通过一致性检验。
例子:
3.算法总结
- 应用领域:经济计划个管理,能源政策和分配,人才选拔和评价,生产决策,交通运输,科研选题,产业结构,教育,医疗,环境,军事等。
- 处理问题类型:决策、评价、分析、预测等。
- 建立层次分析结构模型是关键一步,要有主要决策层参与。
- 构造成对比较矩阵是数量依据,应由经验丰富、判断力强的专家给出。
4.参考
-
数学建模之层次分析法(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 1R语言中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
-
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.,这样构造一个矩阵,再用之前的一致性矩阵的方法就可以求出一个权重,然后相对应因素(这里是工作环境)所拥有的权值就可以按这个权重比例分配给不同候选物或人。
其他因素同理
至此两个问题就都得到了解决
最终将每个候选物、人从不同因素获得的权值求和,就可以得到不同候选对于目标层的权值大小,继而可以根据值的大小,来选出优劣
对于第一部分的总结:
- 通过对层次分析法的基本了解,不难发现层次分析法对人们的思维过程进行了加工整理,提出了一套系统分析问题的方法,为科学管理和决策提供了较有说服力的依据。
- 但很明显的缺点是,整个分析过程似乎都是依赖于人的主观判断思维,一来不够客观,二来两两比较全部人为完成,还是非常耗费精力的,尤其是当候选方案比较多的时候。
文章的第二部分:
层次分析法的变形应用(也可能本来就是这样用的,只不过参考书上没这样说,外语
论文没细看)解决最优教练选择问题目标:选最优教练
准则:
- 职业生涯所带队伍的胜率
- 职业生涯所带队伍的胜场
- 从教时长(年)
- 职业生涯所带队伍获奖状况(化成分数)
候选: 众多教练
准则层比较矩阵获得
- 准则层的比较矩阵好构造 ,作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, 带 R的层次分析法( 层次分析法).zip
2019-09-17 10:32:54ahp, 带 R的层次分析法( 层次分析法) 徽章主机 插件开发 关于这个软件包用 AHP ( 层次分析法) 建模复杂决策问题的R 包。这里软件包的基本工作流是:在层次分析文件中指定你的层次分析问题加载层次分析文件,使用 ... -
层次分析法matlab
2020-10-17 10:27:10详细的层次分析法matlab代码,提供给大家学习。详细的层次分析法matlab代码详细的层次分析法matlab代码 -
AHP层次分析法软件
2020-11-22 02:30:13层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模 -
层次分析法
2019-04-29 17:34:50层次分析法代码,依托它可以分析每个参数的权重,但是需要通过一致性检验 -
层次分析法分析及实例教程x_我们三个一组 层次分析法
2020-02-21 08:29:27层次分析法; 面临各种各样的方案要进行比较判断评价最后 作出决策这个过程主观因素占有相当的比重给用数学方法 解决问题带来不便T.L.saaty等人20世纪在七十年代提出了 一种能有效处理这类问题的实用方法 层次分析法... -
matlab 层次分析
2018-07-29 15:34:14matlab 层次分析法 AHP在matlab中的实现,不包括判断矩阵生成 -
层次分析法计算步骤
2018-12-25 17:21:02层次分析法详细教程层次分析法详细教程层次分析法详细教程层次分析法详细教程 -
AHP层次分析法Excel
2018-04-19 20:04:12层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模层次分析法 数学建模 -
层次分析法软件
2018-09-07 14:33:00数学建模层次分析法简单工具,可用来数学建模,进行快速层次分析 -
层次分析法视频
2018-10-05 17:10:01本视频介绍了层次分析法的应用,有关层次分析法在数学建模中的实现 -
直觉模糊层次分析法
2020-06-16 23:17:13为了解决传统模糊层次分析法难以处理的直觉模糊环境下的综合评判问题,利用直觉模糊数和模糊层次分析法建立了一种直觉模糊层次分析法。实验分析表明了该方法的有效性。 -
层次分析法 excel模板_模糊层次分析法
2020-11-12 18:56:09模糊层次分析法简单来说就是层次分析法和模糊评价法的结合,层次分析法是一种计算权重的方法,而模糊综合评价法是一种对问题进行综合性评价的方法。进行模糊综合评价时,可使用层次分析法对各个因素进行权重赋值。...