【数学建模】TOPSIS算法全解析:从数学原理到医疗器械采购决策应用
【数学建模】TOPSIS算法全解析:从数学原理到医疗器械采购决策应用
TOPSIS(逼近理想解排序法)是一种直观且有效的多目标决策分析工具。它通过构建理想解和负理想解,将各方案与这两个极端解的相对接近程度作为排序依据,从而精准地筛选出最优方案。本文将从数学原理到实际应用,全面解析TOPSIS算法,并通过一个医疗器械采购决策案例,展示其在实际问题中的应用。
💖 引言
在面对多标准多目标决策问题时,如何从众多备选方案中选择出最优解是一个关键挑战。
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) - xx′=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′=1−max∣x−xbest ∣∣x−xbest ∣ - 区间型指标:分段线性变换在
TOPSIS
方法中,区间型指标的处理需要将其转换为极大型指标。假设区间型指标的最佳区间为[ a , b ] [a, b][a,b],对于每个指标值x i x_ixi ,正向化公式如下:
M = max { a − min { x i } , max { x i } − b } M = \max\left{a - \min{x_i}, \max{x_i} - b\right}M=max{a−min{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}xi =⎩⎨⎧ 1−Ma−xi 11−Mxi −b ,xi <a,a≤xi ≤b,xi >bi 是正向化后的指标值。这个公式将区间型指标转换为极大型指标,使得在区间内的指标值为1,区间外的指标值根据偏离程度进行折减。
其中,M MM是区间外的最大偏离距离,x ~ i \tilde{x}_ix
例:
体温(转换前) 体温(转换后)
35.2 0.4286
35.8 0.8571
36.6 1
37.1 0.9286
37.8 0.4286
38.4 0
a = 36 , b = 37 a = 36, \quad b = 37a=36,b=37
M = max { 36 − 35.2 , 38.4 − 37 } = 1.4 M = \max{36 - 35.2, \ 38.4 - 37} = 1.4M=max{36−35.2, 38.4−37}=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′ =σj xij −μ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=1m xij2 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+ +Di− Di−
其中对于第i ii个方案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=1∑n (zij −Zj+ )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=1∑n (zij −Zj− )2
🚀2.4、计算方案评分
初始得分计算公式为:
S i = D i − D i + + D i − S_{i} = \frac{D_{i}^{-}}{D_{i}^{+} + D_{i}^{-}}Si =Di+ +Di− Di−
S i S_{i}Si 为初始得分的列向量,再进行列归一化后(将每个元素除以该列之和)就是评价方案间的比重结果了。
注意事项:
TOPSIS
的所有权重默认是相同的,可以结合熵权法,层次分析法,
CRITIC
权重法等赋权法结合使用为一些权重赋予不同的权重,来进一步优化决策。具体案例例如熵权法加
TOPSIS
,细心的才可以看出在哪里使用了。可以参考往期💖【数学建模】熵权法——基于2021全国大学生数学建模C题供应商评价数学建模实战-CSDN博客
📚 三、案例分析:医疗器械采购决策
🚀3.1 案例说明
假设一家医院正在选择最佳的医疗器械,有三种设备可供选择:A、B和C。医院需要根据以下四个指标来选择最佳设备:
- 成本:越低越好(极小型指标)
- 疗效:越高越好(极大型指标)
- 维护次数:越少越好(极小型指标)
- pH适应性:在6.5-7.5之间为最佳(区间型指标)
决策矩阵(3种医疗器械,4个指标):
设备 成本(↓) 疗效(↑) 维护次数(↓) pH适应性(区间6.5-7.5)
A 85 92 8 6.8
B 78 88 6 7.7
C 95 95 9 6.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(逼近理想解)算法原理详解与代码实现 - 知乎