层次分析法(AHP)
原理
层次分析法是一种将复杂问题分解为多个层次结构,通过建立层次模型、构造判断矩阵、计算权重向量和进行一致性检验等步骤,实现定性和定量相结合的多目标决策方法。它把人的主观判断用数量形式表达和处理,把复杂问题按支配关系分组,形成有序的递阶层次结构。通过两两比较确定各因素的相对重要性,构建判断矩阵,再通过计算判断矩阵的特征向量来确定各因素的权重。
实现路径
- 建立层次结构模型:把问题分成目标层、准则层和方案层等层次。目标层是决策的最终目标;准则层是实现目标所涉及的中间环节或评价标准;方案层则是可供选择的具体方案。
- 构造判断矩阵:针对同一层次的元素,通过两两比较确定相对重要性,构造判断矩阵。判断矩阵元素 (a_{ij}) 表示第 (i) 个元素相对于第 (j) 个元素的重要性程度,一般用 (1 - 9) 标度法来确定取值。(1) 表示两个元素同等重要;(3) 表示前者比后者稍微重要;(5) 表示前者比后者明显重要;(7) 表示前者比后者强烈重要;(9) 表示前者比后者极端重要;(2)、(4)、(6)、(8) 则为上述相邻判断的中间值。同时,(a_{ij} = ),且 (a_{ii} = 1)。
- 计算权重向量:常用特征根法,计算判断矩阵 (A) 的最大特征根 ({max}) 及其对应的特征向量 (W),把特征向量归一化就得到权重向量。即满足矩阵方程 (AW = {max}W)。
- 进行一致性检验:
- 计算一致性指标((CI)): [CI = ] 其中 (n) 是判断矩阵的阶数。
- 随机一致性指标((RI))是根据矩阵阶数确定的常数,可查表得到。
- 计算一致性比例((CR)): [CR = ] 当 (CR < 0.1) 时,判断矩阵一致性满意,否则需要调整判断矩阵。
- 计算综合权重:把各层次的权重向量组合起来,得到方案层相对于目标层的综合权重,对各方案进行排序选择。
Python 实现代码
1 |
|
优劣势
- 优势:
- 系统性强:把复杂问题分解成层次结构,分析起来有条理,容易理解和处理。
- 定性定量结合:能把人的主观判断和客观数据结合,考虑决策者的偏好和经验,适合解决有定性因素的多目标决策问题。
- 应用广泛:在工程、经济、管理等好多领域都能用,像项目评估、资源分配、战略规划这些。
- 劣势:
- 主观性强:判断矩阵的构造靠决策者主观判断,不同人判断结果可能不一样,影响评价结果客观性和一致性。
- 计算复杂:层次结构复杂、指标多的时候,判断矩阵构造和一致性检验计算量很大,调整判断矩阵满足一致性要求也不容易。
- 精度受限:(1 - 9) 标度法精度有限,不能特别精确地反映元素之间的相对重要性差异。
具体案例
假设你是一家电子产品制造企业的负责人,正在考虑从三家供应商(分别记为供应商 A、供应商 B、供应商 C)中选择一家进行长期合作。你确定了四个评价准则:产品质量、价格、交货期、服务水平,现在我们详细运用层次分析法来进行决策。
- 建立层次结构模型:
- 目标层:选择最佳供应商。
- 准则层:产品质量、价格、交货期、服务水平。
- 方案层:供应商 A、供应商 B、供应商 C。
- 构造判断矩阵:
准则层对目标层的判断矩阵:通过对各准则重要性的两两比较,构造如下判断矩阵 (A): [A =
\[\begin{pmatrix} 1 & 3 & 2 & 2 \\ \frac{1}{3} & 1 & \frac{1}{2} & \frac{1}{2} \\ \frac{1}{2} & 2 & 1 & 1 \\ \frac{1}{2} & 2 & 1 & 1 \end{pmatrix}\]] 这个矩阵表示,例如产品质量相对于价格的重要性为 (3)(即认为产品质量比价格稍微重要)。
方案层对各准则的判断矩阵:
- 产品质量方面:假设认为供应商 A 的产品质量比供应商 B 稍微好,比供应商 C 明显好,供应商 B 比供应商 C 稍微好,得到判断矩阵 (B_1): [ B_1 = \[\begin{pmatrix} 1 & 3 & 5 \\ \frac{1}{3} & 1 & 3 \\ \frac{1}{5} & \frac{1}{3} & 1 \end{pmatrix}\] ]
- 价格方面:假设认为供应商 A 的价格比供应商 B 稍高,比供应商 C 高很多,供应商 B 比供应商 C 稍高,得到判断矩阵 (B_2): [ B_2 = \[\begin{pmatrix} 1 & \frac{1}{3} & \frac{1}{5} \\ 3 & 1 & \frac{1}{3} \\ 5 & 3 & 1 \end{pmatrix}\] ]
- 交货期方面:假设认为供应商 A 的交货期比供应商 B 差不多,比供应商 C 稍微好,供应商 B 比供应商 C 稍微差,得到判断矩阵 (B_3): [ B_3 = \[\begin{pmatrix} 1 & 1 & 3 \\ 1 & 1 & 2 \\ \frac{1}{3} & \frac{1}{2} & 1 \end{pmatrix}\] ]
- 服务水平方面:假设认为供应商 A 的服务水平比供应商 B 稍微好,比供应商 C 明显好,供应商 B 比供应商 C 稍微好,得到判断矩阵 (B_4): [ B_4 = \[\begin{pmatrix} 1 & 3 & 5 \\ \frac{1}{3} & 1 & 3 \\ \frac{1}{5} & \frac{1}{3} & 1 \end{pmatrix}\] ]
- 计算权重向量:
对于准则层对目标层的判断矩阵 (A),使用上述 Python 代码中的
ahp
函数计算权重向量 (W_A) 和一致性比例 (CR_A):得到准则层对目标层的权重向量 (W_A = [0.4303, 0.1095, 0.2301, 0.2301]),一致性比例 (CR_A = 0.037 < 0.1),说明判断矩阵 (A) 具有满意的一致性。1
2
3
4
5
6
7A = np.array([[1, 3, 2, 2],
[1/3, 1, 1/2, 1/2],
[1/2, 2, 1, 1],
[1/2, 2, 1, 1]])
W_A, CR_A = ahp(A)
print("准则层对目标层的权重向量:", W_A.real)
print("准则层对目标层的一致性比例:", CR_A)对于方案层对各准则的判断矩阵 (B_1)、(B_2)、(B_3)、(B_4),分别计算权重向量 (W_{B1})、(W_{B2})、(W_{B3})、(W_{B4}) 和一致性比例 (CR_{B1})、(CR_{B2})、(CR_{B3})、(CR_{B4}):
得到:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27B1 = np.array([[1, 3, 5],
[1/3, 1, 3],
[1/5, 1/3, 1]])
W_B1, CR_B1 = ahp(B1)
print("方案层对产品质量准则的权重向量:", W_B1.real)
print("方案层对产品质量准则的一致性比例:", CR_B1)
B2 = np.array([[1, 1/3, 1/5],
[3, 1, 1/3],
[5, 3, 1]])
W_B2, CR_B2 = ahp(B2)
print("方案层对价格准则的权重向量:", W_B2.real)
print("方案层对价格准则的一致性比例:", CR_B2)
B3 = np.array([[1, 1, 3],
[1, 1, 2],
[1/3, 1/2, 1]])
W_B3, CR_B3 = ahp(B3)
print("方案层对交货期准则的权重向量:", W_B3.real)
print("方案层对交货期准则的一致性比例:", CR_B3)
B4 = np.array([[1, 3, 5],
[1/3, 1, 3],
[1/5, 1/3, 1]])
W_B4, CR_B4 = ahp(B4)
print("方案层对服务水平准则的权重向量:", W_B4.real)
print("方案层对服务水平准则的一致性比例:", CR_B4)(W_{B1} = [0.6370, 0.2583, 0.1047]),(CR_{B1} = 0.033 < 0.1)
(W_{B2} = [0.1047, 0.2583, 0.6370]),(CR_{B2} = 0.033 < 0.1)
(W_{B3} = [0.4286, 0.3243, 0.2471]),(CR_{B3} = 0.034 < 0.1)
(W_{B4} = [0.6370, 0.2583, 0.1047]),(CR_{B4} = 0.033 < 0.1)
- 计算综合权重: 计算方案层相对于目标层的综合权重,通过准则层权重向量与方案层对各准则权重向量的乘积得到。
供应商 A 的综合权重为: [ \[\begin{align*} &0.4303 \times 0.6370 + 0.1095 \times 0.1047 + 0.2301 \times 0.4286 + 0.2301 \times 0.6370 \\ &\approx 0.2741 + 0.0114 + 0.0987 + 0.1466 \\ &\approx 0.5308 \end{align*}\] ]
供应商 B 的综合权重为: [ \[\begin{align*} &0.4303 \times 0.2583 + 0.1095 \times 0.2583 + 0.2301 \times 0.3243 + 0.2301 \times 0.2583 \\ &\approx 0.1111 + 0.0283 + 0.0746 + 0.0594 \\ &\approx 0.2734 \end{align*}\] ]
供应商 C 的综合权重为: [ \[\begin{align*} &0.4303 \times 0.1047 + 0.1095 \times 0.6370 + 0.2301 \times 0.2471 + 0.2301 \times 0.1047 \\ &\approx 0.0451 + 0.0697 + 0.0568 + 0.0241 \\ &\approx 0.1957 \end{align*}\] ]
- 决策: 根据综合权重,供应商 A 的综合权重最高,因此选择供应商 A 作为长期合作对象。
通过这个详细的案例可以看到,层次分析法能够将复杂的供应商选择问题分解为多个层次,通过主观判断和定量计算相结合的方式,得出较为合理的决策结果。