《数学建模算法与应用》——学习笔记chapter8. 层次分析法

层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。

1. 层次分析法的基本原理与步骤

人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。运用层次分析法建模,大体上可按下面四个步骤进行:
(i)建立递阶层次结构模型;
(ii)构造出各层次中的所有判断矩阵;
(iii)层次单排序及一致性检验;
(iv)层次总排序及一致性检验。

1.1 递阶层次结构的建立与特点

首先要把问题条理化、层次化,构造出一个有层次的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属性及关系形成若干层次。上一层次的元素作为准则对下一层次有关元素起支配作用。这些层次可以分为三类:
(i)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果,因此也称为目标层。
(ii)中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。
(iii)最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等,因此也称为措施层或方案层。

递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地层次数不受限制。每一层次中各元素所支配的元素一般不要超过 9 个。这是因为支配的元素过多会给两两比较判断带来困难。

1.2 构造判断矩阵

《数学建模算法与应用》——学习笔记chapter8. 层次分析法_第1张图片

1.3 层次单排序及一致性检验

判断矩阵 A 对应于最大特征值 λ max ⁡ λ_{\max} λmax的特征向量W ,经归一化后即为同一层次相应因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。上述构造成对比较判断矩阵的办法虽能减少其它因素的干扰,较客观地反映出一对因子影响力的差别。但综合全部比较结果时,其中难免包含一定程度的非一致性。
《数学建模算法与应用》——学习笔记chapter8. 层次分析法_第2张图片
《数学建模算法与应用》——学习笔记chapter8. 层次分析法_第3张图片
《数学建模算法与应用》——学习笔记chapter8. 层次分析法_第4张图片

1.4 层次总排序及一致性检验

上面我们得到的是一组元素对其上一层中某元素的权重向量。我们最终要得到各元素,特别是最低层中各方案对于目标的排序权重,从而进行方案选择。总排序权重要自上而下地将单准则下的权重进行合成。
《数学建模算法与应用》——学习笔记chapter8. 层次分析法_第5张图片
设上一层次(A层)包含 A 1 , . . . , A m A_1,...,A_m A1,...,Am共m 个因素,它们的层次总排序权重分别为 a 1 , . . . a m a_1,...a_m a1,...am。又设其后的下一层次(B层)包含n个因素 B 1 , . . . , B n B_1,...,B_n B1,...,Bn,它们关于 A j A_j Aj的层次单排序权重分别为 b 1 j , . . b n j b_1j,..b_nj b1j,..bnj(当 Bi 与 Aj 无关联时,bij = 0 )。现求 B 层中各因素关于总目标的权重,即求 B 层各因素的层次总排序权重 b 1 , . . . b n b_1,...b_n b1,...bn,计算按表 3 所示方式进行,即 b i = ∑ j = 1 m b i j a j b_i=\sum\limits_{j=1}^mb_{ij}a_j bi=j=1mbijaj

对层次总排序也需作一致性检验,检验仍象层次总排序那样由高层到低层逐层进行。当综合考察时,各层次的非一致性仍有可能积累起来,引起最终分析结果较严重的非一致性。
《数学建模算法与应用》——学习笔记chapter8. 层次分析法_第6张图片

2. 层次分析法的应用

主要困难有两个:
(i)如何根据实际情况抽象出较为贴切的层次结构;
(ii)如何将某些定性的量作比较接近实际定量化处理。

其局限性主要表现在:
(i)它在很大程度上依赖于人们的经验,主观因素的影响很大,它至多只能排除思维过程中的严重非一致性,却无法排除决策者个人可能存在的严重片面性。
(ii)比较、判断过程较为粗糙,不能用于精度要求较高的决策问题。
《数学建模算法与应用》——学习笔记chapter8. 层次分析法_第7张图片
《数学建模算法与应用》——学习笔记chapter8. 层次分析法_第8张图片
计算的 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

你可能感兴趣的:(《数学建模算法与应用笔记》)