(The analytic hierarchy process ,简称AHP)建模比赛中最基础的模型之一,其主要用于解决评价类问题(例如:选择哪种方案最好、哪位运动员或者员工更优秀)。

首先给出一个例子(仅作为一个例子来展示,华科武大同学勿喷 ):

比如说小明高考结束了,在纠结于选择华科还是武大,这个时候我们就可以分别对两所学校进行打分:

比如说小明是个学霸,并且想脱单,因此他对各项指标做出一个权重分配:

学习氛围(0.4)

就业前景(0.3)

男女比例(0.2)

校园景色(0.1)

括号里面的数值表示小明认为的重要性程度(权重),其和为1

最后小明根据上网搜索,内心对华科和武大做了一个打分

指标权重

华科

武大

学习氛围

0.4

0.7

0.3

就业前景

0.3

0.5

0.5

男女比例

0.2

0.3

0.7

校园景色

0.1

0.25

0.75

计算出华科最终得分:0.515

0.7 * 0.4 0.5 * 0.3 0.3 * 0.2 0.25 * 0.1

武大最终得分:0.485

0.3 * 0.4 0.5 * 0.3 0.7 * 0.2 0.75 * 0.1

最终根据打分结果,小明选择去了华科。

总结:

使用打分法解决评价问题,我们只需要补充完整一个表格即可

指标权重

方案一

方案二

指标一

指标二

指标三

指标四

其中指标权重这一列加和为1,方案一与方案二在同指标下横向加和为1。具体可以见刚刚那个小明选择学校的例子。

一道例题来引出层次分析法

填好志愿后,小明想去旅游,在上网查阅后,暂定苏杭、北戴河和桂林作为目的地。

现在请你确定评价指标、形成评价体系来为小明同学确定最佳方案。

确定评价指标、形成评价体系这样的字眼实际上就是评价类问题。

解决评价类问题,大家首先需要想到以下三个问题:

对于这个问题,我们可以很容易地回答,

评价目标就是为小明选择最佳的旅游景点;

方案有三种,分别是去苏杭、北戴河和桂林;

评价指标没有给出相关数据支撑,需要我们自己查阅资料来确定。

假如我们在查阅了相关资料后选择了以下五个指标:

此时我们只需要确定各指标的权重,然后乘积加和就可以了。

但是确定各个指标的权重,却不是那么容易的,因为相对于个人的主观意愿来讲,指标权重就会片面和非一般化。

此时我们需要一种科学的方法来确各指标的权重,此处引出分而治之的思想。

分而治之求得评价指标权重

问题:一次性考虑这五个指标之间的关系,可能考虑不周

解决方法:两个两个指标之间继续比较,此处一共需要比较C_5^210次,最终根据两两比较的结果推算出权重。

如果用下表来表示各个指标之间相互比较的重要程度标度,请你通过比较比较结果来确定各项指标的重要性:

标度

含义

1

表示两个因素相比,同等重要

3

表示两个因素相比,一个比一个稍微重要

5

表示两个因素相比,一个比一个明显重要

7

表示两个因素相比,一个比一个强烈重要

9

表示两个因素相比,一个比一个极端重要

2,4,6,8

上述两个判断的中值,表示介于xx与xx之间

倒数

A与B相比如果标度为3,那么B相比于A就是1/3

这里的重要性也可以理解为满意度。

此时我们就可以根据上述重要性标度表来完善以下的表格:

景色

花费

居住

饮食

交通

景色

1

花费

1

居住

1

饮食

1

交通

1

可以看到主对角线均为1,表示景色与景色相比,同等重要,如果把每个方格记为,其中i表示横轴,j表示纵轴,比如 就表示花费相比较于居住条件来说强烈重要。

此处我们还需要注意,这个表格如果主对角线上面是整数,那么主对角线下面就是分数,且存在关系X_{i,j}与X_{j, i}互为倒数。

假设我们已经得到了填好的表格,并且填写结果如下:

景色

花费

居住

饮食

交通

景色

1

2

4

3

3

花费

1/2

1

7

5

5

居住

1/4

1/7

1

2

3

饮食

1/3

1/5

1/2

1

1

交通

1/3

1/5

1/3

1

1

总结:上面这个表示一个5*5的方阵,我们记为A,对应的元素为a_{ij},这个方阵有如下特点:

  1. a_{ij}表示的意义为,与j相比,i的重要程度
  2. 当i = j时,两个指标同等重要,这也就解释了为什么主对角线元素等于1
  3. a_{ij}>0且a_{ij} * a_{ji} =1,我们称满足这一条件的矩阵为正互反矩阵

实际上,上面这个矩阵即使层次分析法中的判断矩阵

有了上面的这个判断矩阵我们就可以通过三个方法来计算出各项指标的权重,也就是下表中的第二列:

指标

权重

苏杭

北戴河

桂林

景色

花费

居住

饮食

交通

一共有三种方法来计算这个指标权重,我们稍后进行介绍

我们继续来求第二个判断矩阵,各个景点相对于景色的判断矩阵,假设求得的结果如下:

景色

苏杭

北戴河

桂林

苏杭

1

2

5

北戴河

1/2

1

2

桂林

1/5

1/2

1

同样的,针对于花费、居住、饮食和居住这四个指标我们依次的求得判断矩阵:

花费

苏杭

北戴河

桂林

苏杭

1

3

8

北戴河

1/3

1

3

桂林

1/8

1/3

1

居住

苏杭

北戴河

桂林

苏杭

1

1

3

北戴河

1

1

3

桂林

1/3

1/3

1

饮食

苏杭

北戴河

桂林

苏杭

1

3

4

北戴河

1/3

1

1

桂林

1/4

1

1

交通

苏杭

北戴河

桂林

苏杭

1

1

4

北戴河

1

1

4

桂林

1/4

1/4

1

但是这里还存在一个问题,我们来看下面一个矩阵:

交通

苏杭

北戴河

桂林

苏杭

1

2

1

北戴河

1/2

1

4

桂林

1

1/4

1

假设我们记苏杭为A,北戴河为B,桂林为C。

根据上表我们可以得到苏杭的交通要好于北戴河,即A>B

苏杭的交通和桂林的交通一样好,即A = C

而北戴河的交通又要好于桂林,即B > C

此时,明显发生了矛盾,此时a_{12}变得更大时,矛盾更加严重。

一致矩阵:

交通

苏杭

北戴河

桂林

苏杭

1

2

4

北戴河

1/2

1

2

桂林

1/4

1/2

1

像上面这个矩阵一样,各行各列之间呈倍数关系的矩阵的正互反矩阵称为一致矩阵

一致矩阵:

若矩阵中每个元素且,则我们称矩阵为正互反矩阵

在层次分析法中,我们构造的判断矩阵均是正互反矩阵

若正互反矩阵满足,则我们称其为一致矩阵

注意:在使用判断矩阵求权重之前,必须要进行一致性检验

为一致矩阵的充要条件

引理:A为n阶方阵,且r(A) = 1,则A有一个特征值为tr(A),其余特征值均为0

因为一致矩阵的各行成比例,所以一致矩阵的秩一定为1

由引理可知,一致矩阵有一个特征值为n,其余的特征值均为0

另外,我们还可以很容易的计算出特征值为n对应的特征向量为,也即是

再来看另一个引理:n阶正互反矩阵A为非一致矩阵时当且仅当最大特征值,且当正互反矩阵A非一致时,一定满足。

判断矩阵越不一致时,最大特征值与n的相差就越大。

我们对判断矩阵就像一致性检查的时候,完全一致并不符合实际,因此我们只需要让不一致在一个范围内就好了。

一致性检验的步骤:

step1:计算一致性指标CI

step2:查找对应的平均一致性指标RI

n

0

1

2

3

4

5

6

7

8

9

10

11

12

RI

0

0

0.52

0.89

1.12

1.26

1.36

1.41

1.46

1.49

1.52

1.54

1.56

step3:计算一直比例CR:

如果CR<0.1,则可以认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修正。

通过一致性检验的一致矩阵计算权重:

一、假设有如下一致矩阵:

景色

苏杭

北戴河

桂林

苏杭

1

2

4

北戴河

1/2

1

2

桂林

1/4

1/2

1

计算三个景点对于景色的权重,需要进行归一化处理,这里因为是一致矩阵,因此使用哪一列计算出来的结果都是一样的:

苏杭 = 1 / (1 0.5 1.25)

北戴河 = 0.5 / (1 0.5 1.25)

桂林 = 0.25 / (1 0.5 1.25)

二、对于一个非一致矩阵,也就是通过了一致性检验的判断矩阵:

景色

苏杭

北戴河

桂林

苏杭

1

2

5

北戴河

1/2

1

2

桂林

1/5

1/2

1

由于是非一致矩阵,所以肯定每列计算出来的结果并不一致

第一种方法:算术平均法求权重:首先按照列进行归一化,这样就会得到三组权重,将三组权重按照对应的标签加和求平均即可,比较简单

那么算术平均法求得的权重向量

第二种方法:几何平均法求权重

step1:将A的元素按照行相乘得到一个新的列向量

step2:将新的类向量的每个分量开n次方

step3:对该列向量进行归一化即可得到权重向量

那么算术平均法求得的权重向量

算术平均法权重

几何平均法权重

苏杭

0.5949

0.5954

北戴河

0.2766

0.2764

桂林

0.1285

0.1283

可以看到算术平均和几何平均求出来的权重差别不是很大,加和不为1,主要是因为四舍五入。

方法3:特征值法求权重

另外,我们很容易得到,特征值为n时,对应的特征向量刚好为,也即是,这一特征向量刚好就是一致矩阵的第一列。

景色

苏杭

北戴河

桂林

苏杭

1

2

4

北戴河

1/2

1

2

桂林

1/4

1/2

1

权重一定要进行归一化处理:

苏杭 = 1 / (1 0.5 1.25)

北戴河 = 0.5 / (1 0.5 1.25)

桂林 = 0.25 / (1 0.5 1.25)

step1:求出矩阵A的最大特征值对应的特征向量

step2: 对求出的特征向量进行归一化即可得到我们的权重

景色

苏杭

北戴河

桂林

苏杭

1

2

5

北戴河

1/2

1

2

桂林

1/5

1/2

1

依然对三个景点的景色求权重:

最大特征值为3.0055,一致性比例CR=0.0053,对应的特征向量为:[-0.8902,-0.4132,-0.1918],对其进行归一化:[0.5954,0.2764,0.1283]

算术平均法权重

几何平均法权重

特征值法

苏杭

0.5949

0.5954

0.5954

北戴河

0.2766

0.2764

0.2764

桂林

0.1285

0.1283

0.1283

汇总结果得到权重矩阵

指标

指标权重

苏杭

北戴河

桂林

景色

0.2636

0.5954

0.2764

0.1283

花费

0.4758

0.0819

0.2363

0.6817

居住

0.0538

0.4286

0.4286

0.1429

饮食

0.0981

0.6337

0.1919

0.1744

交通

0.1087

0.1667

0.1667

0.6667

据此,我们可以对苏杭、北戴河和桂林进行打分计算方法如下:

苏杭 = 0.2636 * 0.5954 0.4758 * 0.0819 0.0538 * 0.4286 0.0981 * 0.6337 0.1087 * 0.1667 = 0.299

同理可计算出北戴河得分为0.245,桂林得分为0.455,所以最佳旅游景点为桂林。

层次分析法使用步骤:

第一步:分析系统中各因素之间的关系,建立系统的递阶层次结构

层次分析法的框架(一评价类算法)(1)

层次结构图

第二步:对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较,构造两两比较矩阵(判断矩阵)。

关于这个判断矩阵自己给出就好了。

第三步:对第二步得到的判断矩阵进行一致性检验,通过一致性检验的判断矩阵才能用来计算权重。

三个方法计算权重:

  1. 算术平均法
  2. 几何平均法
  3. 特征值法(建模论文常用)

建议大家同时使用三种方法来求权重,为了保证结果的稳健性,本文采用三种方法来求权重,再根据得到的权重矩阵计算各方案的得分,并进行排序和综合分析,避免采用单一的方法所产生的偏差,得出的结论更全面,更有效。

第四步:计算各层元素对系统目标的合成权重,并进行排序

,