层次分析法程序代码
层次分析法概述

一、层次分析法概述层次分析法是美国运筹学家Saaty教授于二十世纪80年代提出的一种实用的多方案或多目标的决策方法。
其主要特征是,它合理地将定性与定量的决策结合起来,按照思维、心理的规律把决策过程层次化、数量化。
问题该方法自1982年被介绍到我国以来,以其定性与定量相结合地处理各种决策因素的特点,以及其系统灵活简洁的优点,迅速地在我国社会经济各个领域内,如能源系统分析、城市规划、经济管理、科研评价等,得到了广泛的重视和应用。
二、层次分析法的基本思路:------先分解后综合的系统思想整理和综合人们的主观判断,使定性分析与定量分析有机结合,实现定量化决策。
首先将所要分析的问题层次化,根据问题的性质和要达到的总目标,将问题分解成不同的组成因素,按照因素间的相互关系及隶属关系,将因素按不同层次聚集组合,形成一个多层分析结构模型,最终归结为最低层(方案、措施、指标等)相对于最高层(总目标)相对重要程度的权值或相对优劣次序的问题。
三、层次分析法的用途举例例如,某人准备选购一台电冰箱,他对市场上的6种不同类型的电冰箱进行了解后,在决定买那一款式是,往往不是直接进行比较,因为存在许多不可比的因素,而是选取一些中间指标进行考察。
例如电冰箱的容量、制冷级别、价格、型式、耗电量、外界信誉、售后服务等。
然后再考虑各种型号冰箱在上述各中间标准下的优劣排序。
借助这种排序,最终作出选购决策。
在决策时,由于6种电冰箱对于每个中间标准的优劣排序一般是不一致的,因此,决策者首先要对这7个标准的重要度作一个估计,给出一种排序,然后把6种冰箱分别对每一个标准的排序权重找出来,最后把这些信息数据综合,得到针对总目标即购买电冰箱的排序权重。
有了这个权重向量,决策就很容易了。
四、层次分析法应用的程序运用AHP法进行决策时,需要经历以下4个步骤:1、建立系统的递阶层次结构;2、构造两两比较判断矩阵;(正互反矩阵)3、针对某一个标准,计算各备选元素的权重;4、计算当前一层元素关于总目标的排序权重。
java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码)

java求矩阵的特征值和特征向量(AHP层次分析法计算权重)(附源代码) 这几天做一个项目,需要用到求矩阵的特征值特征向量。
我c++学的不好,所以就去网站找了很多java的源代码,来实现这个功能。
很多都不完善,甚至是不准确。
所以自己参考写了一个。
这个用于我一个朋友的毕业设计。
结果肯定正确。
话不多说,贴源代码!import java.math.BigDecimal;import java.util.Arrays;/*** AHP层次分析法计算权重** @since jdk1.6* @author 刘兴* @version 1.0* @date 2012.05.25**/public class AHPComputeWeight {/*** @param args*/public static void main(String[] args) {/** a为N*N矩阵*///double[][] a= {{1,1,1},{1,1,1},{1,1,1}};double[][] a ={{1,3,5},{2,3,1,},{4,7,3}};//double[][] a = {{1 ,1/5, 1/3},{5, 1, 1},{3,1,1}};//double[][] a ={{1, 1/2, 2, 1},{2, 1, 3, 4},{1/2 ,1/3, 1, 1},{1 ,1/4, 1, 1}};//double[][] a = {{1 ,0.5, 0.5},{2 ,1, 1},{2 ,1, 1}};//double[][] a = {{1, 1/4, 1/3, 1},{4, 1 ,3 ,5},{3, 1/3, 1, 4},{1, 1/5, 1/4, 1}};// double[][] a= {{1,2,3,5},{0.5,1,2,3},{0.33,0.5,1,2},{0.2,0.33,0.5,1}};int N = a[0].length;double[] weight = new double[N];AHPComputeWeight instance = AHPComputeWeight.getInstance();instance.weight(a, weight, N);System.out.println(Arrays.toString(weight));}// 单例private static final AHPComputeWeight acw = new AHPComputeWeight();// 平均随机一致性指针private double[] RI = { 0.00, 0.00, 0.58, 0.90, 1.12, 1.21, 1.32, 1.41,1.45, 1.49 };// 随机一致性比率private double CR = 0.0;// 最大特征值private double lamta = 0.0;/*** 私有构造*/private AHPComputeWeight() {}/*** 返回单例** @return*/public static AHPComputeWeight getInstance() { return acw;}/*** 计算权重** @param a* @param weight* @param N*/public void weight(double[][] a, double[] weight, int N) { // 初始向量Wkdouble[] w0 = new double[N];for (int i = 0; i < N; i++) {w0[i] = 1.0 / N;}// 一般向量W(k+1)double[] w1 = new double[N];// W(k+1)的归一化向量double[] w2 = new double[N];double sum = 1.0;double d = 1.0;// 误差double delt = 0.00001;while (d > delt) {d = 0.0;sum = 0;// 获取向量int index = 0;for (int j = 0; j < N; j++) {double t = 0.0;for (int l = 0; l < N; l++)t += a[j][l] * w0[l];// w1[j] = a[j][0] * w0[0] + a[j][1] * w0[1] + a[j][2] * w0[2];w1[j] = t;sum += w1[j];}// 向量归一化for (int k = 0; k < N; k++) {w2[k] = w1[k] / sum;// 最大差值d = Math.max(Math.abs(w2[k] - w0[k]), d);// 用于下次迭代使用w0[k] = w2[k];}}// 计算矩阵最大特征值lamta,CI,RIlamta = 0.0;for (int k = 0; k < N; k++) {lamta += w1[k] / (N * w0[k]);}double CI = (lamta - N) / (N - 1);if (RI[N - 1] != 0) {CR = CI / RI[N - 1];}// 四舍五入处理lamta = round(lamta, 3);CI = Math.abs(round(CI, 3));CR = Math.abs(round(CR, 3));for (int i = 0; i < N; i++) {w0[i] = round(w0[i], 4);w1[i] = round(w1[i], 4);w2[i] = round(w2[i], 4);}// 控制台打印输出System.out.println("lamta=" + lamta);System.out.println("CI=" + CI);System.out.println("CR=" + CR);// 控制台打印权重System.out.println("w0[]=");for (int i = 0; i < N; i++) {System.out.print(w0[i] + " ");}System.out.println("");System.out.println("w1[]=");for (int i = 0; i < N; i++) {System.out.print(w1[i] + " ");}System.out.println("");System.out.println("w2[]=");for (int i = 0; i < N; i++) {weight[i] = w2[i];System.out.print(w2[i] + " ");}System.out.println("");}/*** 四舍五入** @param v* @param scale* @return*/public double round(double v, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b = new BigDecimal(Double.toString(v));BigDecimal one = new BigDecimal("1");return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleV alue();}/*** 返回随机一致性比率** @return*/public double getCR() {return CR;}}。
层次分析法判断矩阵求权值以及一致性检验程序

function [w,CR]=mycom(A,m,RI)[x,lumda]=eig(A);r=abs(sum(lumda));n=find(r==max(r));max_lumda_A=lumda(n,n);max_x_A=x(:,n);w=A/sum(A);CR=(max_lumda_A-m)/(m-1)/RI;end本matlab程序用于层次分析法中计算判断矩阵给出的权值已经进行一致性检验。
其中A为判断矩阵,不同的标度和评定A将不同。
m为A的维数RI为判断矩阵的平均随机一致性指标:根据m的不同值不同。
当CR<0.1时符合一致性检验,判断矩阵构造合理。
下面是层次分析法的简介,以及判断矩阵构造方法。
一.层次分析法的含义层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(T.L.Saaty)正式提出。
它是一种定性和定量相结合的、系统化、层次化的分析方法。
由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。
它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。
二.层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一样的。
(1)层次分析法的原理层次分析法是将决策问题按总目标、各层子目标、评价准则直至具体的备投方案的顺序分解为不同的层次结构,然后得用求解判断矩阵特征向量的办法,求得每一层次的各元素对上一层次某元素的优先权重,最后再加权和的方法递阶归并各备择方案对总目标的最终权重,此最终权重最大者即为最优方案。
这里所谓“优先权重”是一种相对的量度,它表明各备择方案在某一特点的评价准则或子目标,标下优越程度的相对量度,以及各子目标对上一层目标而言重要程度的相对量度。
层次分析法比较适合于具有分层交错评价指标的目标系统,而且目标值又难于定量描述的决策问题。
层次分析法的

层次分析法的
层次分析法(AHP)是一种科学方法,它利用人的主观思维来做一些复杂的决策问题。
它
将一个复杂的主题分解成若干子问题,每个子问题都会有一个回答,最后通过计算机程序计算出最优的解决方案。
它的基本步骤是分析、估算、比较、定分。
首先,在分析阶段,研究人员要分析出影响决策的重要因素,并将它们有序地列出来。
层
次分析法有两个重要层次:目标层次和属性层次。
研究者会列出所有可能的目标和属性,
并且试图建立各个层次之间的关系。
接着,在估算阶段,研究者需要使用解释性分析方法来估算每个属性层次上层与下层之间
的重要程度。
比如,研究者可以询问不同的专家对属性层次的重要程度,或使用实验数据
来确定。
然后,在比较阶段,研究者需要比较两个不同属性的重要程度。
具体的方法是通过专家给
出的“比较矩阵”来计算,这个矩阵会表明两个属性层次的相对重要性。
最后,在定分阶段,研究者需要对每个属性给出一个最终分数,这个分数反映出所有调查
者对每个属性重要程度的结论。
然后研究者就可以获得最优的解决方案,也就是最重要的
属性及其相应的分数。
层次分析法可以严格控制复杂的决策问题,它利用专家的经验和主观判断和定量分析来权衡决策属性之间的关系,最大限度地减少决策不确定性。
它在决策分析领域使用十分广泛,十分有效果。
层次分析法判断矩阵求权值以及一致性检验程序

function [w,CR]=mycom(A,m,RI)[x,lumda]=eig(A);r=abs(sum(lumda));n=find(r==max(r));max_lumda_A=lumda(n,n);max_x_A=x(:,n);w=A/sum(A);CR=(max_lumda_A-m)/(m-1)/RI;end本matlab程序用于层次分析法中计算判断矩阵给出的权值已经进行一致性检验。
其中A为判断矩阵,不同的标度和评定A将不同。
m为A的维数RI为判断矩阵的平均随机一致性指标:根据m的不同值不同。
当CR<0.1时符合一致性检验,判断矩阵构造合理。
下面是层次分析法的简介,以及判断矩阵构造方法。
一.层次分析法的含义层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(T.L.Saaty)正式提出。
它是一种定性和定量相结合的、系统化、层次化的分析方法。
由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。
它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。
二.层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一样的。
(1)层次分析法的原理层次分析法是将决策问题按总目标、各层子目标、评价准则直至具体的备投方案的顺序分解为不同的层次结构,然后得用求解判断矩阵特征向量的办法,求得每一层次的各元素对上一层次某元素的优先权重,最后再加权和的方法递阶归并各备择方案对总目标的最终权重,此最终权重最大者即为最优方案。
这里所谓“优先权重”是一种相对的量度,它表明各备择方案在某一特点的评价准则或子目标,标下优越程度的相对量度,以及各子目标对上一层目标而言重要程度的相对量度。
层次分析法比较适合于具有分层交错评价指标的目标系统,而且目标值又难于定量描述的决策问题。
使用Matlab程序实现层次分析法(AHP)的简捷算法

使用Matlab程序实现层次分析法(AHP)的简捷算法作者:于晶来源:《科技风》2016年第16期摘要:层次分析法简便易懂,可操作性和实用性强,但是构造判断矩阵往往不容易,计算判断矩阵的特征值特别繁琐且易出错,得到的一致性检验不易调整,这些都给使用层次分析法带来困难,以往使用办公软件电子表格(Excel)的方法计算单层次排序和总层次排序,这种方法使得计算和一致性检验变得容易,文本使用Matlab程序使得计算变得更容易,也使得层次分析法在多个领域得到推广和应用。
关键词:层次分析法;Excel;matlab1 层次分析法(AHP法)的原理和解决思路层次分析法是对定性问题进行定量分析的一种简便、灵活而又实用的多准则决策方法。
它的原理是模拟人的决策过程,具有思路清晰、方法简便、适用面广、系统性强等特点。
是解决多目标、多准则、多层次复杂问题决策或者大型工程风险分析的有力工具。
层次分析法解决问题的思路就是用下一次因素的相对排序求得上一次因素的相对排序。
按照因素之间的相互影响和隶属关系将各层次因素聚类组合,形成一个递进有序的层次结构模型。
2 层次分析法的应用难点2.1合适的判断矩阵构造不易模型确定后,按照模型层次结构和模型的各因素的相对重要性,综合专家群体咨询意见,采用标度法[ 1 ],从数字1/9一9中选取恰当值,构造各层的判断矩阵,并使之尽量符合一致性检验,这一步成为问题的关键。
但实际上系统越复杂,判定矩阵的阶数就会越高,计算就会越困难。
2.2计算量大,步骤繁琐层次分析法首先要求的就是判断矩阵的最大特征值?姿max,及其正规化的特征向量w,向量w的分量wi是相应因素的单层次权值,这部分计算理论上基于线性代数知识,不用计算机也可以将其计算出来。
但实际上,当矩阵的阶数高于4阶时,人工计算就变得相当困难且易出错,如使用计算机计算,就容易得多,常用的方法有Basic语言,电子表格Excel等方法。
但计算量都有待改进。
用电子表格(Excel)实现层次分析法(AHP)的简捷计算

用电子表格(Excel)实现层次分析法(AHP)的简捷计算先锋(华南农业大学林学院,广东广州510640)摘要:传统的层次分析法算法具有构造判断矩阵不容易、计算繁多重复且易出错、一致性调整比较麻烦等缺点。
层次分析法Excel 算法利用常用的办公软件电子表格(Excel)的运算功能,设置简明易懂的计算表格和步骤,使得判断矩阵的构造、层次单排序和层次总排序的计算以及一致性检验和检验之后对判断矩阵的调整变得十分简单。
从而可以为层次分析法的学习、应用、推广和改进探讨提供方便。
关键词:层次分析法Excel1 层次分析法(AHP)的应用难点层次分析法(Analytical Hierarchy Process,简称AHP)是美国匹兹堡大学教授A.L.Saaty ,于20 世纪70 年代提出的一种系统分析方法,它综合了定性与定量分析,模拟人的决策思维过程,具有思路清晰、方法简便、适用面广、系统性强等特点,是分析多目标、多因素、多准则的复杂大系统的有力工具。
层次分析法的基本原理简单说就是用下一层次因素的相对排序来求得上一层次因素的相对排序。
应用层次分析法解决问题的思路是:首先把要解决的问题分出系列层次,即根据问题的性质和要达到的目标将问题分解为不同的组成因素,按照因素之间的相互影响和隶属关系将各层次各因素聚类组合,形成一个递阶的有序的层次结构模型;然后对模型中每一层次每一因素的相对重要性,依据人们对客观现实的判断给予定量表示(也可以先进行定性判断,再予赋值量化),再利用数学方法确定每一层次全部因素相对重要性次序的权值;最后通过综合计算各层因素相对重要性的权值,得到最低层(方案层)相对于较高层(分目标或准则层)和最高层(总目标)的相对重要性次序的组合权值,以此进行进行方案排序,作为评价和选择方案的依据。
层次分析法在多个领域得到广泛应用,但在应用中也是确实存在着不少难点。
1.1 构造一个合适的判断矩阵不容易建立层次结构模型和构造判断矩阵是层次分析法的主要基本工作,构造判断矩阵是关键之关键。
层次分析法及matlab程序

层次分析法建模层次分析法(AHP-Analytic Hierachy process)---- 多目标决策方法70 年代由美国运筹学家T·L·Satty提出的,是一种定性与定量分析相结合的多目标决策分析方法论.吸收利用行为科学的特点,是将决策者的经验判断给予量化,对目标(因素)结构复杂而且缺乏必要的数据情况下,採用此方法较为实用,是一种系统科学中,常用的一种系统分析方法,因而成为系统分析的数学工具之一。
传统的常用的研究自然科学和社会科学的方法有:机理分析方法:利用经典的数学工具分析观察的因果关系;统计分析方法:利用大量观测数据寻求统计规律,用随机数学方法描述(自然现象、社会现象)现象的规律。
基本内容:(1)多目标决策问题举例AHP建模方法(2)AHP建模方法基本步骤(3)AHP建模方法基本算法(3)AHP建模方法理论算法应用的若干问题。
参考书:1、姜启源,数学模型(第二版,第9章;第三版,第8章),高等教育出版社2、程理民等, 运筹学模型与方法教程,(第10章),清华大学出版社3、《运筹学》编写组,运筹学(修订版),第11章,第7节,清华大学出版社一、问题举例:A.大学毕业生就业选择问题获得大学毕业学位的毕业生,“双向选择”时,用人单位与毕业生都有各自的选择标准和要求。
就毕业生来说选择单位的标准和要求是多方面的,例如:①能发挥自己的才干为国家作出较好贡献(即工作岗位适合发挥专长);②工作收入较好(待遇好);③生活环境好(大城市、气候等工作条件等);④单位名声好(声誉—Reputation);⑤工作环境好(人际关系和谐等)⑥发展晋升(promote,promotion)机会多(如新单位或单位发展有后劲)等。
问题:现在有多个用人单位可供他选择,因此,他面临多种选择和决策,问题是他将如何作出决策和选择?——或者说他将用什么方法将可供选择的工作单位排序?工作选择贡献收入发展声誉工作环境生活环境B.假期旅游地点选择暑假有3个旅游胜地可供选择.例如:1P :苏州杭州,2P 北戴河,3P 桂林,到底到哪个地方去旅游最好?要作出决策和选择。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
层次分析法
1)建立层次结构模型:
(2)构造判断矩阵
判断矩阵()
ij A a =应为正互反矩阵,而且ij a 的判断如下(1~9尺度法):
(3)单层排序及一致性检验
1、单层排序
求解判断矩阵A 的最大特征值max λ,再由最大特征值求出对应的特征向量
ω()max A ωλω=,并将ω标准化,即为同一层相对于上一层某一因素的权重,根据此
权重的大小,便可确定该层因素的排序。
2、一致性检验
取一致性指标max 1
n
CI n λ-=
-,(n 为A 的阶数)
RI 令CR RI
=
,若0.1CR <,则认为A 具有一致性。
否则,需要对A 进行调整,直到具有满意的一致性为止。
(4)层次总排序及一致性检验
假定准则层12,,,n C C C 排序完成,其权重分别为12,,,n a a a ,方案层P 包含m 个方案:12,,,m P P P 。
其相对于上一层的()1,2,,j C j n = 对方案层P 中的m 个方案进行单层排序,其排序权重记为12,,,j j mj b b b ()1,2,,j n = ,则方案层P 中第i 个方案Pi 的总
排序权重为
1
n
j ij
j a b
=∑,见下表:
从而确定层的排序。
例:
纯文本文件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
matlab程序:
>> 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。