层次分析法算法文档_第1页
层次分析法算法文档_第2页
层次分析法算法文档_第3页
层次分析法算法文档_第4页
层次分析法算法文档_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、层次分析法算法及相关程序说明项目负责人:程序编写:完成时间: 2009 年 12 月 21 日目录1 引言 32 层次分析算法的基本原理 32.1 层次结构图 32.2 构造比较矩阵 42.3 相对权向量确定 52.4 一致性检验 52.5 计算组合权向量和组合一致性检验 63 算法的具体实现流程 73.1 算法流程图 73.2 实现步骤 83.3 数据准备与预处理 84 层次分析算法程序实现 94.1 程序使用说明 94.2 程序源代码 94.3 程序运行 15参考文献 16层次分析算法1引言人们在日常生活中常常会碰到很多决策问题,需要考虑的因素有多有少,有 大有小,并且不同的因素对于决策的

2、重要性、 影响力以及优先程度都不同,并且 这些因素的共同特点都是通常涉及到经济、 社会、人文等方面的因素,故难以量 化,人的主观选择起着相当重要的作用。 这就给用一般的数学方法解决问题带来 本质上的困难。故引入层次分析法来处理这一类问题。 该法由L.Saaty等人在 20世纪70年代提出。这是一种定性和定量相结合的,系统化的,层次化的方法。 层次分析法的优点有系统性、实用性、简洁性等。但其也有缺点及局限性。它只 能从原有方案中选优,不能生成新方案,其比较、判断直到结果都比较粗糙,不 适合用于精度要求较高的问题。还有就是在给出对比矩阵时人的主观因素影响很 大。2层次分析算法的基本原理2.1层次结

3、构图层次分析法解决问题的基本思想与人们对一个多层次、多因素、复杂的决策问题的思维过程基本一致,最突出的特点是分层比较,综合优化其解决问题的基本步骤如下:(1) 分析系统中各因素之间的关系, 建立系统的递阶层次结构, 一般层次结构分为三层, 第一层为目标层,第二层为准则层,第三层为方案层。(2) 构造两两比较矩阵(判断矩阵),对于同一层次的各因素关于上一层中某一准则(目标)的重要性进行两两比较,构造出两两比较的判断矩阵。(3) 由比较矩阵计算被比较因素对每一准则的相对权重,并进行判断矩阵的一致性检验。(4) 计算方案层对目标层的组合权重和组合一致性检验,并进行排序。图6-1 :层次结构图利用层次

4、分析法研究问题时,首先要把与问题有关的各种因素层次化,然后构造出一个树状结构的层次结构模型,称为 层次结构图。一般问题的层次结构图分为三层,如图6-1所示。最高层为目标层(0):问题决策的目标或理想结果,只有一个元素。中间层为准则层(C):包括为实现目标所涉及的中间环节各因素,每一因素为一准则, 当准则多于9个时可分为若干个子层。最低层为方案层(P):方案层是为实现目标而供选择的各种措施,即为决策方案。一般说来,各层次之间的各因素,有的相关联,有的不一定相关联;各层次的因素个数 也未必一定相同。实际中,主要是根据问题的性质和各相关因素的类别来确定。2.2构造比较矩阵构造比较矩阵主要是通过比较同

5、一层次上的各因素对上一层相关因素的影响作用。而不是把所有因素放在一起比较,即将同一层的各因素进行两两对比。比较时采用相对尺度标准度量,尽可能地避免不同性质的因素之间相互比较的困难。同时,要尽量依据实际问题具体情况,减少由于决策人主观因素对结果造成的影响。设要比较n个因素G,C2,,Cn对上一层(如目标层) 0的影响程度,即要确定它在 0 中所占的比重。对任意两个因素Ci和Cj ,用可表示Ci和Cj对o的影响程度之比,按1 9的比例标度来度量 aij (i, j =1,2,,n)。于是,可得到两两成对 比较矩阵(a0 )n n,又称为判断矩阵,显然1a 0, aji, aii = 1,(i, j

6、 二 1,2, , n)aij因此,又称判断矩阵为正互反矩阵。表6-1 :比例标度值标度aU|j含义13Cj与Cj的影响相同Ci比Cj的影响稍强579Ci比Cj的影响强Ci比Cj的影响明显地强Ci比Cj的影响绝对地强2,4,6,8丄12,9Ci与Cj的影响之比在上述两个相邻等级之间Ci与Cj的影响之比为上面Qj的互反数比例标度的确定:aij取19的9个等级,而 aji取aij的倒数(见表6-1 )。由正互反矩阵的性质可知,只要确定A的上(或下)三角的 n(n 1)个元素即可。在2特殊情况下,如果判断矩阵A的元素具有传递性,即满足aikaq =aj(i, j,k =1,2,,n)则称A为一致性矩

7、阵,简称为一致阵。2.3相对权向量确定相对权向量的确定有多种方法,一般分为和法、求根法(几何平均法)及特征根法。 在本次项目中我们采取的相对较为容易的和法来确定特征根。其具体算法如下:取判断矩阵n个列向量归一化后的算术平均值,近似作为权重,即Wi1ZJ n n j" akj k=1aij(i =1,2,n)类似地,也可以对按行求和所得向量作归一化,得到相应的权重向量。2.4 致性检验通常情况下,由实际得到的判断矩阵不一定是一致的,即不一定满足传递性和一致性。 实际中,也不必要求一致性绝对成立,但要求大体上是一致的,即不一致的程度应在容许的范围内。主要考查以下指标:(1) 一致性指标:

8、Cl J max _n。n 1(2) 随机一致性指标:Rl,通常由实际经验给定的,如表6-2。表6-2 :随机一致性指标n1 2 345678910 1112 131415Rl0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51 1.54 1.56 1.58 1.59Cl(3) 一致性比率指标:CR二,当CR:0.10时,认为判断矩阵的一致性是可以接受Rl' aij wjj=1的, V 'max对应的特征向量可以作为排序的权重向量。此时J (A W )max :nw其中(A W)i表示A W的第i个分量。2.5计算组合权向量和组合一致

9、性检验2.5.1计算组合权向量设第k -1层上nk个元素对总目标(最高层)的排序权重向量为Z,w27 (k J) wn i第k层上nk个元素对上一层(k -1层)上第j个元素的权重向量为pF=(Pi(k),p2k),,卩站 i,j=i2 ,W (k) = p(k) W(kJ)Pl(k), P2(k),Pn(kk)】W(k_1)则矩阵P “ = *P1(k), Pj,,PT疋nk nk二阶矩阵,表示第k层上的兀素对第k -1层各兀素的排序权向量。那么第k层上的元素对目标层(最高层)总排序权重向量为nk(k) 一 (k) (kJ)w =送 Pj Wj,i =1,2, ,nkj 二对任意的k - 2

10、有一般公式W (k)二 P(k) P(k):.p w (2) (k 2)其中W是第二层上各元素对目标层的总排序向量。2.5.2组合一致性设k层的一致性指标为ci1(k),ci2k),cin:,随机一致性指标为 k 1Rh(k),Rl2k),Rin:I则第k层对目标层的(最高层)的组合一致性指标为ci(k) =(ci1(k),ci2k),,cin:)w心组合随机一致性指标为Rl(k) =(Rl1(k),Rl2k),尺壯刈心组合一致性比率指标为CR(k)ci(k)E ”-3)当CR(k) <0.10时,则认为整个层次的比较判断矩阵通过一致性检验。3算法的具体实现流程3.1算法流程图3.2实现

11、步骤(1)编写和法求权向量的函数具体过程:1. 输入参数为矩阵,将矩阵的各列向量归一化;2. 将归一化后得到的矩阵按行求和;3. 再将求和得到的矩阵归一化,得到权向量w ;4.计算特征值,按公式maxn7 ajWj j awi进行;5. 计算 CR , Cl =上 n,CR 二色;n -1Rl6. 进行一致性检验。(2)编写层次分析函数(本程序设计为准则层至多4层)要1设计变量,并初始化;2初始化第1准则层对目标层的成对比较矩阵并检验一致性,不通过需重新输入调用上一步编写的函数);3若存在第二准则层,否则转6 ;则输入成对比矩阵进行检验,计算其个参数,不通过需重新输入;4若存在第三准则层,否则

12、转6 ;则输入成对比矩阵进行检验,计算其个参数,不通过需重新输入;5若存在第四准则层,否则转6 ;则输入成对比矩阵进行检验,计算其个参数,不通过需重新输入;6初始化方案层对最后一个准则层的成对比较矩阵进行检验,计算其参数,不通过需重 新输入;7提取各层参数计算组合权向量和进行组合一致性检验;8.输出结果。3.3数据准备与预处理(1) 根据各种因素对于决策的不同影响力构造出各层对比矩阵(最好由专家打分构造)。(2) 将构造出的矩阵输入计算机(本例程序采用MATLAB,故将矩阵输入 MATLAB),启动 程序进行计算。4 层次分析算法程序实现4.1 程序使用说明1程序采用 MATLAB 语言,使用

13、和法求最大特征根;NX N矩阵的最大特征根;2. maxlmta MATLAB函数文件,作用是求一个AHP MATLAB函数文件,层次分析法主函数; 3maxlmta 中变量申明:RI-随机一致性指标 n-A 的列长度 w-权向量 lmta-最大特征根CI-一致性指标 CR-一致性比率Rln-A的一致性指标flag-标志变量 Wij Wi W- 临时变量AHP中变量申明: numprilay- 准则层层数 numevepri- 每层准则层准则数 numpla-方案层方案个数A1 A2 A3 A4 B-各层成对比较矩阵组 w1 w2 w3 w4 wp- 各层权向量lmta1 lmta2 lmta

14、3 lmta4 lmtap- 各层最大特征根 CI1 CI2 CI3 CI4 CI5 Clp 各层一致性指标RI1 RI2 RI3 RI4 RI5 Rip各层随机一致性指标 flag1 flag2 flag3 flag4 flagp- 各层标志变量 w-组合权向量CRfinal-组合一致性比率4.2 程序源代码maxlmta :function w,lmta,CI,RIn,flag=maxlmta(A)RI=0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51;%将 A 的每一列向量归一化 Asum=sum(A);n=length(A);for j=

15、1:nfor i=1:nWij(i,j)=A(i,j)./Asum(1,j);endend%将 Wij 按行求和Wij=Wij'Wi=sum(Wij);Wi=Wi'%将 Wi 归一化W=sum(Wi);w=Wi./W;%计算 lmtalmta=sum(1/n*(A*w)./w);%计算 CRRIn=RI(1,n);CI=(lmta-n)/(n-1);CR=CI/RIn;%判断一致性检验if CR<0.1disp(' 通过一致性检验 ')flag=1;elsedisp(' 不能通过一致性检验 ')flag=0;endAHP: function

16、 AHP() %参数赋予初值 numprilay = 0; numevepri = 0; m = 0;n = 0;i = 1; lmta2 = 0;CI2 = 0;RI2 = 0;lmta3 = 0;CI3 = 0;RI3 = 0;lmta4 = 0;CI4 = 0;RI4 = 0;lmtap = 0;CIp = 0;RIp = 0;%初始化各个参数 numprilay=input(' 输入准则层层数: ');n=numprilay;while n>0m=input(' 输入第 ',num2str(i),' 准则层准则数: '); nume

17、vepri=numevepri,m;n=n-1;i=i+1;end numevepri=numevepri(1,2:numprilay+1); % 除去第一个无意义元素 numpla=input(' 输入方案层数方案数: ');%初始化第 1 准则层对目标层的成对比较矩阵并检验一致性,若不通过需重新输入 flag1=0;while flag1=1if numprilay>=1A1=input(' 输入第 1准则层对目标层的成对比较矩阵: '); w1,lmta1,CI1,RI1,flag1=maxlmta(A1);if flag1=0disp('

18、重新输入 ')endendend%若存在第 2 准则层,计算其各个参数if numprilay>=2flag2=zeros(1,numevepri(1);%设置标志位,检测第几个矩阵不能通过一致性检验%判断是否全部通过一致性检验,若不通过这重新输while sum(flag2)=numevepri(1)A2=input('输入第2准则层对第1准则层的成对比较矩阵:);A2size=size(A2,2);w2=zeros(A2size,1); %初始化权向量for i=1:numevepri(1);a2=A2(i-1)*A2size+1:i*A2size,:); %提取每个

19、成对比较矩阵 w2temp,lmta2temp,CI2temp,RI2temp,flag2temp=maxlmta(a2); w2=w2,w2temp; % 生成权向量 lmta2=lmta2,lmta2temp; % 生成最大特征根CI2=CI2,CI2temp; %生成 CIRI2=RI2,RI2temp; %生成 RIflag2(i)=flag2temp; % 生成标志位endw2=w2(1:A2size,2:numevepri(1)+1);%除去第一个无意义元素lmta2=lmta2(1,2:numevepri(1)+1);%除去第一个无意义元素CI2=CI2(1,2:numevepr

20、i(1)+1); %除去第一个无意义元素 RI2=RI2(1,2:numevepri(1)+1); %除去第一个无意义元素%显示哪些不能通过一致性检验的矩阵for i=1:numevepri(1)if flag2(i)=0disp(' 需要重新输入第 ',num2str(i),' 个成对比较矩阵 ');endendendend%若存在第 3 准则层,计算其各个参数if numprilay>=3flag3=zeros(1,numevepri(2); % 设置标志位,检测第几个矩阵不能通过一致性检验 %判断是否全部通过一致性检验,若不通过这重新输入while

21、sum(flag3)=numevepri(2)A3=input('输入第3准则层对第2准则层的成对比较矩阵:);A3size=size(A3,2);w3=zeros(A3size,1); %初始化权向量for i=1:numevepri(2);a3=A3(i-1)*A3size+1:i*A3size,:); % 提取每个成对比较矩阵 w3temp,lmta3temp,CI3temp,RI3temp,flag3temp=maxlmta(a3); w3=w3,w3temp; % 生成权向量lmta3=lmta3,lmta3temp; % 生成最大特征根CI3=CI3,CI3temp; %生

22、成 CIRI3=RI3,RI3temp; %生成 RIflag3(i)=flag3temp; % 生成标志位endw3=w3(1:A3size,2:numevepri(2)+1); % 除去第一个无意义元素 lmta3=lmta3(1,2:numevepri(2)+1); % 除去第一个无意义元素 CI3=CI3(1,2:numevepri(2)+1); %除去第一个无意义元素RI3=RI3(1,2:numevepri(2)+1); % 除去第一个无意义元素%显示哪些不能通过一致性检验的矩阵for i=1:numevepri(2)if flag3(i)=0disp(' 需要重新输入第

23、',num2str(i),' 个成对比较矩阵 ');endendendend%若存在第 4 准则层,计算其各个参数if numprilay>=4flag4=zeros(1,numevepri(3); % 设置标志位,检测第几个矩阵不能通过一致性检验 %判断是否全部通过一致性检验,若不通过这重新输入while sum(flag4)=numevepri(3)A4=input('输入第4准则层对第3准则层的成对比较矩阵:);A4size=size(A4,2);w4=zeros(A4size,1); %初始化权向量for i=1:numevepri(3); a4=

24、A4(i-1)*A4size+1:i*A4size,:); % 提取每个成对比较矩阵 w4temp,lmta4temp,CI4temp,RI4temp,flag4temp=maxlmta(a4); w4=w4,w4temp; % 生成权向量lmta4=lmta4,lmta4temp; % 生成最大特征根CI4=CI4,CI4temp; %生成 CIRI4=RI4,RI4temp; %生成 RIflag4(i)=flag4temp; % 生成标志位endw4=w4(1:A4size,2:numevepri(3)+1); % 除去第一个无意义元素 lmta4=lmta4(1,2:numevepri

25、(3)+1); % 除去第一个无意义元素 CI4=CI4(1,2:numevepri(3)+1); %除去第一个无意义元素 RI4=RI4(1,2:numevepri(3)+1); %除去第一个无意义元素%显示哪些不能通过一致性检验的矩阵for i=1:numevepri(3)if flag4(i)=0disp('需要重新输入第,num2str(i),'个成对比较矩阵');endendendend %初始化方案层对最后一个准则层的成对比较矩阵,计算其各个参数 flagp=zeros(1,numevepri(numprilay); % 设置标志位,检测第几个矩阵不能通过一

26、致性检验 %判断是否全部通过一致性检验,若不通过这重新输入while sum(flagp)=numevepri(numprilay)P=input(' 输入方案层对第 ',num2str(numprilay),' 准则层的成对比较矩阵: '); psize=size(P,2);wp=zeros(psize,1); %初始化权向量 for i=1:numevepri(numprilay);p=P(i-1)*psize+1:i*psize,:); % 提取每个成对比较矩阵 wptemp,lmtaptemp,CIptemp,RIptemp,flagptemp=maxl

27、mta(p); wp=wp,wptemp; % 生成权向量 lmtap=lmtap,lmtaptemp; % 生成最大特征根 CIp=CIp,CIptemp; %生成 CI RIp=RIp,RIptemp; %生成 RI flagp(i)=flagptemp; % 生成标志位endwp=wp(1:psize,2:numevepri(numprilay)+1); % 除去第一个无意义元素 lmtap=lmtap(1,2:numevepri(numprilay)+1); % 除去第一个无意义元素 CIp=CIp(1,2:numevepri(numprilay)+1); % 除去第一个无意义元素 R

28、Ip=RIp(1,2:numevepri(numprilay)+1); % 除去第一个无意义元素%显示哪些不能通过一致性检验的矩阵for i=1:numevepri(numprilay)if flagp(i)=0disp(' 需要重新输入第 ',num2str(i),' 个成对比较矩阵 ');end end end%计算组合权向量和组合一致性检验switch numprilay case 1 w=w1'*wp' % 计算组合权向量 CRfinal=CI1/RI1+(CIp*w1)/(RIp*w1); % 计算组合一致性检验 case 2w=w1'*w2'*wp' % 计算组合权向量 CRfinal=CI1/RI1+(CI2*w1)/(RI2*w1)+(CIp*w2)/(RIp*w2); % 计算组合一致性检验 case 3w=w1'*w2'*w3'*wp' % 计算组合权向量 CR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论