数学建模之优劣解距离法 Topsis
一、TOPSIS 简介
TOPSIS 法(Technique for Order Preference by Similarity to ldeal Solution),可翻译为逼近理想解排序法,国内常简称为优劣解距离法。
TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。
二、层次分析法的局限性
- 评价的决策层不能太多,太多的话 n 会很大,判断矩阵和一致矩阵差异可能会很大。
- 如果决策层中指标的数据是已知的,那么我们如何利用这些数据来使得评价的更加准确呢?
三、TOPSIS 法步骤
3.1 数据正向化处理
在处理数据时,有些指标的数据越大越好,有些则是越小越好,有些又是中间某个值或者某段区间最好。我们可以对其进行“正向化处理”,使指标都可以像考试分数那样,越大越好。
一般指标大致可分为一下四类:
指标名称 | 指标特点 | 例子 |
---|---|---|
极大型指标 (效益型指标) | 越大 (多) 越好 | 成绩、GDP增速、企业利润 |
极小型指标 (成本型指标) | 越小 (少) 越好 | 费用、坏品率、污染程度 |
中间型指标 | 越接近某个值越好 | 水质量评估时的PH值 |
区间型指标 | 落在某个区间最好 | 体温、水中植物性营养物量 |
所谓正向化处理,就是将上述的四种指标数据进行处理,将其全部转化为极大型指标数据,这样我们计算时问题就少一点,码代码时也更加统一。
3.1.1 对于极小型指标的正向化处理
参数释明:
- $\hat x_i$ 正向化数据
- $\max$ 待处理数据中的最大值
- $x_i$ 待处理数据
处理公式:$$\hat x_i = max - x_i$$ 或 $$\hat x_i = \frac{1}{x_i} (x_i > 0)$$
3.1.2 对于中间型指标的正向化处理
参数释明:
- $\hat x_i$ 正向化数据
- $x_{best}$ 中间指标的值
- $M$ 所有待处理数据中距离中间指标的最远距离
- $x_i$ 待处理数据
处理公式:$$\hat x_i = 1 - \frac{x_i - x_{best}}{M}$$ 且 $$M = \max \{ \vert x_i - x_{best} \vert \}$$
3.1.3 对于区间型指标的正向化处理
参数释明:
- $\hat x_i$ 正向化数据
- $a$ 区间指标的下边界(区间最小值)
- $b$ 区间指标的上边界(区间最大值)
- $M$ 所有待处理数据中距离区间指标边界的最远距离
- $x_i$ 待处理数据
处理公式:
$$\hat 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}$$
且
$$M = \max \{ a - \min \{ x_i \} , \max \{ x_i \} - b \}$$
3.2 数据标准化处理
为了消除不同的数据指标量纲的影响,我们还有必要对已经正向化的矩阵进行标准化。
假设有 n 个要评价的对象,m 个评价指标(已经正向化了)构成的正向化矩阵如下:
$$
X = \begin{bmatrix}
x_{11} & x_{12} & \cdots & x_{1m} \\
x_{21} & x_{22} & \cdots & x_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
x_{n1} & x_{n2} & \cdots & x_{nm}
\end{bmatrix}
$$
那么对矩阵 $X$ 标准化后的矩阵记作 $Z$,那么 $Z$ 中的每一个元素:$ z_{ij} = \frac{x_{ij}}{\sqrt{\begin{matrix} \sum_{i=1}^{n} {x_{ij}^2} \end{matrix}}} $
并且有标准化矩阵:
$$
Z = \begin{bmatrix}
z_{11} & z_{12} & \cdots & z_{1m} \\
z_{21} & z_{22} & \cdots & z_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
z_{n1} & z_{n2} & \cdots & z_{nm}
\end{bmatrix}
$$
3.3 为每个方案进行评分
3.3.1 计算最优解与最劣解
经过了正向化处理和标准化处理的评分矩阵 $Z$,里面的数据全部是极大型数据。我们就可以从中取出理想最优解和最劣解。因此我们取出每一列中最大的数,构成理想最优解向量 $z^+$。同时我们取出每一列中的最小值,构成最劣解向量 $z^-$。
最优解:
$$
\begin{cases}
z^+ = [z_1^+, z_2^+, \cdots, z_m^+] \\
z_j^+ = \max\{ z_{1j}, z_{2j}, \cdots, z_{nj} \}
\end{cases}
$$
最劣解:
$$
\begin{cases}
z^- = [z_1^-, z_2^-, \cdots, z_m^-] = \\
z_j^- =\min\{ z_{1j}, z_{2j}, \cdots, z_{nj} \}
\end{cases}
$$
3.3.2 计算每个方案与最优解的距离
对于每个方案我们都需要计算出其与最优解 $z_j^+$ 的距离 $d_i^+$:
不带权重的计算公式(默认每个指标权重相等):
$$
d_i^+ = \sqrt{\sum_{j=1}^m ({z_j^+ - z_{ij}})^2}
$$
带权重的计算公式:
$$
d_i^+ = \sqrt{\sum_{j=1}^m \color{red}{\omega_j}({z_j^+ - z_{ij}})^2}
$$
注意:这里的 $\color{red}{\omega_j}$ 为该项指标的权重 。
3.3.3 计算每个方案与最劣解的距离
对于每个方案我们也需要计算出其与最劣解 $z_j^-$ 的距离 $d_i^-$:
不带权重的计算公式(默认每个指标权重相等):
$$
d_i^- = \sqrt{\sum_{j=1}^m ({z_j^- - z_{ij}})^2}
$$
带权重的计算公式:
$$
d_i^- = \sqrt{\sum_{j=1}^m \color{red}{\omega_j}({z_j^- - z_{ij}})^2}
$$
注意:这里的 $\color{red}{\omega_j}$ 为该项指标的权重 。
3.3.3 计算每个方案的评分并排序
得到最优解距离 $d_i^+$ 和最劣解距离 $d_i^-$ 后,我们就可以根据最优解距离 $d_i^+$ 和最劣解距离 $d_i^-$ 计算每个方案的最终评分(综合距离) $S_i$ 了:
$$
S_i = \frac{ d_i^- }{ {d_i^+} + {d_i^-} }
$$
不难看出 $0 < S_i < 1$,并且 $d_i^+$ 越大、$d_i^-$ 越小,则 $S_i$ 越大,即代表越接近最优解;反之相反。
这个时候我们就有了每个方案的分数了,按分数排排序,就知道哪个方案比较好哪个方案比较好,那个方案比较差。