TOPSIS综合评价法的Python实现

引言

在众多决策分析方法中,TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)因其简单易用而被广泛应用。它的基本思想是:选择在某些属性上最接近理想解,并且在某些属性上最远离非理想解的方案。在这篇文章中,我们将使用Python实现TOPSIS综合评价法,并通过相应的示例进行说明。

TOPSIS方法流程

TOPSIS方法主要包括以下几个步骤:

  1. 确定评价指标和评价方案。
  2. 进行标准化处理。
  3. 构建加权标准化决策矩阵。
  4. 计算理想解和非理想解。
  5. 计算各方案与理想解及非理想解的距离。
  6. 计算综合得分并进行排序。

下面我们将逐步分析每个步骤,并附上Python代码示例。

1. 确定评价指标和评价方案

首先,我们需要确定要评价的对象及其指标。假设我们要评价三种产品的性能,它们的指标包括价格、质量和服务。

产品 价格 质量 服务
产品A 300 80 70
产品B 500 60 90
产品C 400 70 80

2. 进行标准化处理

为了消除不同指标的量纲影响,我们需要对数据进行标准化处理。这里我们采用极大值标准化的方法。

import numpy as np

def normalize(matrix):
    norm_matrix = matrix / np.sqrt((matrix ** 2).sum(axis=0))
    return norm_matrix

# 原始数据矩阵
data = np.array([[300, 80, 70],
                 [500, 60, 90],
                 [400, 70, 80]])

normalized_data = normalize(data)
print("标准化后的矩阵:")
print(normalized_data)

3. 构建加权标准化决策矩阵

在此步骤中,我们为每个指标分配一个权重,表示其重要程度。假设我们给三个指标的权重分别为0.5、0.3和0.2。

weights = np.array([0.5, 0.3, 0.2])
weighted_matrix = normalized_data * weights
print("加权标准化决策矩阵:")
print(weighted_matrix)

4. 计算理想解和非理想解

理想解是指在各个指标上都达到最优的状态,非理想解是指在各个指标上都达到最劣的状态。我们可以通过以下代码计算这些值。

ideal_solution = weighted_matrix.max(axis=0)
anti_ideal_solution = weighted_matrix.min(axis=0)
print("理想解:", ideal_solution)
print("非理想解:", anti_ideal_solution)

5. 计算与理想解及非理想解的距离

我们可以利用欧几里得距离来计算每个方案与理想解及非理想解的距离。

def euclidean_distance(a, b):
    return np.sqrt(((a - b) ** 2).sum())

distance_to_ideal = np.array([euclidean_distance(solution, ideal_solution) for solution in weighted_matrix])
distance_to_anti_ideal = np.array([euclidean_distance(solution, anti_ideal_solution) for solution in weighted_matrix])

print("与理想解的距离:", distance_to_ideal)
print("与非理想解的距离:", distance_to_anti_ideal)

6. 计算综合得分并进行排序

最后,我们可以通过距离来计算综合得分,并根据分数进行排序。

scores = distance_to_anti_ideal / (distance_to_ideal + distance_to_anti_ideal)
ranking = np.argsort(-scores)

print("综合得分:", scores)
print("排名:", ranking + 1)  # 加1是因为索引从0开始

序列图

在实现完TOPSIS方法后,我们可以用序列图来展示不同步骤之间的关系。

sequenceDiagram
    participant User
    participant Normalization
    participant Weighting
    participant IdealSolution
    participant Distance
    participant Score

    User->>Normalization: 发送原始数据
    Normalization->>Weighting: 返回标准化数据
    Weighting->>IdealSolution: 返回加权标准化矩阵
    IdealSolution->>Distance: 返回理想解与非理想解
    Distance->>Score: 返回综合得分

关系图

为了更加清晰地展示数据之间的关系,可以使用ER图进行说明。

erDiagram
    PRODUCTS {
        int id PK "产品ID"
        string name "产品名称"
        float price "价格"
        float quality "质量"
        float service "服务"
    }

    EVALUATIONS {
        int id PK "评价ID"
        int product_id FK "产品ID"
        float score "综合得分"
    }

    PRODUCTS ||--o{ EVALUATIONS: "被评估"

结论

在本文中,我们详细介绍了TOPSIS综合评价法的基本步骤,并通过Python代码实现了这一过程。通过标准化、加权、计算理想解、非理想解以及最终的综合得分,我们成功地对产品进行了评估。TOPSIS法不仅适用于产品评价,还可以广泛应用于许多领域,如项目选择、供应商管理等。相信通过本文的学习,您能够更好地理解和应用TOPSIS方法。