目录
感觉大家对原理性的东西不太感兴趣,那我就直接举例提供代码,以及详细的注释,大家自己对照改代码应用于你自己建立的模型吧。
完整代码关注博客底部微信公众号获得!
这些代码全部是我自己做数模竞赛时候自己用的代码。可以直接运行,记得修改文件路径。
一、TOPSIS简单介绍
TOPSIS法(Technique for Order Preference by Similarity to an Ideal Solution, 理想解相似度排序法)是一种多指标决策分析方法。它的基本思想是:优选方案应当距离正理想解(理想状态)最近,距离负理想解(最差状态)最远。通过计算每个方案与正、负理想解的距离,确定各个方案的相对接近度,从而对方案进行排序和选择。
二、Python代码实现
2.1 安装所需的Python包依赖
pip install numpy pandas
2.2 TOPSIS代码
import numpy as np
import pandas as pd
# TOPSIS算法实现
# 输出结果
result_df = pd.DataFrame({
'方案': schemes,
'得分': closeness
})
# 按得分接近度排序
result_df = result_df.sort_values(by='得分', ascending=False)
# 显示最终结果
print(result_df)
# 如果你想将结果保存为CSV文件,可以使用以下命令:
result_df.to_csv('topsis_result.csv', index=False)
三、手把手教你修改Python代码
第一点是:你必须把你的数据格式储存成这种形式,如下图所示:,第一列是类型,第一行是指标
第二点是:你必须通过把你的excel文件转为csv文件,不会的参考我的这篇博客:文件格式转换:EXCEL和CSV文件格式互相转换
第三点是:你必须在代码中输入你的csv文件路径,如下图所示:
第四点是:你必须通过查阅参考文献,等资料获取你的各类指标的权重,注意,
权重的总和为1
修改代码如下图所示:
第五点是:你必须确定你的指标是正向True(越大越好)还是负向False(越小越好),修改代码如下图:
四、TOPSIS原理
以下述数据进行讲解:
4.1 TOPSIS的步骤
TOPSIS 的计算主要包括以下步骤:
4.1.1 步骤 1:构建决策矩阵
构建一个由 m
个方案和 n
个指标组成的决策矩阵,矩阵的每一行代表一个方案,每一列代表一个评价指标。
例如,假设有 3 个备选方案(A1, A2, A3)和 4 个评价指标(C1, C2, C3, C4),决策矩阵如下:
C1 | C2 | C3 | C4 | |
---|---|---|---|---|
A1 | 250 | 16 | 12 | 5 |
A2 | 200 | 20 | 10 | 3 |
A3 | 300 | 14 | 15 | 4 |
4.1.2 步骤 2:标准化决策矩阵
为了消除量纲的影响,需对决策矩阵进行标准化处理。常用的标准化方法是向量归一化,公式如下:
r
i
j
=
x
i
j
∑
i
=
1
m
x
i
j
2
r_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^{m} x_{ij}^2}}
rij=∑i=1mxij2xij
其中,
x
i
j
x_{ij}
xij为原始决策矩阵中的值,
r
i
j
r_{ij}
rij为标准化后的值。
4.1.3 步骤 3:构建加权标准化决策矩阵
为反映各个指标的重要性,需要根据指标的权重对标准化后的决策矩阵进行加权处理。加权标准化矩阵的公式为:
v
i
j
=
w
j
×
r
i
j
v_{ij} = w_j \times r_{ij}
vij=wj×rij
其中,
w
j
w_j
wj 为指标的权重。
4.1.4 步骤 4:确定正理想解和负理想解
-
正理想解 (Ideal Solution):各指标取最大值,代表最优情况。
V + = { max ( v i j ) ∣ i = 1 , . . . , m } V^+ = \{ \max(v_{ij}) \mid i=1,...,m \} V+={max(vij)∣i=1,...,m} -
负理想解 (Negative Ideal Solution):各指标取最小值,代表最差情况。
V − = { min ( v i j ) ∣ i = 1 , . . . , m } V^- = \{ \min(v_{ij}) \mid i=1,...,m \} V−={min(vij)∣i=1,...,m}
4.1.5 步骤 5:计算与正理想解和负理想解的距离
使用欧几里得距离公式计算每个方案与正理想解和负理想解的距离:
-
与正理想解的距离:
D i + = ∑ j = 1 n ( v i j − v j + ) 2 D_i^+ = \sqrt{\sum_{j=1}^{n} (v_{ij} - v_j^+)^2} Di+=j=1∑n(vij−vj+)2 -
与负理想解的距离:
D i − = ∑ j = 1 n ( v i j − v j − ) 2 D_i^- = \sqrt{\sum_{j=1}^{n} (v_{ij} - v_j^-)^2} Di−=j=1∑n(vij−vj−)2
4.1.6 步骤 6:计算相对接近度
相对接近度 C i C_i Ci表示方案距离理想解的相对接近程度,公式为:
C
i
=
D
i
−
D
i
+
+
D
i
−
C_i = \frac{D_i^-}{D_i^+ + D_i^-}
Ci=Di++Di−Di−
C
i
C_i
Ci越大,方案越接近正理想解,越优。
4.1.7 步骤 7:方案排序
根据相对接近度 C i C_i Ci对各个方案进行排序,值越大的方案排名越高,最优方案排在第一位。
2. TOPSIS的优点
- 直观简单:通过数学计算,能够简单明了地评价各个方案之间的优劣。
- 多指标评估:能够处理多维度的评价指标,且考虑了指标的权重。
- 灵活性高:适用于不同类型的指标(正向、负向)以及不同的权重分配。
3. 适用场景
TOPSIS 方法在很多领域中被广泛应用,特别是:
- 供应链管理:在多个供应商中选择最优供应商。
- 风险评估:对多个风险进行排序和优先处理。
- 投资选择:在多个投资选项中选取最优的投资组合。
4. 示例
以 3 个方案、4 个评价指标为例,假设指标权重分别为:
- C1: 0.4
- C2: 0.3
- C3: 0.2
- C4: 0.1
决策矩阵如下:
C1 | C2 | C3 | C4 | |
---|---|---|---|---|
A1 | 250 | 16 | 12 | 5 |
A2 | 200 | 20 | 10 | 3 |
A3 | 300 | 14 | 15 | 4 |
经过 TOPSIS 计算,最终的相对接近度和排名如下(均为正理想解):
方案 | 相对接近度 | 排名 |
---|---|---|
A3 | 0.619869 | 1 |
A1 | 0.472585 | 2 |
A3 | 0.367713 | 3 |
经过 TOPSIS 计算,最终的相对接近度和排名如下(C1、C2、C4正理想解,C3负理想解):
方案 | 相对接近度 | 排名 |
---|---|---|
A3 | 0.540837 | 1 |
A1 | 0.498741 | 2 |
A3 | 0.446618 | 3 |