|
摘要:本文通过使用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的计算公式为:
⑵
当CR0.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) |
|