正在加载中...

展开本页目录
算法教程TOPSIS分析系统

TOPSIS分析系统

No.008 · 在线教程

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)是一种经典的多指标综合评价方法。其基本思想是:最优方案应尽可能接近正理想解(各指标最优组合),并尽可能远离负理想解(各指标最劣组合)。

TOPSIS 分析法

1. 方法概述

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)是一种经典的多指标综合评价方法。其基本思想是:最优方案应尽可能接近正理想解(各指标最优组合),并尽可能远离负理想解(各指标最劣组合)。

设共有 \(n\) 个评价对象、\(m\) 个评价指标,原始决策矩阵为

$$ X=(x_{ij})_{n\times m},\quad i=1,2,\ldots,n,\ j=1,2,\ldots,m \tag{1} $$

其中 \(x_{ij}\) 表示第 \(i\) 个对象在第 \(j\) 个指标上的观测值。

2. 指标同向化与标准化

为消除量纲差异并统一指标偏好方向,先进行同向化标准化。设第 \(j\) 个指标在样本中的最小值、最大值分别为 \(\min x_j\)、\(\max x_j\),并引入极小数 \(\varepsilon>0\) 防止除零。

2.1 正向指标

$$ r_{ij}=\frac{x_{ij}-\min x_j}{\max x_j-\min x_j+\varepsilon} \tag{2} $$

2.2 负向指标

$$ r_{ij}=\frac{\max x_j-x_{ij}}{\max x_j-\min x_j+\varepsilon} \tag{3} $$

2.3 适度指标

若第 \(j\) 个指标存在目标值 \(x_j^*\),则可定义为

$$ r_{ij}=1-\frac{|x_{ij}-x_j^*|}{\max_i |x_{ij}-x_j^*|+\varepsilon} \tag{4} $$

由此得到标准化矩阵

$$ R=(r_{ij})_{n\times m} \tag{5} $$

3. 权重确定

TOPSIS 可结合客观赋权或主观赋权。若采用熵权法,权重可由数据离散程度自动生成。

3.1 比重计算

$$ p_{ij}=\frac{r_{ij}}{\sum_{i=1}^{n}r_{ij}} \tag{6} $$

3.2 信息熵

$$ e_j=-\frac{1}{\ln n}\sum_{i=1}^{n}p_{ij}\ln(p_{ij}+\varepsilon) \tag{7} $$

3.3 差异系数与权重

$$ g_j=1-e_j \tag{8} $$

$$ w_j=\frac{g_j}{\sum_{j=1}^{m}g_j},\qquad \sum_{j=1}^{m}w_j=1 \tag{9} $$

若研究中已有专家赋权结果,也可直接给定 \(w_j\)。

4. TOPSIS 评价模型

4.1 构建加权标准化矩阵

$$ v_{ij}=w_j r_{ij} \tag{10} $$

4.2 正、负理想解

$$ v_j^+=\max_i v_{ij},\qquad v_j^-=\min_i v_{ij} \tag{11} $$

4.3 距离测度

$$ D_i^+=\sqrt{\sum_{j=1}^{m}(v_{ij}-v_j^+)^2} \tag{12} $$

$$ D_i^-=\sqrt{\sum_{j=1}^{m}(v_{ij}-v_j^-)^2} \tag{13} $$

4.4 贴近度与排序

$$ C_i=\frac{D_i^-}{D_i^+ + D_i^-},\quad 0\le C_i\le 1 \tag{14} $$

其中 \(C_i\) 越大,表示方案越优。最终按照 \(C_i\) 由大到小排序得到综合排名。

5. 分层评价(子指标集 TOPSIS)

当研究需要从不同维度比较对象表现时,可对指标集合进行分层(或分组)评价。设某一层指标子集为 \(S\subseteq\{1,2,\ldots,m\}\),则在 \(S\) 对应的子矩阵上重复式(10)—式(14)即可得到该层贴近度与排序结果。

分层结果可用于揭示:总体排名接近的对象,是否在不同维度上存在结构性差异。

6. 结果解释与论文写作建议

论文中通常建议按“表—图—解释”顺序组织结果:

  1. 权重结果表:展示各指标 \(w_j\),说明关键驱动指标;
  2. 综合评价结果表:展示 \(D_i^+\)、\(D_i^-\)、\(C_i\) 与排名;
  3. 分层评价结果表(可选):展示各维度下的贴近度与排名变化;
  4. 图形结果:可给出权重分布图与综合得分分布图。

解释时应重点回答三个问题:

  • 哪些指标对综合评价影响最大;
  • 排名前列与末位对象在关键指标上的差异来源;
  • 总体结论在分层维度下是否保持一致。

7. 实现说明与注意事项

就本项目当前可运行版本而言,TOPSIS 的真实主链路位于:

  • 具体的算法/TOPSIS_desktop/core/topsis_calculator.py
  • 具体的算法/TOPSIS_desktop/ui/main_window.py
  • 具体的算法/TOPSIS_desktop/ui/results_widget.py

其中真正决定结果文件内容的是 core/topsis_calculator.py 中的 save_results(),而不是早期通用导出函数 utils/excel_handler.py。当前程序会在用户指定目录下再创建一层时间戳目录

results_<YYYYMMDD_HHMMSS>/

并在其中生成:

  • TOPSIS_results_<时间戳>.xlsx
  • plots/weights_distribution.png
  • plots/scores_distribution.png
  • topsis_core_repro_<时间戳>.py

7.1 当前 Excel 导出与公式步骤的对应关系

根据 save_results() 的实际实现,主结果工作簿固定包含以下核心工作表:

  • 原始数据
  • 标准化矩阵
  • 指标权重
  • 加权标准化矩阵
  • 理想解
  • 距离计算
  • 总体评价结果

若本次运行启用了熵权法,还会额外输出:

  • 熵权法计算结果

若本次运行启用了分层评价 layer_results,还会继续追加:

  • <层名>理想解
  • <层名>评价结果

因此,论文正文中的式(2)至式(14)与程序导出表的对应关系可以直接写成:

  • 式(2)至式(5):对应 标准化矩阵
  • 式(6)至式(9):对应 熵权法计算结果指标权重
  • 式(10):对应 加权标准化矩阵
  • 式(11):对应 理想解
  • 式(12)至式(13):对应 距离计算
  • 式(14):对应 总体评价结果

7.2 当前结果页与复现脚本的真实行为

结果页 ui/results_widget.py 在显示结果文件路径后,还支持导出 topsis_core_repro_<时间戳>.py。这个脚本不是伪代码,而是会重新:

  1. 读取原始输入文件;
  2. 若外部文件不可用,则尝试从结果 Excel 的 原始数据 工作表回读;
  3. 重新构造 TOPSIS 计算器;
  4. 再次生成新的结果目录与结果文件。

因此,当前项目已经形成了“Excel 主结果 + 图表目录 + 可执行 repro 脚本”的完整复现实验链。论文中如果需要说明可复现性,应该以这条真实输出链为准,而不是只写通用 TOPSIS 理论步骤。

7.3 当前项目实现需要特别说明的工程口径

  • 指标方向必须先在界面里显式设置,适度指标还要给出目标值;
  • 分层评价不是单独算法,而是在同一批标准化与权重设定下对子指标集重复执行式(10)至式(14);
  • 图表当前只固定输出两张:weights_distribution.pngscores_distribution.png
  • 若论文需要保留“计算明细”,最稳妥的做法是直接引用结果工作簿中的 标准化矩阵距离计算总体评价结果,因为它们就是当前代码实际产物。

8. 单篇终审补充

8.1 图题与表题对齐建议

  • 原始数据 表可写为:表X TOPSIS 原始评价数据。
  • 标准化矩阵 表可写为:表X TOPSIS 指标标准化结果。
  • 指标权重 表可写为:表X TOPSIS 指标权重结果。
  • 加权标准化矩阵 表可写为:表X TOPSIS 加权标准化矩阵。
  • 理想解 表可写为:表X TOPSIS 正负理想解。
  • 距离计算 表可写为:表X TOPSIS 与正负理想解的距离及贴近度。
  • 总体评价结果 表可写为:表X TOPSIS 综合得分与排序结果。
  • 若使用分层评价,<层名>理想解<层名>评价结果 可写为:表X 分层 TOPSIS 结果。
  • weights_distribution.png 建议写为:图X TOPSIS 指标权重分布图。
  • scores_distribution.png 建议写为:图X TOPSIS 综合得分分布图。

8.2 终审说明

  • 当前实现的核心结果口径是 总体评价结果,正文不要只引用图而忽略排序表,因为最终排序来自该 sheet 而不是图表本身。
  • 分层评价不是独立算法分支,而是在同一批方向设定和权重设定下对子指标集重复执行同一套 TOPSIS 流程,论文里不要把它写成新的评价模型。
  • topsis_core_repro_<时间戳>.py 会优先读取原始输入,必要时再从结果工作簿中的 原始数据 回读,因此可复现性描述应围绕“结果工作簿 + repro 脚本”展开。
  • 图表只有两张固定产物,论文图题不要扩写成“理想解图”“距离演化图”等当前程序并未自动输出的图件。

8.3 全量强化补充

本次全量强化绑定的真实结果目录为 具体的算法/TOPSIS_desktop/results/results_20260329_163908。该目录内主工作簿为 TOPSIS_results_20260329_163908.xlsx,实际工作表为 熵权法计算结果原始数据标准化矩阵指标权重加权标准化矩阵理想解距离计算总体评价结果。从实物可见,当前这轮结果并没有额外导出 图表清单Charts 工作表,因此论文引用时应以这 8 个真实 sheet 为准,不能把其他版本代码口径下的图表索引表写成当前工作簿的固定组成部分。

同一结果目录下真实图件位于 plots/,只有 weights_distribution.pngscores_distribution.png 两张;这与当前文档前面给出的图件建议完全一致。目录中还存在 uploads/ 子目录,但当前实物下该目录为空,不能把它表述成已留存完整上传副本。

复现脚本为 topsis_core_repro_20260329_163908.py。需要特别说明的是,该脚本当前写入的 DATA_FILE 仍指向一次 pytest 运行时的绝对临时路径,而不是 repro_inputs/... 相对路径;不过脚本内部 _resolve_data_source() 也保留了回退逻辑,当 DATA_FILE 不存在时,会退回读取 RESULT_FILE 中的 原始数据 工作表重新计算。因此 TOPSIS 当前的真实复现口径应写成“优先外部原文件,失败时回读结果工作簿原始数据”,而不是误写成已经具备独立 repro_inputs 自包含副本链。

8. 软件实现核查补充(2026-07)

8.1 当前软件实现口径

本软件当前对应的源码目录为 具体的算法/TOPSIS_desktop,核心类为 core/topsis_calculator.py 中的 TOPSISCalculator。软件实现的是多属性决策 TOPSIS:上传评价对象和指标数据,设置指标类型、标准化方法和权重方法,计算加权标准化矩阵、正负理想解、到理想解距离和相对贴近度。

8.2 输入、标准化和权重

上传页支持 .xlsx/.xls/.csv,示例数据位于 uploads/topsis_sample.xlsxuploads/topsis_sample.csv。数据应以第 1 列为评价对象,后续列为指标。指标类型支持正向、负向、适度;适度指标需要设置最佳值。

方法设置页真实提供:

  • Max-Min标准化:直接映射到 [0,1] 区间,是界面推荐选项。
  • Z-score标准化:先转换为标准分数,再映射到 [0,1]
  • 熵权法:由数据自动计算权重。
  • 自定义权重:用户手动设置,权重总和应为 1。

源码中会使用非负修正量 0.0001 避免后续熵权计算或标准化出现零值问题。

8.3 输出结果和图表

程序结果目录通常形如 results/results_YYYYMMDD_HHMMSS/。总体 TOPSIS 输出 Excel 常见工作表包括:熵权法计算结果原始数据标准化矩阵指标权重加权标准化矩阵理想解距离计算总体评价结果。分层或选中指标计算时,可能生成 分层计算结果_*.xlsx,工作表包括 标准化数据指标权重加权标准化矩阵理想解距离计算评价结果

图表通常位于 plots/ 子目录,常见文件包括 weights_distribution.pngscores_distribution.png。阅读结果时,总体评价结果评价结果 是排序主表;距离计算 用于解释每个对象到正、负理想解的距离。

8.4 复现与源码对应关系

结果页提供“打开结果目录”“打开结果文件”“导出复现代码”。按当前源码,复现导出会尽量保存输入文件或输入快照,并复算标准化、权重、距离和贴近度;但旧历史结果目录可能存在优先回读结果工作簿 原始数据 的复现脚本。面向用户说明时,应以本次实际导出的复现文件为准。对应源码如下:

  • core/topsis_calculator.py:标准化、熵权法、自定义权重、TOPSIS 距离和结果导出。
  • ui/upload_widget.py:数据上传和示例数据。
  • ui/indicators_widget.py:指标类型和适度指标最佳值设置。
  • ui/methods_widget.py:标准化方法和权重方法选择。
  • ui/results_widget.py:计算、结果展示、打开结果和导出复现代码。

8.5 解释边界

TOPSIS 排名依赖指标方向、标准化方法和权重方法。不同标准化方式或权重会改变贴近度排序。报告中不要只给最终排名,应同时说明权重来源、理想解定义和距离计算口径。