层次分析法的MATLAB 设计与实现
2015-07-13冉伟刚
冉伟刚
摘要:许多人利用层次分析法解决工作中遇到的问题时,受计算条件的限制 ,不能方便的给出结果,从而影响现场决策。利用 MATLAB对层次分析法的判断、分析和计算过程进行处理后,为决策者提供方便、友好的对话界面,当决策者输入自己的层次结构方案和判断矩阵后迅速得出相应的结果,为解决实际问题提供一个快捷的方法。
关键词:AHP;层次分析法;MATLA
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)13-0234-02
Abstract: Many people use AHP to solve the problems encountered in the work, due to the calculation conditions, the results are not convenient, thus affecting the on-site decision-making. TheAHP judgment, analysis and calculation process using MATLAB, and provide a convenient and friendly interface for decision makers, decision makers when the input hierarchy of the program and their own judgment matrix quickly after the corresponding results, provide aquick method for solving practical problems.
Key words: AHP; Analytic Hierarchy Process;MATLAB
1 层次分析法简介
层次分析法( The Analytic Hierarchy Process,简称AHP)由美国运筹学家T.L.Saaty提出,是一种定性与定量相结合的多目标决策分析技术,其基本原理是将待评价或识别的复杂问题分解成若干层次,由专家或决策者对所列指标通过重要程度的两两比较逐层进行判断评分,利用计算判断矩阵的特征向量确定下层指标对上层指标的贡献程度或权重,从而得到最基层指标对于总体目标的重要性权重排序[1]。
AHP方法多用于战略目标体系的层次结构分析和决策研究,也可应用于系统诊断中的重要性排序。本文结合实例介绍其工作步骤和具体方法,以及用MATLAB计算的过程。
2 层次分析法
1)明确问题,建立层次结构
本论文以一个例子来说明。假设研究对象是某工业企业。已知该企业的主要问题是多年经营亏损,经济效益不好,希望通过系统诊断方法,找出影响企业经济情况不好的因素,并给出解决问题的途径。
为此,首先要请若干名专家对企业存在的问题进行诊断。经讨论共提出7个问题,问题的层次结构如图1所示。
2)分层次建立判断矩阵
所谓判断矩阵,是指用来分析第k+1层问题对与其对应的第K层问题相对重要性而建立的矩阵表达式。建立判断矩阵一般自上而下地进行,即首先分析第二层B中各因素相对A而言的相对重要性,为此可构成A-B判断矩阵。其一般形式如下:
bij的数值一般由若干熟悉情况的专家,按规定的记分标准分别打分,然后汇总取平均值。
同理,可得第三层C中各因素相对第二层B而言的相对重要性矩阵B1、B2、B3。
3)层次单排序
根据判断矩阵去推算第K+1层各因素对第K层问题的相对重要性系数叫层次单排序。例如根据A—B判断矩阵,去推算Bi(i=1,2,3)对问题A的相对重要性系数,记成WBi(i=1,2,3)。用向量表示成:
[WB=WB1WB2WB3且i=13WBi=1]
WBi的计算方法有三种:算术平均值法、几何平均值法和最大特征根法。这里MATLAB程序使用最大特征根法。
最大特征根法是先求出根据专家评定得出的判断矩阵B的最大特征根λmax,然后按下式:
3 MATLAB的实现
AHP法MATLAB可以定义一个m函数AHP来实现,代码如下所示:
function [W,S]=AHP(AB,BC_R,B1,B2,B3)
[row1, col1] = size(BC_R);
[A,WA]= maxeigvalvec(AB);
[A,WB1]=maxeigvalvec(B1);
[A,WB2]=maxeigvalvec(B2);
[A,WB3]=maxeigvalvec(B3);
[RIA,CRA,CIA] = sglsortexamine(AB);
CI=[];
RI=[];
if nargin>=3
[RI1,CR1,CI1] = sglsortexamine(B1);
RI=[RI RI1];
CI=[CI CI1];
j=1;
for i=1:col1
if BC_R(1,i)==1
BC(1,i)=WB1(j);
j=j+1;
else
BC(1,i)=0;
end
end
end
{ nargin>=4、nargin>=5的情况和nargin>=3是一样的就不在赘述}
RI
CI
W=WA'*BC;
BC=BC'
[Y,S]=sort(W,'descend');
S
%层次总排序的一致性检验
if (CI*WA)/(RI*WA)<0.1
disp('恭喜!恭喜!层次总排序通过一致性检验')
end
代码解释如下:
其中:函数参数AB是A—B矩阵,B1是B1—C矩阵,B2是B2—C矩阵,B3是B3—C矩阵,BC_R是B和C的关系矩阵,若B与C有关系则值是1,无关系是0,例如:在这个例子中BR_C是:
BR_C=
即矩阵BR_C第一行是B1与C1、C2、C3、C4、C5有关系,第二行是B2与C的C3、C4、C6、C7有关系,第三行是B3与C的C5、C6、C7有关系。
函数maxeigvalvec (AB)是求矩阵AB的最大特征根。
函数sglsortexamine(AB)是用来对AB矩阵进行一致性检验的,如果矩阵通过一致性检验则显示['恭喜你!',inputname(1),'此矩阵通过一致性检验!'] ;否则显示['对不起',inputname(1), '矩阵没通过一致性检验,请重新调整判断矩阵']。我们知道,为了层次排序的有效性,必须对判断矩阵的评定结果进行一致性检验,所以用函数sglsortexamine()来进行一致性检验,方便用户查看判断矩阵是否合理,如果不能通过一致性检验,就要对矩阵进行改进。为把握起见,最后还对层次总排序就行了一致性检验,如果层次总排序通过一致性检验,则会显示“恭喜!恭喜!层次总排序通过一致性检验”。
W=WA'*BC;为最后的层次总排序值。
最后用[Y,S]=sort(W,'descend');函数对W进行了排序,S的值就是排序的结果,S的值一目了然的显示排序结果。
只要正确写入层次分析法AHP函数的参数AB,BC_R,B1,B2,B3,即可一步计算出排序结果,方便易行。
4 结束语
AHP法是一种定性与定量相结合的、系统化、层次化的分析方法,由于它在处理复杂的决策问题上的实用和有效性,很快在世界范围得到重视,它的应用以遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗、环境等领域,为了更好的实用它,本文论述了层次排序法的过程用MATLAB的m函数来实现,实现了用MATLAB的m函数一步出结果,免去了繁琐的计算过程,给人们使用AHP法带来方便。
参考文献:
[1] 胡明甫. AHP层次分析法及MATLAB的应用研究[J]. 钢铁技术, 2004(2): 36-38.
[2] 李绍勤, 刘飞, 张崇. 层次分析法在车辆事故分析中的应用[J]. 陕西师范大学学报: 自然科学版, 2004(6): 214-218.
[3] 宋飞, 赵法锁. 地下工程风险分析的层次分析法及MATLAB应用[J]. 地球科学与环境学报, 2008(9): 292-296.
[4] 焦树锋. AHP 法中平均随机一致性指标的算法及MA TLAB 实现[J]. 太原师范学院学报: 自然科学版, 2006(12): 45-47.