数学建模社区-数学中国

标题: 层次分析法 AHP [打印本页]

作者: 浅夏110    时间: 2020-5-30 14:59
标题: 层次分析法 AHP
层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家 T. L. Saaty 教授于上世纪 70 年代初期提出的一种简便、灵活而又实用的 多准则决策方法。
7 B! m$ j8 D: j* @7 {# T/ @2 `! W2 b! h9 V6 W
层次分析法的基本原理与步骤
0 _0 @* X5 V) @0 u2 B# P) K人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是 一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次 分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 运用层次分析法建模,大体上可按下面四个步骤进行:' F; F0 R( A, N! K5 o

3 ?( r  |( n0 C# n& c5 ~(i)建立递阶层次结构模型;& P7 A/ T6 }" [- r0 K' ^, n
+ ~4 H- y, K: `  |3 Z. |) s
(ii)构造出各层次中的所有判断矩阵;
( k% T2 C" q; S' |& J7 `3 ?2 ?/ {( U! ~3 z& q7 \
(iii)层次单排序及一致性检验;  t7 w3 u: h1 |4 e' ^, {

/ B+ O) B9 F) h5 ^: {& V(iv)层次总排序及一致性检验。 下面分别说明这四个步骤的实现过程。
3 d0 Y. j/ Z, l6 @* L/ `
& N- a* G6 z2 L1 |递阶层次结构的建立与特点
2 t  N. G0 Q. L, ^% _  Q1 @; U& o应用 AHP 分析决策问题时,首先要把问题条理化、层次化,构造出一个有层次 的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属 性及关系形成若干层次。上一层次的元素作为准则对下一层次有关元素起支配作用。 这些层次可以分为三类:. F/ y. l8 |# B9 T+ Q: G
! H  ^. E, W; B5 q$ G
(i)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结 果,因此也称为目标层。
. z8 M! |8 u, d- E$ f' ]7 v: D; j6 h+ C& _" Q" U; v
(ii)中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干 个层次组成,包括所需考虑的准则、子准则,因此也称为准则层。
+ m% b5 j/ o) i0 U" k* o6 o, C) ]3 t# s! \
(iii)最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等, 因此也称为措施层或方案层。
7 ^- T: E5 S, R% t: ^+ \* Q
5 F4 s) F* X) r2 R递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,一般地 层次数不受限制。每一层次中各元素所支配的元素一般不要超过 9 个。这是因为支配 的元素过多会给两两比较判断带来困难。
! i2 ], s/ I# _+ [7 T3 d) b: V3 j+ ]& z1 b, b
下面结合一个实例来说明递阶层次结构的建立。  
) H, {# F/ y7 P2 [
2 Y& ^$ V7 k; e8 F5 Q0 H- v2 f, ?
0 R; p" I) y1 o
! R7 X' L0 r( o7 B. P5 D8 d构造判断矩阵 * C4 N8 @* x7 g6 s+ E1 h4 F
层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重 并不一定相同,在决策者的心目中,它们各占有一定的比例。
2 m+ F  H. i# V0 B
' X0 m; O& U' k; C在确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难是这些比重常常不易定量化。此外,当影响某因素的因子较多时,直接考虑各因子对该因素有 多大程度的影响时,常常会因考虑不周全、顾此失彼而使决策者提出与他实际认为的 重要性程度不相一致的数据,甚至有可能提出一组隐含矛盾的数据。为看清这一点, 可作如下假设:将一块重为 1 千克的石块砸成n小块,你可以精确称出它们的重量, 设为  ,现在,请人估计这n小块的重量占总重量的比例(不能让他知道各 小石块的重量),此人不仅很难给出精确的比值,而且完全可能因顾此失彼而提供彼 此矛盾的数据。
1 S  G7 y% k2 {( R0 e
% i) v* I* _( {1 l2 ~, ~9 e5 L, ?9 R" c7 a' [9 w! I' ~9 i
, L3 a7 o1 }. K: f) I' t$ _8 I

  X) U& Y. v( t0 m$ y/ b' g7 v+ Q3 f* R
从心理学观点来看,分级太多会超越人们的判断能力,既增加了作判断的难度, 又容易因此而提供虚假数据。Saaty 等人还用实验方法比较了在各种不同标度下人们判 断结果的正确性,实验结果也表明,采用 1~9 标度最为合适。 ( f0 _+ {0 [/ o1 j8 J
- O" Z4 g0 F9 \8 z2 e: {! z' S
最后,应该指出,一般地作   次两两判断是必要的。有人认为把所有元素都和某个元素比较,即只作 1 −n 次比较就可以了。这种作法的弊病在于,任何一个判 断的失误均可导致不合理的排序,而个别判断的失误对于难以定量的系统往往是难以避免的。进行   次比较可以提供更多的信息,通过各种不同角度的反复比较,从而导出一个合理的排序。 - j" o2 I7 Z0 w% ^+ G7 I

( h- p$ Z5 ~- e层次单排序及一致性检验
- e0 {2 u# q. y; d
3 b4 H2 X0 y& h1 j5 s7 _8 G  `8 D  S5 a. @/ o4 |4 W/ \  D

; o7 i$ Z0 ?& L1 y
# M9 }( a+ a- N( O2 A* t4 \/ ?/ F5 d: q0 g# J
; d/ P  \7 N, W& {7 z

$ B. y3 h1 N$ K6 X+ Q- e7 {
9 t; E* y: ~2 g0 f" j5 ]- ^- H
& M! _& X7 X6 {  E, u$ i层次总排序及一致性检验 ! _+ m4 n# C  x- D4 n# {
上面我们得到的是一组元素对其上一层中某元素的权重向量。我们最终要得到各 元素,特别是最低层中各方案对于目标的排序权重,从而进行方案选择。总排序权重 要自上而下地将单准则下的权重进行合成。
; _( l. c: i' d7 d( {$ r/ y/ w$ I1 j; o% l0 o2 E9 [

9 f6 I- \' S7 x8 Q8 X* n' W
' o9 y6 O: x0 N- _9 m, P3 \9 m
" q" s( K2 [6 o8 {, g4 G& `
) D6 _3 ?, l- [5 D0 x5 k0 `5 v; p1 G; M, f3 @! Z
层次分析法的应用
6 D, r7 q- ~! v3 @  d, A在应用层次分析法研究问题时,遇到的主要困难有两个:
5 c3 `8 R6 L2 \% S' `4 ~! V$ K" L% m. Q1 A* Z& h
(i)如何根据实际情况抽象出较为贴切的层次结构;) \( K7 F$ X$ l7 a. U1 Q

  O: S% O$ y' @& n1 B# {$ u(ii)如何将某些定性的量作比较接近实际定量化处理。 层次分析法对人们的思维过程进行了加工整理,提出了一套系统分析问题的方法,为 科学管理和决策提供了较有说服力的依据。但层次分析法也有其局限性,主要表现在:8 [+ y9 z2 [/ r, r2 D1 M/ t
: h9 Q+ h7 u+ H2 v0 A; X
(i)它在很大程度上依赖于人们的经验,主观因素的影响很大,它至多只能排除思维 过程中的严重非一致性,却无法排除决策者个人可能存在的严重片面性。9 ]/ j9 j, X- }8 }7 T- f

2 G% q2 {# ~$ A8 f: {2 e(ii)比较、 判断过程较为粗糙,不能用于精度要求较高的决策问题。AHP 至多只能算是一种半定量(或定性与定量结合)的方法。
4 W# N, z1 y2 Y8 W* C* _
) E1 n/ O6 ]& l' F  R9 P在应用层次分析法时,建立层次结构模型是十分关键的一步。现再分析一个实例, 以便说明如何从实际问题中抽象出相应的层次结构。8 s$ R- a; K% ]2 ^' o8 h9 B0 v2 G+ t
) |7 u- _2 G4 K" C1 W5 L3 I
例 2  挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该 生根据已有信息建立了一个层次结构模型,如图 2 所示。 % W1 L( _) s; A1 ^/ N' U& g

6 r; M+ o3 _9 W* ?; ~6 J$ q , M& z" B3 Q4 I) ^( Q& \9 v

6 k; d* n( X, D0 U  s4 z
3 h; E3 Q& B- C  ?, r; G" {" h1 s& L7 e, ?+ j* j0 ~" F
计算的 Matlab 程序如下:
8 `1 ~& P/ A6 x  K' N
% Q: W4 y# c, j2 b. o7 Y' q$ y8 O) zclc,clear $ W1 S3 b+ V# D) u
fid=fopen('txt3.txt','r');  % O; l6 m! M5 @. K3 j9 |4 d- p5 k
n1=6;n2=3;
6 G& U1 o5 O8 Z0 K# P. ~! z: f3 Ra=[];
* y6 n* @; Y. J+ ~  t8 kfor i=1:n1    # e$ E' }* j8 s9 T$ D2 l
    tmp=str2num(fgetl(fid));      , E6 q8 O9 D# J; I7 w
    a=[a;tmp]; %读准则层判断矩阵
, v( h2 L9 c8 m0 v6 lend + ]* @# l) D- F1 e
for i=1:n1     
) t' g6 X7 J8 z8 b; t# C: @- j    str1=char(['b',int2str(i),'=[];']);     ' B/ o3 e  E  B& p
    str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']);     
0 K5 p' M* J8 z! C. D    eval(str1);     7 P$ S7 \1 A. V7 g; g  Y
    for j=1:n2         * J; h4 G7 N! X* l! K, `
        tmp=str2num(fgetl(fid));         
. M5 N0 y2 @, c3 W        eval(str2); %读方案层的判断矩阵     
& R( P6 X+ S2 @( w: A; l    end
. g# w3 t( K: a2 Q8 }2 c; Q4 lend   N: T7 I8 }2 {/ D* j
ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标
; p: {" s9 @! G6 m9 A. A9 }: `0 ~! F8 z' K[x,y]=eig(a); 0 E; O8 H0 ~7 c- J  }
lamda=max(diag(y)); 7 M9 a1 J. y( ?; i+ I! i$ j. _1 s
num=find(diag(y)==lamda);
$ L+ ]8 J" |3 o" Yw0=x(:,num)/sum(x(:,num)); * L( G' F# X+ ?# [4 F* Q
cr0=(lamda-n1)/(n1-1)/ri(n1) - ^+ i! Z) x. j  Z
for i=1:n1     
' h9 ], O7 ]6 A& o1 E, J/ |    [x,y]=eig(eval(char(['b',int2str(i)])));     
. V( h1 |+ X4 w( x7 a, L+ F    lamda=max(diag(y));     
3 ^$ ]7 ^% H9 U$ O; _, m  J- i    num=find(diag(y)==lamda);     
* v9 y+ p8 X3 d) R& O, x    w1(:,i)=x(:,num)/sum(x(:,num));     3 g& x" `  r6 K* ^  s
    cr1(i)=(lamda-n2)/(n2-1)/ri(n2);
4 `: [. I' u2 K: q! r8 [end
+ y$ t$ p% ?5 _( ccr1, ts=w1*w0, cr=cr1*w0
1 K1 z; _& s) |$ l7 d/ [1 b$ b0 x4 J6 i4 d/ g( p- u5 H3 A4 p
7 D; g0 D5 X& `: ~" n; t
习 题 2 g: b" q( p8 h3 Y
7 P  @* i! K% ~( U; O! m" ^

2 m% s9 y% _6 L3 x0 e6 F& R/ m" @6 H4 |$ n+ e& G

( r4 ?( p7 K  q7 P$ H3 h) k6 M& C- U4 J3 o, f1 E6 {3 z  G
————————————————
* k  d  u, @. F5 E( F' e1 R1 R版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。0 q# U1 m( o" J- b  I; ?
原文链接:https://blog.csdn.net/qq_29831163/article/details/89452567
% ]6 V6 C! D4 z
" g7 w9 ~# @) \( W9 g
6 i. ^; A3 ~2 S  x8 h




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5