• 【数模/评价模型】层次分析


    声明:文章参考数学建模清风的网课编写。

    评价类问题

    层次分析法是建模比赛常用模型之一,主要用于解决评价类问题,如:选择那种方案最好、哪位员工表现最优秀等。
     关键字:确定评价指标、形成评价体系

     评价类问题可以通过打分来解决。每一个选项的得分与权重乘积和即为最终结果,如何填充表格就是层次分析法解决的问题。

    权重选项1选项2
    影响因素1r1o1o2
    影响因素2r2
    影响因素3r3

    完成表格即可完成打分,权重和以及对于同一影响因素的选项和应为1。即:r1 + r2 +…+r n = 1, o1 + o2 +…+ o n = 1。

    解决评价类问题应当从以下几个方面入手:

    1. 评价的目标是什么?
    2. 为了达到目标有几种可选择的方案?
    3. 评价的准则和指标是什么?

    层次分析法

    在完成上述打分表时,如果表中元素过多势必会造成表难以填写或是填写最终内容极不准确。因此,如何快速准确的统计信息便是层次分析法可以解决的问题

    a重要程度表

    标度含义
    1同样重要
    3稍微重要
    5明显重要
    7强烈重要
    9极端重要
    2,4,6,8上述两相邻判断的中值
    倒数如果A与B相比的标度为3,B与A就是1/3

    根据重要程度表可以填写如下一张表:

    影响因素1影响因素2影响因素3
    影响因素11
    影响因素21
    影响因素31

    这张表是准则层两两比较得出的,用于确定权重。表中元素表示:第i个选项与第j个选项相比谁更重要,因此当i等于j时恒为1。我们只需要填写,由1分隔的区域中的一侧便可以填写完表中内容。

    层次分析法还需要确定出打分表,即准则层对目标层的表。即对于不同的选项确定因素得分。

    于是我们就得到了判断矩阵。判断矩阵的特点,a[i][j] * a[j][i] = 1。可以根据判断矩阵中填写的内容计算选项所占权值。

    影响因素1选项1选项2选项3
    选项1
    选项2
    选项3
    影响因素2选项1选项2选项3
    选项1
    选项2
    选项3

    . . . . . . ...... ......

    影响因素n选项1选项2选项3
    选项1
    选项2
    选项3

    假设我们得到了如下一个判断矩阵:

    影响因素ABC
    A121
    B1/212
    C11/21

    表中出现了非常不合理的现象:A>B A=C B>C。我们把这称为不一致现象,这样的矩阵称为不一致矩阵。否则,称为一致矩阵

    一致矩阵

     使用a[i][j]表示选项i/选项j的重要程度。则,一致性矩阵应满足:a[i][k] = a[i][j] * a[j][k]。一致性矩阵的特点:各行各列之间成倍数关系。于是,可以根据一致性矩阵的特点来判断,一个矩阵是否为一致性矩阵。
     如果矩阵中的每一个元素a[i][j] > 0,并且a[i][j] * a[j][i] = 1,则称其为正互反矩阵。若正互反矩阵满足a[i][k] = a[i][j] * a[j][k], 则称其为一致性矩阵。
    注意,在使用判断矩阵求权重时,必须对一致性进行检验。

    一致性检验

    第一步:入max:最大特征值
    CI = (入max - n)/(n - 1)

    第二步:查找对应的平均随机一致性指标RI

    n12345678910
    RI000.520.891.121.261.361.411.461.49

    第三步:计算一致性比例CR
    CR = CI/RI

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

    一致性检验matlab代码:

    A = input('输入待检验矩阵:');
    
    [n, m] = size(A);
    
    Ri = [0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49];
    
    % V:特征向量 D:特征值
    [V, D] = eig(A);
    
    % 最大特征值
    maxd = max(D(:));
    
    % CR:一致性比例
    CR = (maxd - n) / (n - 1);
    
    if CR >= 0.1
        disp('一致性检验不通过,请检查所输入的矩阵!');
    else
        disp('一致性检验通过!');
    

    根据一致性矩阵求权重

    假设判断矩阵是:
    A = [ a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 . . . a n n ] A =

    [a11a12...a1na21a22...a2nan1an2...ann]" role="presentation">[a11a12...a1na21a22...a2nan1an2...ann]
    A= a11a21an1a12a22an2.........a1na2nann

    • 算术平均法求权重
      ω i = 1 n ∑ j = 1 n a i j ∑ i = 1 n a i j \omega _{i} = \frac{1}{n} \sum_{j=1}^{n} \frac{a_{ij} }{\sum_{i=1}^{n} a_{ij} } ωi=n1j=1ni=1naijaij

      1.每一行元素按列进行归一化;
      2.将归一化后的矩阵行求和,得到一个列向量;
      3.对列向量每个元素取算术平均。

      算术平均法求权重:

      % 算术平均法求权重
      sumA = repmat(sum(A), n, 1);
      wi = sum(A ./ sumA, 2) ./ n;
      disp('算术平均法求权重:');
      disp(wi);
      
    • 几何平均法求权重
      ω i = ( ∏ j = 1 n a i j ) 1 n ∑ i = 1 n ( ∏ j = 1 n a i j ) 1 n \omega _{i} = \frac{(\prod_{j=1}^{n}a_{ij})^{\frac{1}{n} } }{\sum_{i=1}^{n} (\prod_{j=1}^{n}a_{ij})^{\frac{1}{n}}} ωi=i=1n(j=1naij)n1(j=1naij)n1

      1.每一行元素按行连乘,得到一个列向量;
      2.将得到列向量每一个元素开n次方;
      3.对处理后的列向量进行归一化。

      几何平均法求权重:

      % 几何平均法求权重
      prodA = prod(A, 2) .^ (1/n);
      wi = prodA ./ sum(prodA);
      disp('几何平均法求权重:');
      disp(wi);
      
    • 特征值法求权重

      1.求出一致性矩阵最大特征值对应的特征向量;
      2.对得到的特征向量进行归一化得到权重。

      特征值法求权重:

      % 特征值法求权重
      ind = (D == maxd);
      [r, c] = find(ind, 1);
      maxv = V(:, c);
      wi = maxv / sum(maxv);
      disp('特征值法求权重:');
      disp(wi);
      
  • 相关阅读:
    日语基础复习 Day 15
    网站制作定制标准有哪些?什么是网站制作定制?
    Ansible的when语句做条件判断
    窦华书教授在纳维-斯托克斯(NS)方程问题上取得新进展
    中国的LPR改革及其意义
    Java PrintWriter.write()方法具有什么功能呢?
    【pdf密码】为什么我的PDF文件不能复制文字?
    【数据库】从事务到锁机制
    PowerBI(一) : 如何将powerBI报表嵌入内部web应用程序?
    MogaFX外汇短缺可能会促使SSA进一步出现债务重组趋势
  • 原文地址:https://blog.csdn.net/qq_55799677/article/details/124523501