MCM520 ← 资料站首页 TOPSIS 优劣解距离法 · 深度手册 打开交互阅读器 →

TOPSIS 优劣解距离法 · 深度手册

分类:评价类 | 难度:★☆☆ 入门 | 编号:topsis

一、这是什么(一句话用途)

有限方案多指标排序(谁最好 / 最差)

二、核心思想

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)的思想非常直观:既然无法用一个绝对分数排名,那就找一个"假想最优方案"(正理想解,各项指标都取所有方案中的最好值)和一个"假想最劣方案"(负理想解,各项都取最差值),然后看每个真实方案"离最优多近、离最劣多远"。一个方案如果同时最靠近最优、最远离最劣,那它就是综合最优。它的优点是不需要给指标定绝对阈值,只依赖方案间的相对位置,且对指标个数和方案个数都较鲁棒。

三、数学原理与推导

设决策矩阵 X=(xij)m×nX=(x_{ij})_{m\times n}(mm 方案、nn 指标)。先向量规范化:

zij=xij∑i=1mxij2 z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{i=1}^m x_{ij}^2}}

加权得 vij=wjzijv_{ij}=w_j z_{ij}(wjw_j 为指标权重,常由 AHP/熵权给出)。确定正、负理想解:

Vj+={max⁡ivij,效益型min⁡ivij,成本型,Vj−={min⁡ivij,效益型max⁡ivij,成本型 V_j^+=\begin{cases}\max_i v_{ij}, & \text{效益型}\\ \min_i v_{ij}, & \text{成本型}\end{cases},\qquad V_j^-=\begin{cases}\min_i v_{ij}, & \text{效益型}\\ \max_i v_{ij}, & \text{成本型}\end{cases}

方案 ii 到两者的欧氏距离:

Di+=∑j=1n(vij−Vj+)2,Di−=∑j=1n(vij−Vj−)2 D_i^+=\sqrt{\sum_{j=1}^n (v_{ij}-V_j^+)^2},\qquad D_i^-=\sqrt{\sum_{j=1}^n (v_{ij}-V_j^-)^2}

相对贴近度:

Ci=Di−Di++Di−∈[0,1] C_i=\frac{D_i^-}{D_i^++D_i^-}\in[0,1]

CiC_i 越大越优;Ci=1C_i=1 即正理想解本身。

四、建模 / 求解步骤

  1. 指标同向化 / 无量纲化
  2. 构造加权规范化矩阵
  3. 确定正 / 负理想解
  4. 算欧氏距离 D+、D-
  5. 贴近度 C=D-/(D++D-) 排序

五、关键公式速查

C_i = D_i^- / (D_i^+ + D_i^-),C 越大越好

六、典型示例

4 个方案 × 5 指标 → 标准化 → 加权 → 正负理想 → 贴近度 → 排序。

完整算例(数字演示,照着算一遍)

场景:4 款手机(P1–P4)按 续航(效益)、价格(成本型)、拍照(效益) 三指标选最优,权重 0.4/0.4/0.2。

原始数据:P1=(30h,3999,88)、P2=(26h,2999,92)、P3=(34h,4999,80)、P4=(28h,3499,85)。

步骤:向量规范化 → 加权(价格取成本型取反)→ 得正/负理想解 → 算欧氏距离 → 贴近度 C=(0.51, 0.79, 0.33, 0.62)。

结论:C 越大越优,P2(0.79)>P4(0.62)>P1(0.51)>P3(0.33),选 P2(高拍照 + 低价的均衡者)。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","topsis.csv"))
X = df.drop(columns=["alt"]).to_numpy(dtype=float)
# 指标类型:1=效益型(越大越好), 0=成本型(越小越好)
typ = np.array([1,1,0,1,0])   # 与列对应
Z = X / np.linalg.norm(X, axis=0)
w = np.array([0.25,0.2,0.2,0.2,0.15])
V = Z * w
vmax = np.where(typ==1, V.max(0), V.min(0))
vmin = np.where(typ==1, V.min(0), V.max(0))
Dp = np.linalg.norm(V - vmax, axis=1)
Dm = np.linalg.norm(V - vmin, axis=1)
C = Dm/(Dp+Dm)
for a,c in zip(df["alt"], C):
    print(a, round(c,3))

配套文件:py_topsis.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% TOPSIS 示例(MATLAB/Octave)
df = readtable('..\datasets\topsis.csv');
X = table2array(df(:,2:end));
typ = [1,1,0,1,0];
Z = X ./ vecnorm(X,2,1);
w = [0.25,0.2,0.2,0.2,0.15];
V = Z .* w;
vmax = max(V,[],1); vmin = min(V,[],1);
vmax(typ==0) = min(V(:,typ==0),[],1);
vmin(typ==0) = max(V(:,typ==0),[],1);
Dp = sqrt(sum((V-vmax).^2,2));
Dm = sqrt(sum((V-vmin).^2,2));
C = Dm./(Dp+Dm);
disp(C)

配套文件:m_topsis.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

4 个方案在 5 个指标上的取值,指标方向不一(c3、c5 为成本型,越小越好)。练习无量纲化、加权、正负理想解与贴近度排序。

  • 字段:alt, c1, c2, c3, c4, c5
  • 行数:4 行
  • 下载:topsis.csv

十、常见误区与避坑清单

  • 指标方向要统一(成本型取反或取倒数)
  • 量纲必须标准化
  • 权重为 0 会失效

十一、结果怎么解读

C∈[0,1],越大越接近最优方案。

十二、常与谁搭配

权重可由 AHP / 熵权法给出。

十三、论文写作技巧(怎么把它写进论文)

把 TOPSIS 优劣解距离法 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

开篇点明研究对象存在「多指标、且指标间相互冲突」的取舍(如成本要低但质量要高),因此需要多准则决策方法(MCDM)。随后说明权重来源:可主观(专家两两比较 + 一致性检验)或客观(数据驱动赋权),并交代为什么选 TOPSIS 优劣解距离法 而非简单加权平均——例如它能兼顾理想解距离 / 降低人为主观偏差。这样评审一眼看懂你的评价逻辑。

2. 结果怎么写(图表与指标)

结果页放两张图最稳:① 各方案指标权重条形图(或熵权贡献);② 方案贴近度 / 综合得分排序表。若指标权重敏感,补一张「权重扰动 → 排序是否变」的敏感性分析,能显著提升结论可信度。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 TOPSIS 优劣解距离法 进行有限方案多指标排序(谁最好 / 最差)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt TOPSIS 优劣解距离法 to 有限方案多指标排序(谁最好 / 最差). Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

别只给最终排名,要写出每一层的权重与中间矩阵;避免「我觉得」这类主观表述,改用「依据 CR<0.1 的一致性检验」等客观依据。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

针对供应商选择中成本、质量与交期相互冲突的多准则决策问题,本文采用 TOPSIS 优劣解距离法 计算各方案的贴近度并排序。为避免单一赋权带来的主观偏差,权重由熵权法给出,最终综合得分表明方案 S3 最优(C=0.82)。

To rank candidate suppliers under the conflicting criteria of cost, quality, and lead time, we adopt TOPSIS 优劣解距离法 to compute the closeness coefficient. Weights are derived from the entropy method, and the aggregated score identifies S3 as the best alternative (C=0.82).

十四、相关手册(延伸阅读)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。