【数学建模】TOPSIS算法全解析:从数学原理到医疗器械采购决策应用

请添加图片描述

💕 个人主页Puszy-优快云博客💕

🎉 欢迎关注:👍点赞 📣留言 😍收藏 💖 💖 💖
所有难过,难是难,但总会过。 –– 《人民日报》

🌈🌈🌈往期精选内容:

💖【数学建模】层次分析法(AHP):从理论到实战的全面解析_层次分析法计-优快云博客
💖【数学建模】图论模型:从Dijkstra算法到最小费用最大流实战-优快云博客
💖【数学建模】主成分分析(PCA)详解:从理论到实践的全面指南-优快云博客
💖【数学建模】数据拟合与插值技术全解析:从线性插值到Logistic模型实战优快云博客
💖【数学建模】熵权法——基于2021全国大学生数学建模C题供应商评价数学建模实战-优快云博客
💖MNIST手写数字识别——基于PyTorch的MLP模型的Python代码-优快云博客

💖 引言

​ 在面对多标准多目标决策问题时,如何从众多备选方案中选择出最优解是一个关键挑战。TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution),即逼近理想解排序法,作为一种直观且有效的决策分析工具,为决策提供了全新的视角。它通过巧妙地构建理想解和负理想解,将各方案与这两个极端解的相对接近程度作为排序依据,从而精准地筛选出最优方案。

​ 这种方法在医疗、教育、工业等诸多领域都有着广泛的应用,例如在医疗领域帮助医院选择最适合的医疗器械供应商,在教育领域辅助学校挑选最优质的教学资源等。相较于层次分析法(AHP),TOPSIS法在数据驱动型问题中展现出独特的优势,它能够充分利用原始数据的信息,精确反映各评价方案之间的差距,为我们解决复杂的决策问题提供了有力的支持。

📚 一、TOPSIS算法

🚀 1.1 概念定义

TOPSIS法是一种基于“优劣解距离”的排序方法。它的核心思想是,通过计算各备选方案与理想解(最优解)和负理想解(最劣解)的距离,来确定各方案的优劣顺序。理想解是指各指标都达到最佳值的虚拟解,而负理想解则是各指标都达到最差值的虚拟解。各方案与理想解越接近,与负理想解越远离,则该方案越优。

🚀 1.2 应用场景

TOPSIS法适用于多方案、多指标的决策问题,尤其在以下场景中表现出色:

  • 评价指标较多且类型各异(包含极大型、极小型、中间型、区间型等)
  • 数据较为完整且稳定,能够准确反映各方案的特性
  • 需要对方案进行全面、综合的评价,而不仅仅依赖于单一指标

🚀 1.3 使用条件

在使用TOPSIS法之前,需要满足以下条件:

  • 各评价指标的数据必须是可量化的
  • 指标之间应具有一定的独立性,避免高度相关性对结果的影响
  • 决策问题应具有明确的目标和有限的备选方案

📚二、数学原理

🚀2.1、数据处理

📄2.1.1数据正向化

​ 在数据分析中,不同指标的方向性各不相同:有些指标的值越高越有利,有些则越低越好,还有一些指标的最佳值位于某个特定范围或接近某个中间值。为了便于统一评价,我们需要对这些指标进行正向化处理,将它们都转化为越高越好的形式,类似于考试成绩的高低。根据这些特性,指标可以分为以下四类:

指标名称指标特点例子
极大型(效益型)指标越大(多)越好成绩、GDP增速、企业利润
极小型(成本型)指标越小(少)越好费用、坏品率、污染程度
中间型指标越接近某个值越好水质量评估时的PH值
区间型指标落在某个区间最好体温、水中植物性营养物量

将原始决策矩阵 X = ( x i j ) m × n X=(x_{ij})_{m×n} X=(xij)m×n转换为同趋势化矩阵

  • 极小型指标

x ′ = max ⁡ ( x ) − x x' = \max(x) - x x=max(x)x

  • 中间型指标

x ′ = 1 − ∣ x − x b e s t ∣ max ⁡ ∣ x − x b e s t ∣ x' = 1 - \frac{|x - x_{best}|}{\max|x - x_{best}|} x=1maxxxbestxxbest

  • 区间型指标:分段线性变换在TOPSIS方法中,区间型指标的处理需要将其转换为极大型指标。假设区间型指标的最佳区间为 [ a , b ] [a, b] [a,b],对于每个指标值 x i x_i xi,正向化公式如下:

M = max ⁡ { a − min ⁡ { x i } , max ⁡ { x i } − b } M = \max\left\{a - \min\{x_i\}, \max\{x_i\} - b\right\} M=max{amin{xi},max{xi}b}

x ~ i = { 1 − a − x i M , x i < a 1 , a ≤ x i ≤ b 1 − x i − b M , x i > b \tilde{x}_i = \begin{cases} 1 - \frac{a - x_i}{M} & , x_i < a \\ 1 & , a \leq x_i \leq b \\ 1 - \frac{x_i - b}{M} & , x_i > b \end{cases} x~i= 1Maxi11Mxib,xi<a,axib,xi>b

​ 其中, M M M 是区间外的最大偏离距离, x ~ i \tilde{x}_i x~i是正向化后的指标值。这个公式将区间型指标转换为极大型指标,使得在区间内的指标值为1,区间外的指标值根据偏离程度进行折减。

例:

体温(转换前)体温(转换后)
35.20.4286
35.80.8571
36.61
37.10.9286
37.80.4286
38.40

a = 36 , b = 37 a = 36, \quad b = 37 a=36,b=37

M = max ⁡ { 36 − 35.2 ,   38.4 − 37 } = 1.4 M = \max\{36 - 35.2, \ 38.4 - 37\} = 1.4 M=max{3635.2, 38.437}=1.4

总结:以上方法只是指标转换的其中一种方法,还有许多可以转换的数学方法,可以进行指标的转换。

📄2.1.1数据标准化

​ 为了消除不同指标量纲的影响,需要对正向化矩阵进行标准化处理。常用的标准化方法有max-min标准化和``Z-score`标准化。Z-score标准化公式为:

x i j ′ = x i j − μ j σ j {x_{ij}^{\prime}=\frac{x_{ij}-\mu_j}{\sigma_j}} xij=σjxijμj
也可以采用向量归一化:
z i j = x i j ∑ i = 1 m x i j 2 z_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^m x_{ij}^2}} zij=i=1mxij2 xij
可根据情况合理选择合适的标准化方法。

🚀2.2、确定理想解

  • 理想最优解 Z + = [ max ⁡ z 1 j , max ⁡ z 2 j , . . . , max ⁡ z n j ] Z^+ = [\max z_{1j}, \max z_{2j}, ..., \max z_{nj}] Z+=[maxz1j,maxz2j,...,maxznj]

  • 理想最劣解解 Z − = [ min ⁡ z 1 j , min ⁡ z 2 j , . . . , min ⁡ z n j ] Z^- = [\min z_{1j}, \min z_{2j}, ..., \min z_{nj}] Z=[minz1j,minz2j,...,minznj]

    理想最优解、理想最劣解,意思就是每一个评价指标中最好的,和最坏的数值情况。

🚀2.3、计算距离评分

C i = D i − D i + + D i − C_i = \frac{D_i^-}{D_i^+ + D_i^-} Ci=Di++DiDi

其中对于第 i i i个方案 z i z_{i} zi,计算它与最优解的距离:
D i + = ∑ j = 1 n ( z i j − Z j + ) 2 D_i^+=\sqrt{\sum_{j=1}^n (z_{ij}-Z_j^+)^2} Di+=j=1n(zijZj+)2
与最劣解的距离:
D i − = ∑ j = 1 n ( z i j − Z j − ) 2 D_i^-=\sqrt{\sum_{j=1}^n (z_{ij}-Z_j^-)^2} Di=j=1n(zijZj)2

🚀2.4、计算方案评分

初始得分计算公式为:
S i = D i − D i + + D i − S_{i} = \frac{D_{i}^{-}}{D_{i}^{+} + D_{i}^{-}} Si=Di++DiDi

S i S_{i} Si为初始得分的列向量,再进行列归一化后(将每个元素除以该列之和)就是评价方案间的比重结果了。

注意事项TOPSIS的所有权重默认是相同的,可以结合熵权法,层次分析法,CRITIC权重法等赋权法结合使用为一些权重赋予不同的权重,来进一步优化决策。具体案例例如熵权法加TOPSIS,细心的才可以看出在哪里使用了。可以参考往期💖【数学建模】熵权法——基于2021全国大学生数学建模C题供应商评价数学建模实战-优快云博客

📚 三、案例分析:医疗器械采购决策

🚀3.1 案例说明

假设一家医院正在选择最佳的医疗器械,有三种设备可供选择:A、B和C。医院需要根据以下四个指标来选择最佳设备:

  1. 成本:越低越好(极小型指标)
  2. 疗效:越高越好(极大型指标)
  3. 维护次数:越少越好(极小型指标)
  4. pH适应性:在6.5-7.5之间为最佳(区间型指标)
    决策矩阵(3种医疗器械,4个指标):
设备成本(↓)疗效(↑)维护次数(↓)pH适应性(区间6.5-7.5)
A859286.8
B788867.7
C959596.2

🚀 3.2 结果展示

计算结果

在这里插入图片描述

🚀 3.3 Python代码实现

import numpy as np
import pandas as pd

def topsis(data, weights, indicator_types):
    # 数据预处理
    norm_data = data.copy()
    for col in range(data.shape[1]):
        if indicator_types[col] == 'min':
            # 极小型指标转换为极大型指标
            max_val = np.max(data[:, col])
            min_val = np.min(data[:, col])
            # 使用线性转换公式:(max - x) / (max - min)
            norm_data[:, col] = (max_val - data[:, col]) / (max_val - min_val)
        elif indicator_types[col] == 'range':
            # 区间型指标转换为极大型指标
            low, high = 6.5, 7.5  # 区间范围
            dist_low = low - np.min(data[:, col])  # 区间下限与最小值的距离
            dist_high = np.max(data[:, col]) - high  # 区间上限与最大值的距离
            # 使用分段函数进行转换
            '''np.where的基本功能,它是一个条件判断函数,可以根据条件返回不同的值。它的语法是np.where(condition, x, y),
            意思是:如果条件condition为真,就返回x,否则返回y。
            这个函数的设计本身是支持嵌套的,因为它的返回值可以是一个新的表达式,而这个表达式又可以包含另一个np.where'''
            norm_data[:, col] = np.where(
                (data[:, col] >= low) & (data[:, col] <= high), 1,  # 在区间内值为1
                np.where(data[:, col] < low,
                        1 - (low - data[:, col]) / dist_low,  # 小于下限时,按比例递减
                        1 - (data[:, col] - high) / dist_high))  # 大于上限时,按比例递减
    
    # 标准化与加权
    # 计算标准化矩阵,消除不同指标量纲的影响
    norm_matrix = norm_data / np.linalg.norm(norm_data, axis=0)
    # 对标准化后的数据进行加权处理
    weighted_matrix = norm_matrix * weights
    
    # 计算理想解
    # 理想解是各指标的最优值
    Z_pos = np.max(weighted_matrix, axis=0)
    # 负理想解是各指标的最差值
    Z_neg = np.min(weighted_matrix, axis=0)
    
    # 欧式距离计算
    # 计算各方案与理想解的欧氏距离
    D_pos = np.sqrt(((weighted_matrix - Z_pos)**2).sum(axis=1))
    # 计算各方案与负理想解的欧氏距离
    D_neg = np.sqrt(((weighted_matrix - Z_neg)**2).sum(axis=1))
    
    # 综合得分
    # 根据公式计算综合得分:D_neg / (D_pos + D_neg)
    scores = D_neg / (D_pos + D_neg)
    
    return D_pos, D_neg, scores

# 示例调用
data = np.array([[85, 92, 8, 6.8], [78, 88, 6, 7.7], [95, 95, 9, 6.2]])
weights = [0.3, 0.4, 0.2, 0.1]
indicator_types = ['min', 'max', 'min', 'range']

D_pos, D_neg, scores = topsis(data, weights, indicator_types)

# 创建DataFrame展示结果
results = pd.DataFrame({
    '设备': ['A', 'B', 'C'],
    '综合得分': np.round(scores, 3),
    '到理想解的距离': np.round(D_pos, 3),
    '到负理想解的距离': np.round(D_neg, 3)
})

# 按综合得分降序排列
results = results.sort_values(by='综合得分', ascending=False)
results['排名'] = range(1, len(results) + 1)

display(results)

通过TOPSIS法,可以综合考虑这些指标,计算出每个设备的综合得分,并根据得分进行排序。最终,设备B以最高的综合得分被选为最佳医疗器械。

📚参考链接

1、TOPSIS(逼近理想解)算法原理详解与代码实现 - 知乎

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Puszy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值