Python 实现 TOPSIS 方法评价
TOPSIS (Technique for Order of Preference by Similarity to Ideal Solution,趋近理想解的排序方法)是一种常用于多属性决策的评价方法。它通过将每个决策方案与一个“理想解”和一个“反理想解”进行比较,生成一个综合得分,用于评价方案的绩效。
TOPSIS 方法需要输入一个包含每个决策方案的属性值的矩阵。每个属性都可以加权,并且指定是越大越好还是越小越好,以生成一个属性权重和属性方向向量。然后,TOPSIS 方法通过计算每个决策方案与“理想解”和“反理想解”的距离,以确定每个方案的表现程度。最后,评估结果将被排序以确定每个方案的排名。
TOPSIS 方法的一个优点是它可以处理具有多个属性的复杂决策问题,并且可以帮助决策者获得有关方案相对优劣的信息。
在 Python 中可以使用第三方库numpy
来实现 TOPSIS 方法,使用numpy
前需确保其已经安装。
如下是使用numpy
实现 TOPSIS 方法的具体实现步骤:
- 标准化矩阵:计算标准评价矩阵的每个元素除以对应列的平方和,以实现标准化。
- 加权归一化矩阵:将标准化矩阵的每列乘以对应的权重,得到加权归一化矩阵。
- 计算正理想解和负理想解:根据标识的利益型指标和成本型指标,分别找出每个标准列的最大值或最小值,得到正理想解和负理想解。
- 计算每个方案与理想解的距离:计算每个方案与正理想解的欧氏距离,并将其归一化,得到每个方案与理想解的距离。
- 计算最终的综合评分:将方案与理想解的距离归一化,得到最终的综合评分。
如下是代码示例:
import numpy as np
def topsis_evaluation(matrix, weights):
"""
使用TOPSIS方法对标准进行评价
参数:
- criteria_matrix: 标准评价矩阵,二维numpy数组,每一行代表一个方案,每一列代表一个标准
- weights: 各标准的权重,一维numpy数组,长度与标准数目相同
返回值:
- closeness: 每个方案的综合评分,一维numpy数组,长度与方案数目相同
"""
# 规范化决策矩阵
normalized_matrix = matrix / np.sqrt((matrix ** 2).sum(axis=0))
# 将矩阵乘以权重
weighted_matrix = normalized_matrix * weights
# 计算理想解和负理想解
ideal_solution = np.max(weighted_matrix, axis=0)
negative_ideal_solution = np.min(weighted_matrix, axis=0)
# 计算从每个备选方案到理想解的欧几里得距离
d_positive = np.sqrt(np.sum((weighted_matrix - ideal_solution) ** 2, axis=1))
d_negative = np.sqrt(np.sum((weighted_matrix - negative_ideal_solution) ** 2, axis=1))
# 计算与理想解的相对接近度
closeness = d_negative / (d_positive + d_negative)
# 按接近程度降序排列备选方案
ranking = np.argsort(closeness)[::-1]
return closeness
# 决策矩阵
matrix = np.array([
[1000, 1, 5, 3.5],
[900, 2, 4, 4.2],
[800, 3, 6, 4.7],
[1200, 4, 3, 3.9],
])
# 属性权重
weights = [0.3, 0.2, 0.2, 0.3]
# 执行 TOPSIS 方法评价
closeness, ranking = topsis_evaluation(matrix, weights)
# 输出结果
print(f"测试得分为: {closeness}")
上述代码通过topsis_evaluation
函数实现了TOPSIS 方法,函数接受决策矩阵matrix
和权重weights
作为参数,通过numpy的广播特性,我们可以以更简洁的方式实现标准化、加权归一化、计算正理想解和负理想解、计算方案与理想解的距离以及计算最终的综合评分。
注意,执行代码时你需要将测试数据替换为你自己的数据。