Python层次分析法实现流程
在介绍Python层次分析法(Analytic Hierarchy Process,AHP)之前,我们先了解一下整个实现流程。下面是一个展示AHP实现步骤的表格:
步骤 | 描述 |
---|---|
1 | 定义准则及其权重 |
2 | 构建判断矩阵 |
3 | 计算特征向量 |
4 | 一致性检验 |
5 | 计算各个准则的权重 |
6 | 应用权重进行决策 |
接下来,我们将逐步教会你如何实现以上步骤。
1. 定义准则及其权重
AHP的第一步是定义准则及其相对重要性的权重。在Python中,我们可以使用numpy
库来表示和操作矩阵,使用pandas
库来处理数据。以下是一个示例代码段,用于定义准则及其权重:
import numpy as np
import pandas as pd
# 定义准则
criteria = ['准则1', '准则2', '准则3']
# 定义准则权重矩阵
weights = np.array([[1, 3, 5],
[1/3, 1, 2],
[1/5, 1/2, 1]])
# 创建权重矩阵的DataFrame
weights_df = pd.DataFrame(weights, index=criteria, columns=criteria)
在上述代码中,我们使用numpy
库创建了一个权重矩阵,然后使用pandas
库创建了一个DataFrame来存储该矩阵。
2. 构建判断矩阵
接下来,我们需要构建判断矩阵,该矩阵用于比较不同准则之间的相对重要性。以下是一个示例代码段,用于构建判断矩阵:
# 定义判断矩阵
judgment_matrix = np.array([[1, 3, 1/5],
[1/3, 1, 1/7],
[5, 7, 1]])
# 创建判断矩阵的DataFrame
judgment_df = pd.DataFrame(judgment_matrix, index=criteria, columns=criteria)
在上述代码中,我们使用numpy
库创建了一个判断矩阵,然后使用pandas
库创建了一个DataFrame来存储该矩阵。
3. 计算特征向量
在AHP中,我们需要计算判断矩阵的特征向量,它表示每个准则的权重。以下是一个示例代码段,用于计算特征向量:
# 计算特征向量
eigenvalues, eigenvectors = np.linalg.eig(judgment_matrix)
# 提取特征向量
weights_vector = eigenvectors[:, np.argmax(eigenvalues)]
# 标准化特征向量
normalized_weights = weights_vector / np.sum(weights_vector)
在上述代码中,我们使用numpy
库的线性代数函数linalg.eig
来计算判断矩阵的特征值和特征向量。然后,我们选择具有最大特征值的特征向量,并对其进行标准化。
4. 一致性检验
为了确保我们的判断矩阵是一致的,我们需要进行一致性检验。以下是一个示例代码段,用于进行一致性检验:
# 计算一致性指标(CI)
n = len(criteria)
random_index = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49]
CI = (max(eigenvalues) - n) / (n - 1)
CR = CI / random_index[n]
# 输出一致性比率(CR)
print("一致性比率(CR):", CR)
在上述代码中,我们计算了一致性指标(CI)和一致性比率(CR)。一致性比率越接近