TOPSIS法数学建模

TOPSIS法

概述

​ C.L.Hwang和K.Yoon于1981年首次提出TOPSIS(Technique for Order Preference by Similarity to an ideal Solution),可翻译为逼近理想排序法,国内常简称为优劣解距离法。

​ TOPSIS法是一种常用的综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。

基本过程为先将原始数据矩阵统一指标类型(正向化处理)得到正向化的矩阵,再对正向化的矩阵进行标准化处理以消除各指标量纲的影响,并找到有限方案中的最优方案和最劣方案,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。

引例

问题描述

​ 小明同学宿舍共有四名同学,他们第一学期的高数成绩如下表所示:

姓名 成绩
小明 89
小王 60
小张 74
清风 99

​ 请为这四名同学进行评分,该评分能合理的描述其高数成绩的高低。

评分方式

用排名计算得分

姓名 成绩 排名 修正后的排名 评分
小明 89 2 3 3/10=0.3
小王 60 4 1 1/10=0.1
小张 74 3 2 2/10=0.2
清风 99 1 4 4/10=0.4

​ 因为排名是越小越好,而评分是越大越好,所以对排名进行了修改,把排名也变成越大越好。

问题:排名无法反映各位同学成绩的相对大小,只要排名不变(得分可以变化),他们的得分就没有变化。

姓名 成绩 排名 修正后的排名 评分
小明 89 2 3 3/10=0.3
小王 60 10 4 1 1/10=0.1
小张 74 3 2 2/10=0.2
清风 99 90 1 4 4/10=0.4

用距离计算得分

​ 最高成绩max:99,最低成绩min:60,构造评分公式: x − min ⁡ max ⁡ − min ⁡ \dfrac{x-\min}{\max-\min} maxminxmin

姓名 成绩 未归一化成绩 归一化成绩
小明 89 (89-60)/(99-60)=0.74 0.74/2.1=0.35
小王 60 (60-60)/(99-60)=0 0/2.1=0
小张 74 (74-60)/(99-60)=0.36 0.36/2.1=0.17
清风 99 (99-60)/(99-60)=1 1/2.1=0.48

​ 使用这种评分方式有个特点,就是最高分永远都是1,最低分永远都是0,而其他得分则介于0-1之间。

​ 由于考试成绩是有下限0和上限100,我们也可以用卷面的最低分和最高分计算评分,但是并不推荐。

三点解释

  • 比较的对象一般要远大于两个(例如比较一个班级的成绩),所以除了最高分和低分比较特殊是1和0,其他大多数对象的得分都是介于0-1之间。减小了0和1的特殊性。
  • 比较的指标也往往不只是一个方面,例如成绩、工时数、课外竞赛得分等。这样就进一步减少了0和1的特殊性,因为这些“1”和“0”不会集中出现在一个衡量对象身上,而是分散分布的。
  • 有很多指标不存在理论的最大值和最小值,例如衡量经济增长水平的指标:GDP增速。(所以之前的例子不建议用卷面的最高分和最低分来评分,不具有通用性)

拓展问题

问题描述

​ 新增加了一个指标,现在要综合评价四位同学,并为他们进行评分。

姓名 成绩 与他人争吵的次数
小明 89 2
小王 60 0
小张 74 1
清风 99 3

统一指标类型

​ 成绩越大越好,这样的指标称为极大型指标(效益型指标),与他人争吵次数越少(越小)越好,这样的指标称为极小型指标(成本型指标)

​ 极小型指标转换为极大型指标的公式: max ⁡ − x \max-x maxx

姓名 成绩 与他人争吵的次数 正向化的争吵次数
小明 89 2 1
小王 60 0 3
小张 74 1 2
清风 99 3 0
指标类型 极大型 极小型 极大型

标准化处理

​ 指标的量纲会对评分产生较大的影响,比如1km,如果用“m”这个单位来表示,就是1000米,这样数值就扩大了1000倍,就会影响评分结果,不同的量纲则对应不同的结果、不同的评分。

​ 为了消去不同指标量纲的影响,需要对已经正向化的矩阵进行标准化处理。

​ 假设有n个要评价的对象,m个指标(已经正向化了)构成的正向化矩阵如下:
X = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n m ] {\bf X}= \begin{bmatrix} x_{11}&x_{12}&\cdots&x_{\rm 1m}\\ x_{21}&x_{22}&\cdots&x_{\rm 2m}\\ \vdots&\vdots&\ddots&\vdots\\ x_{\rm n1}&x_{\rm n2}&\cdots&x_{\rm nm}\\ \end{bmatrix} X=x11x21xn1x12x22xn2x1mx2mxnm
​ 那么,对其标准化的矩阵记为 Z \bf Z Z Z \bf Z Z中的每一个元素: z i j = x i j / ∑ i = 1 n x i j 2 \rm z_{ij}=x_{ij}\bigg/\sqrt{\sum\limits_{i=1}^nx_{ij}^2} zij=xij/i=1nxij2
[ 89 1 60 3 74 2 99 0 ] 标 准 化 ⟹ [ 0.5437 0.2673 0.3665 0.8018 0.4520 0.5345 0.6048 0 ] \begin{bmatrix} 89&1\\ 60&3\\ 74&2\\ 99&0 \end{bmatrix} \begin{aligned} 标准化\\ \huge\Longrightarrow \end{aligned} \begin{bmatrix} 0.5437&0.2673\\ 0.3665&0.8018\\ 0.4520&0.5345\\ 0.6048&0 \end{bmatrix} 8960749913200.54370.36650.45200.60480.26730.80180.53450

计算得分并排序

​ 我们从一维(一个指标)的评分公式推广到多维(多个指标):
x − min ⁡ max ⁡ − min ⁡ = x − min ⁡ ( max ⁡ − x ) + ( x − min ⁡ ) = x 与 最 小 值 的 距 离 x 与 最 大 值 的 距 离 + x 与 最 小 值 的 距 离 \frac{x-\min}{\max-\min}=\frac{x-\min}{(\max-x)+(x-\min)}=\frac{x与最小值的距离}{x与最大值的距离+x与最小值的距离} maxminxmin=(maxx)+(xmin)xmin=x+xx
​ 在多个指标的情况下,最大值与最小值的距离通常和 x x x与最大值的距离加 x x x与最小值的距离是不相等的,只有在一个指标的情况才是恒相等的。

​ 假设有n个要评价的对象,m个评价指标的标准化矩阵:
Z = [ z 11 z 12 ⋯ z 1 m z 21 z 22 ⋯ z 2 m ⋮ ⋮ ⋱ ⋮ z n 1 x n 2 ⋯ z n m ] {\bf Z}= \begin{bmatrix} z_{11}&z_{12}&\cdots&z_{\rm 1m}\\ z_{21}&z_{22}&\cdots&z_{\rm 2m}\\ \vdots&\vdots&\ddots&\vdots\\ z_{\rm n1}&x_{\rm n2}&\cdots&z_{\rm nm}\\ \end{bmatrix} Z=z11z21zn1z12z22xn2z1mz2mznm
​ 定义最大值:
Z + = ( Z 1 + , Z 2 + , ⋯   , Z m + ) = ( max ⁡ { z 11 , z 21 , ⋯   , z m 1 } , max ⁡ { z 12 , z 22 , ⋯   , z m 2 } , ⋯   , max ⁡ { z 1 n , z 2 n , ⋯   , z m n } ) \begin{aligned} Z^+&=(Z^+_1,Z^+_2,\cdots,Z^+_{\rm m})\\ &=(\max\{z_{11},z_{21},\cdots,z_{\rm m1}\},\max\{z_{12},z_{22},\cdots,z_{\rm m2}\},\cdots,\max\{z_{1\rm n},z_{2\rm n},\cdots,z_{\rm mn}\}) \end{aligned} Z+=(Z1+,Z2+,,Zm+)=(max{z11,z21,,zm1},max{z12,z22,,zm2},,max{z1n,z2n,,zmn})
​ 定义最小值:
Z − = ( Z 1 − , Z 2 − , ⋯   , Z m − ) = ( min ⁡ { z 11 , z 21 , ⋯   , z m 1 } , min ⁡ { z 12 , z 22 , ⋯   , z m 2 } , ⋯   , min ⁡ { z 1 n , z 2 n , ⋯   , z m n } ) \begin{aligned} Z^-&=(Z^-_1,Z^-_2,\cdots,Z^-_{\rm m})\\ &=(\min\{z_{11},z_{21},\cdots,z_{\rm m1}\},\min\{z_{12},z_{22},\cdots,z_{\rm m2}\},\cdots,\min\{z_{1\rm n},z_{2\rm n},\cdots,z_{\rm mn}\}) \end{aligned} Z=(Z1,Z2,,Zm)=(min{z11,z21,,zm1},min{z12,z22,,zm2},,min{z1n,z2n,,zmn})
​ 定义第 i ( i = 1 , 2 , ⋯   , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,,n)个评价对象与最大值的距离:
D i + = ∑ j = 1 m ( Z j + − z i j ) 2 D^+_{\rm i}=\sqrt{\sum\limits_{j=1}^m(Z_j^+-z_{ij})^2} Di+=j=1m(Zj+zij)2
​ 定义第 i ( i = 1 , 2 , ⋯   , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,,n)个评价对象与最小值的距离:
D i − = ∑ j = 1 m ( Z j − − z i j ) 2 D^-_{\rm i}=\sqrt{\sum\limits_{j=1}^m(Z_j^--z_{ij})^2} Di=j=1m(Zjzij)2
​ 那么,我们可以计算第 i ( i = 1 , 2 , ⋯   , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,,n)个评价对象未归一化的得分:
S i = D i − D i + + D i − \rm S_i=\frac{D^-_i}{D^+_i+D^-_i} Si=Di++DiDi
​ 显然 0 ≤ S i ≤ 1 \rm 0\le S_i\le1 0Si1,且Si越大D+i越小,即越接近最大值。

​ 回到引例中,最大值:[0.6048,0.8018],最小值:[0.3665,0]。

姓名 D+ D- 未归一化的得分 归一化后的得分 排名
小明 0.5380 0.3206 0.3734 0.1857 3
小王 0.2382 0.8018 0.7709 0.3834 1
小张 0.3087 0.5413 0.6375 0.3170 2
清风 0.8018 0.2382 0.2291 0.1139 4

建模步骤

将原始矩阵正向化

最常见的四种指标

指标名称 指标特点 例子
极大型(效益型)指标 越大(多)越好 成绩、GDP增速、企业利润
极小型(成本型)指标 越小(越好) 费用、坏品率、污染程度
中间型指标 越接近某个值越好 水质量评估是的PH值
区间型指标 落在某个区间最好 体温、水中植物性营养物量

​ 所谓的将原始矩阵正向化,就是要将所有的指标类型统一转化为极大型指标。(转化的函数形式可以不唯一)

极小型指标转化为极大型指标

​ 公式为max-x,如果所有的元素均为正数,那么也可以使用 1 x \dfrac{1}{x} x1

中间型指标转化为极大型指标

中间型指标:指标值既不要太大也不要太小,取某特定值最好(如水质量评估PH值)。

​ {xi}是一组中间型指标序列,且最佳的数值为xbest,那么正向化的公式如下:
M = max ⁡ { ∣ x i − x b e s t ∣ } , x ~ i = 1 − ∣ x i − x b e s t ∣ M M=\max\{|x_i-x_{\rm best}|\},\widetilde{x}_{\rm i}=1-\frac{|x_{\text i}-x_{\rm best}|}M M=max{xixbest},x i=1Mxixbest
​ 例如PH值的正向化(xbest=7):

PH值(转化前) PH值(转化后)
6 1 − 6 − 7 2 = 1 2 \large1-\frac{6-7}2=\frac12 1267=21
7 1 − 7 − 7 2 = 1 \large1-\frac{7-7}2=1 1277=1
8 1 − 8 − 7 2 = 1 2 \large1-\frac{8-7}2=\frac12 1287=21
9 1 − 9 − 7 2 = 0 \large1-\frac{9-7}2=0 1297=0

对于正向化公式的理解

x i − x b e s t x_i-x_{\rm best} xixbest是表示与最优值的距离,这个距离越小越好,是极小型指标,然后在将其转化为极大型指标,我们先除以最大值M将其变换到0到1之间,然后再用此时的最大值1减去变换后的值,将其转化为极大型指标。

区间型指标转化为极大型指标

区间型指标:指标落在某个区间内最好,例如人的体温在36°~37°这个区间比较好。

​ {xi}是一组区间型指标序列,且最佳的区间为 [ a , b ] [a,b] [a,b],那么正向化的公式如下:
M = max ⁡ { a − min ⁡ { x i } , max ⁡ { x i } − b } x ~ i = { 1 − a − x i M x < a 1 a ≤ x i ≤ b 1 − x i − b M x > b \text M=\max\{a-\min\{x_\text i\},\max\{x_\text i\}-b\}\\ \large\widetilde{x}_\text i= \begin{cases} \large1-\frac{a-x_i}{\text M}&x b\\ \end{cases} M=max{amin{xi},max{xi}b}x i=1Maxi11Mxibx<aaxibx>b
​ 例如体温的正向化( a = 36 , b = 37 a=36,b=37 a=36,b=37,M=1.4):

体温(转换前) 体温(转化后)
35.2 0.4286
35.8 0.8571
36.6 1
37.1 0.9286
37.8 0.4286
38.4 0

将正向化矩阵标准化

​ 假设有n个要评价的对象,m个指标(已经正向化了)构成的正向化矩阵如下:
X = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n m ] {\bf X}= \begin{bmatrix} x_{11}&x_{12}&\cdots&x_{\rm 1m}\\ x_{21}&x_{22}&\cdots&x_{\rm 2m}\\ \vdots&\vdots&\ddots&\vdots\\ x_{\rm n1}&x_{\rm n2}&\cdots&x_{\rm nm}\\ \end{bmatrix} X=x11x21xn1x12x22xn2x1mx2mxnm
​ 那么,对其标准化的矩阵记为 Z \bf Z Z Z \bf Z Z中的每一个元素: z i j = x i j / ∑ i = 1 n x i j 2 \rm z_{ij}=x_{ij}\bigg/\sqrt{\sum\limits_{i=1}^nx_{ij}^2} zij=xij/i=1nxij2

计算得分并归一化

假设有n个要评价的对象,m个评价指标的标准化矩阵:
Z = [ z 11 z 12 ⋯ z 1 m z 21 z 22 ⋯ z 2 m ⋮ ⋮ ⋱ ⋮ z n 1 x n 2 ⋯ z n m ] {\bf Z}= \begin{bmatrix} z_{11}&z_{12}&\cdots&z_{\rm 1m}\\ z_{21}&z_{22}&\cdots&z_{\rm 2m}\\ \vdots&\vdots&\ddots&\vdots\\ z_{\rm n1}&x_{\rm n2}&\cdots&z_{\rm nm}\\ \end{bmatrix} Z=z11z21zn1z12z22xn2z1mz2mznm
​ 定义最大值:
Z + = ( Z 1 + , Z 2 + , ⋯   , Z m + ) = ( max ⁡ { z 11 , z 21 , ⋯   , z m 1 } , max ⁡ { z 12 , z 22 , ⋯   , z m 2 } , ⋯   , max ⁡ { z 1 n , z 2 n , ⋯   , z m n } ) \begin{aligned} Z^+&=(Z^+_1,Z^+_2,\cdots,Z^+_{\rm m})\\ &=(\max\{z_{11},z_{21},\cdots,z_{\rm m1}\},\max\{z_{12},z_{22},\cdots,z_{\rm m2}\},\cdots,\max\{z_{1\rm n},z_{2\rm n},\cdots,z_{\rm mn}\}) \end{aligned} Z+=(Z1+,Z2+,,Zm+)=(max{z11,z21,,zm1},max{z12,z22,,zm2},,max{z1n,z2n,,zmn})
​ 定义最小值:
Z − = ( Z 1 − , Z 2 − , ⋯   , Z m − ) = ( min ⁡ { z 11 , z 21 , ⋯   , z m 1 } , min ⁡ { z 12 , z 22 , ⋯   , z m 2 } , ⋯   , min ⁡ { z 1 n , z 2 n , ⋯   , z m n } ) \begin{aligned} Z^-&=(Z^-_1,Z^-_2,\cdots,Z^-_{\rm m})\\ &=(\min\{z_{11},z_{21},\cdots,z_{\rm m1}\},\min\{z_{12},z_{22},\cdots,z_{\rm m2}\},\cdots,\min\{z_{1\rm n},z_{2\rm n},\cdots,z_{\rm mn}\}) \end{aligned} Z=(Z1,Z2,,Zm)=(min{z11,z21,,zm1},min{z12,z22,,zm2},,min{z1n,z2n,,zmn})
​ 定义第 i ( i = 1 , 2 , ⋯   , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,,n)个评价对象与最大值的距离:
D i + = ∑ j = 1 m ( Z j + − z i j ) 2 D^+_{\rm i}=\sqrt{\sum\limits_{j=1}^m(Z_j^+-z_{ij})^2} Di+=j=1m(Zj+zij)2
​ 定义第 i ( i = 1 , 2 , ⋯   , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,,n)个评价对象与最小值的距离:
D i − = ∑ j = 1 m ( Z j − − z i j ) 2 D^-_{\rm i}=\sqrt{\sum\limits_{j=1}^m(Z_j^--z_{ij})^2} Di=j=1m(Zjzij)2
​ 那么,我们可以计算第 i ( i = 1 , 2 , ⋯   , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,,n)个评价对象为归一化的得分:
S i = D i − D i + + D i − \rm S_i=\frac{D^-_i}{D^+_i+D^-_i} Si=Di++DiDi
​ 显然 0 ≤ S i ≤ 1 \rm 0\le S_i\le1 0Si1,且Si越大D+i越小,即越接近最大值。

​ 我们可以将得分归一化: S ~ i = S i / ∑ i = 1 n S i \widetilde{\rm S}_\text i=\rm S_i\bigg/\sum\limits_{i=1}^nS_i S i=Si/i=1nSi,这样的话 ∑ i = 1 n S ~ i = 1 \rm\sum\limits_{i=1}^n\widetilde S_i=1 i=1nS i=1。(得分归一化不影响排序)

归一化和标准化的区别

​ 归一化的计算步骤也可以消去量纲的影响,但更多的时候,我们进行归一化的目的是为了让我们的结果更容易解释,或者说让我们对结果有一个更加清晰直观的印象。例如将得分归一化后可限制在0-1这个区间,对于区间的每一个得分我们很容易得到其所处的比例位置。

模型拓展

​ 我们以上构造的模型中各个指标的权重都是相同的,但是在实际生活中各个指标的重要性一般都是不同的,所以我们在计算得分的时候可以带入权重。假设m个指标的权重向量如下:
ω = [ ω 1 , ω 2 , ⋯   , ω n ] \omega=[\omega_1,\omega_2,\cdots,\omega_\text n] ω=[ω1,ω2,,ωn]
​ 定义第 i ( i = 1 , 2 , ⋯   , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,,n)个评价对象与最大值的距离:
D i + = ∑ j = 1 m ω j ( Z j + − z i j ) 2 D^+_{\rm i}=\sqrt{\sum\limits_{j=1}^m\textcolor{red}{\omega_j}(Z_j^+-z_{ij})^2} Di+=j=1mωj(Zj+zij)2
​ 定义第 i ( i = 1 , 2 , ⋯   , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,,n)个评价对象与最小值的距离:
D i − = ∑ j = 1 m ω j ( Z j − − z i j ) 2 D^-_{\rm i}=\sqrt{\sum\limits_{j=1}^m\textcolor{red}{\omega_j}(Z_j^--z_{ij})^2} Di=j=1mωj(Zjzij)2
​ 计算得分和之前相同,就不在赘述了。

学习视频:[清风数学建模](【【强烈推荐】清风:数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学】 https://www.bilibili.com/video/BV1DW411s7wi/?p=3&share_source=copy_web&vd_source=7753752d7ab4aeaebba50d60304b652a),清风的视频讲解的比较细致,建模的步骤和思路也很清晰,而且还分享很多建模资料,还有对作业批改的视频,感觉做得很用心,看清风的视频学习建模也是一个不错的选择。

你可能感兴趣的:(数学建模,matlab,学习,开发语言,1024程序员节)