层次分析法

层次分析法:一种用于组织和分析复杂决策问题的结构化技术

主要思想:通过将复杂问题分解为若干层次和若干因素,对两两指标之间的重要程度作出比较判断,建立判断矩阵,通过计算,可得出不同方案重要性程度的权重,为最佳方案的选择提供依据

0x00 步骤

  1. 确定层级结构
  2. 确定权重指标
  3. 对方案进行打分
  4. 层次总排序一致性检验

0x01 确定层级结构

  • 评价目标【目标层】
  • 评价标准【准则层】
  • 可选方案【方案层】

---
title: 层级结构图 (需要出现在论文里)
---
%%{ init: { 'flowchart': { 'curve': 'linear'} } }%%
graph LR
    subgraph 目标层
        id1[ ]
    end

    subgraph 准则层
        id1 --> id2[ ]
        id1 --> id3[ ]
        id1 --> id4[ ]
        id1 --> id5[ ]
        id1 --> id6[ ]
    end

    subgraph 方案层
        id2 --> id7[ ]
        id3 --> id7[ ]
        id4 --> id7[ ]
        id5 --> id7[ ]
        id6 --> id7[ ]

        id2 --> id8[ ]
        id3 --> id8[ ]
        id4 --> id8[ ]
        id5 --> id8[ ]
        id6 --> id8[ ]

        id2 --> id9[ ]
        id3 --> id9[ ]
        id4 --> id9[ ]
        id5 --> id9[ ]
        id6 --> id9[ ]
    end


0x02 确定权重指标

使用方法:两两比较法

  • : i相较j的重要程度
  • 当且仅当 时,该矩阵(判断矩阵,得出各评判指标之间的权重向量)为正互反矩阵

引入一致矩阵

一致矩阵

  1. 当存在 时,为不一致矩阵

  2. 一致矩阵的性质:

    • 秩为1
    • 具有唯一确定特征根 (阶数)
    • 任一列向量都是对于特征根 的特征向量
  3. 判断方法:

    • 前两个性质
    • 不为一致矩阵时,最大特征根 越大,不一致程度越大
  4. 一致性检验方法(使用判断矩阵前先要检验一致性,确保局部逻辑基本自洽):

    • 计算一致性指标
    • 随机一致性指标 : 随机生成的大量矩阵的 的均值

    • 一致性比例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% 计算一致性比例CR
[V, D] = eid(A);
max_eig = max(max(D));
CI = (max_eig - n) / (n - 1);
RI = [0 0,0001 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];
CR = CI / RI(n);
disp('最大特征值为:')
disp(max_eig)
disp('CI = ')
disp(CI)
disp('CR = ')
disp(CR)
if CR < 0.1
disp('一致性可接受')
else
disp('需要修改')
end
  1. 需进行修正:
    • 逻辑审查法:检查传递性
    • 比对法
      • 计算权重向量
        1. 列归一
        2. 行求和
        3. 求平均
      • 对每一个 计算完美值
      • 寻找差异最大点,并向 靠拢修正
    • 加权平均生成法*
    • 修正原则:
      • 不能背离实际
      • 微调而非重造,否则需重新填写矩阵

计算权重

  1. 一致矩阵:直接归一化
  2. 非一致矩阵:
    • 算数平均法:计算每列中的权重,取算数平均
    • 特征值法(优先):对通过一致性检验的判断矩阵的 对应的特征向量 归一化,得到权重向量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
% 算术平均法求权重
sum_A = sum(A);
sum_A_mat = repmat(A, n, 1);
stand_A = A ./ sum_A_mat;

disp('算术平均法求权重结果为:');
w1 = sum(stand_A, 2) ./ n;
disp(w1)

% 特征值法求权重
[r, c] = find(D == max_eig, 1);
disp('特征值法求权重结果为:');
w2 = V(:, c) ./ sum(V(:, c));
disp(w2)

统计权重结果

权重 方案1 方案2 方案3
准则1
准则2
准则3
最终得分

0x03 对方案进行打分

计算方案在某一指标的得分

计算总得分

0x04 层次总排序一致性检验

目的:防止误差积少成多

公式:

其中 为权重

则通过
需进行修正(抓大放小)

的主要原因:

  • 权重大的准则对应的 太大
  • 准则层矩阵本身就不稳

如何修正:

  • 优先修正高权重子矩阵
  • 检查准则层矩阵
  • 减少指标数量
  • 拆分层级