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

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

评价类问题

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

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

权重选项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 = \begin{bmatrix} a_{11} & a_{12} & ... & a_{1n}\\ a_{21} & a_{22} & ... & a_{2n}\\ \vdots & \vdots & \ddots & \vdots\\ a_{n1} & a_{n2} & ... & a_{nn} \end{bmatrix} 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);
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sophon、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值