目 录
中英文摘要 ........................................................................................................................... 2 1. 层次分析法 ······················································································· 3 1.1 概述 .......................................................................................................................... 3 1.2 AHP的基本原理和步骤[6] ...................................................................................... 3
1.2.1 递阶层次结构原理 ······································································· 3 1.2.2 标度原理 ··················································································· 4 1.2.3 排序原理 ··················································································· 4 1.3 AHP的层次总排序及其一致性检验 ....................................................................... 6 1.3.1 层次总排序 ·············································································· 6 1.3.2 AHP的一致性检验 ··································································· 7 2.MATLAB的基本内容 ·········································································· 7 MATLAB矩阵 ................................................................................................................ 8 MATLAB矩阵的建立 ········································································· 8 矩阵的特征值与特征向量 ···································································· 8 2.2 MATLAB的M文件 ............................................................................................... 9 3.基于MATLAB的AHP实现 ································································· 10 3.1 AHP的MATLAB的计算流程框图 .................................................................... 10 3.2 平均随机一致性指标的MATLAB实现 ............................................................. 10 3.3 AHP各环节的 MATLAB实现 ........................................................................... 12 3.3.1 特征向量及其归一化的MATLAB实现 ············································ 12 3.3.2 一致性检验及单排序的MATLAB实现 ············································ 13 3.3.3 一致性检验及总排序的MATLAB实现 ············································ 14 选择最优排序 ·················································································· 15 4.基于MATLAB的AHP应用 ································································· 16 4.1 挑选合适工作问题 .............................................................................................. 16 5.结束语 ····························································································· 26 参考文献 ······························································································· 27 致谢 ····································································································· 28
学习文档 仅供参考
基于MATLAB的AHP实现
摘 要:在实际统计分析工作中,常会遇到多指标的综合评价和多目标决策的问题。许多人利
用层次分析法将复杂的问题分解为假设干层次和假设干因素,在各因素之间进行简单的比较和计算,就可以得出不同方案的权重,为最正确方案的选择提供依据且使问题简单化。但是,受计算条件的,不能及时给出结果,从而影响现场决策。MATLAB是当今最优秀的科技应用软件之一,利用MATLAB对层次分析法的判断、分析和计算过程进行处理后,为决策者提供方便友好的对话界面。只要决策者在MATLAB软件中输入自己的层次结构方案和两两比照的判断矩阵后能迅速得出相应的结果,为解决实际问题提供一个快捷的方法。从而提高人们的决策效率,同时也为科技工作者使用层次分析法提供一种新思路。
关键词:AHP ;层次分析法 ;MATLAB应用
MATLAB-based implementation of the AHP
Abstract: In practice, statistical analysis work, we often encounter multi-index comprehensive evaluation and multi-objective decision-making. Many people use AHP to the complex problem into a number of levels and a number of factors, among various factors, a simple comparison and calculation can be drawn on the weight of different options, in order to provide a basis for selection of the best programs make the problem simple of. However, due to the calculation conditions, the results can not be given in a timely manner, thus affecting the on-site decision-making. MATLAB is the most outstanding application of science and technology, using MATLAB to determine the right level of analysis, analysis and computation processing, in order to provide decision makers with convenient user-friendly dialog interface. When the decision-makers in MATLAB software, enter their own hierarchy of the program and judgment matrix to determine quickly after the corresponding results obtained, in order to solve practical problems to provide a quick method. Thereby enhancing the efficiency of people's decision-making, but also for the scientific and technological workers to use AHP to provide a new idea. Keywords: AHP;MATLAB Applications
学习文档 仅供参考
1. 层次分析法
1.1 概述
在市场竞争日益激烈的今天,企业或个人经常面临复杂的决策问题,不仅需要快速作出决策,而且需要解决决策问题中多种不确定性所带来的困难。决策分析问题中的重要组成部分是多属性决策,虽然多属性决策问题的背景不同,但它们通常具有以下共同特点:[1]
(1)属性之间通常是相互冲突和不可公度的(属性量纲不同); (2)在属性集中,可能同时存在定性属性和定量属性; (3)属性经常构成一个层次结构;
(4)决策信息有时是不完全的,决策者只能提供决策参数的不完全信息; 决策者的判断可能是不确定的,即没有100%的把握做出主观判断。
美国著名运筹学家教授于70年代中期创立了一种实用的多准则决策法——层次分析法〔The Analytic HierarchyProcess,简称AHP〕[2]。是一种实用的多准则决策方法,是处理那些完全用定量方法来解决复杂问题的有效手段,也是定量分析和定性分析相结合的决策方法。更是在多目标、多准则的条件下,对多种方案进行选择与判断的一种简洁而有力的工具。
众多的工作说明,AHP的应用范围十分广泛,其应用已涉及到能源和资源规划,企业管理与生产决策,管理信息系统[3],经济分析和计划,政治和冲突分析[4],行为和社会学[5],科技发展和评价,军事指挥,农业气候区划,大气和水环境质量评价,湖泊富营养化评价等领域,可以预料,随着对AHP理论的深入研究,它的应用范围必将进一步拓广。正因为如此,人们自然地要求了解和掌握AHP的应用技巧。
本文旨在基于层次分析法的基础上,在MATLAB中编制对层次分析法的判断、分析和计算过程的程序,决策者只要输入层次结构方案和判断矩阵,就能迅速得出相应的结果,为决策者解决问题提供一种快速的、具有较强实用价值的方法。
1.2 AHP的基本原理和步骤[6]
AHP的内容和决策方法是由它的基本原理确定的。AHP的原理包括递阶层次结构原理、标度原理、排序原理。[7] 1 递阶层次结构原理
一个复杂的问题可分解为它的目标、约束准则和方案等因素,按照不同属性把这些因素分组形成互不相交的层次,上一层的因素对相邻下一层次的全部或部分因素起着支配作用,形成按层次自上而下的逐层支配关系,而每一层都要通过两两比较,导出它们包含的因素的相对重要性排序权值,具有这种性质的层次称为递阶层次结构。这种递阶层次的分解与综合的研究思想在自然科学和社会科学中已被广泛采用。人们的
学习文档 仅供参考
决策思维中的分解与综合,人们的逻辑判断也常常具有递阶层次原则的特点。采用的递阶层次结构会使面临的问题在一定程度上反映了系统的有序性,它提供了一种深入认识和处理系统的方式,把看来杂乱无章的各种复杂的决策因素统一起来,按系统的功能与行为进行深入研究。因此,以递阶层次思想作为决策思维的一种方式,是AHP的核心。 标度原理
不同标度可能产生不同的方案排序,从而直接或间接地影响着人们的决策。因此,对各种标度进行分析研究与比较评价,无论是对AHP的理论发展和实际应用都是有意义的。文献[8]采用判断矩阵的一致性指标评价标度选择的合理性,以具有最小一致性比例指标的标度方案作为最终评价结果。文献[9]提出了评价标度的两个准则,即实用性和客观性,但没有系统、全面地研究标度评价的指标体系。此外,标度评价研究缺少在实例中进行验证,均没有充足的说服力。
AHP规定了测度方式是通过两两比较判断给出的比较的依据为标度,这种标度用的是1~9整数及其倒数来表示,叫比例标度。其中的九级标度法及其含义见下表[10]。
表 1-1 Saaty九级标度法及其含义 标度 定义〔比较因素i与j〕 1 因素i与j同样重要 3 因素i与j稍微重要 5 因素i与j较强重要 7 因素i与j强烈重要 9 因素i与j绝对重要 2, 4, 6, 8 上述两相邻判断的中间值 1 ~ 9的倒数 表示因素i与因素j比较的标度值等于因素j与因素i比较的标度值的倒数 排序原理
AH P单一准则下的排序问题实质上是由一组元素两两比较得到重要性测度组成的判断矩阵A(aij)nn ,它具有正值、互反性和基本一致性。并且和排序测度W之间具有An关系。
在一致性情况下,比较测度A与排序测度W之间可以转化为对方程组。
(AnI)0
求解未知的ω,从矩阵代数Perron-Frobineus理论知,正矩阵的实特征根所对应的归一化特征向量是唯一的,而最大的特征根λmax,可通过求解Amax得到。 因此,把上式看成比较测度A与导出测度W的关系,从而单一准则下的排序问题化为对上式的求解。这种特征根法是解决从比较测度求出排序权值的一种方法。
学习文档 仅供参考
通过层次分析法的基本原理,我们知运用AHP解决问题,大体可以把步骤总结如下:[11]
1、定义问题,确定要完成的目标。
2、从最高层(目标),通过中间层(准则)到最低层(方案)构成一个层次结构模型。如图1所示:
图1 层次结构模型图
3、构造一系列下层各因素对上一层准则的两两比较判断矩阵。如,针对图中准则层1,作方案1与方案2,方案1与方案3,……,方案1与方案n,方案2与方案3,……,方案n-1与方案n等比较,从而得到判断矩阵B,其形式如表1-2所示。
表 1-2 判断矩阵B C1 C2 C1 b11 b21 C2 b12 b22 … … … Cn b1n b2n … … … Cn bn1 bn2 … bnn 4、在第3步里建立判断矩阵所需要的n(n1)2个判断。
5、完成所有的两两比较,输入数据,计算最大正特征值,计算一致性指标CR。 6、对各层次完成第3、4、5步的计算。 7、层次合成计算。
8、如整个层次综合一致性不通过,要对某些判断作适当的改善,例如修改作成比照较判断时所提的问题。如一定要修改问题的结构,则就要回到第2步,不过只要对层次结构中有问题的部分作相应修改即可。
学习文档 仅供参考
… 1.3 AHP的层次总排序及其一致性检验
层次总排序
根据判断矩阵计算本层次指标与上一层次指标之间的重要性程度的相对值〔即权重值〕的过程,称为层次单排序。采用的方法为求判断矩阵最大特征值及对应的特征向量并将其归一化。
层次总排序是计算同层次所有元素对最高层次的相对重要性权值。也就是利用上一层次单排序结果计算更高层的排队顺序。例如,在已经得到方案层对准则层、准则层对目标层的单排序后,把寻求方案因素对目标层的优劣顺序称为方案总排序。
假设最高层A包含m个因素A1,A2,…,Am,对目标层总的排序权值为a1,…,a2,
am;下一层包含n个因素Fl,F2,……,Fn,它们对因素A1,A2,…,Am。的层次单排序权值为
W11W12W21W22W1mW2m
Wn1Wn2Wnm计算中取Fk与Aj无关则Wij=0,相关则Wij=l,形成相关矩阵(具体形式见表1-3)。计算得到F层的总排序权值(见表1-3)。最后得到F层总的排序的随机一致性比率为:
CRajCIj/ajRIj
j1j1mm当CR<0.1时,认为层次总排序结果具有满意的一致性,否则还需重新调整判断矩阵的元素值。
表1-3 F层总排序表及相关矩阵表 A1 W11 A2 W12 Am W1m F层总排序权值 mF1 aWjj1mj1 F2 W21 W22 W2m aWjj1j2 Wn1 Wn2 Wnm Fn aWjj1mjn 学习文档 仅供参考
本文第三章将介绍运用MATLAB求矩阵最大特征值、相应特征向量及层次总排序权值的复杂运算。 AHP的一致性检验
AHP是对人们的主观判断加以形式化地表达和处理,逐步剔除主观性,从而尽可能地转化成客观性。其正确与成功,取决于客观成分能否到达足够合理的地步。由于客观事物的复杂性及决策者认识的主观性,实际问题的两两判断矩阵不可能做到严格一致性。一致性检验按照以下三个步骤进行[12]:
1〕计算一致性指标CIAnn1;
2〕找出相应的平均随机一致性指标RI ;
CI3〕计算一致性比例CR;
RI虽然CI值能反映出判断矩阵A的非一致性的严重程度,但未能指明该非一致性是否可以接受.因而在具体分析时,我们引入了另一个度量的标准,即所谓随机一致性指标,下表是龚木森、许树柏〔1986〕得出的1~15阶的平均随机一致性指标RI的取值n RI n [13]
。 1 0 9 2 0 表1-4 平均随机一致性指标 3 4 5 6 2 0. 6 10 11 12 13 7 6 14 8 15 RI 2.MATLAB的基本内容
MATLAB〔MATrix LABoratory,矩阵实验室的缩写〕是一种特殊用途的电脑程序优化执行工程和科学计算。它开始为旨在执行矩阵数学程式的生活,但多年来它已发展成为一个灵活的计算系统基本上能够解决任何技术问题。MATLAB具有编程语言的基本特征,使用MATLAB也可以使用像BASIC、FORTRAN、C等传统编程语言一样,进行程序设计,而且简单易学、编程效率高。
正因为MATLAB的强大的功能,使得它在许多领域得到广泛应用。在科研与工程应用领域,MATLAB已被广泛地用于科学研究和解决各种具体的实际问题。许多科技工作者选用MATLAB做为计算工具,防止了繁琐的底层编程,从而可以把主要精力和时间花在科学研究和解决实际问题是上,提高了工作效率。
学习文档 仅供参考
MATLAB矩阵
矩阵是MATLAB的基本处理对象,因此根据本文所需,简单介绍所涉及MATLAB矩阵内容。
MATLAB矩阵的建立
1、直接输入法
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。例如: A=[1 2 3;4 5 6;7 8 9] A =
1 2 3 4 5 6 7 8 9
也可以用回车键代替分号,按以下方式输入: A=[1 2 3 4 5 6 7 8 9 ]
2、利用M文件建立矩阵
比较大且复杂的矩阵,可以为它专门建立一个M文件,如同下例。 利用M文件建立矩阵。
启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵: MYMAT=[ 111 ,112,113,114,115,116,117,118,119; 211,212,213,214,215,216,217,218,219];
把输入的内容以纯文本方式存盘〔设文件名为mymatrix.m〕。
在MATLAB命令窗口中输入mymatrix,即运行该M文件,就会自动建立一个名为MYMAT的矩阵,可供以后使用。 2.1.2 矩阵的特征值与特征向量
特征值和特征向量在科学研究和工程计算中都有非常广泛地应用。在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种[14]:
E = eig( A ) :求矩阵A的全部特征值,构成向量E。
[V,D]=eig(A):求矩阵A的全部特征值,构成对角矩阵D,并求A得特征向量构
成V的列向量。
[V,D]=eig(A,’nobablance’):与第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
例如:
A=[1,1,0.5;1,1,0.25;0.5,0.25,2]; [V,D]=eig(A)
学习文档 仅供参考
V = D =
-0.0166 0 0 0 1.4801 0
求得的3个特征值是、和,各特征值对应的特征向量为V的各列构成的向量。
MATLAB的M文件
用MATLAB语言编写的程序称为M文件。M文件是由假设干MATLAB命令组成在一起构成的,它可以完成某些操作,也可以实现某种算法。
M文件可以根据调用方式的不同分为两类:命令文件〔Script File〕和函数文件〔Function File〕。它们的扩展名均为.m。
函数文件由function语句引导,其基本结构为: function 输出形参表=函数名〔输入形参表〕 注释说明部分 函数体语句
我们通过举例说明如下:
例2-2 分别建立命令文件和函数文件,将求矩阵的一致性指标CI:
CI=(λmax-n)/(n-1)
程序1 建立命令文件并以文件名CI.m存盘: max=input('please input max:'); n=input('please input n:'); CI=(max-n)/(n-1)
然后在MATLAB的命令窗口中输入CI即可。 程序 2 建立函数文件CI.m。 function c=CI(max,n) c=(max-n)/(n-1)
然后在MATLAB的命令窗口调用该函数文件。 max=input('please input max:'); n=input('please input n:'); c=CI(max,n)
学习文档 仅供参考
3.基于MATLAB的AHP实现
3.1 AHP的MATLAB的计算流程框图
根据层次分析法的一般步骤我们得到在MATLAB工具上实现的计算程序流程框图,如图2所示[16]
开 始 输 入 准 则 层 层 数 输 入 准 则 层 对 目 标 层 判 断 矩 阵 元 素 aij 判 断 矩 阵 归 一 化 计 算 C R < 0 . 1 输 入 准 则 层 第 j 个 准 则 包 含 的 方 案 数 量 n 输 入 方 案 层 第 j 个 准 则 层 的 判 断 矩 阵 元 素 b i j 判 断 矩 阵 归 一 化 计 算 C R < 0 . 1 另 m = 1 ; n = 1 结 束 C R < 0 . 1 总 C R 计 算 权 值 Fa 的 计 算 计 算 权 值 矩 阵 输 入 方 案 层 第 m 个 准 则 层 的 相 关 矩 阵 元 素
图 2 以MATLAB实现的层次分析法的计算流程框图
通过流程框图,层次分析的基本步骤如下:
第一步:准则层对目标层的判断矩阵归一化且判断是否满足一致性;
第二步:第一步满足时,将方案层对准则层的判断矩阵归一化并判断其一致性; 第三步:当第一、二步满足时,求方案层的总排序权值与总CR并判断一致性。
3.2 平均随机一致性指标的MATLAB实现
运用层次分析法决策者需要通过反复地解决决策问题,将同一层次的各元素与上一层次中某一准则的重要性进行比较,从而构造出两两判断比较矩阵A=(aij)nn(称为成比照较矩阵)。前面已经描述了九级标度法,此处运用其他描述,则这些成比照较矩阵应满足如下条件:
(l)aij>0 (2) aij·aji= l (3) aii=l
学习文档 仅供参考
按照事物逻辑要求,该矩阵还应具备一致性,即满足:
aij·ajk=aik
前面已经给出由于客观事物的复杂性与决策者的认识的多样性,实际问题的成比照较矩阵不可能做到严格上的一致性,因而,借助平均随机一致性指标RI来相对判定其一致性程度。其中表1-4是已经计算好的1~15阶矩阵的RI值表,但未给出其实现过程,且各文献的RI值表不完全相同。究其原因除没有太大必要介绍外,真正去实现它却有如下三个难度:
(1)随机两两判断矩阵中的元素要求是1~9和它们对应的倒数共17个整数与小数的均匀分布很难处理。
(2)一般高级编程语言实现成比照较矩阵及相关计算,非常复杂,且占用内存巨大,耗时多。
(3) 随机种子源不能控制。
本文使用数学软件包MATLAB对其进行计算。其设计解决思路为:先用软件包中随机函数产生数1~17的均匀分布的n阶矩阵,然后在软件包中采用不同技巧将它转化为成比照较矩阵,最后用循环语句计算出RI值。结果如下表:
表3-1 计算的RI值 阶数 1 2 3 4 5 6 7 8 9 RI 0 0 以n=4为例,过程详见如下程序清单,其中随机成比照较矩阵的实现见相应注释部分。[15]
MATLAB的程序M文件:
function ri %计算RI值的命令文件 n=4; ri=0; m=100;
rand('seed',21) %控制随机发生器 for i=1:m
a=ceil (17*rand(n)); %产生n阶l~17的随机阵 a(find(a=8))=8.1; %消除0为分母 b=1./(a-8); %产生一个辅助阵
11 a(find(a>9))=b(find(a>9)); %借助b,将9~17分别转化为~
29 a(find(a=8.1))=8;
e=eye(n); %产生一个4阶单位阵 c=1./a; %将a中每个元素换成相应倒数 c=c'; %将c转置
c=tril(c,-1); %抽取c的下三角(不含主对角线) a=triu(a,1); %抽取a的上三角(不含主对角线) a=a+c+e; %实现随机成比照较阵a k=size(a,1); %计算a的行维数 ri=ri+(max(abs(eig(a)))-k)/(k-1); %计算100次RI值 end
ri/m %计算平均RI值
学习文档 仅供参考
3.3 AHP各环节的 MATLAB实现
353511121313以目标矩阵A=1313,准则层矩阵为P1=, P=2,1211513115131P3=12为例,运用MATLAB进行数据处理。
121 特征向量及其归一化的MATLAB实现
MATLAB中求矩阵特征值和特征向量的函数是eig,其调用的格式为[V,D]=eig(A),其中,V为特征向量矩阵,D为特征值矩阵。层次分析法中需要求得是最大特征值及对应的归一化特征向量,而且考虑到eig函数在求得的特征值中可能会存在复数。因此,运用直接输入程序代码会产生一定的误差。在此需要对求得的V、D进行适当选择,定义一个来实现。
function[maxeigval,w]=maxeigvalvec(A) %求最大特征值及对应的归一化特征向量 %A为判断矩阵 [eigvec,eigval]=eig(A);
eigval=diag(eigval); %特征向量 eigvalmag=imag(eigval); realind=find(eigvalmag vecinit=eigvec(:,index); %最大特征值对应的特征向量 w=vecinit./sum(vecinit) %特征向量归一化 在MATLAB中键入如下指令: A= [1,3,5;1/3,1,3;1/5,1/3,1]; P1=[1,2;1/2,1]; P2= [1,3,5;1/3,1,3;1/5,1/3,1]; P3=[1,2;1/2,1]; [max(1),wA]= maxeigvalvec(A); [max(2)wP1]= maxeigvalvec(P1); [max(3),wP2]= maxeigvalvec(P2); [max(4),wP3]= maxeigvalvec(P3); MATLAB运行结果如下: maxeigval= w = 学习文档 仅供参考 maxeigval= 2 w= maxeigval= w = maxeigval= 2 w= 一致性检验及单排序的MATLAB实现 由AHP的MATLAB的计算流程图知,必须对各层次间的判断矩阵进行层次单排序和一致性检验。因此,定义函数来实现层次单排序的一致性检验。 function [RI,CI]=sglsortexamine(maxeigval,A) %层次分析法单排序一致性检验 %maxeigval为最大特征值,A为判断矩阵 n=size(A,1); RIT= [0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51]; RI=RIT(n); CI=(maxeigval-n)/(n-1); CR=CI/RI; disp([input('矩阵没通过一致性检验,请重新调整判断矩阵')] else disp([input('矩阵通过一致性检验')]); end 学习文档 仅供参考 在MATLAB中键入如下指令: [RIA,CIA]= sglsortexamine(max(1),A); [RIP1,CIP1]= sglsortexamine(max(2),P1); [RIP2,CIP2]= sglsortexamine(max(3),P2); [RIP3,CIP3]= sglsortexamine(max(4),P3); 运行结果如下: 矩阵通过一致性检验 矩阵通过一致性检验 矩阵通过一致性检验 矩阵通过一致性检验 一致性检验及总排序的MATLAB实现 通过层次单排序〔权重〕计算后,进行层次合成计算,在此本文定义tolsortvec.m函数计算层次总排序的权重并进行一致性检验。 function tw=tolsortvec(utw,dw,CIC,RIC) % 求层次总排序权重并进行一致性检验 % utw为上一层因素的总排序权重行向量 % dw为下一层因素相对于上一层各因素的层次单排序权重矩阵 % CIC为一致性指标列向量 % RIC为随机一致性指标列向量 tw=dw*utw CR=utw'*CIC/(utw'*RIC); disp([input('层次总排序没通过一致性检验,请重新调整判断矩阵')]); else disp([input('层次总排序通过一致性检验')]); end 在MATLAB中输入如下指令: dw=zeros(7,3); dw=(1:2,1)=wP1; dw=(3:5,2)=Wp2; dw=(6:7,3)=wP3; CIC=[CIP1;CIP2;CIP3]; RIC=[RIP1;RIP2;RIP3]; tw= tolsortvec(wA,dw,CIC,RIC)’; 运行结果如下: tw= 学习文档 仅供参考 层次总排序通过一致性检验 其中tw 是层次总排序结果。因此,根据数据建立如下的层次总排序表。 表3-3 层次总排序表〔权重〕 A A 层次P的 注0.6370 总排序结果 P P1 P2 0 0 0 P3 0 0 0 0 0 0 0 0 0 0 0 注:按概率乘法,P层次总排序指标的权重值为N—P层次指标的权重 与相应上一层次指标A—N层权重的积,且总排序权重值的和为1。 选择最优排序 计算出层次总排序后,为了使决策者能迅速得出结果,本文对层次总排序进行最优排序。运用MATLAB键入如下指令: n=length(tw); for i=1:n t=max(tw); b(i)=t; [m n]=find(a==t); tw(n)=[]; end b 运行结果如下: b= 学习文档 仅供参考 利用MATLAB大大缩短了计算复杂矩阵的时间,为决策者节省了珍贵的时间,从而有更多的精力投入其他事务。 4.基于MATLAB的AHP应用 4.1 挑选合适工作问题 某毕业生选择工作,经双方恳谈,假设已有三个单位C1,C2,C3表示愿意录用他。该生对三个单位进行了解后,选取了一些中间指标进行考察,例如单位的研究课题,发展前途,待遇,同事情况,地理位置,单位名气等。根据层次分析法,试求该生工作优先排序〔给出权值、计算程序〕,并给出最终选择决策。 现以A、B、C表示选择工作的三个层次,建立如下结构模型: 图3 选择单位层次结构图 根据成比照较法,得到相应判断矩阵如下表: 表4-1 A-B判断矩阵 B1 B2 B3 B4 B5 A B1 B2 B3 B4 B5 B6 表4-2 B1~C判断矩阵 学习文档 仅供参考 B6 1/2 1/2 1/2 1/3 1 1 1 1 1 1/4 1 2 1 1 1/2 1/4 1 2 1 2 1 1/5 1/3 2 4 4 5 1 3 3 1 1 3 1/3 1 3 B1 C1 C2 C1 C2 C3 1/2 3 1 1 4 2 1/4 1 1/3 C3 表4-3 B2~C判断矩阵 B2 C1 1 4 5 C2 1/4 1 2 C3 1/5 1/2 1 C1 C2 C3 表4-4 B3~C判断矩阵 B3 C1 C2 C3 C1 1 1/3 3 C2 3 1 7 C3 1/3 1/7 1 表4-5 B4~C判断矩阵 B4 C1 1 3 1/5 C2 1/3 1 1/7 C3 5 7 1 C1 C2 C3 表4-6 B5~C判断矩阵 学习文档 仅供参考 B5 C1 C2 C3 C1 1 1 1/7 C2 1 1 1/7 C3 7 7 1 表4-7 B6~C判断矩阵 B6 C1 C2 C3 C1 1 1/7 1/9 C2 7 1 1 C3 9 1 1 现在在MATLAB中分别用直接输入程序法和M—文件方法求解。 1〕、直接输入代码法: 在MATLAB中输入如下程序: A = [ 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]; B1 = [1,1/4,1/2;4,1,3;2,1/3,1]; B2 = [1,1/4,1/5;4,1,1/2;5,2,1]; B3 = [1,3,1/3;1/3,1,1/7;3,7,1]; B4 = [1,1/3,5;3,1,7;1/5,1/7,1]; B5 = [1,1,7;1,1,7;1/7,1/7,1]; B6 = [1,7,9;1/7,1,1;1/9,1,1]; BS = [B1,B2,B3,B4,B5,B6]; m = length(B1);n = length(A); %随机一致性指标RI RI = [0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51]; [Wa,LA] = eig (A) %求A的特征向量WA和特征根LA Maxn=input('please input largest eigenvalue:'); %输入最大特征根 CIn = (Maxn- n) / (n - 1); CRn = CIn / RI(n); %A的一致性比率CRn WA=Wa(:,1)/sum(Wa(:,1)); %特征向量归一化 学习文档 仅供参考 fprintf('A 的CR %f 通过一致性检验!\\n',CRn); %控制文本格式 else fprintf('A 的CR %f 未通过一致性检验!\\n',CRn); end for k = 1:n %求B的特征向量WK和特征根LK [WB,LK] = eig( BS(1:3,(k-1)*m+1:(k-1)*m+3) ) Max(k)=input('please input largest eigenvalue:'); CIm(k) = (Max(k)- m) / (m - 1); RIm(k) = RI(m); CRm(k) = CIm(k) / RIm(k);; %B的一致性比率CRm WK(:,k)= WB(:,1)/sum(WB(:,1)); end for k = 1:n if fprintf('B%d的CR %f 通过一致性检验!\\n',k,CRm(1,k)); %控制文本格式 else fprintf('B%d的CR %f 未通过一致性检验!\\n',k,CRm(1,k)); end end disp('准则层对目标层权向量'); disp(WA); disp('方案层对准则层权向量'); disp(WK); E = WK * WA disp('方案层组合权向量');disp(E); CI = CIm * WA; RI = RIm * WA; CR = CI / RI; %组合一致性比率CR fprintf('组合一致性比率CR %f 通过一致性检验!\\n',CRn); else fprintf('组合一致性比率CR %f 未通过一致性检验!\\n',CRn); end [MAX,CHOICE] = max(E); %最正确选择 CHOICE MATLAB运行结果如下: Wa = -0.4249 0.6724 0.6724 0.0834 -0.3298 -0.1384 + 0.3417i -0.88 -0.1467 - 0.0710i -0.1467 + 0.0710i 0.1337 0.5920 0.5920 LA = 学习文档 仅供参考 6.6178 0 0 0 0 0 0 -0.1557 + 1.2808i 0 0 0 0 0 0 -0.1557 - 1.2808i 0 0 0 0 0 0 -0.0603 0 0 0 0 0 0 -0.1230 + 0.5461i 0 0 0 0 0 0 A 的CR 0.0995 通过一致性检验! WB = 0.9154 -0.9154 -0.9154 LK = 3.0183 0 0 0 -0.0091 + 0.2348i 0 please input largest eigenvalue: 0.1999 WB = 0.8540 -0.8540 -0.8540 LK = 3.0246 0 0 0 -0.0123 + 0.2725i 0 WB = 0.3382 -0.1691 + 0.2929i 0.1226 -0.0613 - 0.1062i 0.9331 0.9331 0.9331 LK = 3.0070 0 0 0 -0.0035 + 0.1453i 0 学习文档 仅供参考 please input largest eigenvalue: 3.0070 WB = 0.3928 -0.19 + 0.3402i 0.9140 0.9140 0.9140 0.1013 -0.0506 - 0.0877i LK = 3.09 0 0 0 -0.0324 + 0.4448i 0 please input largest eigenvalue:3.09 WB = LK = 3.0000 0 0 0 0.0000 0 please input largest eigenvalue: 3.0000 WB = -0.9844 0.9844 0.9844 LK = 3.0070 0 0 0 -0.0035 + 0.1453i 0 please input largest eigenvalue: 3.0070 B1的CR -2.413879 通过一致性检验! B2的CR 0.021207 通过一致性检验! B3的CR 0.006034 通过一致性检验! B4的CR 0.055948 通过一致性检验! B5的CR 0.000000 通过一致性检验! B6的CR 0.006034 通过一致性检验! 学习文档 仅供参考 准则层对目标层权向量 方案层对准则层权向量 E = 方案层组合权向量 组合一致性比率CR 0.0995 通过一致性检验! CHOICE = 1 2〕、M—文件法: 根据第三章节的层次分析法各环节的MATLAB实现定义如下三个函数: (1) 定义最大特征根及对应的归一化特征向量。 function[maxeigval,w]=maxeigvalvec(A) %求最大特征值及对应的归一化特征向量 %A为判断矩阵 [eigvec,eigval]=eig(A); eigval=diag(eigval); %特征向量 eigvalmag=imag(eigval); realind=find(eigvalmag vecinit=eigvec(:,index); %最大特征值对应的特征向量 w=vecinit./sum(vecinit) %特征向量归一化 〔2〕定义函数来实现层次单排序的一致性检验。 学习文档 仅供参考 function [RI,CI]=sglsortexamine(maxeigval,A) %层次分析法单排序一致性检验 %maxeigval为最大特征值,A为判断矩阵 n=size(A,1); RIT= [0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51]; RI=RIT(n); CI=(maxeigval-n)/(n-1); CR=CI/RI; disp([input('矩阵没通过一致性检验,请重新调整判断矩阵')] else disp([input('矩阵通过一致性检验')]); end 〔3〕定义tolsortvec.m函数计算层次总排序的权重并进行一致性检验。 function tw=tolsortvec(utw,dw,CIC,RIC) % 求层次总排序权重并进行一致性检验 % utw为上一层因素的总排序权重行向量 % dw为下一层因素相对于上一层各因素的层次单排序权重矩阵 % CIC为一致性指标列向量 % RIC为随机一致性指标列向量 tw=dw*utw; CR=utw'*CIC/(utw'*RIC); disp([input('层次总排序没通过一致性检验,请重新调整判断矩阵')]); else disp([input('层次总排序通过一致性检验')]); end clear; A = [ 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]; B1 = [1,1/4,1/2;4,1,3;2,1/3,1]; B2 = [1,1/4,1/5;4,1,1/2;5,2,1]; B3 = [1,3,1/3;1/3,1,1/7;3,7,1]; B4 = [1,1/3,5;3,1,7;1/5,1/7,1]; B5 = [1,1,7;1,1,7;1/7,1/7,1]; B6 = [1,7,9;1/7,1,1;1/9,1,1]; [max(1),wA]=maxeigvalvec(A); 学习文档 仅供参考 [max(2),wB1]=maxeigvalvec(B1); [max(3),wB2]=maxeigvalvec(B2); [max(4),wB4]=maxeigvalvec(B4); [max(5),wB3]=maxeigvalvec(B3); [max(6),wB5]=maxeigvalvec(B5); [max(7),wB6]=maxeigvalvec(B6); [RIA,CIA]=sglsortexamine(max(1),A); [RIB1,CIB1]=sglsortexamine(max(2),B1); [RIB2,CIB2]=sglsortexamine(max(3),B2); [RIB3,CIB3]=sglsortexamine(max(4),B3); [RIB4,CIB4]=sglsortexamine(max(5),B4); [RIB5,CIB5]=sglsortexamine(max(6),B5); [RIB6,CIB6]=sglsortexamine(max(7),B6); dw=zeros(18,6); dw(1:3,1)=wB1;dw(4:6,2)=wB2;dw(7:9,3)=wB3;dw(10:12,4)=wB4; dw(13:15,5)=wB5;dw(16:18,6)=wB6; CIC=[CIB1;CIB2;CIB3;CIB4;CIB5;CIB6]; RIC=[RIB1;RIB2;RIB3;RIB4;RIB5;RIB6]; tw=tolsortvec(wA,dw,CIC,RIC)'; n=length(A); [MAX,CHOICE] = max(n); %最正确选择 CHOICE MATLAB运行结果如下: maxeigval = w = maxeigval = w = 学习文档 仅供参考 maxeigval = w = maxeigval = w = maxeigval = w = maxeigval = w = maxeigval = w = 矩阵通过一致性检验矩阵通过一致性检验矩阵通过一致性检验矩阵通过一致性检验学习文档 仅供参考 矩阵通过一致性检验 矩阵通过一致性检验 矩阵通过一致性检验 层次总排序通过一致性检验 CHOICE = 1 由此分析得,通过层次分析法并且结合MATLAB,该生很容易便能作出了决策,选择工作1。而且容易得出如下表的层次总排序: 表4-7 层次总排序 B 层次总B B B B B B 123456C 排序 C1 C2 C3 0.1365 从而得出结论:选择工作1. 5.结束语 利用层次分析法AHP,并结合被称为电脑语言的MATLAB工具软件,来解决多目标、 多准则的问题,大大缩减了决策者计算复杂矩阵的时间。目前很多领域都采用这种方法,如经济计划和管理、能源和分配、行为科学等。由此可见,层次分析法AHP结合MATLAB时很有发展前景的。但是层次分析法也有其局限性:〔1〕AHP方法中所用的指标体系需要有专家系统的支持,如果给出的指标不合理,得到的结果也就不准确;〔2〕AHP方法中经行多层比较的时候需要给出一致性比较,如果不满足一致性指标要求,则AHP方法就失去了作用。因此,需要更多的研究人员去探讨和解决。 学习文档 仅供参考 参考文献 [1] 朱建军。层次分析法的假设干问题研究及应用[J]。东北大学,2005-01-01: 1。 [2] Saaty T L.J.Math.Psychol 1977,15(3):234。 [3] Saaty T L ,Gholamnezhad A H . Enviroment and Planning B. 1982 (9) 181。 [4] Saaty T L ,Bennett J P .Behavioral Science 1977 (22) 237。 [5] Mitchell K H ,Soye M P . Mathematics and Computer Simulation 1983 25(2) 135。 [6] 李祚泳。层次分析法(AHP)及其最新进展[J]。成都信息工程学院学报,1992-12-30 :83-84。 [7] Saaty T L.The Analytic Hierarchy Process[M]. New York McGrawHill ,Lnc.1980 :287。 [8] 张崎,西村昂。提高层次分析法评价精度的几种方法[J]。系统工程与实践,1997-11 ,20 〔7〕:29-36。 [9] 杜栋。 论AHP的标度评价[J]。运筹与管理,2000,9〔4〕:42-45。 [10] 胡明甫。 AHP层次分析法及MATLAB的应用研究[J]。钢铁技术,2004-05-15:43-45。 [11] 刘新宪,朱道立。选择与判断-AHP层次分析法[M]。决策上海科学普及出版社,1990-02: 31-34。 [12] 焦树峰。AHP法中平均随机一致性指标的算法及MATLAB实现[J]。太原师范学院学报〔自然 科学版〕,2006,5(4):45-47。 [13] 许树柏。层次分析法原理 实用决策方法[M]。天津大学出版社,1988-05:11-12。 [14] 刘卫国。MATLAB程序设计教程[M]。中国水利水电出版社,2005:46-47,62-63。 [15] 陈晓江。层次分析法中平均随机一致性指标的数学软件实现[J]。九江职业技术学院学报, 2001〔3〕:35-36。 [16] 董守贵。基于MATLAB的层次分析法实现[J]。航空兵器,2003-08-30:16-18。 学习文档 仅供参考 致谢 本文是在杨涤尘教授的悉心指导下完成的。 在整个本科论文完成过程中,我得到了杨老师的精心指导,他严谨的治学态度、渊博的学识、精湛的学术造诣、诲人不倦的精神以及虚怀假设谷的气度给我留下了深刻的印象,使我受益匪浅,将永远激励我在以后的学习和工作中不懈努力、不断进步。谨此,我向杨老师致以最诚挚的谢意和最美好的祝福,祝愿老师身体健康,工作顺利,桃李满天下! 特别要感谢我的父母和亲人,他们的关爱和鼓励是我一生努力前进的巨大动力。 感谢一切曾经关心过我、帮助过我、教导过我的人们。 最后感谢论文评审委员会的专家和老师们百忙之中对本论文的认真指正! 谨以此文献给他们! 赵美云 2010年5月于湖南人文科技学院 学习文档 仅供参考
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务