文章目录
- 前言
- 一、层次分析法的应用场景
- 二、层次分析法的模型建立
- 2.1递阶层次结构的建立
- 例1
- 2.2 构造判断矩阵
- 2.3 层次单排序及一致性检验
- 三、层次分析法的应用案例
- 例2
- 四、代码
前言
层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。
即层次分析法可用于定性分析。
一、层次分析法的应用场景
层次分析法(AHP)是一种定性与定量分析结合的方法,可用于做决策,在几种方案中做选择,也可以对样本进行评价,还可以进行赋权,可作为主观赋权的方法与客观赋权法结合使用。适用范围很广。
二、层次分析法的模型建立
主要步骤:
- 建立递阶层次结构模型;
- 构造出各层次中的所有判断矩阵;
- 层次单排序及一致性检验;
- 层次总排序及一致性检验。
2.1递阶层次结构的建立
在AHP中,复杂问题被分解为元素,这些元素又按其属性及关系形成若干层次,上一层次的元素作为准则对下一层次有关元素起支配作用。
这些层次可以分为三类:
- 最高层(目标层):只有一个元素,一般是分析问题的预定目标或理想结果。
- 中间层(准则层):包含了为实现目标所涉及的中间环节或准则,可以不只一层。
- 最底层(方案层):包括了各种措施、决策方案。
一般层次的数量不受限制,每一层次中各元素所支配的元素一般不要超过 9 个。
例1
假期旅游有、
、
3 个旅游胜地供你选择,试确定一个最佳地点。在此问题中,你会根据诸如景色、费用、居住、饮食和旅途条件等一些准则去反复比较 3 个侯选地点。可以建立如图1的层次结构模型。
2.2 构造判断矩阵
判断矩阵表示针对上一层次某因素而言,本层次与之有关的各因素之间的相对重要性。假设A层中因素与下一层次中因素
有联系,则我们构造的判断矩阵如下表:
是对于
而言,
对
的相对重要性的数值表示。
通常取1、3、5、7、9及它们的倒数,其含义为:
而2、4、6、8表示第个因素相对于第
个因素的影响介于上述两个相邻等级之间。
另外,若因素 与因素
的重要性之比为
,那么因素
与因素
重要性之比为
2.3 层次单排序及一致性检验
判断矩阵 A 对应于最大特征值 的特征向量
这句话不好理解,看下面这个公式:
其中为前面的判断矩阵,
为
的最大特征根,
为对应于
的正规化特征向量,
的分量
对判断矩阵的一致性检验的步骤如下:
- 计算一致性指标
- 为检验判断矩阵一致性,引入平均一致性指标
进行判断。
下表给出了500个样本判断矩阵计算的平均随机一致性指标检验值,查表即可。 - 计算一致性比例
当 - 层次总排序及一致性检验
层次总排序为确定某层所有因素对于总目标相对重要性的排序权值的过程。对于上一层次A,其包含m个因素A1,A2,…,Am,其层次总排序权值为a1,a2,…,am,下一层次B包含n个元素B1,B2,…,Bn,它们对于因素Aj的层次单排序权值分别为bj1,bj2,…,bjn(当Bi与Aj无联系时,bji=0)此时B层次总排序权值由下表给出:
对层次总排序也需作一致性检验,检验仍象层次总排序那样由高层到低层逐层进行。这是因为虽然各层次均已经过层次单排序的一致性检验,各成对比较判断矩阵都已具有较为满意的一致性。但当综合考察时,各层次的非一致性仍有可能积累起来,引起最终分析结果较严重的非一致性。
设 B 层中与相关的因素的成对比较判断矩阵在单排序中经一致性检验,求得单排序一致性指标为
,相应的平均随机一致性指标为
(
、
已在层次单排序时求得),则 B 层总排序随机一致性比例为
当
三、层次分析法的应用案例
例2
挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型,如图 2 所示。
准则层的判断矩阵如表 4 所示(这一部分需要建模者自己构造,如果比赛时为了增加可靠性,可以说是专家评估或者调查问卷结果)。
方案层的判断矩阵如表 5 所示。
层次总排序的结果如表 6 所示。
四、代码
matlab代码如下:
clc,clear
fid=fopen('txt3.txt','r');
n1=6;n2=3;
a=[];
for i=1:n1
tmp=str2num(fgetl(fid));
a=[a;tmp]; %读准则层判断矩阵
end
for i=1:n1
str1=char(['b',int2str(i),'=[];']);
str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']);
eval(str1);
for j=1:n2
tmp=str2num(fgetl(fid));
eval(str2); %读方案层的判断矩阵
end
end
ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标
[x,y]=eig(a);
lamda=max(diag(y));
num=find(diag(y)==lamda);
w0=x(:,num)/sum(x(:,num));
cr0=(lamda-n1)/(n1-1)/ri(n1)
for i=1:n1
[x,y]=eig(eval(char(['b',int2str(i)])));
lamda=max(diag(y));
num=find(diag(y)==lamda);
w1(:,i)=x(:,num)/sum(x(:,num));
cr1(i)=(lamda-n2)/(n2-1)/ri(n2);
end
cr1, ts=w1*w0, cr=cr1*w0
纯文本文件txt3.txt中的数据格式如下::
1 1 1 4 1 1/2
1 1 2 4 1 1/2
1 1/2 1 5 3 1/2
1/4 1/4 1/5 1 1/3 1/3
1 1 1/3 3 1 1
2 2 2 3 3 1
1 1/4 1/2
4 1 3
2 1/3 1
1 1/4 1/5
4 1 1/2
5 2 1
1 3 1/3
1/3 1 1/7
3 7 1
1 1/3 5
3 1 7
1/5 1/7 1
1 1 7
1 1 7
1/7 1/7 1
1 7 9
1/7 1 1
1/9 1 1