2-3、AHP层次分析法

版权声明:本文为博主原创文章,如需转载请联系博主。 https://blog.csdn.net/GregoryHanson/article/details/77950276

一、 算法引入

人们在进行社会、经济以及科学管理领域问题的系统分析中,面临的常常是一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。比如要在三个旅游景点选择其中二个作为目的地。而这三个旅游景点的消费水平、气候条件、饮食、交通等都会影响我们对它的选择。三个旅游景点中选取两个又有3种不同的组合方案。层次分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。

不得不说的是,层次分析法因为其可以套用的场合较多,且有不易于给出令人信服的专家打分矩阵等算法本身缺陷,若在有些场合滥用层次分析法往往并不是一个好的选择。若要在数学建模中使用层次分析法,需先考虑其在此问题下是否合适。

二、 算法介绍

层次分析法(Analytic Hierarchy Process ,简称 AHP )是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。它是美国运筹学家T. L. Saaty 教授于上世纪 70 年代初期提出的一种简便、灵活而又实用的多准则决策方法。

三、 算法步骤

1.步骤

(i)建立递阶层次结构模型;

(ii)构造出各层次中的所有判断矩阵;

(iii)层次单排序及一致性检验;

(iv)层次总排序及一致性检验。

2.步骤的具体实现

首先从层次结构模型说起
层次分析法是用来根据多种准则,或是说因素从候选方案中选出最优的一种数学方法

这里写图片描述

最顶层是我们的目标,比如说选择旅游目的地
中间层是判断候选方物或人优劣的因素或标准
选旅游目的地时有:景色 费用 居住 饮食
最后一层就是可供选择的事物,比如:青岛 九寨沟 黄山

这里写图片描述

在分层以后,为了选出最优候选,给目标层分配值1.000。然后将这一值作为权重,分配给不同因素,对应因素的权重大小代表该因素在整个选择过程中的重要性程度。
然后对于候选方案,每一个标准再将其权重值分配给所有的候选方案,每一方案获得权重值,来源于不同因素分得的权重值的和。
例如选工作时,待遇所占的比重为0.8, 有工作1,2,3候选,如果工作1的待遇最高,工作2的待遇次之,工作3最差,则可将0.8的值按0.4,0.3,0.1分给工作1,2,3,

这不就是一个简单的权重打分的过程吗?为什么还要层次分析呢。
这里就有两个关键问题:

1每个准则(因素)权重具体应该分配多少

2每一个候选方案在每一个因素下又应该获得多少权重

这里便进入层次分析法的第二个步骤,也是层次分析法的一个精华
构造比较矩阵判断矩阵(comparison matrix):

首先解决第一个问题:每个准则(因素)权重具体应该分配多少?
在递阶层次结构中,设上一层元素 C 为准则,所支配的下一层元素为 u1,u2,,un 对于准则 C 相对重要性即权重。这通常可分两种情况:

(1)如果 u1,u2,,un C 的重要性可定量(如可以使用货币、重量等),其权重可直接确定。

(2)如果问题复杂, u1,u2,,un 对于 C 的重要性无法直接定量,而只能定性,那么确定权重用两两比较方法。其方法是:对于准则 C ,元素 ui uj 哪一个更重要,重要的程度如何,通常按1~9比例标度对重要性程度赋值,下表中列出了1~9标度的含义。

这里写图片描述

这时我们就可以得到判断矩阵,也就是每两个因素的权重比:

A=w1w1w2w1wnw1w1w2w2w2wnw2w1wnw2wnwnwn(1)

假设我们得到的例子中判断矩阵是:
A=1214131312117151547123351211351311(2)

有了判断矩阵,我们就可以得到各个因素的权重。在(1)式中,右乘 w 就有
Aw=nw(3)
也就是说我们只要令 (An)w=0 |w|=1 ,就可以算出 w

如a,b,c的判断矩阵为

A=112162113633

(A3)w=0 ,就有 w=[0.60.30.1]

现在,我们先来看两个概念

(1)正互反矩阵的定义是:

这里写图片描述

(2)一致性矩阵的定义是:
aijajk=aik,i,j,k=1,2,n
接着我们仔细查看(2),其实是有问题的。判断矩阵可能会出现不一致的情况,这时(3)不成立。
如果说a比b重要2倍,b比c重要3倍,然后说c比a重要2倍,这就有问题了。这就是所谓的不一致现象。(2)就是出现了这一现象。那么,这时权重又如何确定。
学过线性代数的话,我们知道(3)中, n A 的特殊值,而 w A 的特殊向量。在出现不一致的情况下,Saaty等人建议用对应于最大特征根 λ 的特征向量作为权向量 w ,即
Aw=λw
由于λ 连续的依赖于 aij ,则 λ n 大的越多, A 的不一致性越严重。用最大特征值对应的特征向量作为被比较因素对上层某因素影响程度的权向量,其不一致程度越大,引起的判断误差越大。因而可以用 λn 数值的大小来衡量 A 的不一致程度。
于是引入了一致性检验。
定义一致性指标:
Cl=λnn1
CI=0 ,有完全的一致性
CI 接近于0,有满意的一致性
CI 越大,不一致越严重
定义随机一致性指标 RI :它的值与 n 的关系如下:
这里写图片描述
定义一致性比率 :
CR=ClRl
一般,当一致性比率 时,认为 A 的不一致程度在容许范围之内,有满意的一致性,通过一致性检验。可用其归一化特征向量作为权向量,否则要重新构造成对比较矩阵 A ,对 aij 加以调整。

接下来解决第二个问题:每一个候选方案在每一个因素下又应该获得多少权重
这里则需要将不同候选方案,在不同因素下分别比较,具体的比较方法,还是使用比较矩阵,只不过之前准则层的比较矩阵比较的对象是因素,这里比较的是某一因素下,候选方案的优劣, n 个因素则需构造出来 n 个比较矩阵
例如在工作环境的因素下,工作1与工作2相比为 :4:2,工作2与工作3=2:1 工作1:工作3=6:1.,这样构造一个矩阵,再用之前的一致性矩阵的方法就可以求出一个权重,然后相对应因素(这里是工作环境)所拥有的权值就可以按这个权重比例分配给不同候选物或人。
至此两个问题就都得到了解决
最终将每个候选物、人从不同因素获得的权值求和,就可以得到不同候选对于目标层的权值大小,继而可以根据值的大小,来选出优劣

四、 算法举例

挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。该生根据已有信息建立了一个层次结构模型,如图 2 所示。

这里写图片描述

准则层的判断矩阵如表 4 所示。
这里写图片描述

方案层的判断矩阵如表 5 所示。
这里写图片描述

层次总排序的结果如表 6 所示。
这里写图片描述

根据层次总排序权值,该生最满意的工作为工作 1。根据层次总排序权值,该生最满意的工作为工作1。

根据层次总排序权值,该生最满意的工作为工作 1。
Matlab程序如下:

clc
clear
fid=fopen('txt3.txt','r');
n1=6;
n2=3;
a=[];
for i=1:n1
    tmp=str2num(fget1(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(fget1(fid));
        eval(str2);%读取方案层的判断矩阵
    end
end

纯文本文件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

猜你喜欢

转载自blog.csdn.net/GregoryHanson/article/details/77950276