TOPSIS 方法评价

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的广播特性,我们可以以更简洁的方式实现标准化、加权归一化、计算正理想解和负理想解、计算方案与理想解的距离以及计算最终的综合评分。
注意,执行代码时你需要将测试数据替换为你自己的数据。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值