← Back to Home

一个购物难题

要买一台笔记本,候选四台,关心八件事:重量、续航、能不能玩英雄联盟(国服客户端只支持 Windows, 所以 MacBook 计"否")、内存、CPU 性能、独立显存、外观、价格。参数如下:

规格与价格为 2025 款公开资料的约数,课堂演示用。CPU 分数为 Geekbench 6 多核约数;续航为轻度办公口径; 外观分是主观打分的样例(1–10,课堂上可以让学生自己打)。 加粗蓝色 = 该项全场最优,红色 = 该项全场最差。

看一眼就会发现麻烦所在:没有一台电脑在所有项目上赢。轻的玩不了游戏,能打游戏的重得像砖头, 续航最长的显存是零。四台电脑各是某种人的最优解——那"综合最好"到底怎么定义?

梦中情本与地狱本

TOPSIS 的想法很直接。把每一项的全场最优值拼在一起,得到一台"梦中情本": 0.98 kg、15 小时续航、能玩 LOL、32G 内存、最强 CPU、8G 显存、颜值 9 分、只卖 ¥7999。 这台电脑不存在——它是从四台机器上各拆一个零件拼出来的怪物。 同样把每项的最差值拼起来,得到一台"地狱本"。

然后 TOPSIS 只做一件事:买离梦中情本最近、离地狱本最远的那台真实电脑。 "近"和"远"用距离来度量——这就是它全部的思想,剩下的六个步骤都只是把"距离"算得严谨。

理想解与负理想解

梦中情本的学名叫理想解 $A^+$,地狱本叫负理想解 $A^-$。 每个候选算两个距离:到 $A^+$ 的距离 $D^+$(越小越好)、到 $A^-$ 的距离 $D^-$(越大越好), 最后合成一个分数 $C = \dfrac{D^-}{D^+ + D^-} \in [0,1]$:$C=1$ 就是理想解本身,$C=0$ 就是负理想解本身。

先看几何,再看步骤

八个指标是八维空间,画不出来,但一次看两个指标就是平面。下面每台电脑是一个点 (坐标已各自归一到 0–1,右上角永远更好),右上角 ★ 是这两项拼出的理想解,左下角是负理想解。 点一台电脑,看它的 $D^+$、$D^-$ 和 $C$。

横轴 纵轴

点一个点试试。

这个小视图本身就是一个只有两个指标的完整 TOPSIS。换不同的轴组合可以看到: 每换一对指标,"谁离理想角最近"就可能换人——这就是权重问题的几何预告。

六步算出来

第 1 步:正向化——先把方向统一成"越大越好"

八个指标里六个天然"越大越好",重量和价格是成本型(越小越好)。 转换方法:用全场最大值去减,$x' = \max(x) - x$,最重(最贵)的变成 0,最轻(最便宜)的得分最高。 "能玩 LOL"是 0/1 指标,方向已经正确。

第 2 步:向量归一化——消掉量纲

CPU 分数动辄上万,外观分只有个位数,直接算距离的话 CPU 一列说了算。 每列除以自己的模长:

$$r_{ij} = \frac{x_{ij}}{\sqrt{\sum_i x_{ij}^2}}$$

第 3 步:加权——把"你多在乎"乘进去

归一化之后每列的地位是平等的,但你对八件事的在乎程度显然不同。加权分两小步:

(3a)先把在乎程度归一化成权重。你在下面权重面板里拖出来的滑杆值 $a_j$(0~3)只有相对大小有意义—— "续航 2、价格 1"和"续航 3、价格 1.5"是同一种立场。所以先除以总和,变成加起来等于 1 的权重:

$$w_j = \frac{a_j}{\sum_{k} a_k}\qquad \textstyle\sum_j w_j = 1$$

当前滑杆对应的权重(随下面的面板实时变化):

(3b)再把权重乘到归一化矩阵上: $v_{ij} = w_j \, r_{ij}$。

算例:MacBook 的"续航"这一格

续航列是 $(15, 5, 8, 9)$,模长 $\sqrt{15^2+5^2+8^2+9^2} = \sqrt{395} \approx 19.87$, 所以第 2 步得到 $r = 15 / 19.87 \approx 0.755$。

等权时 $w = 1/8 = 0.125$,于是 $v = 0.125 \times 0.755 \approx 0.094$; 换成游戏党(续航滑杆 0.3,滑杆总和 12.4),$w = 0.3/12.4 \approx 0.024$, 同一格缩水成 $v \approx 0.018$——只有原来的五分之一。 数据没变,变的是这一项在总分里的话语权。

几何上看,乘权重等于把你在乎的坐标轴拉长、不在乎的压扁: 在拉长的方向上,同样的差距贡献更大的距离。后面算"离理想解多远"时, 距离自然就偏向你在乎的那几个方向。这也是 TOPSIS 的诚实之处—— 它自己不产生权重,权重来自你的偏好(或者下节课的 AHP、熵权法),它只负责把你的偏好如实地变成几何。

第 4 步:拼出 $A^+$ 和 $A^-$(各列的最大 / 最小)

第 5、6 步:算距离,合成 $C$,排序

$$D_i^{\pm} = \sqrt{\textstyle\sum_j \left(v_{ij} - A^{\pm}_j\right)^2} \qquad C_i = \frac{D_i^-}{D_i^+ + D_i^-}$$

权重即立场

同一批电脑、同一套算法,只改权重。点预设或拖滑杆,看第一名怎么换人。

五组预设,三台电脑轮流当第一

等权重时前三名咬到只差 0.017(Mac 0.548、幻 14 0.534、拯救者 0.531)——"等权"并不是一个中立的立场, 它也是一种选择,而且在这里选出的冠军极不稳固。游戏党的第一名是拯救者;全能党的第一名是幻 14—— 它几乎没有单项冠军,却离全能党的梦中情本最近;出差党和学生党的第一名都是 MacBook, 尽管它玩不了 LOL。排名从来不是数据单方面决定的,是数据 × 权重共同决定的。 HiMCM 2016 年过山车题的最后一问"设计一个让用户自选偏好的排名 App",说的就是这件事: 模型的产物不是一个排名,而是这个可以调权重的框架本身。

还剩一个悬念:MateBook X Pro 在五组预设里从来没赢过,但也几乎从不垫底。 动手试试——能不能拖出一组权重,让它当一次第一?(提示:它有一项全场最优。)

实践:TOPSIS 比加权求和多了什么?

一个合理的质疑:不学 TOPSIS 的话,"min-max 归一化 + 加权求和"也能给出排名——两条流水线前四步一模一样, 只有最后一环不同(求和 vs 距离比)。那 TOPSIS 到底多买到了什么?

下表是等权重下三种组合的结果。橙色描边 = 这台电脑在三种方法下名次不一致。

这是一道留给你的灵敏度分析题。用上面的权重面板做实验,然后试着从公式上解释:

  1. 找一组权重让三列完全一致;再找一组让分歧尽可能大。
  2. 前两列(同样的 min-max,只换聚合)出现分歧时,被翻转的总是什么样的机器?在什么条件下求和与距离才会给出不同的顺序?
  3. 对比第一、三列:换归一化的影响和换聚合的影响,哪个更大?什么样的最容易被归一化的选择改变话语权? (提示:回想第二课里 min-max 和 z-score 什么时候分家。)

二维散点图里的两个开关是第 2 问的图形提示:加权求和的"等分线"是一族平行直线(线上任何两点得分相同——短板长板精确互换); TOPSIS 的"等 C 线"是绕着理想点弯曲的弧(阿波罗尼斯圆)。

三个值得多想一步的地方