数学建模——层次分析法(AHP)

目录

引言

在人类社会生活的各个领域以及日常生活中,我们经常遇到一些决策问题,例如购物买钢笔,一般要依据质量、颜色、实用性、价格、外形等方面的因素选择某一支钢笔。买饭,则要依据色、香、味、价格等方面的因素选择某种饭菜。过去人们处理这些问题往往是凭经验,靠主观定性的去分析,随意性较大并且缺少应有的科学性,因而常常造成重大的失误。 层次分析法是将定性问题定量化处理的一种有效手段。面临各种各样的方案,要进行比较、判断、评价、最后做出决策,这个过程主观因素占有相当的比重给数学方法解决问题带来不便,而层次分析法却对这种场景有较好的应用。

基本思想

假设一个场景,我们现在去买一支钢笔,有四支钢笔供你选择,在选择这些钢笔的时候你会考虑一些因素,如质量、颜色、价格、外形、实用性,选择过程如下:

1、将质量、颜色、价格、外形、实用性进行排序

2、将每支钢笔的质量、颜色、价格、外形、实用性进行综合排序

3、决定买哪只钢笔

这就是层次分析法的一个基本思想

基本步骤

第一步:首先要建立模型的一个层次结构

目标层 买钢笔
准则层 质量 颜色 价格 外形 实用
方案层 可供选择的3只钢笔

第二步:构造对比矩阵

在做决策的过程中,我们需要考虑的因素一共有五个,我们需要对它进行一个排序,才能知道我们因素对我们做出决策的影响程度。

那么如何去做呢?

假设因素x_{i}和因素x_{j}的比值为a_{ij}

那么我们可以列出一个表格:(其中ij是相等的)

x_{1} x_{2} \cdots x_{j}
x_{1} a_{11} a_{12} a_{1j}
x_{2} a_{21} a_{22} a_{2j}
\vdots
x_{i} a_{i1} a_{i2} a_{ij}

如何选取a_{ij}呢? 

这里列举一种评价标度

重要性相同 稍微重要 重要 很重要 绝对重要
a_{ij} 1 3 5 7 9

在每个等级之间的值也可以取,如2,4,6,8

 第三步:一致性检验

一致性检验需要计算出几个指标(\lambda为特征值,n为准则层的因素个数)

1、计算一致性指标CI

CI=\frac{\lambda _{max-n}}{n-1}

2、计算相应的平均随机一致性指标RI

RI=\frac{\lambda _{max}^{'}-n}{n-1}

为了方便,在这里给出随机一致性指标:

n 1 2 3 4 5 6 7 8 9
RI 0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45

3、计算一致性比例CR 

CR=\frac{CI}{RI} 

结论:当CR< 0.1时,认为矩阵的不一致性时可以接受的,反之则需要修改矩阵直至通过检验  

 第四步:计算权重向量

求矩阵最大特征值所对应的向量并进行归一化即可作为权重向量

第五步:层次总排序即求各方案的综合得分

前面我们求的都是在一层中各因素的权重,这个过程称为单层次排序。不妨设准则层权向量W=(w_{1},w_{2},\cdots ,w_{n})^{T},而方案层有l个方案可供选择,且每个方案的权向量分别为\beta _{1},\beta _{2},\cdots ,\beta _{l}。那么每个方案对最终目标的影响程度(C_{1},C_{2},\cdots ,C_{l})^{T}就可以通过下面的式子算出来了。

(C_{1},C_{2},\cdots ,C_{l})^{T}=(\beta _{1},\beta _{2},\cdots ,\beta _{l})_{l\times n}\cdot (w_{1},w_{2},\cdots ,w_{n})^{T}

在最后结果李,得分最高的那一项即为最优方案

代码实现(MATLAB) 

%层次分析法AHP
clear all
clc

%构建方案层的比较矩阵
B1 = [1 2 3; 1/2 1 2; 1/5 1/2 1];
B2 = [1 1/3 1/8; 3 1 1/3; 8 3 1];
B3 = [1 1 3; 1 1 3; 1/3 1/3 1];
B4 = [1 3 4; 1/3 1 1; 1/4 1 1];
B5 = [1 1 1/4; 1 1 1/4; 4 4 1];
B = [B1 B2 B3 B4 B5];

%构建准则层的比较矩阵
A = [1 1/2 4 3 3; 
    2 1 7 5 5; 
    1/4 1/7 1 1/2 1/3; 
    1/3 1/5 2 1 1; 
    1/3 1/5 3 1 1];

%方案层一致性判断
W1 = [];%方案层汇总的权值
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 1.58 1.59 1.60 1.61 1.615 1.62 1.63];
for i = 1:5
    [m,n] = size(B(1:3,3*(i-1)+1:3*i));
    [V,D] = eig(B(1:3,3*(i-1)+1:3*i));%求得特征向量和特征根
    %求出最大特征值和它所对应的特征向量
    Max = D(1,1);
    pos = 1;
    for j = 1:n
        if D(j,j) > Max
            Max = D(j,j);
            pos = j;%记录最大特征值的位置
        end
    end
    w = abs(V(:,pos));%找出每个因素的权值
    w = w / sum(w);%归一化
    CI = (Max - n) / (n - 1);
    CR = CI / RI(n);
    if CR < 0.10
        X = ['方案层第',num2str(i),'个矩阵一致性可以接受!','   ','CR:',num2str(CR)];
        disp(X)
    else
        X = ['方案层第',num2str(i),'个矩阵一致性验证失败,请重新进行评分!'];
        disp(X)
    end
    W1 = [W1 w];
end

%准则层一致性判断
[m,n] = size(A);
[V,D] = eig(A);
Max = D(1,1);
pos = 1;
for j = 1:n
    if D(j,j) > Max
        Max = D(j,j);
        pos = j;
    end
end
w = abs(V(:,pos));
w = w / sum(w);
W2 = w;
CI = (Max - n) / (n - 1);
CR = CI / RI(n);
if CR < 0.10
    X = ['准则层矩阵一致性可以接受!','   ','CR:',num2str(CR)];
    disp(X)
else
    X = ['准则层矩阵一致性验证失败,请重新进行评分!'];
    disp(X)
end

%计算每个方案对最终目标的权值
disp('每个方案对最终目标的权值:')
answer = W1*W2

%最后计算结果为:
方案层第1个矩阵一致性可以接受!   CR:-0.14068
方案层第2个矩阵一致性可以接受!   CR:0.0014823
方案层第3个矩阵一致性可以接受!   CR:-2.135e-15
方案层第4个矩阵一致性可以接受!   CR:0.0088488
方案层第5个矩阵一致性可以接受!   CR:-8.5402e-16
准则层矩阵一致性可以接受!   CR:0.01609
每个方案对最终目标的权值:

answer =

    0.2888
    0.2522
    0.4590

模型缺点

(1)它智能从现有的方案中选择出较优的一个,并不能提供出一个新的或者是更好的方案

(2)该方法中的比较,判断以及结果都是比较粗略的,并不适合精确计算

(3)建立层次结构及构成对比矩阵,人的主观因素起很大作用,这是一个无法克服的缺点

以上就是层次分析法的原理及其实践,希望对你有所帮助,感谢观看! 

你可能感兴趣的:(矩阵,算法)