基于Matlab的层次分析法与运用
若水1147由 分享
时间:
推荐文章
基于Matlab的层次分析法与运用
摘要:本文通过使用Matlab软件进行编程,在满足同一层次中各指标对所有的下级指标均产生影响的假定条件下,实现了层次分析法的分析运算。本程序允许用户自由设定指标层次结构内的层次数以及各层次内的指标数,通过程序的循环,用户只需输入判断矩阵的部分数据,程序可依据层次分析法的计算流程进行计算并作出判断。本程序可以方便地处理层次分析法下较大的运算量,解决层次分析法的效率问题,提高计算机辅助决策的时效性。关键词:Matlab层次分析法 判断矩阵 决策
在当前信息化、全球化的大背景下,传统的手工计算已不能满足人们高效率、高准确度的决策需求。因此计算机辅助决策当仁不让地成为了管理决策的新工具、新方法。基于此,本文在充分发挥计算机强大运算功能的基础上,选用美国MathWorks公司的集成数学建模环境Matlab R2009a作为开发平台,使用M语言进行编程,对计算机辅助决策在层次分析法中的运用进行讨论。试图通过程序实现层次分析法在计算机系统上的运用,为管理决策探索出新的道路职称论文。
1 层次分析法的计算流程
根据层次分析法的相关理论,层次分析法的基本思想是将复杂的决策问题进行分解,得到若干个下层指标,再对下层指标进行分解,得到若干个再下层指标,如此建立层次结构模型,然后根据结构模型构造判断矩阵,进行单排序,最后,求出各指标对应的权重系数,进行层次总排序。
1.1 构造层次结构模型 在进行层次分析法的分析时,最主要的步骤是建立指标的层次结构模型,根据结构模型构造判断矩阵,只有判断矩阵通过了一致性检验后,方可进行分析和计算。其中,结构模型可以设计成三个层次,最高层为目标层,是决策的目的和要解决的问题,中间层为决策需考虑的因素,是决策的准则,最低层则是决策时的备选方案。一般来讲,准则层中各个指标的下级指标数没有限制,但在本文中设计的程序尚且只能在各指标具有相同数量的下级指标的假定下,完成层次分析法的分析,故本文后文选取的案例也满足这一假定。
1.2 建立判断矩阵 判断矩阵是表示本层所有因素针对上一层某一个因素的相对重要性的比较给判断矩阵的要素赋值时,常采用九级标度法(即用数字1到9及其倒数表示指标间的相对重要程度),具体标度方法如表1所示。
1.3 检验判断矩阵的一致性 由于多阶判断的复杂性,往往使得判断矩阵中某些数值具有前后矛盾的可能性,即各判断矩阵并不能保证完全协调一致。当判断矩阵不能保证具有完全一致性时,相应判断矩阵的特征根也将发生变化,于是就可以用判断矩阵特征根的变化来检验判断的一致性程度。在层次分析法中,令判断矩阵最大的特征值为λmax,阶数为n,则判断矩阵的一致性检验的指标记为:
⑴
CI的值越大,判断矩阵的一致性越差。当阶数大于2时,判断矩阵的一致性指标CI与同阶平均随机一致性指标RI之比称为随机一致性比率,其中RI的值由表2确定,CR的计算公式为:
⑵
当CR<0.1时,即可认为判断矩阵具有满意的一致性。然而由于在为各指标间相互重要性程度大小的判定过程中存在人为主观因素,因此在判断矩阵不能通过一致性检验时,需要对各指标间相互重要性程度重新进行赋值,直至其通过矩阵一致性检验。其最大特征值对应的特征向量即为该指标相对于上一级指标的重要性排序。
1.4 进行层次总排序 在通过层次单排序得出各指标相对上一级指标的重要性排序向量后,沿递阶层次结构逐级依次由下往上进行矩阵计算,则可得到各底层指标对最高层的相对重要性权重,从而可对各底层指标的优先次序进行排序,找出重点指标并予以特别关注。
2 Matlab层次分析法程序设计思路
Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。Matlab可以进行矩阵运算、绘制函数和数据图像、设计算法、创建用户界面、连接用其他编程语言编写的程序等。Matlab以矩阵为计算单位,采用M语言作为程序语言,与C语言有诸多相似之处,并可方便地与C/C++、Microsoft Excel等工具和软件进行结合并进行代码共享和数据交换,可以方便地进行数值分析、图像处理等功能,配合功能强大的统计和金融工具箱,Matlab已经可以在概率统计、经济管理等方面发挥强大的作用。
笔者所编程序即是运用Matlab丰富的函数、矩阵运算和程序控制功能,探索其在层次分析法分析中的运用。程序通过三层循环结构,按照表1所示的方法和规则,实现多个层次上各个判断矩阵的输入和生成,并可以通过计算它们的特征值,按照上述公式⑴、公式⑵和表2所示的方法进行矩阵的一致性检验。当所有的判断矩阵一致性检验均通过后,程序将对各层次从下往上依次计算,最终得出各底层指标相对于准则层的权重系数,从而有助于选择最优方案,程序流程如图1所示,其中的平行四边形表示输入数据,菱形表示判断,根据判断结果的不同出现2个分支。
程序中,用于生成判断矩阵的部分程序如下:
for a=1:mp
for b=1:mp
A(b,b)=1;
if a fprintf('Line %i, Row %i\n',[a;b]);
A(a,b)=input('Please input the value: ');
A(b,a)=1/A(a,b);
end
end
生成层次总排序权重矩阵的部分程序如下:
for r=p-1:1
v=['vect=vect*vector' int2str(r)];
evalc(v)
end
fprintf('The final judging vector is:')
fprintf('\n%.4f',vect)
[m,maxpl]=max(vect);
fprintf('\n\nThe Scheme %i is the best solution.\n\n',maxpl)
其中,mp为该层内的指标数,p为指标的层数,均在程序开始时由用户指定;vect初始被赋值为空矩阵,经循环后生成第一指标层的判断向量;m为vect向量的最大值,maxpl记录该最大值所处的位置。
由于本程序结构上的限制,本程序尚且只能在同一层次各个指标均对所有下一层次指标产生影响时处理层次分析法的问题,故本文举例亦遵照该假定进行。
3 应用举例
某市一十字路口常常因行人过街拥挤,存在安全隐患,市政部门欲对该路口进行改造,现提出了3套改造方案:
方案1(S1):建地下通道;
方案2(S2):建人行天桥;
方案3(S3):拆除周围的旧建筑,拓宽街面。
市政部门认为,该改造工程需考虑如下几个方面的指标:
指标1(P1):通车能力的大小;
指标2(P2):交通安全系数的高低;
指标3(P3):建筑费用的高低;
指标4(P4):群众出行方便度的大小;
指标5(P5):市容整洁程度的高低。
现在需要就以上问题进行决策,需决定在三套方案(S1~S3)中选用最优方案。其主要步骤及操作如下所示。
第1步:根据题目建立层次结构模型
由于题目要求对3套方案均需考虑5个指标,故可画出如图2所示的指标体系结构图。
第2步:形成判断矩阵
形成判断矩阵,需要对各指标相互的重要性进行标度,矩阵的上三角部分与下三角部分以对角线为分界,对称呈倒数排列,对角线上元素均为1,因为各指标与自身的重要性为“同等重要”,不同的指标A1对A2的重要性与A2对A1的重要性互为倒数。根据经验对图2中各指标相互的重要性进行标度后,可得如下几个矩阵:
第3步:将以上各矩阵输入程序,进行计算
在Matlab的命令窗口依次按提示输入表 3~表 8所示矩阵后,程序输出结果经整理如下表:
接着,程序对各矩阵计算所得的最大特征值对应的特征向量按下式进行标准化:
再给出各指标的特征向量组成的矩阵:
进而得出三套方案相对于目标的权重向量为:
程序经比较,发现方案1权重系数最大,进而得出最终结论:方案1(地下通道)占优。
4 总结及分析
本程序在运行开始时,会要求用户输入指标的层数和第一层的指标数,在每一个层次的矩阵元素输入完成后,程序会要求用户输入下一个层次中的指标数,因此本程序可进行无限个层次的迭代运算。当然,程序只能替代层次分析法的运算部分,由于对判断矩阵赋值具有主观性,常常需要通过其他的方法进行确定,如Delphi方法等。在把设定好的判断矩阵输入程序进行运算时,程序可以保证矩阵运算的精度和效率,在对代码进行优化和扩展后,还可以将过程与结果数据导出到Excel和Eviews,以方便进行后续的数据整理和计量分析。
另外,如前所述,本程序存在一个局限,即需要在满足同一层次内各指标对所有下一层次指标均产生影响的假定时才能正确运行。笔者将在今后对程序进行进一步的完善,提升其功能和易用性,使其能满足不同类型、不同条件下的层次分析法分析,在日常生活的计算机辅助决策领域发挥更大的作用。
参考文献:
[1]凌泽华.层次分析法在企业核心员工界定中的运用[J].经营管理者, 2010,(2).
[2]刘文琦,熊惠珍.层次分析法在财务指标分析中的应用[J].审计与理财,2010,(1).
[3]王翼,王歆明.MATLAB基础及在经济学与管理科学中的应用[M].北京:机械工业出版社,2009,7.