Matlab学习系列20层次分析法解读.pdf

上传人:ylj18****41534 文档编号:73509255 上传时间:2023-02-19 格式:PDF 页数:17 大小:1.74MB
返回 下载 相关 举报
Matlab学习系列20层次分析法解读.pdf_第1页
第1页 / 共17页
Matlab学习系列20层次分析法解读.pdf_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《Matlab学习系列20层次分析法解读.pdf》由会员分享,可在线阅读,更多相关《Matlab学习系列20层次分析法解读.pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 20.层次分析法 一、概述 层次分析法(Analytic Hierarchy Process,AHD)是将要决策的问题及其有关因素分解成目标、准则、方案等层次,进而进行定性和定量分析的决策方法。它的特征是合理地将定性与定量决策结合起来,按照思维、心理的规律把决策过程细致化(层次化、数量化)。层次分析法广泛地应用到处理复杂的决策问题,而决策是基于该方法计算出的权重,所以也常用来确定指标的权重。层次分析法的基本思路与人们对一个决策问题的思维、判断过程大体上是一样的。例如,选购一台笔记本电脑,假设有三种不同品牌款式的笔记本电脑 A、B、C 供选择。我们一般会根据价格、外观、重量、用途、功耗、品牌等

2、一些准则去反复比较这个三个候选。首先,会确定这些准则在自己心目中各占多大比重,不同的人这种比重会有很大差异(喜欢玩游戏的人看重硬件性能和散热、预算有限的人看重价格等)。其次,还会就每一个准则将 A、B、C 进行对比,比如 A最便宜,B 次之;C 性能最好,B 次之;C 的品牌最知名等。最后,将这两个层次的比较判断进行综合,在 A、B、C 中确定一台作为最符合自己需求的电脑。二、算法步骤 1.将问题条理化、层次化,建立层次结构模型 1)最高层(目标层)只有一个元素:决策目标;2)中间层(准则层)考虑的因素,决策的准则、子准则;3)最底层(方案层)决策时的备选方案、措施。层次分析法要解决的问题是,

3、求出最底层对最高层的相对权重,以此对最底层的方案、措施进行排序,选择最优方案。注 1:为了避免两两比较判断过于复杂,每层次中各元素所支配的元素一般不要超过 9 个,否则应划分为若干子层;注 2:层次分析法只考虑相邻两个层次间自上向下的支配作用,认为同一层次的元素间相互独立,若考虑进来需要网络分析法(ANP)。例如前文提到的选购笔记本电脑的决策模型,可以建立如下的层次结构:2.构造判断矩阵(成对比较矩阵)构造好层次模型后,针对某一层来讲,在比较第 i 个元素与第 j个元素相对于上一层某个因素的重要性时,使用数量化的相对权重aij来表示,假设共有 n 个元素参与比较,则矩阵 1111()nijn

4、nnnnaaAaaa 称为判断矩阵(或成对比较矩阵)。Saaty 根据绝大多数人认知事物的心理习惯,建议用 19 及其倒数作为标度来确定 aij的值。其中,2,4,6,8 分别介于 1,3,5,7,9 对应的重要程度之间。显然,A中的元素满足:i)aij 0;ii)aji=1/aij;iii)aii=1 称为正互反矩阵。例如,选购笔记本电脑模型中,可以根据实际三台电脑的重量得到电脑对准则层 B3的判断矩阵(aij可以取笔记本电脑 j 与 i 的重量之比,重量越轻越好):311/31/5313/555/31BCA 3.层次单排序及判断矩阵的一致性检验 通常用特征根法从判断矩阵导出,单一准则下元素

5、相对排序权重。定义 若 n 阶正互反矩阵(aij)nn 满足 aik akj=aij(对应 aij=wi/wj,故需要 aik akj=(wi/wk)/(wk/wj)=aij),则称(aij)nn为一致性矩阵。特征根法的基本思想是,当正互反矩阵(aij)nn为一致性矩阵时,对应于判断矩阵的最大特征根 max的特征向量,经归一化后(使向量中各元素之和等于 1)即为排序权向量,记为 w,w 的元素为同一层次因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。能否进行层次单排序,就看判断矩阵是否为一致性矩阵,有如下定理:定理 n 阶正互反矩阵 A 为一致性矩阵的充要条件是,A 的最大

6、特征值 max=n.在实际操作中,由于客观事物的复杂性以及人们对事物判断比较时的模糊性,很难构造出完全一致的判断矩阵。因此,Satty 在构造层次分析法时,提出了一致性检验,所谓一致性检验是指判断矩阵允许有一定不一致的范围。一致性检验步骤如下:1)计算判断矩阵 A 的最大特征值 max;2)求出一致性指标(Consistencey Index):maxC.I.1nn C.I.=0 表示完全一致,C.I.越大越不一致;3)用随机模拟取平均的方法,求相应的平均随机一致性指标 R.I.,或者直接用 Satty 模拟 1000 次得到的 R.I.表:4)计算一致性比率:C.I.C.R.=R.I.5)判

7、断,当 C.R.0.1 时,认为判断矩阵 A 有满意的一致性;若C.R.0.1,应考虑修正判断矩阵 A.4.计算各元素对目标层的合成权重(层次总排序)为了实现层次分析法的最终目的,需要从上而下逐层进行各层元素对目标合成权重的计算。设已计算出第 k-1 层 nk-1个元素相对于目标的合成权重为:1(1)11112(,)kkkkkTnwwww 再设第 k 层的 nk个元素关于第 k-1 层第 j 个元素(j=1,nk-1)的单一准则排序权重向量为:()()()12(,)kkkkkTjjjn juuuu 上式对 k 层的 nk个元素是完全的,若某些元素不受 k-1 层第 j 个元素支配,相应位置用

8、0 补充,于是得到 nknk-1阶矩阵:111()()()11121()()()21222()()()()12kkkkkkkkknkkknkkkknnn nuuuuuuUuuu 从而可以得到第 k 层的 nk个元素关于目标层的合成权重向量:()()(1)kkkwUw 按递归展开得()()(1)(3)(2)kkkwUUUw 写成分量形式为 1()()(1)1,1,knkkkiijjkjwuwin 各层元素对目标层的合成排序权重向量是否可以满意接受,与单一准则下的排序问题一样,需要进行综合一致性检验:当 C.R.(k)0.1 时,则认为层次结构在第 k 层以上的判断具有整体满意的一致性。注:实际应

9、用中,整体一致性检验常不予进行。主要原因是,整体考虑十分困难;其次若每个单一准则下的判断矩阵具有满意的一致 性,而整体达不到满意的一致性时,调整起来非常困难。另外,整体一致性的背景也不如单一准则下的背景清晰,它的必要性有待进一步研究。三、Matlab 实现 实现层次分析法的 Matlab 函数:ahp.m function W,ahpResult=ahp(C)%层次分析法%C为n1的元胞数组,存储整个层次模型结构:第2层对第1层、第3层对第2层、.第n+1层对第n层%假设第k层有m_k个元素,从左到右依次编号1,.,m_k%Ck也是元胞数组,k=1,.,n%Ck1,j存储受第j元素支配的第k+

10、1层各元素的判断矩阵(j=1,2,.,m_k)%Ck2,j存储第k+1层各元素是否受第k层第j元素支配的(m_k+1)*1的逻辑数组,1表示支配,0表示不受支配%W返回方案层对目标层的最终权重向量%ahpResult为n1的元胞数组,存储层次分析过程各层的结果信息,ahpResultk也是元胞数组%ahpResultk1,j返回第k+1层所有元素相对第k层j元素的权重向量,第k+1层元素不受第k层j元素支配的权重为0%ahpResultk2,j返回第k+1层所有元素相对于第k层第j元素的判断矩阵的最大特征值%ahpResultk3,j返回第k+1层所有元素相对于第k层第j元素的判断矩阵的一致性

11、比率C.R.RI=0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51;%平均随机一致性指标 n=length(C);%得到C的长度n,于是知道模型总层数为n+1 ahpResult=cell(n,1);%存储各层结果信息 for k=1:n m_k=size(Ck,2);%k层的元素个数 ahpResultk=cell(m_k,1);for kk=1:m_k%求第k+1 层各元素对第 k层kk元素的成对比较矩阵的特征值和特征向量 V,D=eig(Ck1,kk);maxD,ind=max(diag(D);%求最大特征值和其位置%为存储第 k+1 层所

12、有元素相对 k层kk元素的权重预留出空间,长度应等于Ck2,kk的长度 ahpResultk1,kk=zeros(length(Ck2,kk),1);%将相应正互反矩阵属于最大特征值的特征向量归一化后赋给ahpResultk1,kk中相应位置%这些位置由逻辑数组Ck2,kk决定 ahpResultk1,kk(Ck2,kk)=V(:,ind)/sum(V(:,ind);ahpResultk2,kk=maxD;%Ck1,kk正互反矩阵的最大特征值 nn=size(Ck1,kk,1);%Ck1,kk 的阶数 ahpResultk3,kk=(maxD-nn)/(nn-1)/RI(nn);%相应的一致性

13、比率C.R.end end W=ahpResult11,1;for k=2:n%cat(2,ahpResultk1,:)把k+1层所有元素相对 k层各个元素的权重向量横向排在一起生成权重矩阵U(k)W=cat(2,ahpResultk1,:)*W;end 用该函数实现层次分析法的关键是,把整个层次结构存入嵌套元胞数组 C 中(见程序注释):Ck存储第 k+1 层与第 k 层的结构(k=1,n);设第 k 层有 mk个元素,其中第 j 元素与第 k+1 层的结构关系存储到 Ck,j中(j=1,mk),需要存储的信息有:受第 j 元素支配的第 k+1 层各元素的判断矩阵 第k+1层各元素是否受第k

14、层第j元素支配(即有没有连线)所以需要两个位置,即 Ck1,j和 Ck2,j.例 1 某工厂有一笔企业留成利润,需要决定如何分配使用。已经决定有三种用途:奖金、集体福利措施、引进技术设备。考察准则也有三个:是否能调动职工的积极性、是否有利于提高技术水平、考虑改善职工生活条件。建立如下层次模型:经过工厂决策人员讨论,得到如下判断矩阵:1.第 2 层对第 1 层 三个元素 C1,C2,C3都受 A 支配,判断矩阵 C11,1为 相应的逻辑数组 C12,1为true true true.2.第 3 层对第 2 层(1)第 3 层对第 2 层第 1 个元素 C1 受 C1支配的只有两个元素 P1和 P

15、2,判断矩阵 C21,1为 相应的逻辑数组 C22,1为true true false.(2)第 3 层对第 2 层第 2 个元素 C2 受 C2支配的只有两个元素 P2和 P3,判断矩阵 C21,2为 相应的逻辑数组 C22,2为false true true.(3)第 3 层对第 2 层第 3 个元素 C3 受 C3支配的只有两个元素 P1和 P2,判断矩阵 C21,3为 相应的逻辑数组 C22,3为true true false.3.有了上面的分析,层次模型的元胞数组表示 C 已经确定,调用函数 ahp.m 即可 C=cell(2,1);%共n+1=3层,故n=2 C11,1=1 1/5

16、 1/3;5 1 3;3 1/3 1;%第2层(C层)关于第1层(目标层A)的判断矩阵 C12,1=true true true;%相应的逻辑数组 C21,1=1 1/3;3 1;%第3层(P层)关于第2层第1元素C1的判断矩阵 C22,1=true true false;%相应的逻辑数组 C21,2=1 1/5;5 1;%第3层(P层)关于第2层第2元素C2的判断矩阵 C22,2=false true true;%相应的逻辑数组 C21,3=1 2;1/2 1;%第3层(P层)关于第2层第3元素C3的判断矩阵 C22,3=true true false;%相应的逻辑数组 W,ahpResul

17、t=ahp(C);%调用ahp求解 W%输出总排序的权重向量 运行结果:W =0.1984 0.2708 0.5308 W 就是方案层各个方案所占的比重,可见引进技术设备所占比 重最大,改善员工福利次之。体现在奖金分配上,即用全部留成利润的 53.08%引进技术设备,27.08%改善员工福利,19.84%发奖金。例 2 假设某人在制定食谱时有三类食品可选:肉、面包、蔬菜。这三类食品所含营养成分及单价如下表所示:假设该人体重为 55kg,每天对各类营养的最小需求为 维生素 A 7500IU 维生素 B2 1.6338mg 热量 Q 8548.5kJ 问题是:应如何制定食谱使得在保证营养的前提下支

18、出最小?单纯考虑问题条件,容易建立如下的线性规划模型:设选择肉x1,面包 x2,蔬菜 x3,则有 用 Matlab 求解线性规划问题的函数 linprog,可以求出最优解:f=0.0275;0.006;0.007;A=-0.3527 0.0005 25;0.0021 0.0006 0.002;11.93 11.51 1.04;b=-7500;1.6338;8548.5;options=optimset(LargeScale,off,Simplex,on);x,fval,flag=linprog(f,A,b,0;0;0,inf inf inf,options)运行结果:x =0 687.5267

19、 610.6420 fval =8.3997 flag =1%表示算法成功 求解出的结果是,每天不吃肉,吃面包 687.5267g,蔬菜 610.642g,最低支出为 8.40 元。但实际考虑的话,这个方案是难以让人接受的,只考虑了营养够、价格低,没有考虑到营养均衡(需要吃一定量的肉)。为此,我们先用层次分析法确定每天需要肉、面包、蔬菜的比重,再重新线性规划。建立如下的层次模型:注意:由于第 2 层支出因素 D2直接支配第 4 层,需要在第 3 层补上一个因素“补项 B”(仍当作“支出”看待),它只受 D2支配,并且支配 D2的每个支配因素(第 4 层的肉 Me,面包 Br,蔬菜 Ve)。有了

20、上面的层次结构,再根据偏好建立判断矩阵(当然偏好因人而异):1.第 2 层对第 1 层 判断矩阵:131/311 1,1C 逻辑数组:C12,1=true true.2.第 3 层对第 2 层(1)第 3 层对第 2 层第 1 元素 D1 判断矩阵:1121121/22 1,11/21C 逻辑数组:C22,1=true true true false.(2)第 3 层对第 2 层第 2 元素 D2 判断矩阵:C21,2=1 逻辑数组:C22,2=false false false ture.3.第 4 层对第 3 层(1)第 4 层对第 3 层第 1 元素 A 判断矩阵(用数据直接做比得到):

21、10.3527/0.00050.3527/250.0005/0.352710.0005/2525/0.352725/0.0013 1,105C 逻辑数组:C32,1=true true true.(2)第 4 层对第 3 层第 2 元素 B2 判断矩阵(用数据直接做比得到):10.0021/0.00060.0021/0.0020.0006/0.002110.0006/0.0020.002/0.00210.002/0.000613 1,2C 逻辑数组:C32,2=true true true.(3)第 4 层对第 3 层第 3 元素 Q 判断矩阵(用数据直接做比得到):111.93/11.511

22、1.93/1.0411.51/11.93111.51/1.041.04/11.931.04/11.13 1,351C 逻辑数组:C32,3=true true true.(4)第 4 层对第 3 层第 4 元素 B 判断矩阵(用单价比的倒数,因为单价越高越不重要):10.006/0.02750.007/0.02750.0275/0.00610.007/0.0060.0275/0.0070.006/0.3 1,40071C 逻辑数组:C32,4=true true true.4.有了上面的分析,层次模型的元胞数组表示 C 已经确定,调用函数 ahp.m 即可 C=cell(3,1);C11,1=

23、1 1/3;3 1;C12,1=true(2,1);C21,1=1 1 2;1 1 2;1/2 1/2 1;C22,1=true true true false;C21,2=1;C22,2=false,false,false,true;C31,1=1,0.3527/0.0005,0.3527/25;0.0005/0.3527,1,0.0005/25;25/0.3527,25/0.0005,1;C32,1=true(3,1);C31,2=1,0.0021/0.0006,0.0021/0.002;0.0006/0.0021,1,0.0006/0.002;0.002/0.0021,0.002/0.0

24、006,1;C32,2=true(3,1);C31,3=1,11.93/11.51,11.93/1.04;11.51/11.93,1,11.51/1.04;1.04/11.93,1.04/11.51,1;C32,3=true(3,1);C31,4=1,0.006/0.0275,0.007/0.0275;0.0275/0.006,1,0.007/0.006;0.0275/0.007,0.006/0.007,1;C32,4=true(3,1);W,ahpResult=ahp(C);W 运行结果:W=0.2376 0.2293 0.5331 该结果表明,按这个人的情况,肉、面包、蔬菜的比例取 0.2

25、376,0.2293,0.5331 比较合适。引入参变量 k,令 x1=0.2376k,x2=0.2293k,x3=0.5331k,将其代入前文的线性规划模型,得到 min0.0116.13.411675000.00171.63386.02828548.50fks tkk 用 linprog 求解:f=0.0116;A=-13.4116;0.0017;6.0282;b=-7500;1.6338;8548.5;W=0.2376 0.2293 0.5331;options=optimset(LargeScale,off,Simplex,on);k,fval,flag=linprog(f,A,b,0,inf,options)x=k*W 运行结果:k =1.4181e+03 fval =16.4498 flag =1 x=336.9370 325.1669 755.9811 故 k=1418.1,x1=336.94,x2=325.17,x3=755.98.每天食品支出16.45 元。注:对于不同的人可以有不同的判断矩阵 C11,1,即营养与支出的相对重要程度,例如,修改为1 1/3;3 1,可以得到 x1=188.88,x2=497.82,x3=567.04.每天食品支出 12.14 元。主要参考文献:吴鹏,Matlab 高效编程技巧与应用:25 个案例分析第 11 章。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁