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)。一致性比率越接近