层次分析法(Analytic Hierarchy Process, AHP)详解
一、层次分析法简介
层次分析法(AHP)是一种系统化的多准则决策方法,由美国运筹学家萨蒂(Thomas L. Saaty)于20世纪70年代提出。AHP通过构建层次结构模型,将复杂的决策问题分解为目标、准则、方案等不同层次,通过两两比较矩阵来确定各因素的相对重要性,最终综合权重得出最优方案。
AHP 的基本特点
-
分层结构:将问题分解为多个层次,通常包括目标层、准则层和方案层。 2. 两两比较:通过判断矩阵对准则或方案进行两两比较,以量化主观评价。 3. 权重计算:通过特征向量法或几何平均法计算权重,反映各因素的重要性。 4. 一致性检验:确保判断矩阵的合理性,减少主观判断引入的偏差。
AHP 的基本步骤
-
构建层次结构模型:根据决策问题,将目标分解为不同层次。 2. 构造判断矩阵:对同一层次的各元素进行两两比较,构造判断矩阵。 3. 计算权重向量:通过求解判断矩阵的特征值和特征向量,计算各元素的权重。 4. 一致性检验:计算一致性比率(CR),确保判断矩阵的一致性。 5. 综合权重计算:通过加权平均,计算出各备选方案的总权重,排序并选出最优方案。
二、AHP 原理详解
层次结构通常分为以下三层: - 目标层:最高层,描述决策的最终目标。 - 准则层:中间层,描述影响决策的准则或属性。 - 方案层:最低层,列出所有备选方案。
判断矩阵的元素表示两两比较的相对重要性。常用的尺度为Saaty 1–9标度法: - 1 表示两个元素同等重要。 - 3 表示一个元素稍微重要。 - 5 表示一个元素明显重要。 - 7 表示一个元素非常重要。 - 9 表示一个元素极端重要。 - 2, 4, 6, 8 表示中间值。
构造判断矩阵
C1 | C2 | C3 | |
---|---|---|---|
C1 | 1 | 3 | 5 |
C2 | 1/3 | 1 | 2 |
C3 | 1/5 | 1/2 | 1 |
权重计算主要有两种方法: 1. 特征值法:计算判断矩阵的最大特征值 λ_max。对应的特征向量归一化后即为权重向量。 2. 几何平均法:对每一行元素求几何平均值。将几何平均值归一化得到权重。 一致性检验通过一致性比率(CR)进行: CR = CI / RI,其中 CI = (λ_max - n) / (n - 1),n 为矩阵的阶数。
三、AHP 的运用
层次分析法广泛应用于选址决策、风险评估、资源分配和多属性评价等领域。在美赛中,AHP 常用于解决选址、方案评估和策略优化问题。
实例:2019年美赛 C 题 – 生态系统管理
题目背景:某生态系统面临多种威胁,需要对管理方案进行评估,选出最佳方案。 AHP 应用步骤: 1. 构建层次结构模型。 2. 构造判断矩阵并计算权重。 3. 对每个方案构造判断矩阵,计算综合权重,选出权重最大的方案。
四、AHP 实现代码
以下是一个简单的 Python 实现代码示例,用于计算判断矩阵的权重和一致性比率:
import numpy as np def ahp(matrix): # 计算每列的归一化矩阵 col_sum = np.sum(matrix, axis=0) norm_matrix = matrix / col_sum # 计算权重向量 weights = np.mean(norm_matrix, axis=1) # 一致性检验 n = matrix.shape[0] lambda_max = np.mean(np.sum(matrix * weights[:, None], axis=0) / weights) ci = (lambda_max - n) / (n - 1) ri_values = {1: 0.00, 2: 0.00, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24} ri = ri_values.get(n, 1.24) # 默认取较大值 cr = ci / ri return weights, cr # 示例判断矩阵 matrix = np.array([ [1, 3, 5], [1/3, 1, 2], [1/5, 1/2, 1] ]) weights, cr = ahp(matrix) print("权重:", weights) print("一致性比率:", cr)